- 作者:老汪软件技巧
- 发表时间:2024-12-04 04:02
- 浏览量:
客户端通过订阅,了解到自己的交易已经被打包到新的区块,则交易已上链
通过共识算法选出记账节点,然后把交易组装到一个新的区块里,进行签名,然后把区块广播到其他的全节点里,其他的全节点进行交易的验证。若验证通过,就落块,寄到全节点的本地账本里。客户端可通过订阅的方式了解到自己的交易已被打包到新的区块,即交易已上链。
预执行的流程其实就是客户端需要通过 RPC 模块,把预执行请求发送到全节点,然后全节点根据预执行请求构建沙盒环境,在沙盒环境里面查询合约代码,执行智能合约,然后返回读写集给客户端。沙盒环境的作用是做数据隔离,不会对真实的已经在全节点上存储的数据产生影响,因为可能发送来的交易无法通过验证,可能是失败的,也可能是产生冲突的。如果每个交易都执行,那其实是得不偿失的。
合约执行完毕之后会把读写集返回给客户端。区块的打包流程是交易通过 P2P 网络进行合法性的验证,如果验证通过,就会被添加到矿工的交易池里。通过共识算法选出记账节点,这一轮的记账节点从交易池里选出一批交易打包成区块,然后进行签名,把新的区块先写入到自己本地的账本里,然后通过 P2P 网络广播给其他的全节点。其他全节点收到新的区块之后验证签名、交易和状态。如果验证通过,就把区块写入到自己的本地账本里,完成落块,实现区块打包到广播到其他网络节点的全过程。
2 交易预执行流程2.1 预执行请求提交2.2 执行合约代码2.3 读写集返回
合约执行完毕,读写集数据返回给客户端。
3 区块打包流程
交易通过p2p网络进行交易合法性验证,包括签名,双花读写集等验证,如果都通过之后就进入到交易池里面。
在共识模块的协调下,选出这一轮的矿工。
矿工从交易池里面选取一批交易进行打包,打包完毕之后进行签名。
矿工在生成新区块之后首先会写入到自己的账本,同时更新状态机以反映最新的状态变化
矿工更新完本地账本之后,通过p2p网络进行新区块的广播其他节点通过p2p网络接收到来自矿工的新区块
从节点在收到一个新的区块之后,对区块链中交易进行验证包括共识、交易、状态,以保证数据的安全性。
一切验证通过之后就把新区块持久化到本地账本,至此完成了区块的打包到广播到其他网络节点的全过程。