Monad Docs 中文版
by DocsZH
  • 介绍 Monad
    • 为什么选择区块链?
    • 为什么选择 Monad: 去中心化+性能
    • 面向用户的 Monad
    • 面向开发人员的 Monad
    • Devnet 开发者申请
  • 快速入门
    • 部署合约
      • 使用 Foundry 部署合约
      • 使用 Hardhat 部署合约
    • 验证合约
      • 验证 Foundry 合约
      • 验证 Hardhat 合约
  • 开发指南
    • EVM 资源
      • EVM Behavior
      • Solidity 资源
      • 其他编程语言
        • Vyper 语言
        • Yul 语言
        • Huff 语言
    • 使用 Scaffold-Eth-Monad 构建 dApp
  • Monad 架构
    • 相关概念
      • Asynchronous I/O
      • Pipelining
    • 共识机制
      • MonadBFT 共识机制
      • 延迟执行
      • 共享内存池
      • 传输成本和储备余额
    • 执行机制
      • 并行执行
      • MonadDb 数据库
    • Monad 的交易生命周期
    • 硬件要求
    • 其他详细信息
  • 参考资料
    • RPC 概述
    • RPC 故障代码
    • RPC API
  • Monad 官方链接
由 GitBook 提供支持
在本页
  • 交易格式
  • 智能合约
  • 共识机制
  • 执行机制
  • 与以太坊的比较:用户角度
  1. 介绍 Monad

面向开发人员的 Monad

上一页面向用户的 Monad下一页Devnet 开发者申请

最后更新于8个月前

Monad 是与以太坊兼容的 Layer1 区块链,吞吐量为 10,000 tps,区块时间为1秒,采用(single-slot finality)。

Monad 对以太坊虚拟机的优化符合的要求,使用 Monad 执行环境模拟以太坊历史交易会产生相同的结果。Monad 还与以太坊 RPC 完全兼容,因此用户可以使用 MetaMask 和 Etherscan 等熟悉的工具与 Monad 进行交互。

Monad 通过引入以下四项重大创新实现了这些性能的优化:

  • (pipelined HotStuff 共识机制,以及更多的研究改进)

  • (在达成共识和执行之间进行 pipelining 作业,以大幅增加执行预算)

  • (高性能状态后端)

虽然 Monad 具有并行执行和流水线执行功能,但需要注意的是,Monad 中的区块是线性的,交易在每个区块中也是线性排序的。

交易格式

相关属性
属性描述

地址空间

使用 ECDSA 匹配以太坊 20 字节地址

交易格式

钱包兼容性

Monad 与 Metamask 等标准以太坊钱包兼容。唯一需要更改的是 RPC URL 和 ChainId。

智能合约

  • Monad 支持 EVM 字节码,与以太坊字节码等效,支持所有 (截至上海升级)。

共识机制

相关属性
属性描述

抗 51% 攻击

权益证明(PoS)

委托投票权

允许(协议原生)

共识机制和流水线机制

MonadBFT 是一种流水线式两阶段 BFT 算法,在一般情况下具有线性的 communication overhead。与大多数 BFT 算法一样,通信分阶段进行,在每个阶段,领导人向投票者发送签名信息,投票者再发回签名回执。流水线作业允许区块 k 的法定人数证书(QC)或超时证书(TC)包含区块 k+1 的提议,超时会进行二次消息传递。

区块时间

1秒

最终确定性

单时隙确定性,一旦2/3的验证者对整块提议投了"支持"票,区块即最终确定。

内存池

抵制垃圾交易

共识参与者

直接共识参与者对区块提议进行投票,并担任领导人。要成为直接参与者,节点必须至少有 MinStake 质押,并且按投票权排在 MaxConsensusNodes 参与者的前列,这些参数在代码中设定。

交易哈希

延迟执行和燃料成本

在区块链中,通常执行是达成共识的先决条件,而执行的时间预算只占区块时间的一小部分。将共识和执行流水线化后,Monad 就可以将全部区块时间用于共识和执行。

区块提议由交易哈希有序列表和 D 个区块前的状态 merkle 根组成,延迟参数 D 在代码中设定,预计最初 D = 10。

