Skip to main content
本页面为开发者总结”为何选择 Monad”。有关在 Monad 上开发或重新部署所需了解内容的总结,请参见面向开发者的部署摘要
Monad 是一条与 Ethereum 兼容的 Layer-1 区块链,拥有 10,000 tps 的吞吐量、300ms 的出块频率和 600ms 的最终确定性。 Monad 的 Ethereum 虚拟机实现符合 Fusaka fork。 Monad 客户端已使用历史 Ethereum 交易进行模拟,并生成了完全相同的 merkle 根。 Monad 还提供完全的 Ethereum RPC 兼容性,使用户能够使用 Etherscan 或 MetaMask 等熟悉的工具与 Monad 交互。 Monad 在保持向后兼容性的同时,通过引入以下几项重大创新实现了这些性能提升: 尽管 Monad 具有并行执行和流水线特性,但需要注意的是,Monad 中的区块是线性的,并且每个区块内的交易也是线性排序的。 第一个 Monad 客户端由 Category Labs 构建,使用 C++ 和 Rust 从头编写。代码在 GPL-3.0 许可下开源,地址如下:

交易

智能合约

共识

执行

每个区块的执行阶段在该区块达成共识后开始,使节点能够继续对后续区块进行共识。

并行执行

交易是线性排序的;执行的任务是达到串行执行该交易列表所产生的状态。朴素的做法就是一个接一个地执行交易。我们能做得更好吗?可以! Monad 实现了并行执行:
  • 执行器是用于执行交易的虚拟机。Monad 并行运行多个执行器。
  • 执行器接收一笔交易并产生结果。结果是该交易的输入输出列表,其中输入是执行过程中被 SLOAD 的 (ContractAddress, Slot, Value) 元组,输出是交易结果导致的被 SSTORE 的 (ContractAddress, Slot, Value) 元组。
  • 结果最初以待定状态产生;然后按交易的原始顺序提交。当结果被提交时,其输出更新当前状态。轮到某个结果被提交时,Monad 检查其输入是否仍与当前状态匹配;如果不匹配,Monad 会重新调度该交易。得益于这一并发控制,Monad 的执行保证产生与交易串行运行时相同的结果。
  • 当交易被重新调度时,许多或全部所需的输入都已缓存,因此重新执行通常相对便宜。请注意,在重新执行时,交易可能产生一组与之前执行不同的输入;

MonadDb:高性能状态后端

所有活跃状态都存储在 MonadDb 中,这是针对固态硬盘(SSD)优化的存储后端,专门针对 merkle trie 数据的存储进行了优化。更新是批量处理的,以便高效地更新 merkle 根。 MonadDb 实现了内存缓存,并使用 asio 进行高效的异步读写。节点应具备 32 GB RAM 以获得最佳性能。

与 Ethereum 的比较:用户视角

工具与基础设施

许多领先的 Ethereum 开发工具都支持 Monad 测试网。按类别列出的支持提供商请参见工具与基础设施

后续步骤

Monad 的公共测试网已上线。前往网络信息以开始使用。 现在您已经熟悉了 Monad 的架构和特性,前往面向开发者的部署摘要以了解部署所需的所有信息。