Skip to main content
Precompiles are contracts at predefined addresses that provide cryptographic and utility functions implemented natively rather than in EVM bytecode. They are callable like any other contract via CALL or STATICCALL. Monad supports all Ethereum precompiles as of the Fusaka fork (0x01 to 0x11), plus three additional precompiles:

Ethereum precompiles

Cryptographic and hashing

Arithmetic and utility

Elliptic curve alt_bn128

KZG commitment

BLS12-381

These precompiles provide operations on the BLS12-381 curve per EIP-2537.

P256 signature verification

Address 0x0100 verifies signatures on the secp256r1 (P256) elliptic curve per EIP-7951.
EIP-7951 supersedes RIP-7212. If you are migrating from a chain that uses RIP-7212 at 0x100, note that the address and interface are identical — only the EIP designation has changed.
The P256 curve is used by WebAuthn, Apple Secure Enclave, Android Keystore, and hardware security modules. With this precompile, you can verify passkey signatures on-chain, enabling biometric authentication flows for smart accounts without relying on off-chain signature verification.

Input and output

The precompile accepts exactly 160 bytes: All values are big-endian encoded as 256-bit unsigned integers. Returns:
  • 0x0000...0001 (32 bytes) on a valid signature
  • Empty bytes on an invalid signature or malformed input
Gas cost: 6900

Solidity example

For passkey infrastructure and embedded wallet providers on Monad, see Embedded Wallets.

Staking precompile

Address 0x1000 provides the interface for validator delegation, undelegation, reward claims, and staking queries. Gas costs vary by function.

Reserve balance precompile

Address 0x1001 exposes a single method, dippedIntoReserve() (selector 0x3a61584e, gas cost 100), which returns a bool indicating whether the current execution state is in reserve balance violation. It is specified in MIP-4. dippedIntoReserve() must be invoked via CALL. Invoking it via STATICCALL - or via DELEGATECALL or CALLCODE - reverts. Although it reads state and returns a value, it is intentionally not a view function, so that a Solidity call site compiles to CALL rather than STATICCALL.

Gas pricing differences

A few precompiles (0x01, 0x06, 0x07, 0x08, 0x09, 0x0a) are repriced relative to Ethereum to reflect their relative costs in Monad’s execution environment. The gas values in the tables above reflect Monad’s pricing. See Opcode pricing for a comparison.

Source code

See the precompile implementation.