token-list 和 protocols。
调优 gas 处理
在 Monad 上,用户支付交易的 gas limit费用,而不是它实际使用的 gas。这是相对于以太坊在钱包端 最大的差异:大的安全缓冲会显著过度收费用户,并预留交易永远不会使用的区块空间。 请使用小的、针对 Monad 的 gas limit 余量,并在用户手动将 gas limit 设置得远高于估计值时予以警告。 Category Labs 的 gas limit 分析 推荐使用eth_estimateGas 加上适度的缓冲。固定缓冲是一个不错的起点;一旦有足够的历史数据进行校准, 可以将相同用户地址和调用函数的具体使用量作为动态缓冲量值缩减gas limit大小。
根据当前Monad的数据获取报价,而非以太坊的默认值
eth_maxPriorityFeePerGas返回硬编码的 2 gwei — 不是主网推荐值。- 当
newest_block为latest时,eth_feeHistory会重复最新的baseFeePerGas。不要在图表或平均值中重复计算。
处理交易生命周期
eth_sendRawTransaction 成功仅意味着”被此 RPC 节点接受” — 并不保证交易会落地或成功。 RPC 节点可能在检查 nonce 和余额与最新状态之前就接受它。
区分三个阶段:
如果一个账户刚收到 MON 并即将花费它,请等到接收交易的 Receipt 区块比当前区块至少落后
k 个区块。 目前 k = 3(约 1.2 秒),但这可能会改变。
如果一次花费使未委托账户的余额降至 10 MON 以下,请等待 k 个区块后再进行另一次 MON 花费。 取消委托后,请等待 k 个区块后再清空账户。
Monad 没有全局 mempool。不要使用 txpool_content 或 newPendingTransactions 来查看待处理状态。而是:
- 跟踪您提交的交易的本地待处理 nonce。
- 与 Receipt 和
eth_getTransactionCount进行对账。 - 使用
txpool_statusByAddress或txpool_statusByHash获取节点级待处理状态。 - 将待处理列表的范围限制为用户的账户,而不是整个网络。
模拟和 RPC 差异
debug_trace* 方法不返回 opcode 级 struct 日志。请使用 call frame 或 prestate tracer 进行模拟和风险预览。
WebSocket 订阅:newHeads、logs,以及针对预最终确认数据的 Monad 特定 monadNewHeads 和 monadLogs。 不支持 syncing 和 newPendingTransactions WebSocket 订阅类型。 参见 WebSocket 订阅。
全节点可能提供近期状态,但不提供任意旧状态。在显示历史状态 UI 或旧区块模拟之前请检查 RPC 能力, 并在需要时链接到归档端点。参见历史数据。
EIP 和 EVM 差异
Monad 支持交易类型 0、1、2 和 4。不支持类型 3 的 blob 交易。
Monad 的合约大小限制比以太坊大,并且有一些 opcode 重新定价。请使用 Monad 特定的 部署大小警告阈值,并按链重新估算,而不是硬编码 opcode 成本。参见与以太坊的差异。
实用方案
应用特定于链的 gas limit 余量
使用 Category Labs 的 7.5% 固定缓冲结果作为 Monad 起点,然后根据生产数据调优 — 成功率、重试次数和 gas 不足事件。基点可避免浮点舍入误差。在手动 gas limit 超支时警告
等待 Receipt 和最终性
下面的手动循环适用于标准 RPC。如果您的 RPC 支持,eth_sendRawTransactionSync 是更短的路径。
学习资源
Gas 定价
Monad 如何收取 gas 以及 EIP-1559 如何在 Monad 上工作
JSON-RPC 概述
RPC 差异、区块标签、WebSocket、限制和错误
储备余额
账户何时可以低于 10 MON 储备花费
Monad 上的 EIP-7702
已委托 EOA 的行为和 Monad 特定限制
历史数据
当前状态和历史状态的可用性

