BlockchainImpl类源码分析 - ethereumj

半兽人 发表于: 2018-03-14   最后更新时间: 2018-03-14 20:47:29  
{{totalSubscript}} 订阅, 3,943 游览

以太坊区块链在很多方面与比特币区块链相似,尽管它有一些差异。

以太坊和比特币在区块链架构方面的主要区别在于,和比特币不同,以太坊区块包含交易列表和最新状态的副本。除此之外,区块中还存储了其他两个值,即块号和难度。

以太坊中的块验证算法如下:

  • 检查前面的区块引用是否存在并且是有效的。
  • 检查块的时间戳大于引用的前一个块的时间戳,并且在未来15分钟内
  • 检查块号,难度,交易根,uncle根和gas限制(各种低级别的以太坊特定概念)是否有效。
  • 检查块的工作证明是否有效。
  • 设S[0]为前一个块的STATE_ROOT
  • 让TX成为块的交易列表,其中有n笔交易
  • 对于0 ... n-1中的全部,设置 S[i+1] = APPLY(S[i],TX[i])。
  • 如果任何应用程序返回一个错误,或者如果在该点之前消费的gas总量超过了GASLIMIT,则返回一个错误。
  • 让S_FINAL成为S[n],但是增加支付给矿工的块奖励。
  • 检查S_FINAL是否与STATE_ROOT相同。 如果是,则该块有效; 否则,它是无效的。

更多详情,可查看【以太坊白皮书】:https://github.com/ethereum/wiki/wiki/White-Paper#blockchain-and-mining

更新于 2018-03-14
在线,2小时前登录

查看ethereumj更多相关的文章或提一个关于ethereumj的问题,也可以与我们一起分享文章