name: web3-monad
description: 完整的Monad L1开发手册。涵盖MonadBFT共识(400毫秒区块,800毫秒最终性,尾分叉抵抗)、并行/延迟执行、MonadDb、JIT编译、Gas定价(按Gas限制收费,而非Gas使用量)、操作码重新定价(冷访问4倍)、EIP-7702委托、质押预编译、部署(Foundry monad分支,Hardhat 2/3)、验证(MonadVision,Monadscan,Socialscan)、执行事件(共享内存低延迟)、生态系统(Pyth,LayerZero,CCIP,Safe,ERC-4337)以及与以太坊的关键区别(128KB合约,无Blob,无全局内存池,储备余额)。适用于在Monad上构建、部署合约、集成质押、消费执行事件或需要Monad特定架构细节时使用。
Monad L1 开发技能
此技能的用途
当用户询问以下内容时使用此技能:
- Monad链配置(主网/测试网RPC,链ID,区块浏览器)
- MonadBFT共识细节(轮次,最终性,尾分叉抵抗)
- 并行和延迟执行架构
- 在Monad上部署合约(Foundry,Hardhat,Remix)
- 验证合约(MonadVision/Sourcify,Monadscan/Etherscan,Socialscan)
- Gas定价和操作码成本与以太坊的差异
- Monad上的EIP-7702账户委托
- 质押预编译集成(委托,取消委托,复利,申领)
- 执行事件(低延迟共享内存消费者)
- Monad生态系统(桥接,预言机,索引器,钱包,代币)
- 并行友好合约的性能模式
- Monad与以太坊的区别
链配置
主网
| 属性 |
值 |
| 链 ID |
143 |
| 货币 |
MON (18位小数) |
| EVM 版本 |
Pectra 分叉 |
| 区块时间 |
400毫秒 |
| 最终性 |
800毫秒 (2个时隙) |
| 区块 Gas 限制 |
200M |
| 交易 Gas 限制 |
30M |
| Gas 吞吐量 |
500M gas/秒 |
| 最低基础费用 |
100 MON-gwei |
| 节点版本 |
v0.12.7 / MONAD_EIGHT |
RPC 端点(主网)
| URL |
提供商 |
速率限制 |
批量 |
备注 |
https://rpc.monad.xyz / wss://rpc.monad.xyz |
QuickNode |
25 rps |
100 |
默认 |
https://rpc1.monad.xyz / wss://rpc1.monad.xyz |
Alchemy |
15 rps |
100 |
无调试/追踪 |
https://rpc2.monad.xyz / wss://rpc2.monad.xyz |
Goldsky Edge |
300/10s |
10 |
历史状态 |
https://rpc3.monad.xyz / wss://rpc3.monad.xyz |
Ankr |
300/10s |
10 |
无调试 |
https://rpc-mainnet.monadinfra.com / wss://rpc-mainnet.monadinfra.com |
MF |
20 rps |
1 |
历史状态 |
区块浏览器
测试网
与以太坊的关键区别
| 特性 |
以太坊 |
Monad |
| 区块时间 |
12秒 |
400毫秒 |
| 最终性 |
~12-18 分钟 |
800毫秒 (2个时隙) |
| 吞吐量 |
~10 TPS |
10,000+ TPS |
| Gas 收费 |
Gas 使用量 |
Gas 限制 |
| 最大合约大小 |
24.5 KB |
128 KB |
| Blob 交易 (EIP-4844) |
支持 |
不支持 |
| 全局内存池 |
是 |
否 (基于领导者的转发) |
| 账户冷访问 |
2,600 gas |
10,100 gas |
| 存储冷访问 |
2,100 gas |
8,100 gas |
| 储备余额 |
无 |
~10 MON 每账户 |
TIMESTAMP 粒度 |
每区块1次 |
2-3个区块共享同一秒 |
| 预编译 0x0100 |
N/A |
EIP-7951 secp256r1 (P256) |
| EIP-7702 最低余额 |
无 |
10 MON 用于委托的EOA |
| EIP-7702 CREATE/CREATE2 |
允许 |
禁止 用于委托的EOA |
| 支持的交易类型 |
0,1,2,3,4 |
0,1,2,4 (无类型 3) |
Gas 限制收费模型
Monad 收取 gas_limit * price_per_gas,而不是 gas_used * price_per_gas。这使得异步执行成为可能——执行发生在共识之后,因此在包含时无法知道Gas使用量。
gas_paid = gas_limit * price_per_gas
price_per_gas = min(base_price_per_gas + priority_price_per_gas, max_price_per_gas)
开发者影响:为固定成本操作(例如,21000用于转账)明确设置Gas限制,以避免多付。
储备余额
每个账户维持约10 MON的储备,用于未来3个区块的Gas。任何会将余额降低到此阈值以下的交易都将被拒绝。这可以防止异步执行期间的DoS攻击。
区块生命周期与最终性
提议 → 投票(推测性最终性,T+1) → 最终确定(T+2) → 验证/状态根(T+5)
| 阶段 |
延迟 |
何时使用 |
| 投票 |
400毫秒 |
UI更新,大多数dApp |
| 最终确定 |
800毫秒 |
保守型应用 |
| 验证 |
~2秒 |
交易所,桥接,稳定币 |
viem 链定义
import { defineChain } from "viem";
export const monad = defineChain({
id: 143,
name: "Monad",
nativeCurrency: { name: "MON", symbol: "MON", decimals: 18 },
rpcUrls: {
default: { http: ["https://rpc.monad.xyz"], webSocket: ["wss://rpc.monad.xyz"] },
},
blockExplorers: {
default: { name: "MonadVision", url: "https://monadvision.com" },
monadscan: { name: "Monadscan", url: "https://monadscan.com" },
},
});
export const monadTestnet = defineChain({
id: 10143,
name: "Monad Testnet",
nativeCurrency: { name: "MON", symbol: "MON", decimals: 18 },
rpcUrls: {
default: { http: ["https://testnet-rpc.monad.xyz"], webSocket: ["wss://testnet-rpc.monad.xyz"] },
},
blockExplorers: {
default: { name: "Monad Explorer", url: "https://testnet.monadexplorer.com" },
},
testnet: true,
});
Foundry 配置
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
evm_version = "prague"
[rpc_endpoints]
monad = "https://rpc.monad.xyz"
monad_testnet = "https://testnet-rpc.monad.xyz"
[etherscan]
monad = { key = "${ETHERSCAN_API_KEY}", chain = 143, url = "https://api.etherscan.io/v2/api?chainid=143" }
Hardhat 配置 (v2)
const config: HardhatUserConfig = {
solidity: {
version: "0.8.28",
settings: {
evmVersion: "prague",
metadata: { bytecodeHash: "ipfs" }, // Sourcify所需
},
},
networks: {
monadTestnet: {
url: "https://testnet-rpc.monad.xyz",
chainId: 10143,
accounts: [process.env.PRIVATE_KEY!],
},
monadMainnet: {
url: "https://rpc.monad.xyz",
chainId: 143,
accounts: [process.env.PRIVATE_KEY!],
},
},
etherscan: {
customChains: [{
network: "monadMainnet",
chainId: 143,
urls: {
apiURL: "https://api.etherscan.io/v2/api?chainid=143",
browserURL: "https://monadscan.com",
},
}],
},
sourcify: {
enabled: true,
apiUrl: "https://sourcify-api-monad.blockvision.org",
browserUrl: "https://monadvision.com",
},
};
智能合约提示
- Gas优化仍然重要 — 即使Gas便宜,也要为用户优化
- 相同的安全模型 — 所有Solidity最佳实践(CEI,重入防护)都适用
- 并行友好设计 — 具有每用户映射的合约比全局计数器更好地并行化
- 128 KB合约限制 — 更大的合约是可能的,但仍需为Gas优化
- 无需代码更改即可实现并行性 — 它在运行时级别
block.timestamp — 2-3个区块可能共享同一秒;不要依赖亚秒级粒度
- 无Blob交易 — 不支持EIP-4844类型3交易
WebSocket 订阅
标准 eth_subscribe 加上Monad特定扩展:
newHeads — 标准新区块头
logs — 标准日志过滤
monadNewHeads — Monad特定区块头,包含额外字段
monadLogs — Monad特定日志事件
执行事件(高级)
对于超低延迟数据消费,Monad通过共享内存环形缓冲区暴露执行事件。消费者在与节点相同的主机上运行。约1微秒延迟。仅支持C、C++和Rust。
当JSON-RPC无法跟上10,000 TPS吞吐量时使用执行事件。对于大多数dApp,标准WebSocket订阅就足够了。
必需工具版本
| 工具 |
最低版本 |
| Foundry |
Monad 分支 (foundryup --network monad) |
| viem |
2.40.0+ |
| alloy-chains |
0.2.20+ |
| Hardhat Solidity |
evmVersion: “prague” |
附加参考文件
| 文件 |
内容 |
architecture.md |
MonadBFT共识,并行执行,延迟执行,MonadDb,JIT,RaptorCast |
deployment.md |
Foundry + Hardhat 部署/验证分步指南 |
gas-and-opcodes.md |
Gas定价模型,操作码重新定价表,预编译成本 |
staking.md |
质押预编译ABI,函数,事件,纪元机制 |
ecosystem.md |
代币地址,桥接,预言机,索引器,规范合约 |