首页
壁纸
关于
发现大佬
Search
1
XBOX土耳其阿根廷购买教程
4,079 阅读
2
Oculus Quest2 无线投屏到PC
2,888 阅读
3
openwrt路由器安装uu加速器插件
2,001 阅读
4
xiaomi 小米pad 5 pro adb 删除自带app 系统精简 (非root)
1,565 阅读
5
Xbox Series X / S 开箱~~~~激动无比
1,325 阅读
学习
QuantumultX
JavaScript
web3
react
Solidity
雅思
Azure
游戏
随笔
登录
/
注册
Search
标签搜索
javascript
XSX
js
游戏
xbox
css
游戏截图
Xbox Series X
刺客信条
刺客信条英灵殿
web3
雅思
学习
IELTS
英语
教程
Xbox Series S
Steam
截图
leetcode
Arthur
累计撰写
109
篇文章
累计收到
104
条评论
首页
栏目
学习
QuantumultX
JavaScript
web3
react
Solidity
雅思
Azure
游戏
随笔
页面
壁纸
关于
发现大佬
搜索到
109
篇与
Arthur
的结果
2022-01-11
智能合约部署教程 如何部署一个智能合约
学习以太坊智能合约不仅仅是学习一门新的编程语言Solidity,更是学习如何使用高效的开发工具、如何进行完整的测试。 使用Solidity编译器和Geth 控制台手动部署一份智能合约。 什么是智能合约 智能合约就是一组规则和规则指导下的数据的合体。相当于一个后端代码+数据库。 智能合约是代码编写的合同 智能合约的条款由代码来指定,代码的逻辑缜密远超普通文字描述。 智能合约的存储、部署在公开的以太坊链条上,天然具有公开、透明的性质。任何人都可以随时公开查询一个合约的状态。 智能合约的安全性由去中心化网络保证,产生的交易数据也在区块链上永久存储和追溯,无法抵赖,安全性远超由中央节点控制的条款类程序。 智能合约有强制性、自动性,无需人工干预,当条件满足时仅需触发,就能自行完成相应操作,如转账扣款或者变更库存数量等。 安装编译器 同安装 Geth一样,我们通过Homebrew包管理器来安装 solc。 按顺序执行下面的命令 brew tap ethereum/ethereum brew install solidity 安装成功后查看版本 solc --version Solc编译智能合约 这里推荐solidity插件 先准备一个简单的智能合约 pragma solidity ^0.8.11; contract Vault { uint vaultData; function set(uint data) public{ vaultData = data; } function get() public view returns (uint) { return vaultData; } } 简单解释一下各个部分。智能合约的名字是Vault,是一个存储合约,它开辟一个存储区 vaultData,该存储区是一个 uint 类型的变量(unsigned int,正整数)。智能合约一共包含两个方法:set 与get。分别为设置 vaultData 的值和读取 vaultData 的值。整个合约不会产生事件,所以也不会产生日志。合约指定需要编译器版本 0.8.11 来进行编译 我们来到控制台,执行以下命令编译该智能合约: solc --optimize --combined-json abi,bin Vault.sol 输出结果为 {"contracts":{"Vault.sol:Vault":{"abi":[{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bin":"6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146049575b600080fd5b60476042366004605e565b600055565b005b60005460405190815260200160405180910390f35b600060208284031215606f57600080fd5b503591905056fea2646970667358221220e326564e4c5c8bf8ab243fd9bdd4af546d2e1e65128f376b4d7707e0d2aa670c64736f6c634300080b0033"}},"version":"0.8.11+commit.d7f03943.Darwin.appleclang"} 我们将该编译结果放入一份 temp.js 文件中并重新排版。 var output = {"contracts":{"Vault.sol:Vault":{"abi":[{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bin":"6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146049575b600080fd5b60476042366004605e565b600055565b005b60005460405190815260200160405180910390f35b600060208284031215606f57600080fd5b503591905056fea2646970667358221220e326564e4c5c8bf8ab243fd9bdd4af546d2e1e65128f376b4d7707e0d2aa670c64736f6c634300080b0033"}},"version":"0.8.11+commit.d7f03943.Darwin.appleclang"} 格式化以后 var output = { "contracts": { "Vault.sol:Vault": { "abi": [ { "inputs": [], "name": "get", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "data", "type": "uint256" } ], "name": "set", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bin": "6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146049575b600080fd5b60476042366004605e565b600055565b005b60005460405190815260200160405180910390f35b600060208284031215606f57600080fd5b503591905056fea2646970667358221220e326564e4c5c8bf8ab243fd9bdd4af546d2e1e65128f376b4d7707e0d2aa670c64736f6c634300080b0033" } }, "version": "0.8.11+commit.d7f03943.Darwin.appleclang" } 提取其中的ABI { "inputs": [], "name": "get", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "data", "type": "uint256" } ], "name": "set", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ABI 代表了一份“说明书”,展示了对于我们生成的合约究竟可以进行哪些操作、操作的参数又是哪些。 在编译期我们就已经确定了参数类型和函数名称,不存在动态类型。我们研读这份ABI 的总体结构,是一个列表。 列表里共2个项目:名为 get 的方法与 名为 set 的方法,其中 set 方法接受一个 uinit256 的参数, 名为 data( uint256 即256位的 uint,在solidity中与 uint 同义); get 方法不接受 任何的参数,但是输出一个结果为 uint256 的值,且返回值不命名。 下面对ABI 中常见的几个关键字进行解释 名称 解释 type 接口类型,默认为function,也可以是construnctor、fallback等 name 方法名字 inputs 接口输入参数列表,每一项都是参数名+参数类型 outputs 接口输出结果列表,每一项都是返回值名+返回值类型 constant 布尔值,若为true 则该接口不修改合约存储区,是只读方法 payable 布尔值,标明该方法是否接受以太币 stateMutability 枚举类型,为下列选项之一: pure:表明该方法只读不修改存储,且不读取区块链状态 view:表明该方法只读不修改存储,但读取区块链状态 nonpayable:该方法不能接受以太币 payable:该方法可以接受以太币 第二部分是 bin 也就是经过编译器优化过后的可运行的合约字节码。真正部署到区块链上的是 bin 这一部分的代码,这部分代码的内容是初始化代码,包含了如何清理空间、创建变量、初始化合约的指令。 文章来源
2022年01月11日
194 阅读
0 评论
0 点赞
2022-01-07
如何购买一个DAS域名
什么是DAS DAS是一个面向未来的,跨链去中心化账户系统,不同于手机号/邮箱/ 社交账号这类中心化账户系统 , DAS 是基于区块链的 , 去中心化开源账户系统, 是第一个具有广泛兼容性的,由用户掌握完整所有权和控制权的账户系统, 其去中心化的特性决定了拥有一个DAS账号你可以掌握了对它完整的控制权,相信没有任何事情能钥匙比掌握在自己手里更令人安心了吧。 DAS 特性 个性化 & 全局唯一 所有 DAS 账户以 .bit 结尾,你可以使用全球多种语言文字甚至 Emoji 进行注册。如 alice.bit,区块链.bit。每个 DAS 都是独一无二的,同名的 DAS 账户不能被重复创建 去中心化 你可以无需许可地注册一个 DAS 账户,一旦注册成功,你(且仅有你)将拥有 DAS 账户的完整控制权。 兼容所有公链 你可以使用任意公链的私钥,甚至邮箱来注册和管理 DAS;DAS 账户可以在任意公链地址之间转移(基于 PW-SDK 实现)。 灵活的解析记录 你可以将任意区块链地址,邮箱,网址,社交账户以及任意的其他数据设置为 DAS 的解析记录。 bit.host 当你拥有 alice.bit,你将自动拥有可通过浏览器访问的 alice.bit.host 站点。默认情况下站点的内容是你的 NFT 和你的 DAS 账户信息,你可以通过解析记录修改为指向 IPFS 的静态网页。 开源 DAS 是面向未来的基础设施,因此,DAS 的所有模块都是开源的,由全球开发者共同维护。 点此注册 还能优惠5% 点击上方链接注册专属的bit域名 当前开放进度: 10 位及以上,全部释放; 4 ~ 9 位,随机释放 35%; 1 ~ 3 位,尚未释放。 搜索你想买的域名 然后连接eth钱包 付款签名就可以了 仔细看下自己的gas fee哦 每天刻都是不一样的 成功付款之后 等待大概1分钟 验证了 转账 就可以了 这样就拥有属于自己的das账户了
2022年01月07日
282 阅读
1 评论
0 点赞
2022-01-02
构建一条以太坊私链
建立一条以太坊私链的形式,进行账户的创建、账户间以太币的转账。 在最简单的实践过程中巩固之前的理论知识,并为深入以太坊智能合约开发打下基础。 以太坊社区发展很快,从2016年以来已经陆续推出了多个版本的实用开发工具。 *示例将采用以太坊 go-ethereum (Geth) 本地客户端 + web3.js 的组合。 MacOS环境下下安装Geth 首先安装Gethbrew tap ethereum/ethereum brew install ethereum 虽然以太坊等区块链项目本身不是用JavaScript编写的,但在与区块链节点交互的场景中,却大量使用了JavaScript作为接口调用的语言。目前JavaScript的相关的开源软件包的发布、分发、编写都是通过Node.js的包管理器NPM来实现的。我们在使用以太坊的 Web3 时也选用了NPM项目包管理器来下载、管理我们的 web3.js 库依赖。 安装node.js brew install node 查看安装好的node和npm版本 node --version > v17.3.0 npm --version > 8.3.0 Geth客户端的结构 Geth客户端包含面向客户的界面(命令行)、面向网络的功能以及EVM虚拟机。 除了不能编译二进制 EVM 代码外,几乎能够执行一切和用户相关、网络相关、合约相关的操作。它承接了客户对于以太坊区块链的操作,对内维持了账户体系,世界状态,虚拟机运行以及数据的存储,对外与其他网络中的客户端节点通信,交换信息 账户管理功能 生成、删除、管理用户的账户。 签名、打包用户的交易请求。 存储、虚拟机功能 存储交易树、状态树、收据树。 启动虚拟机,执行智能合约的代码并存储结果。 网络功能 与其他节点通信,同步下载、分享区块链数据。 参与网络中区块的播报、交易的播报。 验证区块合法性,参与挖矿。 提供Web3,JSON-RPC,Websocket通讯接口。 启动一条以太坊私链 以太坊网络分为主网、测试网。这两个网络都是公开的链,为世界所有开发者和用户所用。 我们今天的学习蓝本是以太坊的私有网络,或者称为私链。 私链和公链是不互通的,通过网络进行隔离。我们教程的私链里,有且仅有我们一台计算机运行。 以太坊源代码及软件都是开源的,任何人都可以拷贝一份源代码并且运行自己的以太坊私链。以下是接入不同的网络所需下载数据量的对比。 main net 主网 –下载量 >1TB 的区块链数据,共需3-5天时间。 test net 测试网 –下载量 ~60GB的代号为Ropsten的测试网数据,约10小时。 private net 私链 –无需下载,创世后等待数分钟即可正常运转。 设立工作目录 mkdir ether-test cd ether-test touch gensis.json mkdir db 编辑创世配置 如果读者回忆起 以太坊的特色 的讲解,与比特币不同,以太坊的创世就已经分配了约70%的以太币,随后才进入挖矿过程,大家竞争挖矿分配剩余的币。我们私链也同样可以通过创世方法分配好一些以太币供测试使用,或者从零开始一点一点通过挖矿的方式挖掘以太币。 创世配置就是供以太坊私有链第一次启动时所使用,创世区块是最特殊的区块,它没有前一个区块,因为它自己是第一个块。我们下面来配置创世区块 gensis.json 文件。 // gensis.json { "config": { "chainId": 987, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "0x400", "gasLimit": "0x8000000", "alloc": {} } 以上就是一份最小可行的创世区块配置,包含了区块链配置,挖矿难度设置,单一区块最大包含 Gas 的上限,以及一个空置的创世币分配区alloc(意味着没有预先分配以太币)。当然,也可以扩充一些启动的其他参数诸如时间戳以及前一区块哈希等,这些都是非必填的。完整版的 gensis.json 如下所示。 { "config": { "chainId": 987, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "eip150Block":0 }, "difficulty": "0x400", "gasLimit": "0xffffffff", // 可选填的参数 "coinbase": "0x0000000000000000000000000000000000000000", "extraData": "0x00", "nonce": "0x0000000000000001", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00", "alloc": { "430e986e0cca10a174baad96871ec9cb308c6d05": {"balance": "111111"} } } 各个字段解释如下: 字段 解释 必填 - chainId 自定义私链的网络ID,不同的网络ID无法互联通讯,以太坊公链ID 为1,我们设置为987以防止与网络中其他私链冲突。 homesteadBlock 是否为HomeStead版本的区块,设置为0表明是。 eip155Block EIP155 [1] 是一个以太坊分叉提议,为了和以前的以太坊经典ETC 链条分叉而存在,我们私链不需要它,设为0。 eip158Block EIP158 [2] 是一个以太坊分叉提议,为了解决之前以太坊空账户造成效率低下的协议漏洞而分叉,我们私链不需要它,设为0。 difficulty 设置当前区块难度,若难度过大挖矿就很慢,我们设置较小值。 gasLimit 单一区块最大 gas 消耗上限,用来限制能够打包进入块的交易数量与信息总和,我们在学习中可以设置为最大。 选填 - coinbase 打包该块的矿工的奖励地址,因为是创世块,可设为0地址。 extraData 打包该块时矿工记录的笔记。 nonce 打包该块时矿工挖矿所用到的Ethash输入参数nonce。 mixHash 与nonce配合用于挖矿,创世区无前一个区块,可不填。 parentHash 前一个区块头的哈希值,创世区块无前一个区块,设为0。 timestamp 打包该块的时间戳,符合Unix Timestamp标准,设为0。 alloc 创世时各账户分配以太币的数量,不想分配则忽略。 初始化创世配置 配置gensis.json { "config": { "chainId": 987, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "eip150Block":0 }, "difficulty": "0x400", "gasLimit": "0xffffffff", "alloc": { "430e986e0cca10a174baad96871ec9cb308c6d05": {"balance": "111111"} } } 我们已经准备好了创世的配置,接下来就是将该链条的配置初始化,形成区块链的起点,初始化之后我们就有了第一个区块,接下来就可以根据第一个区块来挖掘第二个区块了。 进入 ether-test 目录,执行初始化。 cd ether-test geth --datadir "./db" init gensis.json 此时我们看到控制台上输出了 “Successfully wrote genesis state” 意味着我们的初始化已经成功 这是目录结构也发生了变化 在 db 目录数据库,程序自动新建了 geth 目录。 该目录存放了区块链的所有运行时产生的区块链数据、日志、世界状态并随着区块链增长而占据更多存储硬盘空间。 它内部的两个子目录存储了具体的区块链数据。 db 目录下还有一个 keystore 目录。该目录下保存了各个账户的私钥的加密后的文件,只有在签名的时候用户才会解锁 keystore 执行签名操作。 启动Geth 节点 一切准备就绪,弗兰肯斯坦的巨人马上就要苏醒,在我们现在的环境下,需要启动一个 Geth 节点来接入私链网络(实际上也是这个私链网络的唯一一个节点),负责在创世块后挖出第一个块。该节点也是我们与以太坊私链通信的节点服务器。下面我们来启动这样一个节点。 geth --datadir ./db/ --http --http.addr=127.0.0.1 --http.port 8545 --http.corsdomain "*" --http.api "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 198989 --port 30303 --mine --miner.threads 1 --miner.etherbase "0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82" console 具体启动参数geth文档见文章末尾 启动成功后 我们可以陆续看到诸如 number=1,number=2 的输出,这表明我们已经成功地挖掘出了第1,2,3…个区块 控制台持续在输出挖矿相关信息。你的私链已经稳定运行。由于我们启动时 etherbase 参数随便设置了一个挖矿矿工奖励地址,所以挖出的区块奖励都发送到了那个地址,但我们并没有持有这个地址,这等于白白浪费了。现在,我们来与Geth通信并且让它暂停一下挖矿,等我们新建好了账户之后再继续挖。 接受挖矿奖励 请确保你的Geth节点尚在运行 ,我们新开命令行窗口执行 attach 命令依附上正在运行中的Geth节点: geth --datadir ./db attach ipc:./db/geth.ipc 弹出控制台 在控制台上我们用personal功能模块新建两个账户,分别由123密码和 456来保护。 > personal.newAccount('123') "0xa0ec4f7aad3af79907f0cab503d3b800faae0eee" > personal.newAccount('456') "0x9975430958d28b8d74a38475682bbb1e2efc681e" 生成后我们已经看到控制台上分别输出了两个地址,它们就是生成好的两个账户的公开地址,现在这些地址已经准备好能够收受以太币。 eth.accounts web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") web3.fromWei(eth.getBalance(eth.accounts[1]), "ether") 结果如图 我们用 web3 功能模块的 fromWei() 换算功能帮助我们换算了账户余额,如我们所预料的,账户余额为 0 。在以太坊的世界里没有浮点数小数点,只有整数。所以形如 3.1415 的小数在以太坊里是无法表示的,这里采用了 Wei 为单位表示以太坊不可分割的最小单位,将所有小数转化为大整数运算, 为了在私链上获取以太币供测试使用,我们设定其中一个账户的地址为挖矿奖励地址,这样我们就有源源不断的以太币可以做实验使用,我们来用miner功能模块设定一下挖矿地址。 > miner.setEtherbase(eth.accounts[0]) true 我们再来用eth功能模块检查一下,是否挖矿收益地址coinbase已经是我们的地址: > eth.coinbase "0xa0ec4f7aad3af79907f0cab503d3b800faae0eee" 设置成功!接下来我们就可以重新通知Geth节点去启动挖矿,然后坐等我们的以太币流入第一个账户了。请重启挖矿。 miner.start(1) 这里 miner.start()代入参数 1 代表了我们启动挖矿时候仅仅启动一个线程挖矿。现在每隔 5-10 秒就有一个新的块被挖出(不包含任何交易,是空块),稍等一会儿,我们再次来检查一下各个账户的余额情况。 > eth.accounts ["0xa0ec4f7aad3af79907f0cab503d3b800faae0eee", "0x9975430958d28b8d74a38475682bbb1e2efc681e"] > web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") 885 > web3.fromWei(eth.getBalance(eth.accounts[1]), "ether") 0 可以看到已经有一个账户收到了挖矿奖励,持有650个币了。 转账与收款 先暂停挖矿 miner.stop() 同样在控制台上我们解锁的转账方的账户,输入解锁密码,以及解锁时长 300秒 。 >personal.unlockAccount(eth.accounts[0], '123', 300) GoError: Error: account unlock with HTTP access is forbidden at web3.js:6365:37(47) at github.com/ethereum/go-ethereum/internal/jsre.MakeCallback.func1 (native) at <eval>:1:48(8) 结果返回错误 解锁账户在http下被禁止 没关系 我们重启geth服务 同时再服务后面加上一条 --allow-insecure-unlock 完整的命令就是 geth --datadir ./db/ --http --http.addr=127.0.0.1 --http.port 8545 --http.corsdomain "*" --http.api "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 198989 --port 30303 --mine --miner.threads 1 --miner.etherbase "0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82" --allow-insecure-unlock console 回到控制台重新解锁账户 > personal.unlockAccount(eth.accounts[0], '123', 300) true 成功 返回 true 好,接下来我们发送一笔 10 个以太币的转账,转账接收方是另一个我们持有的账户。 > eth.sendTransaction({from: eth.accounts[0],to: eth.accounts[1],value: web3.toWei(10, 'ether')}) "0x16ab75f6158c6ec8fca4f465590fa7568f30dcb9f6bb38f6c995f29034d61b12" 交易发送成功!我们取回了一个长长的哈希值: 0x16ab75f6158c6ec8fca4f465590fa7568f30dcb9f6bb38f6c995f29034d61b12 这就是交易的哈希值(Transaction Hash, TxHash),这个值能够唯一索引到一笔交易。 我们查看一下接收方的余额。 > web3.fromWei(eth.getBalance(eth.accounts[1]), "ether") 10 成功转账!!! geth启动参数文档 命令 说明 翻译 NAME - - geth - the go-ethereum command line interface - - Copyright 2013-2021 The go-ethereum Authors - - USAGE: - - geth [options] [command] [command options] [arguments...] - - VERSION: - - 1.10.14-stable - - COMMANDS: - - account Manage accounts 管理帐户 attach Start an interactive JavaScript environment (connect to node) 启动一个交互式 JavaScript 环境(连接到节点) console Start an interactive JavaScript environment 启动交互式 JavaScript 环境 db Low level database operations 低级数据库操作 dump Dump a specific block from storage 从存储中转储特定块 dumpconfig Show configuration values 显示配置值 dumpgenesis Dumps genesis block JSON configuration to stdout 将创世块 JSON 配置转储到标准输出 export Export blockchain into file 将区块链导出到文件中 export-preimages Export the preimage database into an RLP stream 将原像数据库导出到 RLP 流中 import Import a blockchain file 导入区块链文件 import-preimages Import the preimage database from an RLP stream 从 RLP 流导入原像数据库 init Bootstrap and initialize a new genesis block 引导并初始化一个新的创世块 js Execute the specified JavaScript files 执行指定的 JavaScript 文件 license Display license information 显示许可证信息 makecache Generate ethash verification cache (for testing) 生成ethash验证缓存(用于测试) makedag Generate ethash mining DAG (for testing) 生成 ethash 挖矿 DAG(用于测试) removedb Remove blockchain and state databases 删除区块链和状态数据库 show-deprecated-flags Show flags that have been deprecated 显示已弃用的标志 snapshot A set of commands based on the snapshot 基于快照的一组命令 version Print version numbers 打印版本号 version-check Checks (online) whether the current version suffers from any known security vulnerabilities 检查(在线)当前版本是否存在任何已知的安全漏洞 wallet Manage Ethereum presale wallets 管理以太坊预售钱包 help, h Shows a list of commands or help for one command 显示命令列表或一个命令的帮助 ETHEREUM OPTIONS - - --config value TOML configuration file TOML 配置文件 --datadir value Data directory for the databases and keystore (default: "/Users/arthurli/Library/Ethereum") 数据库和密钥库的数据目录(默认:“/Users/arthurli/Library/Ethereum”) --datadir.ancient value Data directory for ancient chain segments (default = inside chaindata) 古代链段的数据目录(默认 = inside chaindata) --datadir.minfreedisk value Minimum free disk space in MB, once reached triggers auto shut down (default = --cache.gc converted to MB, 0 = disabled) 以 MB 为单位的最小可用磁盘空间,一旦达到触发自动关闭(默认 = --cache.gc 转换为 MB,0 = 禁用) --keystore value Directory for the keystore (default = inside the datadir) 密钥库的目录(默认 = 在 datadir 内) --usb Enable monitoring and management of USB hardware wallets 启用 USB 硬件钱包的监控和管理 --pcscdpath value Path to the smartcard daemon (pcscd) socket file 智能卡守护程序 (pcscd) 套接字文件的路径 --networkid value Explicitly set network id (integer)(For testnets: use --ropsten, --rinkeby, --goerli instead) (default: 1) 显式设置网络 ID(整数)(对于测试网:使用 --ropsten、--rinkeby、--goerli 代替)(默认值:1) --mainnet Ethereum mainnet 以太坊主网 --goerli Görli network: pre-configured proof-of-authority test network Görli 网络:预先配置的权威证明测试网络 --rinkeby Rinkeby network: pre-configured proof-of-authority test network Rinkeby 网络:预先配置的权威证明测试网络 --ropsten Ropsten network: pre-configured proof-of-work test network Ropsten 网络:预先配置的工作量证明测试网络 --sepolia Sepolia network: pre-configured proof-of-work test network Sepolia 网络:预先配置的工作量证明测试网络 --syncmode value Blockchain sync mode ("snap", "full" or "light") (default: snap) 区块链同步模式(“snap”、“full”或“light”)(默认:snap) --exitwhensynced Exits after block synchronisation completes 块同步完成后退出 --gcmode value Blockchain garbage collection mode ("full", "archive") (default: "full") 区块链垃圾收集模式(“full”、“archive”)(默认:“full”) --txlookuplimit value Number of recent blocks to maintain transactions index for (default = about one year, 0 = entire chain) (default: 2350000) 维护交易索引的最近区块数(默认值 = 大约一年,0 = 整个链)(默认值:2350000) --ethstats value Reporting URL of a ethstats service (nodename:secret@host:port) ethstats 服务的报告 URL (nodename:secret@host:port) --identity value Custom node name 自定义节点名称 --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength 以牺牲 KDF 强度为代价减少密钥派生 RAM 和 CPU 使用率 --whitelist value Comma separated block number-to-hash mappings to enforce (=) 逗号分隔的块号到哈希映射来强制执行 (=) LIGHT CLIENT OPTIONS: - - --light.serve value Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100) (default: 0) 服务 LES 请求所允许的最大时间百分比(多线程处理允许值超过 100)(默认值:0) --light.ingress value Incoming bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited) (default: 0) 服务轻客户端的传入带宽限制(千字节/秒,0 = 无限制)(默认值:0) --light.egress value Outgoing bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited) (default: 0) 服务轻客户端的传出带宽限制(千字节/秒,0 = 无限制)(默认值:0) --light.maxpeers value Maximum number of light clients to serve, or light servers to attach to (default: 100) 要服务的轻客户端或要附加的轻服务器的最大数量(默认值:100) --ulc.servers value List of trusted ultra-light servers 值得信赖的超轻型服务器列表 --ulc.fraction value Minimum % of trusted ultra-light servers required to announce a new head (default: 75) 宣布新头所需的可信超轻型服务器的最低百分比(默认值:75) --ulc.onlyannounce Ultra light server sends announcements only 超轻服务器只发送公告 --light.nopruning Disable ancient light chain data pruning 禁用古老的轻链数据修剪 --light.nosyncserve Enables serving light clients before syncing 在同步之前启用服务轻客户端 DEVELOPER CHAIN OPTIONS: - - --dev Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled 具有预先资助的开发者帐户的临时权威证明网络,已启用挖矿 --dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0) 在开发者模式下使用的阻止期(0 = 仅在交易挂起时我的)(默认值:0) --dev.gaslimit value Initial block gas limit (default: 11500000) 初始区块气体限制(默认值:11500000) ETHASH OPTIONS: - - --ethash.cachedir value Directory to store the ethash verification caches (default = inside the datadir) 存储 ethash 验证缓存的目录(默认 = 在 datadir 内) --ethash.cachesinmem value Number of recent ethash caches to keep in memory (16MB each) (default: 2) 要保留在内存中的最近 ethash 缓存的数量(每个 16MB)(默认值:2) --ethash.cachesondisk value Number of recent ethash caches to keep on disk (16MB each) (default: 3) 要保留在磁盘上的最近 ethash 缓存的数量(每个 16MB)(默认值:3) --ethash.cacheslockmmap Lock memory maps of recent ethash caches 锁定最近 ethash 缓存的内存映射 --ethash.dagdir value Directory to store the ethash mining DAGs (default: "/Users/arthurli/Library/Ethash") 存储 ethash 挖掘 DAG 的目录(默认:“/Users/arthurli/Library/Ethash”) --ethash.dagsinmem value Number of recent ethash mining DAGs to keep in memory (1+GB each) (default: 1) 最近要保留在内存中的 ethash 挖掘 DAG 的数量(每个 1+GB)(默认值:1) --ethash.dagsondisk value Number of recent ethash mining DAGs to keep on disk (1+GB each) (default: 2) 最近要保留在磁盘上的 ethash 挖矿 DAG 的数量(每个 1+GB)(默认值:2) --ethash.dagslockmmap Lock memory maps for recent ethash mining DAGs 为最近的 ethash 挖矿 DAG 锁定内存映射 TRANSACTION POOL OPTIONS: - - --txpool.locals value Comma separated accounts to treat as locals (no flush, priority inclusion) 逗号分隔的帐户作为本地人对待(无刷新,优先包含) --txpool.nolocals Disables price exemptions for locally submitted transactions 禁用本地提交交易的价格豁免 --txpool.journal value Disk journal for local transaction to survive node restarts (default: "transactions.rlp") 本地事务的磁盘日志以生存节点重新启动(默认值:“transactions.rlp”) --txpool.rejournal value Time interval to regenerate the local transaction journal (default: 1h0m0s) 重新生成本地事务日志的时间间隔(默认:1h0m0s) --txpool.pricelimit value Minimum gas price limit to enforce for acceptance into the pool (default: 1) 为接受入池而强制执行的最低 gas 价格限制(默认值:1) --txpool.pricebump value Price bump percentage to replace an already existing transaction (default: 10) 替换现有交易的价格波动百分比(默认值:10) --txpool.accountslots value Minimum number of executable transaction slots guaranteed per account (default: 16) 每个账户保证的最小可执行交易槽数(默认:16) --txpool.globalslots value Maximum number of executable transaction slots for all accounts (default: 5120) 所有账户的最大可执行交易槽数(默认:5120) --txpool.accountqueue value Maximum number of non-executable transaction slots permitted per account (default: 64) 每个账户允许的最大不可执行事务槽数(默认:64) --txpool.globalqueue value Maximum number of non-executable transaction slots for all accounts (default: 1024) 所有账户的最大不可执行事务槽数(默认:1024) --txpool.lifetime value Maximum amount of time non-executable transaction are queued (default: 3h0m0s) 不可执行事务排队的最长时间(默认值:3h0m0s) PERFORMANCE TUNING OPTIONS: - - --cache value Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode) (default: 1024) 分配给内部缓存的内存兆字节(默认 = 4096 主网全节点,128 轻模式)(默认:1024) --cache.database value Percentage of cache memory allowance to use for database io (default: 50) 用于数据库 io 的缓存内存允许百分比(默认值:50) --cache.trie value Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode) (default: 15) 用于特里缓存的缓存内存允许百分比(默认值 = 15% 完整模式,30% 存档模式)(默认值:15) --cache.trie.journal value Disk journal directory for trie cache to survive node restarts (default: "triecache") trie 缓存的磁盘日志目录以在节点重新启动后继续存在(默认值:“triecache”) --cache.trie.rejournal value Time interval to regenerate the trie cache journal (default: 1h0m0s) 重新生成特里缓存日志的时间间隔(默认值:1h0m0s) --cache.gc value Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode) (default: 25) 用于修剪修剪的缓存内存百分比(默认值 = 25% 完整模式,0% 存档模式)(默认值:25) --cache.snapshot value Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode) (default: 10) 用于快照缓存的缓存内存允许百分比(默认值 = 10% 完整模式,20% 存档模式)(默认值:10) --cache.noprefetch Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data) 在块导入期间禁用启发式状态预取(更少的 CPU 和磁盘 IO,更多的时间等待数据) --cache.preimages Enable recording the SHA3/keccak preimages of trie keys 启用记录特里密钥的 SHA3/keccak 原像 ACCOUNT OPTIONS: - - --unlock value Comma separated list of accounts to unlock 要解锁的帐户的逗号分隔列表 --password value Password file to use for non-interactive password input 用于非交互式密码输入的密码文件 --signer value External signer (url or path to ipc file) 外部签名者(ipc 文件的 url 或路径) --allow-insecure-unlock Allow insecure account unlocking when account-related RPCs are exposed by http 当与帐户相关的 RPC 被 http 公开时允许不安全的帐户解锁 API AND CONSOLE OPTIONS: - - --ipcdisable Disable the IPC-RPC server 禁用 IPC-RPC 服务器 --ipcpath value Filename for IPC socket/pipe within the datadir (explicit paths escape it) 数据目录中 IPC 套接字/管道的文件名(显式路径对其进行转义) --http Enable the HTTP-RPC server 启用 HTTP-RPC 服务器 --http.addr value HTTP-RPC server listening interface (default: "localhost") HTTP-RPC 服务器监听接口(默认:“localhost”) --http.port value HTTP-RPC server listening port (default: 8545) HTTP-RPC 服务器监听端口(默认:8545) --http.api value API's offered over the HTTP-RPC interface 通过 HTTP-RPC 接口提供的 API --http.rpcprefix value HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths. 提供 JSON-RPC 的 HTTP 路径路径前缀。使用“/”在所有路径上提供服务。 --http.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) 接受跨源请求的域的逗号分隔列表(浏览器强制执行) --http.vhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost") 逗号分隔的虚拟主机名列表,从中接受请求(服务器强制执行)。接受“*”通配符。 (默认:“本地主机”) --ws Enable the WS-RPC server 启用 WS-RPC 服务器 --ws.addr value WS-RPC server listening interface (default: "localhost") WS-RPC 服务器监听接口(默认:“localhost”) --ws.port value WS-RPC server listening port (default: 8546) WS-RPC 服务器监听端口(默认:8546) --ws.api value API's offered over the WS-RPC interface 通过 WS-RPC 接口提供的 API --ws.rpcprefix value HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths. 提供 JSON-RPC 的 HTTP 路径前缀。使用“/”在所有路径上提供服务。 --ws.origins value Origins from which to accept websockets requests 接受 websockets 请求的来源 --graphql Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. 在 HTTP-RPC 服务器上启用 GraphQL。请注意,GraphQL 只能在 HTTP 服务器启动的情况下启动。 --graphql.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) 接受跨源请求的域的逗号分隔列表(浏览器强制执行) --graphql.vhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost") 逗号分隔的虚拟主机名列表,从中接受请求(服务器强制执行)。接受“*”通配符。 (默认:“本地主机”) --rpc.gascap value Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) (default: 50000000) 设置可以在 eth_call/estimateGas 中使用的 gas 上限(0=无限)(默认值:50000000) --rpc.evmtimeout value Sets a timeout used for eth_call (0=infinite) (default: 5s) 设置用于 eth_call 的超时(0=无限)(默认值:5s) --rpc.txfeecap value Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) (default: 1) 设置可以通过 RPC API 发送的交易费用上限(以以太为单位)(0 = 无上限)(默认值:1) --rpc.allow-unprotected-txs Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC 允许通过 RPC 提交不受保护(非 EIP155 签名)的交易 --jspath loadScript JavaScript root path for loadScript (default: ".") loadScript 的 JavaScript 根路径(默认:“.”) --exec value Execute JavaScript statement 执行 JavaScript 语句 --preload value Comma separated list of JavaScript files to preload into the console 要预加载到控制台的 JavaScript 文件的逗号分隔列表 NETWORKING OPTIONS: - - --bootnodes value Comma separated enode URLs for P2P discovery bootstrap 用于 P2P 发现引导程序的逗号分隔的 enode URL --discovery.dns value Sets DNS discovery entry points (use "" to disable DNS) 设置 DNS 发现入口点(使用“”禁用 DNS) --port value Network listening port (default: 30303) 网络监听端口(默认:30303) --maxpeers value Maximum number of network peers (network disabled if set to 0) (default: 50) 最大网络对等点数(如果设置为 0,则禁用网络)(默认值:50) --maxpendpeers value Maximum number of pending connection attempts (defaults used if set to 0) (default: 0) 最大挂起连接尝试次数(如果设置为 0,则使用默认值)(默认值:0) --nat value NAT port mapping mechanism (any none --nodiscover Disables the peer discovery mechanism (manual peer addition) 禁用对等发现机制(手动对等添加) --v5disc Enables the experimental RLPx V5 (Topic Discovery) mechanism 启用实验性 RLPx V5(主题发现)机制 --netrestrict value Restricts network communication to the given IP networks (CIDR masks) 将网络通信限制到给定的 IP 网络(CIDR 掩码) --nodekey value P2P node key file P2P节点密钥文件 --nodekeyhex value P2P node key as hex (for testing) P2P 节点密钥为十六进制(用于测试) MINER OPTIONS: - - --mine Enable mining 启用挖矿 --miner.threads value Number of CPU threads to use for mining (default: 0) 用于挖掘的 CPU 线程数(默认值:0) --miner.notify value Comma separated HTTP URL list to notify of new work packages 逗号分隔的 HTTP URL 列表以通知新的工作包 --miner.notify.full Notify with pending block headers instead of work packages 用挂起的块头而不是工作包通知 --miner.gasprice value Minimum gas price for mining a transaction (default: 1000000000) 挖掘交易的最低 gas 价格(默认:1000000000) --miner.gaslimit value Target gas ceiling for mined blocks (default: 8000000) 已开采区块的目标气体上限(默认值:8000000) --miner.etherbase value Public address for block mining rewards (default = first account) (default: "0") 区块挖矿奖励的公共地址(默认=第一个帐户)(默认:“0”) --miner.extradata value Block extra data set by the miner (default = client version) 阻止矿工设置的额外数据(默认 = 客户端版本) --miner.recommit value Time interval to recreate the block being mined (default: 3s) 重新创建正在开采的块的时间间隔(默认值:3s) --miner.noverify Disable remote sealing verification 禁用远程密封验证 GAS PRICE ORACLE OPTIONS: - - --gpo.blocks value Number of recent blocks to check for gas prices (default: 20) 检查gas价格的最近块数(默认值:20) --gpo.percentile value Suggested gas price is the given percentile of a set of recent transaction gas prices (default: 60) 建议的 gas 价格是一组最近交易 gas 价格的给定百分位(默认:60) --gpo.maxprice value Maximum transaction priority fee (or gasprice before London fork) to be recommended by gpo (default: 500000000000) gpo 推荐的最大交易优先费(或伦敦分叉前的gasprice)(默认值:500000000000) --gpo.ignoreprice value Gas price below which gpo will ignore transactions (default: 2) 低于 gpo 将忽略交易的 Gas 价格(默认值:2) VIRTUAL MACHINE OPTIONS: - - --vmdebug Record information useful for VM and contract debugging 记录对 VM 和合约调试有用的信息 LOGGING AND DEBUGGING OPTIONS: - 日志和调试选项 --fakepow Disables proof-of-work verification 禁用工作量证明验证 --nocompaction Disables db compaction after import 导入后禁用数据库压缩 --verbosity value Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3) 日志详细程度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3) --vmodule value Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4) 每个模块的详细程度:以逗号分隔的 = 列表(例如 eth/*=5,p2p=4) --log.json Format logs with JSON 使用 JSON 格式化日志 --log.backtrace value Request a stack trace at a specific logging statement (e.g. "block.go:271") 在特定的日志记录语句中请求堆栈跟踪(例如“block.go:271”) --log.debug Prepends log messages with call-site location (file and line number) 使用呼叫站点位置(文件和行号)预置日志消息 --pprof Enable the pprof HTTP server 启用 pprof HTTP 服务器 --pprof.addr value pprof HTTP server listening interface (default: "127.0.0.1") pprof HTTP 服务器监听接口(默认:“127.0.0.1”) --pprof.port value pprof HTTP server listening port (default: 6060) pprof HTTP 服务器监听端口(默认:6060) --pprof.memprofilerate value Turn on memory profiling with the given rate (default: 524288) 以给定的速率打开内存分析(默认值:524288) --pprof.blockprofilerate value Turn on block profiling with the given rate (default: 0) 以给定的速率打开块分析(默认值:0) --pprof.cpuprofile value Write CPU profile to the given file 将 CPU 配置文件写入给定文件 --trace value Write execution trace to the given file 将执行跟踪写入给定文件 METRICS AND STATS OPTIONS: - - --metrics Enable metrics collection and reporting 启用指标收集和报告 --metrics.expensive Enable expensive metrics collection and reporting 启用昂贵的指标收集和报告 --metrics.addr value Enable stand-alone metrics HTTP server listening interface (default: "127.0.0.1") 启用独立指标 HTTP 服务器侦听接口(默认:“127.0.0.1”) --metrics.port value Metrics HTTP server listening port (default: 6060) 指标 HTTP 服务器侦听端口(默认值:6060) --metrics.influxdb Enable metrics export/push to an external InfluxDB database 启用指标导出/推送到外部 InfluxDB 数据库 --metrics.influxdb.endpoint value InfluxDB API endpoint to report metrics to (default: "http://localhost:8086") InfluxDB API 端点将指标报告给(默认:“http://localhost:8086”) --metrics.influxdb.database value InfluxDB database name to push reported metrics to (default: "geth") InfluxDB 数据库名称将报告的指标推送到(默认:“geth”) --metrics.influxdb.username value Username to authorize access to the database (default: "test") 授权访问数据库的用户名(默认:“test”) --metrics.influxdb.password value Password to authorize access to the database (default: "test") 授权访问数据库的密码(默认:“test”) --metrics.influxdb.tags value Comma-separated InfluxDB tags (key/values) attached to all measurements (default: "host=localhost") 逗号分隔的 InfluxDB 标签(键/值)附加到所有测量值(默认值:“host=localhost”) --metrics.influxdbv2 Enable metrics export/push to an external InfluxDB v2 database 启用指标导出/推送到外部 InfluxDB v2 数据库 --metrics.influxdb.token value Token to authorize access to the database (v2 only) (default: "test") 授权访问数据库的令牌(仅限 v2)(默认值:“test”) --metrics.influxdb.bucket value InfluxDB bucket name to push reported metrics to (v2 only) (default: "geth") InfluxDB 存储桶名称将报告的指标推送到(仅限 v2)(默认值:“geth”) --metrics.influxdb.organization value InfluxDB organization name (v2 only) (default: "geth") InfluxDB 组织名称(仅限 v2)(默认值:“geth”) ALIASED (deprecated) OPTIONS: - - --nousb Disables monitoring for and managing USB hardware wallets (deprecated) 禁用对 USB 硬件钱包的监控和管理(已弃用) MISC OPTIONS: - - --snapshot Enables snapshot-database mode (default = enable) 启用快照数据库模式(默认 = 启用) --bloomfilter.size value Megabytes of memory allocated to bloom-filter for pruning (default: 2048) 分配给布隆过滤器用于修剪的内存兆字节(默认值:2048) --help, -h show help 显示帮助 --catalyst Catalyst mode (eth2 integration testing) Catalyst 模式(eth2 集成测试) --override.arrowglacier value Manually specify Arrow Glacier fork-block, overriding the bundled setting (default: 0) 手动指定 Arrow Glacier fork-block,覆盖捆绑设置(默认值:0) --override.terminaltotaldifficulty value Manually specify TerminalTotalDifficulty, overriding the bundled setting (default: 0) 手动指定 TerminalTotalDifficulty,覆盖捆绑设置(默认值:0)
2022年01月02日
425 阅读
0 评论
1 点赞
【古墓丽影9】2022第一款通关的游戏
2022年01月02日
638 阅读
0 评论
0 点赞
2022-01-02
年末epic送了古墓丽影三部曲,,这bixv白嫖啊 之前出于 种种原因 打过好几次 古墓9,但一直也没通关,,这次趁着白嫖的+元旦假期,,刚好打通了,,劳拉是真好看,,下面放点截图
2021-12-31
什么是以太坊? 以太坊 基础知识梳理
什么是以太坊? 以太坊 基础知识梳理 历史 2009年1月3日 比特币 [1] [2] 之后的十年间,基于区块链技术的项目纷纷诞生。 市场上的公链项目早已以数千计,更不用说分布于世界各地的数以万计的加密货币交易所。 根据英国剑桥大学 2018 年的一份调查显示, 区块链领域的全职开发人员在 2017 年的 1876 人基础上上升了 164% [3], 该领域技术人才的紧缺和巨大的想象空间让市场上充斥着雷同的、虚假宣传的项目。 同时,加密货币、虚拟货币、代币、区块链等概念也层出不穷,扰乱了普通人对这项技术的理解。 区块链行业在公链领域最具思想性与里程碑意义的,除了首创的比特币外,就是以太坊项目,它被誉为区块链 2.0 时代的里程碑(比特币为区块链1.0时代)。 以太坊,英文全称 Ethereum,是一个全球协作的开源区块链项目。 该项目流通的加密货币称为以太币 (Ether),是全球仅次于比特币的第二大流通加密货币。 它最大的特色是具有一个运行时环境:以太坊虚拟机 (Ethereum Virtual Machine,简称 EVM), 为大规模分布式开放应用提供了运行的平台。 以太坊的创始人 Vitalik Buterin 于 1994 年出生于俄罗斯, 他参与了比特币项目的开发,于 2013 年下半年初步形成以太坊的设想, 并开始构思以太坊具体的架构。 2014 年比特币大会上,Vitalik 第一次展示了他有关于通用编程的比特币网络的扩展想法, 他试图通过让公链原生支持脚本语言编程的方式来拓展区块链的应用场景。 遗憾的是,该提议未被比特币核心开发团队接纳。 从 2014 年起,他发起并筹备一条从零开始的公链。 有别于比特币的有限拓展编程的尝试,以太坊原生支持拓展编程。 它的目标是成为一个 全球化的计算基础设施,也就是具有分布式、 公开透明、永不下线特性的全球计算机 。 在这台分布式计算机上运行的小程序, 被称为 智能合约 (Smart Contract)。 在以太坊 2014 年发起众筹后,更多人加入了开发者的行列。 其中 Gavin Wood 博士担任了该项目早期的技术合伙人角色。 他发表了 以太坊的黄皮书 [4] 并且负责制作以太坊虚拟机。 以太坊最出色的特点之一就是拥有一台虚拟机。 通过虚拟机字节码规范约束,成功分离了智能合约写作源语言与编译后的目标语言。 在社区运营方面,以太坊的开发、应用环境生态也相对比较完善。 该项目生态目前包括了(截止笔者交稿):黄皮书中定义的符合通信协议的4种客户端(分别由 C++、Go、 Python 和 Java 实现)、 一个可用的 JavaScript 环境 (web3)、众多以太坊区块链浏览器、轻量级的移动端钱包以及数个测试网络。 以太坊一共将经历4个发展阶段,我们正处在第3阶段的中期。 每个发展阶段的交接过程是以 “硬分叉” 的形式完成。 所谓硬分叉即一种特殊的软件升级——该升级不向前兼容。 新软件承认过往旧软件所产生的区块链记录, 但如果你还想用旧软件生成区块,新软件不会承认该区块。 旧软件将在新软件诞生运行后逐渐从网络中下架。 之所以叫“分叉”,不叫“替换”, 是因为这代表网络社群中总有一部分人不想更新软件。 硬分叉代表社区分裂,软分叉则保持向前兼容。 分叉的自由性让区块链网络有“自我进化”的能力。 拥有更多开发者、更多使用者的分叉链具有更高的存活概率。 区块高度 #0 “前哨”(Frontier)阶段,2015年7月至2016年3月 在此期间发布了以太坊的最初版本。 它并非是一个稳定、安全的版本,主要面向开发者推广,让他们使用该软件进行试验。 以太坊最初版本的生态环境中提供了命令行界面, 可供开发者上传调智能合约,也提供挖矿模块,让整个网络中能不断生产出新的区块。 挖矿算法是采用基于工作量证明(Proof of Work, PoW)的方式进行。 在这阶段中,各项软件指标不断提升,区块链网络状况开始趋于稳定。 区块高度 #1,150,000 “家园”(Homestead)阶段, 2016年3月至2017年10月 。 以太坊软件开发的生态圈,以太坊网络的底层协议在此期间保持稳定。 社区开发者贡献的开发工具、图形界面钱包等不断完善, 普通用户也可以参与到以太坊的使用。 通过对底层协议的优化改进,加快了交易出块速度,虚拟机的各项指标基本稳定。 区块高度 #4,370,000 “大都会”(Metropolis)阶段,2017年10月至今 。 总共分为两个步骤实施,分别是拜占庭 (Byzantium) 与君士坦丁堡 (Constantinpole) 。 拜占庭步骤将延缓区块链出块的速度。 君士坦丁堡步骤将显著增加区块链的计算难度,减少挖掘区块时候的以太币奖励。 两者将促成基于工作量证明的挖矿难度上升,最终迫使该区块链的共识方式转向权益证明 (Proof of Stake, PoS)的共识算法。 原计划于2018年实施的君士坦丁堡的时间路线图已经向后延期, 于2019年3月实施,挖矿奖励减低为每个区块2个以太币。 区块高度 #尚未确定 “宁静”(Serenity) 阶段,尚未有明确时间表 在该阶段,共识算法完全转向以权益证明(PoS)的方式来进行区块挖掘, 摒弃工作量证明(PoW)的方式。 在进入该阶段后,社区的共识算法将完全改变,这对整个经济模型和社区形态会造成巨大冲击。 这部分计划尚处于讨论制订阶段,而创始人 Vitalik 也尚未就该阶段的详细安排作出说明。 生成账户 和一般的网站申请账户不同, 加密货币的账户仅需要可靠的软件在离线状态下生成 , 而不需要去特殊网站进行注册。 很多虚拟货币交易所的管理大额虚拟货币的账户都是通过上述方法在一台离线的计算机上生成的。 那么,如何保证每次生成的私钥不是已经被他人生成过的?在现实中,两个私钥碰撞的概率有多大呢? 我们已知:私钥地址空间有 2 256,而宇宙中的已知原子总数有 10 80, 两者比较谁大谁小?我们做一个除法。 2256÷1080=1.1579209e+69=1069 从上述算式可以看出,私钥空间比我们宇宙空间的原子总数的倍数还要多。 可以说在全人类都参与使用加密货币的情况下,即使每次交易都使用新的地址, 碰巧遇上他人私钥的概率比生活中选中一个原子去砸中另外一个原子的概率还要小。 你生成的账户,是安全的。 交易是驱使力 我们分析了以太坊的静态部分:用户账户模型和账户状态所组成的世界状态。 分析以太坊上驱动账户余额发生转变的动因,就是交易transaction。 交易总是由外部账户所发起的,它所包含的内容既可以是一次简单的以太币转移,也可是一次合约代码的调用执行。 当以太坊网络收到交易时,它会按照交易执行指令,改变相关联的一个或者数个账户的状态,并将这些状态的变更合并到世界状态。 数笔交易按顺序执行后,执行结果将被打包成为一个区块,广播到其他节点并让网络按照共识算法选出合适的区块进入最终的区块链。 以太坊的Pow/Pos机制 以太坊在前三个阶段采用 PoW 的共识机制 ,核心是自以太坊1.0起推出的 Ethash 算法 为了克服比特币的算力中心化问题,Ethash算法做了诸多调整。 该算法依赖一个预先生成的大型数据集(1GB),在计算的过程中需要反复、分片地读取该数据集,这部分数据集体积远超过ASIC/GPU/FPGA矿机的内部寄存器体积, 较慢的内存读写 I/O 操作时间抵消了 ASIC 矿机厂商的专用芯片集成化带来的计算时间优势,具体的算法规则如下。 每一个区块通过区块头计算一个种子,该种子仅与本区块有关。 基于种子生成一份16MB 的伪随机缓存。 基于缓存生成一份大型数据集,称为DAG(有向无环图),体积 1 GB。DAG的数据可由伪随机缓存快速地推导出来,而且 DAG 的数据分块,每块都和对应的缓存块有关。 矿工挖矿的过程是不断地从 DAG 中取出数据作为输入值,再配合反复更改 nonce 试探,达到满足一定难度的输出值的运算。 校验者仅需在得到输出值后,经由缓存推断出对应的DAG数据,代入计算验证输出值,轻客户端也能快速执行该任务。 和比特币一样,Ethash 是一个”挖矿难,检测易”的算法。 该算法的理想是:虽然普通家庭计算机的 CPU 无法和和专用的 ASIC 矿机媲美,但是专用矿机在 1GB 内存数据的读取上也没有巨大的优势。 Ethash 算法实现了部分普通计算机参与挖矿、算力去中心化的理想。但是近来有通过GPU显卡来进行高内存高算力运算的显卡矿机,也有矿机厂商研制出的 ASIC 矿机在慢慢侵蚀 Ethash算法的屏障作用。所以以太坊的共识算法将在不久将来的第四阶段切换到 PoS 模式。 在 第四阶段的以太坊经济模型采用PoS机制 ,PoS全称 Proof of Stake,任何持有以太币的参与者都可以发起特殊交易,将自己的币锁定在一个存储中,让自己获得打包交易的资格,然后通过一个当前验证者都能参与的共识算法,完成新区块的打包和广播。PoS 算法的特点如下。 不需要耗费大量电力资源来“挖矿”。理论上发行总量可以被控制。 不需要购买昂贵设备,持有以太币即可参与挖矿。 出块速度更快,不受制于PoW挖矿带来的时间延迟。 减少挖矿工具中心化带来的风险。 预计当第四阶段启动时,众多以太坊爱好者已经进入以太坊世界并持有了以太币,他们可以根据自己持币数量和挖矿规则,竞争上岗,打包区块数据进行挖矿。目前已经有了代号 Casper 的测试网络可以运行、试用该共识机制。Casper 网上的共识算法有惩戒措施,出块人取得资格需要质押一定数量的以太币,大家根据共识对新产出的块进行投票来判定该块是否有效,经过大部分人认可后,该块就能合法有效,但若在该过程中有少数人“作恶”被揪出,这些人就会被罚没所抵押的以太币以示惩戒。 参考资料来自于《以太坊的指南针》
2021年12月31日
238 阅读
0 评论
0 点赞
1
...
9
10
11
...
22