工作量证明机制下以太坊中一笔交易的完整流程
用户编写并使用账户私钥签署交易请求。
用户通过节点将自己的交易请求广播到整个以太坊网络。
每个接收到新交易请求的以太坊网络节点会将此交易添加到其本地的内存池。内存池主要用来存储该节点已收到的、还未被添加到区块链的区块中被承认的所有交易请求。
在某一时间点,挖矿节点以特定方式将几十或上百个交易请求汇总到一个潜在区块中,该方式使节点在不超出区块燃料限制 (block gas limit) 的情况下,尽可能多地收取交易手续费。
之后,挖矿节点将:
- 验证每个交易请求的有效性(例如:是否有人试图从未经其签名的帐户中转出以太币、请求是否有格式错误等),然后执行交易请求的代码,并改变其本地 EVM 副本的状态。 矿工将每个此类交易请求的交易费用奖励到自己的账户。
- 一旦在本地 EVM 副本上验证并执行了块中的所有交易请求,就开始为潜在的块生成工作量证明“合法性证书 (certificate of legitimacy)”。
最终,矿工将完成对区块的证书生成,该区块中就包含了我们特定的交易请求。 然后,矿工广播完成的区块,其中包括证书以及新 EVM 状态的校验和 (checksum)。
其他节点接收到该新区块。 他们将验证证书,执行区块中所有的交易(也包括原本由我们的用户所广播的交易),并验证所有交易执行后其新 EVM 状态的校验和是否与矿工区块声明的状态校验和相匹配。 只有这样,这些节点才会将这个块附加到他们区块链的尾部,并接受新的 EVM 状态作为规范状态。
每个节点从存放未完成交易请求的本地内存池中,删除该新区块中的所有交易。
加入网络的新节点按顺序下载所有区块,包括包含我们交易的区块。新节点初始化本地 EVM 副本(以空白状态的 EVM 开始),然后在本地 EVM 副本上执行每个块中的每笔交易,并校验各块的状态校验和。
以上就是从用户发布交易到该交易被成功执行上链的完整流程。每笔交易都只会被挖出(首次被包含在新区块中并被传播)一次,但在推进规范 EVM 状态的过程中,每个参与者都会执行和验证该交易。 这凸显出区块链的核心准则之一:别信任,去验证。
This post is licensed under CC BY 4.0 by the author.