以太坊设计与实现

 主页   资讯   文章   代码   电子书 

title: "以太坊挖矿逻辑" menuTitle: "挖矿" date: 2019-07-31T22:58:46+08:00 draft: false weight: 20300

前面,我已经对[交易池]({{< ref "txPool.md" >}})进行解读,下面几篇文章将解读以太坊挖矿逻辑。挖矿是将交易打包到一个区块中,并进行POW工作计算,最终将一个符合共识规则的区块,广播到网络中的过程。

那么以太坊挖矿涉及哪些环节呢?本文先简短介绍每个环节,后续文章详细讲解每个环节。

以太坊挖矿主要环节

下图是以太坊挖矿的主要环节,一环扣一环,缺一不可。

image-20190721114625930

以太坊 geth 项目中,关于挖矿逻辑,全部在 miner 包中,3个文件便清晰滴定义挖矿逻辑。所以,后面讲解挖矿业主要集中在这几个文件中。

开启挖矿

在以太坊控制台,只需要输入命令:miner.start()即可进开启实时挖矿。 能否能挖新新区,取决于交易池是否有交易和服务器性能。

构建新区块

挖矿过程实际就是创建一个符合共识的新区块过程。所以在开启挖矿后,矿工的第一件事情则是集中完成一个新区块的构建,为后续挖矿过程做准备。

POW寻找Nonce

以太坊本是基于POW工作量证明的共识算法。在这里必须找出一个通过哈希计算,在约定时间内找出一个符合难度值的Nonce。找到相符的Nonce,表示进行了一定的工作量计算。 这是所有POW共识的区块链所必须经历的一个挖矿流程。

挖矿成功

并不是一定能成功找出Nonce。特别是在规定的时间内和别人已挖出该高度区块时。只有成功找出Nonce后,则可以大胆的告诉所有人,我已经挖出这个高度的区块了。可以理直气壮地将此区块保留到本地,并广播到整个网络。

本次存储新区块

一旦成功挖出新区块,则可以直接将其存储到本地。存储后,可以等待别人对他的认可度。一旦超过50%的节点认可后,大概率上你这个新区块将作为最长链的一部分。

网络广播新区块

如何让别人能快速认可你的区块,所以需要在第一时间将区块广播到网络中。抢先于别人一秒,将增大新区块的被认可度。