Version: 0.2.0-beta.4

架构设计

System Architecture

Components

见各组件详细文档

Core Flow

用户发 Transaction 到 Transaction 上链发生了什么

交易

从 User

  1. 用户通过 SDKGraphiQL 等工具对节点提交一笔交易
  2. Mempool 验证交易信息是否合法,典型的有:交易签名、TimeoutGapCycles 等,同时存入自身的交易内存池。
    • 交易池达到上限将丢失该交易,同时不会广播。
    • 验证不通过将丢弃该交易,同时不会广播。
  3. 当交易验证成功后,调用 Network, Network 把交易序列化后,向已连上的其他节点广播该交易。

从 Network

  1. 本节点通过 Network 收到一笔交易,Network 直接转交给Mempool验证。验证流程参考 2
    • 不同点: 从 Network 来的交易不会被再次广播

出块

提案节点

  1. ConsensusMempool 请求筛选一批交易,Mempool 会根据一些系统参数如: CyclesLimit,来决定最后筛选出的交易数量
  2. Consensus 将筛选后的交易打包成 Block 并且对它签名后组成 Proposal,然后通过 Network 广播给其他节点。
    • Muta 使用了 Compact Blocks,所以 Block 中并不存放交易的具体内容

提案块投票

  1. 通过 Network 收到提案节点的Proposal,验证 Proposal 的签名、区块参数等基础信息。
  2. 查看本地是否存在对应交易。
  3. 不存在的交易将通过 Network 从网络获取。
  4. 验证通过后将对 ProposalYes 票,详细的共识流程可以查看 Overlord 设计文档,这里不再赘述。

Commit 区块

  1. 存储共识成功后的 BlockStorage, 同时进入下一轮共识。
  2. 异步的将交易提交给 Framework 执行。
  3. Framework 根据交易内容找到对应的 Service
  4. 执行成功后,数据存储到 Storage

Parallet Execution

Execution Block