架构设计
System Architecture
Components
见各组件详细文档
Core Flow
用户发 Transaction 到 Transaction 上链发生了什么
交易
从 User
- 用户通过
SDK
、GraphiQL
等工具对节点提交一笔交易 Mempool
验证交易信息是否合法,典型的有:交易签名、TimeoutGap
、Cycles
等,同时存入自身的交易内存池。- 交易池达到上限将丢失该交易,同时不会广播。
- 验证不通过将丢弃该交易,同时不会广播。
- 当交易验证成功后,调用
Network
,Network
把交易序列化后,向已连上的其他节点广播该交易。
从 Network
- 本节点通过
Network
收到一笔交易,Network
直接转交给Mempool
验证。验证流程参考2
- 不同点: 从
Network
来的交易不会被再次广播
- 不同点: 从
出块
提案节点
Consensus
向Mempool
请求筛选一批交易,Mempool
会根据一些系统参数如:CyclesLimit
,来决定最后筛选出的交易数量Consensus
将筛选后的交易打包成Block
并且对它签名后组成Proposal
,然后通过Network
广播给其他节点。Muta
使用了Compact Blocks
,所以Block
中并不存放交易的具体内容
提案块投票
- 通过
Network
收到提案节点的Proposal
,验证Proposal
的签名、区块参数等基础信息。 - 查看本地是否存在对应交易。
- 不存在的交易将通过
Network
从网络获取。 - 验证通过后将对
Proposal
投Yes
票,详细的共识流程可以查看Overlord
设计文档,这里不再赘述。
Commit 区块
- 存储共识成功后的
Block
到Storage
, 同时进入下一轮共识。 - 异步的将交易提交给
Framework
执行。 Framework
根据交易内容找到对应的Service
。- 执行成功后,数据存储到
Storage