描述交易的生命周期,从客户端提交开始到交易在Libra区块链确认(引用官方图片):
接收交易
1. 客户端将交易提交给验证器 ,验证器的准入控制(AC)组件接收该交易。
AdmissionControlClient:submit_transaction -> AdmissionControlClient:submit_transaction_opt->
AdmissionControlService:submit_transaction -> AdmissionControlService:submit_transaction_inner
2. 验证检查
AdmissionControlService:can_send_txn_to_mempool->
VMValidator:validate_transaction->StorageRead:update_to_latest_ledger ->MoveVM:validate_transaction
3.加入到内存池
AdmissionControlService:add_txn_to_mempool->MempoolClient:add_transaction_with_validation->
MempoolClient:add_transaction_with_validation_opt->
MempoolService:add_transaction_with_validation
发布交易到其他验证器节点
4.内存池将交易保存到内存缓冲区中
Mempool:add_txn ->TransactionStore:insert
5. 内存池共享协议,将共享其内存池中的所有交易给其他验证器广播交易,并将从其他验证器接收的交易放入其自己的内存池中
SharedMempool:outbound_sync_task -> SharedMempool:sync_with_peers
SharedMempool:inbound_network_task ->SharedMempool:process_incoming_transactions
块提议
6.提议者/领导者将从其内存池中提取一个交易块,并通过其共识组件将此块作为提议复制到其他验证器
EventProcessor:process_new_round_event ->ProposalGenerator:generate_proposal ->MempoolProxy:pull_txns
7.共识模块负责在所有验证器之间协调提议块中交易的顺序
ConsensusNetworkImpl:broadcast_proposal ->RotatingProposer:process_proposal
区块执行和达成共识
8. 交易块被传递给执行组件
SyncManager:execute_and_insert_block-> BlockStore:execute_and_insert_block->
ExecutionProxy:compute->ExecutionProxy:execute_block_async-> VMExecutor:execute_block
9. 执行组件在虚拟机中管理交易的执行
BlockProcessor:process_command->TransactionBlock:queue_execute_block_response_sender
10.执行组件将块中的交易附加到Merkle累加器
VMExecutor::run-> VMExecutor:execute_block->VMExecutor:process_vm_outputs
11. 试图与参与共识的其他验证者就该块的执行结果达成共识
EventProcessor:process_winning_proposal->EventProcessor:process_vote->SyncManager:fetch_quorum_cert
区块提交
12. 提交块中的所有交易至持久存储
BlockProcessor:run ->BlockProcessor:save_blocks_to_storage