站内帮助 以太坊挖矿流程

feirou · 2020年04月17日 · 125 次阅读

一、交易执行流程

  1. 用户通过以太坊钱包或者调用以太坊节点API发送交易到一个运行中的以太坊节点。
  2. 接收节点可能是矿工节点,也可能不是,矿工节点和非矿工节点的主要区别在于矿工节点会参与竞争打包流程。
  3. 无论是否是旷工节点,在接收到交易后,首先对交易进行校验,校验包含防DOS攻击、交易是否符合以太坊基本规则、签名是否正确等。
  4. 校验成功的交易会进入待执行队列,同时广播到邻近节点。
  5. 交易被矿工从待执行队列中选取,执行交易,并将交易执行的相关信息保存到区块体中。
  6. 矿工将多个交易和其他一些信息组装成一个目标区块,开始计算Nonce。
  7. Nonce被成功计算出来后,目标区块变成一个待确认区块,广播到其他节点待确认。
  8. 超过一定比例的节点确认区块后,交易被确认。

二、挖矿流程

  1. 启动挖矿流程,开启挖矿的四个任务:mainLoop 、newWorkLoop 、taskLoop 、resultLoop
  2. mainLoop负责监听newWork、tx、chainSide三个信号, 1)newWork 表示将开始挖采下一个新区块。矿工将立刻将当前区块作为父区块,来挖下一个区块。 2)tx 表示收到新的交易。当收到来自交易池的tx信号时,如果已经是挖矿中,则可以忽略这些交易。因为交易一样会被矿工从交易池主动拿取。如果尚未开始挖矿,则有机会将交易暂时提交,并更新到state中。 3)chainSide 表示新分叉链事件。
  3. newWorkLoop 负责根据不同情况来抉择是否需要终止当前工作 1)接收到 start 信号,表示需要开始挖矿。 2)接收到 chainHeadCh 新区块信号,表示已经有新区块出现。你所处理的交易或者区块高度都极有可能重复,需要终止当下工作,立即开始新一轮挖矿。 3)timer计时器,默认每三秒检查一次是否有新交易需要处理。如果有则需要重新开始挖矿。以便将加高的交易优先打包到区块中。
  4. taskLoop 是在监听任务。任务是指包含了新区块内容的任务,表示可以将此新区块进行PoW计算。一旦接受到新任务,则立即将此任务进行PoW工作量计算,寻找符合要求的Nonce。一旦计算完成,就把任务和计算结果作为一项结果数据告知 resultLoop 。
  5. resultLoop 完成区块的最后工作,即将计算结构和区块基本数据组合成一个符合共识算法的区块。完成区块最后的数据存储和网络广播。

三、分析

  1. 以太坊的全部就是节点,每个节点程序都可以自由定制。节点间通过一套有共识的协议来协作,不符合共识规则的区块,无法形成最长链。
  2. 状态改变的规则,是可以被验证的,除此之外,比如广播,优先级这些是无法被验证的,因此矿工存在一定的自由度。
  3. 交易被确认,也是一个相对过程,理论上,只要算力足够,已经确认的区块数或者节点数量再多,都有可能被篡改。
  4. 挖矿流程中启动的四个任务,可以简单的理解为四个可以并行运行的线程,这样把挖矿分成多个环节并行进行,让挖矿流程能够更快速的进行。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册