Skip to main content

Precompile Addresses

The full list, transcribed from the runtime's registration table (template/runtime/src/precompiles.rs). Addresses are H160::from_low_u64_be(n), so the index maps directly to the hex.


Ethereum standard​

AddressIndexPrecompile
0x…00011ECRecover
0x…00022Sha256
0x…00033Ripemd160
0x…00044Identity
0x…00055Modexp
0x06–0x09 are not registered

The BN128 precompiles (0x06 add, 0x07 mul, 0x08 pairing) and BLAKE2F (0x09) are not available. A call to an unregistered address does not revert — it returns empty, so a contract reading the result sees zero rather than a failure.

This matters for anything doing BN254 pairing in Solidity — a verifier generated by snarkjs, Semaphore, Tornado-style mixers. Test before relying on it. Orbinum's own ZK verification happens in the runtime, not in the EVM; see the ShieldedPool precompile.


Frontier / non-standard​

AddressIndexPrecompile
0x…04001024Sha3FIPS256
0x…04011025ECRecoverPublicKey
0x…04021026Curve25519Add
0x…04031027Curve25519ScalarMul
Curve25519 takes raw bytes, not an ABI

These two have no function selector. Input is 32 bytes per point — up to 10 points for Curve25519Add — and the result is the CompressedRistretto representation. Gas scales with the point count. There is no Solidity interface to import.


Orbinum​

AddressIndexPrecompileDocs
0x00000000000000000000000000000000000008012049ShieldedPoolreference
0x00000000000000000000000000000000000008022050Balancesreference

Security notes​

  • Origin derivation varies by precompile. Balances derives the caller's AccountId32 from the EVM H160 sender. ShieldedPool does not: shield dispatches under the precompile's own address, and privateTransfer / unshield dispatch unsigned, authenticated by their ZK proof. See ShieldedPool → Origin model.
  • No signature verification is repeated inside a precompile — the EVM transaction already authenticates whichever address is used as origin.
  • Precompiles return no value beyond a success indicator. Use RPC or events to confirm state changes.
  • Gas costs may be adjusted before mainnet.
No .sol files to import

There is no published interface artifact. The interface blocks in these docs are transcribed from the runtime's own documentation and verified against its selectors — copy them into your project rather than importing a package.