Precompiles

Note that the support for these precompiles may change as the Zircuit proof system evolves. They should be used with caution. If you have any questions, please reach out via discord.

EVM Precompiles

The RIPEMD-160 (address 0x3) blake2f (address 0x9), and point evaluation (address 0x0a) precompiles are currently not supported. We plan to enable these precompiles in future hard forks.

The modexp precompile is supported but only supports inputs of size less than or equal to 32 bytes (i.e. u256).

The ecPairing precompile is supported, but the number of points(sets, pairs) is limited to 4, instead of 6.

The other EVM precompiles are all supported: ecRecover, identity, ecAdd, ecMul.

Precompiles limits

Because of a bounded size of the zkEVM circuits, there is an upper limit on the number of calls that can be made for some precompiles. These transactions will not revert, but simply be skipped by the sequencer if they cannot fit into the space of the circuit.

Precompile/opcode
Limit

keccak256

3157

ecRecover

119

modexp

23

ecAdd

50

ecMul

50

ecPairing

2

List of precompiles for both Zircuit and Zircuit Testnet:

Name
Address

ECRecover

0x01

SHA256

0x02

RIPEMD

0x03 (Not supported)

Identity

0x04

ModExp

0x05 (Partially supported)

ECAdd

0x06

ECScalarMul

0x07

ECPairing

0x08 (Partially supported)

BLAKE2b

0x09 (Not supported)

Point evaluation

0x0a (Not supported)

Last updated