• 储备余额,用于支付传输费用

• 执行余额,用于支付执行费用

当交易被纳入区块(共识)时,传输费用从储备余额中扣除;当交易被执行时,传输费用从执行余额中扣除(双重费用);在 D 个区块的延迟期后,将剩余费用偿还给储备余额。

账户的储备余额实际是"待处理"交易的费用预算,它的存在是为了确保只有已支付交易费用的交易被打包进区块。

每个账户都有一个预留储备余额,该余额可通过与内置的智能合约交互进行更改,例如,对于计划发送大量交易的 EOA 账户而言。

状态确认

最终确定性发生在共识时间,在这一点上,交易的官方排序是神圣的。对于任何全节点来说,结果都是完全确定的,它们通常会在1秒内执行该新块的交易。

状态 merkle 根的 D 区块延迟仅用于状态根验证,例如允许节点验证自己没有计算错误。

执行机制

每个区块的执行阶段,在该区块达成共识后开始,并允许节点继续就后续区块达成共识。

并行执行

交易是按线性顺序排列的,执行作业是得出串行执行交易列表后的状态,最简单的方法就是一个接一个地执行交易。我们能做得更好吗?可以!

  • 执行器是执行交易的虚拟机,Monad 可并行运行多个执行器。

  • 执行器接收一笔交易并产生一个结果,结果是该笔交易的输入和输出列表,其中输入是执行过程 SLOAD 的(ContractAddress、Slot、Value)元组,输出是交易结果 SSTORE 的(ContractAddress、Slot、Value)元组。

  • 结果最初在待处理状态下产生,然后按照交易的原始排序提交,当结果提交时,其输出会更新当前状态。在结果提交时,Monad 会检查其输入是否仍与当前状态匹配,如果不匹配,Monad 会重新安排交易。由于采用了并发控制,Monad 能确保生成与串行执行交易相同的结果。

  • 当交易被重新安排时,许多或全部需要的输入都已被缓存,因此重新执行的成本通常相对较低。需要注意的是,在重新执行时,交易可能会生成与上次执行不同的输入集。

MonadDb:高性能状态后端

与以太坊的比较:用户角度

相关属性
Ethereum
Monad

每秒交易量(合约调用和转账)

~10次

~10,000次

区块时间

12秒

1秒

最终确定性

单时隙确定性 (1秒)

字节码标准

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 带宽

符合

符合 ,使用 编码。支持但不要求访问列表()。

是一种基于领导人选举的共识算法,用于在部分同步条件下就交易排序和打包达成一致。广义上,它是 HotStuff 的衍生算法,并进行了额外的研究优化。

有,交易采用纠删码,并使用 broadcast tree 进行通信,以提高效率。

用户为交易打包进区块(“”)和交易执行(“执行成本”)付费。

为提高效率,区块提议来引用交易。如果一个节点没有参与交易,它将通过哈希向邻居节点请求交易。

在 Monad 中,共识和执行以流水线方式进行。节点在执行正式交易排序()之前,会就该排序达成共识,执行结果并不是达成共识的先决条件。

用户必须支付费用("")才能将交易打包进区块。对于每个交易账户,节点保留两个余额:

Monad 采用:

所有交易的活动状态都存储在 中,MonadDb 是由固态硬盘(SSD)组成的存储后端,专为存储 merkle trie 数据而优化。该数据更新是分批进行的,因此可以提高 merkle 根的更新效率。

MonadDb 实现了内存缓存,并使用 实现了高效的异步读写。节点至少配置 32GB 内存,以获得最佳性能。

(12-18分钟)

EVM ()

EVM ()

(全节点)

单时隙确定性
上海升级
MonadBFT 共识机制
Deferred Execution / 延迟执行
Parallel Execution / 并行执行
MonadDb 数据库
操作码
并行执行
MonadDb
asio
以太坊
EIP-2718
RLP
EIP-2930
MonadBFT
内存池
传输成本
仅通过哈希值
延迟执行
传输费用
2 epochs
上海升级
上海升级
Ethereum RPC API
Ethereum RPC API
硬件要求