Substrate交易实现流程(2)

作者: goldenfiredo | 来源:发表于2020-03-31 19:39 被阅读0次

    3 提交(submit)/导入(import)交易

    交易经过验证是valid以后,它将被提交到交易池里。submit方法在client/transaction-pool/graph/src/validated_pool.rs里实现,它调用submit_one方法提交每一笔交易,submit_one再调用import方法完成导入操作,如果导入成功,这笔交易的hash将被放入import_notification_sinks通知队列:

    Substrate交易池的交易分为2类:Future和Ready。前者包含那些某些tags尚未提供的交易,后者包含满足了所有条件可以打包进区块的交易。对于已经Ready的交易,import调用import_to_ready方法:

    import_to_ready继续调用ReadyTransaction的import方法把交易放入交易池:

    import的实现在client/transaction-pool/graph/src/ready.rs里。

    4 转发交易

    Substrate的底层service监听extrinsic通知,当有Ready的交易写入import_notification_sinks时,网络服务的propagate_extrinsic函数就会被调用(client/service/src/builder.rs):

    propagate_extrinsic发出PropagateExtrinsic消息:

    网络服务收到这条消息后,会调用protocol里的propagate_extrinsic方法(client/network/src/protocol.rs):

    do_propagate_extrinsics()方法把交易数据包发送给其它节点,on_broadcasted则是向节点发送通知。

    至此,交易转发完毕,所有节点都将接收到这笔交易。

    5 接收交易

    每个节点在协议层protocol里收到交易数据的消息类型为GenericProtoOut::CustomMessage,然后调用on_custom_message方法处理数据:

    on_custom_message首先解码数据包,如果消息类型是Transaction则调用on_extrinsics方法,它通过调用import将接收到的交易放到本节点的交易池里:

    ----------------

    ***转载请注明出处

    相关文章

      网友评论

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

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