Skip to main content
使用 Foundry v1.8.0 或更高版本 并启用 Monad 执行网络, 使您的本地开发环境遵循 Monad 的链上行为。
本列表汇总了从智能合约开发者角度来看,Monad 与以太坊之间显著的行为差异。

虚拟机

  1. 最大合约代码大小限制为 128 KB(以太坊为 24 KB)。因此,最大初始化代码大小限制为 256 KB(以太坊为 48 KB)。
  2. 一些 opcode 和预编译被重新定价,以基于 Monad 的优化重新平衡资源的相对稀缺性。参见 Opcode 定价
  3. 内存扩展按线性而非二次方定价,并且一笔交易最多可以使用 8 MB 内存。参见内存扩展
  4. 支持位于 0x0100secp256r1(P256)验证预编译(根据 EIP-7951),从而能够在链上 验证 WebAuthn/passkey 签名。 参见预编译

存储

存储 slot 被分组为每页 128 个连续 slot。访问按页而不是按 slot 进行 warm: 对某页的第一次 SLOADSSTORE 支付冷成本,该页的其他每个 slot 在该交易的其余时间内均为 warm。 Solidity 已经生成的存储布局无需修改即可获益,因为状态变量、结构体字段和数组元素占据连续 slot。 将 slot 散布到多个页的布局也不会受到惩罚;每一页各自支付自己的冷成本。 gas 计价请参见存储页,规范请参见 MIP-8

交易

  1. 交易按 gas limit而非 gas usage收费,即从发送者余额中扣除的总 gas 为 value + gas_bid * gas_limit。如 Monad 中的 gas 中所述,这是异步执行的 DoS 防护措施。
  2. 共识和执行利用储备余额机制确保 共识中包含的所有交易都能够被支付。此机制在共识时对交易包含施加轻度限制, 并定义了在执行时交易将回滚的特定条件。
  3. 由于储备余额机制,您可能会在区块链中看到最终由于尝试花费超过账户余额的 MON 而失败的交易。这些交易仍然支付 gas,并且是有效交易,其结果是执行回滚。 这不是协议差异,因为许多以太坊的回滚交易也会被包含在链上,但可能与预期不同。 更详细的讨论
  4. 不支持交易类型 3(EIP-4844,即 blob 交易)。
  5. 没有全局 mempool。为了效率,交易会被转发给接下来的几位 leader, 如本地 Mempool 中所述。

EIP-7702 委托

  1. 如果一个 EOA 被 EIP-7702 委托,由于储备余额规则, 其余额不能降至 10 MON 以下。如果委托被移除,则允许低于 10 MON。 讨论
  2. 如果一个 EOA 被 EIP-7702 委托,当它被当作智能合约调用时, CREATECREATE2 opcode 会被禁止。讨论

历史数据

由于 Monad 的高吞吐量,全节点不提供对任意历史状态的访问, 因为这将需要过多的存储。参见历史数据以了解更完整的讨论。

RPC

参见:RPC 差异