打字猴:1.703876115e+09
1703876115 区块链项目开发指南 [:1703875278]
1703876116 区块链项目开发指南 2.11 以太坊虚拟机
1703876117
1703876118 以太坊虚拟机(Ethereum Virtual Machine,EVM)是以太坊智能合约字节码(byte-code)的执行环境。网络中的每个节点都运行EVM。所有节点执行使用EVM指向智能合约的全部交易,因此它们进行同样的计算,并存储同样的数值。只进行以太币转账(查询该地址是否有余额并相应地扣款)的交易也需要进行一些计算。
1703876119
1703876120 出于各种原因,每个节点执行并存储最终状态。例如,如果有一个智能合约存储参加派对的每个人的姓名和细节,只要增加新的人,就向网络广播新的交易。网络中的任何节点想要展示参加派对的每个人的细节,只需读取合约的最终状态即可。
1703876121
1703876122 每个交易需要在网络中进行一些计算和存储。因此需要有交易费,否则整个网络里将充斥着垃圾交易,而且没有交易费用矿工就没有理由在区块中接纳交易,它们将开始挖空区块。每个交易需要的计算和存储量有所不同,因此每一个交易的交易成本不同。
1703876123
1703876124
1703876125 有两种EVM实现,即字节码VM和JIT-VM。在写本书时,JIT-VM已交付使用,但其开发仍未结束。在两种情况下,Solidity代码都被编译成字节码。在JIT-VM中,字节码编译更充分。JIT-VM比字节码VM更高效。
1703876126
1703876127
1703876128
1703876129
1703876130 区块链项目开发指南 [:1703875279]
1703876131 区块链项目开发指南 2.12 gas
1703876132
1703876133 gas(燃料)是计算资源的计量单位。每一个交易都需要包含gas上限和为每个gas支付费用的单价(即每次计算的价格)。矿工可以选择接纳交易和收取费用。如果交易使用的gas少于或等于gas上限,交易继续进行。如果gas总数超过gas上限,则撤销所有修改,除了仍然合法且矿工仍然能够收到费用(费用计算方法是可以消耗的gas最大值和gas价格相乘)的交易。
1703876134
1703876135 矿工决定gas价格(即每次计算的价格)。如果交易gas价格低于矿工决定的gas价格,矿工将拒绝挖交易。gas价格以wei为单位。所以如果gas价格低于期望,矿工可以拒绝将交易接纳入区块。
1703876136
1703876137
1703876138 EVM的每个操作都被分配了一个数字,用以表示它可以消耗的gas。
1703876139
1703876140 交易成本影响一个账户可以转账给另一个账户的以太币上限。例如,如果某个账户里共有5个以太币,它不能把全部5个以太币转入其他账户,因为如果把所有以太币都汇走,账户就没有余额支付交易费了。
1703876141
1703876142 如果交易调用一个合约方法,且该方法发送一些以太币或者调用一些其他合约方法,就从调用合约方法的账户扣除交易费。
1703876143
1703876144
1703876145
1703876146
1703876147 区块链项目开发指南 [:1703875280]
1703876148 区块链项目开发指南 2.13 发现对等节点
1703876149
1703876150 节点是网络的一部分,它需要连接到网络中的一些其他节点,这样它可以广播交易/区块,并监听新的交易/区块。节点不需要连接到网络中的每一个节点;相反,它只连接到几个其他节点,这些节点再连接到另外几个节点。按照这个方式,整个网络彼此连接。
1703876151
1703876152 但是节点如何发现网络中的一些其他节点呢?没有每个节点都可以连接到的中央服务器,怎么交换信息呢?以太坊有自己的节点发现协议可用于解决这个问题,该协议以Kadelima协议为基础。在节点发现协议中有一种特殊的节点,叫作Bootstrap(初始启动)节点。Bootstrap节点保存了一段时间内与它们连接的所有节点的列表,但其本身不保存区块链。当对等节点连接到以太坊网络时,它们首先连接到Bootstrap节点,Bootstrap节点分享在刚才事先定义的时间里连接到它们的对等节点列表。然后对等节点与对等节点连接并同步。
1703876153
1703876154 可以有多种以太坊实例,也就是说,不同的网络每个都有自己的网络ID。两种主要的以太坊网络是主网和测试网。以太币在主网上交易,而测试网供开发人员进行测试。到目前为止,我们已经学习了关于主网区块链的所有知识。
1703876155
1703876156
1703876157 bootnode是以太坊Bootstrap节点最热门的实现。如果用户想使用自己的Bootstrap节点,可以使用bootnode。
1703876158
1703876159
1703876160
1703876161
1703876162 区块链项目开发指南 [:1703875281]
1703876163 区块链项目开发指南 2.14 Whisper和Swarm
1703876164
[ 上一页 ]  [ :1.703876115e+09 ]  [ 下一页 ]