Skip to main content
预编译是位于预定义地址的合约,提供以原生方式(而非 EVM 字节码)实现的加密和实用函数。 它们可以通过 CALLSTATICCALL 像任何其他合约一样调用。 Monad 支持截至 Fusaka 分叉的所有以太坊预编译(0x010x11), 以及三个额外的预编译:

以太坊预编译

加密和哈希

算术和实用

椭圆曲线 alt_bn128

KZG 承诺

BLS12-381

这些预编译根据 EIP-2537 提供对 BLS12-381 曲线的操作。

P256 签名验证

地址 0x0100 根据 EIP-7951 验证 secp256r1(P256)椭圆曲线上的签名。
EIP-7951 取代了 RIP-7212。 如果您正在从使用 0x100 处的 RIP-7212 的链迁移,请注意地址和接口是相同的 —— 只是 EIP 名称发生了变化。
P256 曲线被 WebAuthn、Apple Secure Enclave、Android Keystore 和硬件安全模块使用。 借助此预编译,您可以在链上验证 passkey 签名,从而为智能账户启用生物识别身份验证流程, 而无需依赖链下签名验证。

输入和输出

预编译接受恰好 160 字节: 所有值都以大端序编码为 256 位无符号整数。 返回:
  • 签名有效时返回 0x0000...0001(32 字节)
  • 签名无效或输入格式错误时返回空字节
Gas 成本: 6900

Solidity 示例

有关 Monad 上的 passkey 基础设施和嵌入式钱包提供商,请参见 嵌入式钱包

质押预编译

地址 0x1000 提供验证者委托、取消委托、领取奖励和质押查询的接口。Gas 成本因函数而异。

储备余额预编译

地址 0x1001 公开了一个方法 dippedIntoReserve()(选择器 0x3a61584e,gas 成本 100), 该方法返回一个 bool,指示当前执行状态是否处于储备余额违规状态。 它在 MIP-4 中规定。 dippedIntoReserve() 必须通过 CALL 调用。通过 STATICCALL(或通过 DELEGATECALLCALLCODE)调用它会回滚。 虽然它读取状态并返回值,但它有意不是 view 函数,以便 Solidity 调用点编译为 CALL 而不是 STATICCALL

Gas 定价差异

一些预编译(0x010x060x070x080x090x0a)相对于以太坊被重新定价, 以反映其在 Monad 执行环境中的相对成本。上表中的 gas 值反映了 Monad 的定价。 参见 Opcode 定价 以进行对比。

源代码

参见预编译实现