Substrate交易实现流程(3)

作者: goldenfiredo | 来源:发表于2020-04-02 08:09 被阅读0次

    6 执行交易

    执行交易是将交易写入区块并更新区块链状态的过程,例如一笔转账(transfer)交易,账户A向账户B转账1 DOT,这笔交易执行后,账户A余额减少1 DOT, 账户B余额增加1 DOT。

    Substrate使用的是Babe共识,Babe共识在出块前要选定出块人proposer,由出块人将交易池中的交易打包入块。具体实现先看propose_with代码(client/basic-authorship/src/basic_authorship.rs,由propose方法调用,propose方法被on_slot调用,见client/consensus/slots/src/lib.rs):

    propose_with首先调用new_block_at函数创建BlockBuilder结构来初始化一个块,在此过程中会调用initialize_block_with_context方法,它的实现是在Runtime里,即Executive模块的initialize_block方法(它调用了自定义模块的on_initialize)。

    区块初始化以后,开始调用push方法:

    这里apply_extrinsic_with_context的实现同样在Runtime里,即Executive模块的apply_extrinsic。apply_extrinsic则调用apply_extrinsic_with_len方法:

    这里先调用check再次检查签名是否正确(在验证交易时已经检查过一次),然后调用apply:

    这里的dispatch实际上就是Extrinsic中的Call,对于一笔转账交易,它可能是Balance是模块的transfer方法,也可能是自定义模块的处理转账的函数。dispatch方法被执行后,这笔交易才真正得到执行,区块链的状态才被更新。至此,一笔交易执行完毕。

    ---------

    ***转载请注明出处

    相关文章

      网友评论

        本文标题:Substrate交易实现流程(3)

        本文链接:https://www.haomeiwen.com/subject/rvfouhtx.html