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