面向开发人员的 Monad
Monad 是与以太坊兼容的 Layer1 区块链,吞吐量为 10,000 tps,区块时间为1秒,采用单时隙确定性(single-slot finality)。
Monad 对以太坊虚拟机的优化符合上海升级的要求,使用 Monad 执行环境模拟以太坊历史交易会产生相同的结果。Monad 还与以太坊 RPC 完全兼容,因此用户可以使用 MetaMask 和 Etherscan 等熟悉的工具与 Monad 进行交互。
Monad 通过引入以下四项重大创新实现了这些性能的优化:
MonadBFT 共识机制(pipelined HotStuff 共识机制,以及更多的研究改进)
Deferred Execution / 延迟执行(在达成共识和执行之间进行 pipelining 作业,以大幅增加执行预算)
MonadDb 数据库(高性能状态后端)
虽然 Monad 具有并行执行和流水线执行功能,但需要注意的是,Monad 中的区块是线性的,交易在每个区块中也是线性排序的。
交易格式
相关属性 | 属性描述 |
---|---|
地址空间 | 使用 ECDSA 匹配以太坊 20 字节地址 |
交易格式 | |
钱包兼容性 | Monad 与 Metamask 等标准以太坊钱包兼容。唯一需要更改的是 RPC URL 和 ChainId。 |
智能合约
Monad 支持 EVM 字节码,与以太坊字节码等效,支持所有 操作码(截至上海升级)。
共识机制
相关属性 | 属性描述 |
---|---|
抗 51% 攻击 | 权益证明(PoS) |
委托投票权 | 允许(协议原生) |
共识机制和流水线机制 | MonadBFT 是一种基于领导人选举的共识算法,用于在部分同步条件下就交易排序和打包达成一致。广义上,它是 HotStuff 的衍生算法,并进行了额外的研究优化。 MonadBFT 是一种流水线式两阶段 BFT 算法,在一般情况下具有线性的 communication overhead。与大多数 BFT 算法一样,通信分阶段进行,在每个阶段,领导人向投票者发送签名信息,投票者再发回签名回执。流水线作业允许区块 |
区块时间 | 1秒 |
最终确定性 | 单时隙确定性,一旦2/3的验证者对整块提议投了"支持"票,区块即最终确定。 |
内存池 | 有内存池,交易采用纠删码,并使用 broadcast tree 进行通信,以提高效率。 |
抵制垃圾交易 | 用户为交易打包进区块(“传输成本”)和交易执行(“执行成本”)付费。 |
共识参与者 | 直接共识参与者对区块提议进行投票,并担任领导人。要成为直接参与者,节点必须至少有 |
交易哈希 | 为提高效率,区块提议仅通过哈希值来引用交易。如果一个节点没有参与交易,它将通过哈希向邻居节点请求交易。 |
延迟执行和燃料成本 | 在 Monad 中,共识和执行以流水线方式进行。节点在执行正式交易排序(延迟执行)之前,会就该排序达成共识,执行结果并不是达成共识的先决条件。 在区块链中,通常执行是达成共识的先决条件,而执行的时间预算只占区块时间的一小部分。将共识和执行流水线化后,Monad 就可以将全部区块时间用于共识和执行。 区块提议由交易哈希有序列表和 用户必须支付费用("传输费用")才能将交易打包进区块。对于每个交易账户,节点保留两个余额: • 储备余额,用于支付传输费用 • 执行余额,用于支付执行费用 当交易被纳入区块(共识)时,传输费用从储备余额中扣除;当交易被执行时,传输费用从执行余额中扣除(双重费用);在 账户的储备余额实际是"待处理"交易的费用预算,它的存在是为了确保只有已支付交易费用的交易被打包进区块。 每个账户都有一个预留储备余额,该余额可通过与内置的智能合约交互进行更改,例如,对于计划发送大量交易的 EOA 账户而言。 |
状态确认 | 最终确定性发生在共识时间,在这一点上,交易的官方排序是神圣的。对于任何全节点来说,结果都是完全确定的,它们通常会在1秒内执行该新块的交易。 状态 merkle 根的 |
执行机制
每个区块的执行阶段,在该区块达成共识后开始,并允许节点继续就后续区块达成共识。
并行执行
交易是按线性顺序排列的,执行作业是得出串行执行交易列表后的状态,最简单的方法就是一个接一个地执行交易。我们能做得更好吗?可以!
Monad 采用并行执行:
执行器是执行交易的虚拟机,Monad 可并行运行多个执行器。
执行器接收一笔交易并产生一个结果,结果是该笔交易的输入和输出列表,其中输入是执行过程 SLOAD 的(ContractAddress、Slot、Value)元组,输出是交易结果 SSTORE 的(ContractAddress、Slot、Value)元组。
结果最初在待处理状态下产生,然后按照交易的原始排序提交,当结果提交时,其输出会更新当前状态。在结果提交时,Monad 会检查其输入是否仍与当前状态匹配,如果不匹配,Monad 会重新安排交易。由于采用了并发控制,Monad 能确保生成与串行执行交易相同的结果。
当交易被重新安排时,许多或全部需要的输入都已被缓存,因此重新执行的成本通常相对较低。需要注意的是,在重新执行时,交易可能会生成与上次执行不同的输入集。
MonadDb:高性能状态后端
所有交易的活动状态都存储在 MonadDb 中,MonadDb 是由固态硬盘(SSD)组成的存储后端,专为存储 merkle trie 数据而优化。该数据更新是分批进行的,因此可以提高 merkle 根的更新效率。
MonadDb 实现了内存缓存,并使用 asio 实现了高效的异步读写。节点至少配置 32GB 内存,以获得最佳性能。
与以太坊的比较:用户角度
相关属性 | Ethereum | Monad |
---|---|---|
每秒交易量(合约调用和转账) | ~10次 | ~10,000次 |
区块时间 | 12秒 | 1秒 |
最终确定性 | 2 epochs (12-18分钟) | 单时隙确定性 (1秒) |
字节码标准 | EVM (上海升级) | EVM (上海升级) |
RPC API | ||
密码学 | ECDSA | ECDSA |
账户 | ECDSA 算法中,keccak-256 公钥的最后20个字节 | ECDSA 算法中,keccak-256公钥的最后20个字节 |
共识机制 | Gasper (Casper-FFG finality gadget + LMD-GHOST fork-choice rule) | MonadBFT (pipelined HotStuff 以及更多的研究优化) |
内存池 | 有 | 有 |
交易排序 | Leader's discretion (实际:PBS) | Leader's discretion (默认方案:PGA) |
抗51%攻击 | PoS | PoS |
投票权委托 | 不允许,需通过 LSTs 实现 | 允许 |
硬件要求 (全节点) | 4核 CPU 16GB 内存 1TB 固态硬盘 25Mbit/s 带宽 | 16核 CPU 32GB 内存 2TB 固态硬盘 100Mbit/s 带宽 |
最后更新于