precompiles/*/abi.json, with mirrored Solidity interfaces under contracts/solidity/precompiles.
Address catalog
| Address | Precompile | Interface |
|---|---|---|
0x0000000000000000000000000000000000000100 | P256 / secp256r1 verifier | Raw call only, no Solidity ABI |
0x0000000000000000000000000000000000000400 | Bech32 | Bech32I |
0x0000000000000000000000000000000000000500 | Ed25519 | Ed25519I |
0x0000000000000000000000000000000000000600 | SP1 Groth16 verifier | SP1VerifierGroth16I |
0x0000000000000000000000000000000000000700 | SP1 Plonk verifier | SP1VerifierPlonkI |
0x0000000000000000000000000000000000000701 | JSON | JsonI |
0x0000000000000000000000000000000000000703 | Schnorr | SchnorrI |
0x0000000000000000000000000000000000000704 | Schnorrkel | SchnorrkelI |
0x0000000000000000000000000000000000000705 | Gnark hash | GnarkHashI |
0x0000000000000000000000000000000000000706 | SHA3 hash | Sha3HashI |
0x0000000000000000000000000000000000000707 | Blake2b hash | Blake2bHashI |
0x0000000000000000000000000000000000000708 | ECVRF | ECVRFI |
0x0000000000000000000000000000000000000709 | FROST | FrostI |
0x0000000000000000000000000000000000000711 | Poseidon hash | PoseidonI |
0x0000000000000000000000000000000000000712 | PQMLDSA | PQMLDSAI |
0x0000000000000000000000000000000000000713 | PQSLHDSA | PQSLHDSAI |
0x0000000000000000000000000000000000000714 | Validator rewards | ValRewardsI |
0x0000000000000000000000000000000000000715 - 0x0000000000000000000000000000000000000750 | Reserved slots 15-50 | No ABI, return empty data |
0x0000000000000000000000000000000000000800 | Staking | StakingI |
0x0000000000000000000000000000000000000801 | Distribution | DistributionI |
0x0000000000000000000000000000000000000802 | ICS20 transfer | ICS20I |
0x0000000000000000000000000000000000000804 | Bank | IBank |
0x0000000000000000000000000000000000000805 | Governance | IGov |
0x0000000000000000000000000000000000000806 | Slashing | ISlashing |
0x0000000000000000000000000000000000000807 | ICS02 client | ICS02I |
| Token-pair address | ERC20 extension | IERC20Metadata |
| Token-pair address | WERC20 extension | IWERC20 |
ERC20 and WERC20 precompile addresses are created from registered token pairs and enabled by the ERC20 keeper; they are not part of the static address table.
Reference package and imports
| Surface | Repository location | Notes |
|---|---|---|
| Generated ABI artifacts | precompiles/*/abi.json | Canonical ABI for function and event signatures. The ABI array is under the abi field. |
| Solidity interfaces | precompiles/*/*.sol | Canonical Solidity source interfaces and address constants. |
| Mirrored Solidity interfaces | contracts/solidity/precompiles/*/*.sol | Consumer-friendly mirror used by the local contracts package and tests. |
| Local contracts package | contracts/package.json | Named cosmos-evm-contracts, currently version 2.0.0. |
contracts/package.json does not define main, files, exports, or types. Treat cosmos-evm-contracts as a local contracts package, not as a documented stable npm ABI package.
Use static constants for fixed-address precompiles. For ERC20 and WERC20, use the registered token-pair address. For P256, use a raw low-level call because there is no Solidity ABI.
Core ABI catalog
Bank
| Signature | Mutability | Returns |
|---|---|---|
balances(address account) | view | (tuple[](address contractAddress,uint256 amount) balances) |
supplyOf(address erc20Address) | view | (uint256 totalSupply) |
totalSupply() | view | (tuple[](address contractAddress,uint256 amount) totalSupply) |
Bech32
| Signature | Mutability | Returns |
|---|---|---|
bech32ToHex(string bech32Address) | nonpayable | (address addr) |
hexToBech32(address addr,string prefix) | nonpayable | (string bech32Address) |
Distribution
| Signature | Mutability | Returns |
|---|---|---|
claimRewards(address delegatorAddress,uint32 maxRetrieve) | nonpayable | (bool success) |
communityPool() | view | (DecCoin[] coins) |
delegationRewards(address delegatorAddress,string validatorAddress) | view | (DecCoin[] rewards) |
delegationTotalRewards(address delegatorAddress) | view | (tuple[](string validatorAddress,DecCoin[] reward) rewards, DecCoin[] total) |
delegatorValidators(address delegatorAddress) | view | (string[] validators) |
delegatorWithdrawAddress(address delegatorAddress) | view | (string withdrawAddress) |
depositValidatorRewardsPool(address depositor,string validatorAddress,Coin[] amount) | nonpayable | (bool success) |
fundCommunityPool(address depositor,Coin[] amount) | nonpayable | (bool success) |
setWithdrawAddress(address delegatorAddress,string withdrawerAddress) | nonpayable | (bool success) |
validatorCommission(string validatorAddress) | view | (DecCoin[] commission) |
validatorDistributionInfo(string validatorAddress) | view | (tuple(string operatorAddress,DecCoin[] selfBondRewards,DecCoin[] commission) distributionInfo) |
validatorOutstandingRewards(string validatorAddress) | view | (DecCoin[] rewards) |
validatorSlashes(string validatorAddress,uint64 startingHeight,uint64 endingHeight,PageRequest pageRequest) | view | (tuple[](uint64 validatorPeriod,Dec fraction) slashes, PageResponse pageResponse) |
withdrawDelegatorRewards(address delegatorAddress,string validatorAddress) | nonpayable | (Coin[] amount) |
withdrawValidatorCommission(string validatorAddress) | nonpayable | (Coin[] amount) |
ClaimRewards, DepositValidatorRewardsPool, FundCommunityPool, SetWithdrawerAddress, WithdrawDelegatorReward, and WithdrawValidatorCommission.
Governance
| Signature | Mutability | Returns |
|---|---|---|
cancelProposal(address proposer,uint64 proposalId) | nonpayable | (bool success) |
deposit(address depositor,uint64 proposalId,Coin[] amount) | nonpayable | (bool success) |
getConstitution() | view | (string constitution) |
getDeposit(uint64 proposalId,address depositor) | view | (Deposit deposit) |
getDeposits(uint64 proposalId,PageRequest pagination) | view | (Deposit[] deposits, PageResponse pageResponse) |
getParams() | view | (Params params) |
getProposal(uint64 proposalId) | view | (Proposal proposal) |
getProposals(uint32 proposalStatus,address voter,address depositor,PageRequest pagination) | view | (Proposal[] proposals, PageResponse pageResponse) |
getTallyResult(uint64 proposalId) | view | (TallyResult tallyResult) |
getVote(uint64 proposalId,address voter) | view | (Vote vote) |
getVotes(uint64 proposalId,PageRequest pagination) | view | (Vote[] votes, PageResponse pageResponse) |
submitProposal(address proposer,bytes jsonProposal,Coin[] deposit) | nonpayable | (uint64 proposalId) |
vote(address voter,uint64 proposalId,uint8 option,string metadata) | nonpayable | (bool success) |
voteWeighted(address voter,uint64 proposalId,WeightedVoteOption[] options,string metadata) | nonpayable | (bool success) |
CancelProposal, Deposit, SubmitProposal, Vote, and VoteWeighted.
ICS02 and ICS20
| Precompile | Signature | Mutability | Returns |
|---|---|---|---|
| ICS02 | getClientState(string clientId) | view | (bytes) |
| ICS02 | updateClient(string clientId,bytes updateMsg) | nonpayable | (uint8) |
| ICS02 | verifyMembership(string clientId,bytes proof,Height proofHeight,bytes[] path,bytes value) | nonpayable | (uint256) |
| ICS02 | verifyNonMembership(string clientId,bytes proof,Height proofHeight,bytes[] path) | nonpayable | (uint256) |
| ICS20 | denom(string hash) | view | (Denom denom) |
| ICS20 | denomHash(string trace) | view | (string hash) |
| ICS20 | denoms(PageRequest pageRequest) | view | (Denom[] denoms, PageResponse pageResponse) |
| ICS20 | transfer(string sourcePort,string sourceChannel,string denom,uint256 amount,address sender,string receiver,Height timeoutHeight,uint64 timeoutTimestamp,string memo) | nonpayable | (uint64 nextSequence) |
IBCTransfer(indexed address sender,indexed string receiver,string sourcePort,string sourceChannel,string denom,uint256 amount,string memo).
Slashing
| Signature | Mutability | Returns |
|---|---|---|
getParams() | view | (Params params) |
getSigningInfo(address consAddress) | view | (SigningInfo signingInfo) |
getSigningInfos(PageRequest pagination) | view | (SigningInfo[] signingInfos, PageResponse pageResponse) |
unjail(address validatorAddress) | nonpayable | (bool success) |
ValidatorUnjailed(indexed address validator).
Staking
| Signature | Mutability | Returns |
|---|---|---|
cancelUnbondingDelegation(address delegatorAddress,string validatorAddress,uint256 amount,uint256 creationHeight) | nonpayable | (bool success) |
createValidator(Description description,CommissionRates commissionRates,uint256 minSelfDelegation,address validatorAddress,string pubkey,uint256 value) | nonpayable | (bool success) |
delegate(address delegatorAddress,string validatorAddress,uint256 amount) | nonpayable | (bool success) |
delegation(address delegatorAddress,string validatorAddress) | view | (uint256 shares, Coin balance) |
editValidator(Description description,address validatorAddress,int256 commissionRate,int256 minSelfDelegation) | nonpayable | (bool success) |
redelegate(address delegatorAddress,string validatorSrcAddress,string validatorDstAddress,uint256 amount) | nonpayable | (int64 completionTime) |
redelegation(address delegatorAddress,string srcValidatorAddress,string dstValidatorAddress) | view | (Redelegation redelegation) |
redelegations(address delegatorAddress,string srcValidatorAddress,string dstValidatorAddress,PageRequest pageRequest) | view | (RedelegationResponse[] response, PageResponse pageResponse) |
unbondingDelegation(address delegatorAddress,string validatorAddress) | view | (UnbondingDelegation unbondingDelegation) |
undelegate(address delegatorAddress,string validatorAddress,uint256 amount) | nonpayable | (int64 completionTime) |
validator(address validatorAddress) | view | (Validator validator) |
validators(string status,PageRequest pageRequest) | view | (Validator[] validators, PageResponse pageResponse) |
CreateValidator, Delegate, EditValidator, Redelegate, Unbond, and CancelUnbondingDelegation.
Validator rewards
| Signature | Mutability | Returns |
|---|---|---|
claimRewards(address validatorOperatorAddress,uint64 epoch) | nonpayable | (bool success) |
delegationRewards(address delegatorAddress,uint64 epoch) | view | (Coin rewards) |
depositValidatorRewardsPool(address depositor,Coin amount) | nonpayable | (bool success) |
rewardsPool() | view | (Coin rewards) |
validatorOutstandingRewards(uint64 epoch,string validatorAddress) | view | (Coin rewards) |
ERC20 and WERC20 extensions
| Extension | Signature | Mutability | Returns |
|---|---|---|---|
| ERC20/WERC20 | allowance(address owner,address spender) | view | (uint256) |
| ERC20/WERC20 | approve(address spender,uint256 amount) | nonpayable | (bool) |
| ERC20/WERC20 | balanceOf(address account) | view | (uint256) |
| ERC20/WERC20 | decimals() | view | (uint8) |
| WERC20 | deposit() | payable | none |
| ERC20/WERC20 | name() | view | (string) |
| ERC20/WERC20 | symbol() | view | (string) |
| ERC20/WERC20 | totalSupply() | view | (uint256) |
| ERC20/WERC20 | transfer(address to,uint256 amount) | nonpayable | (bool) |
| ERC20/WERC20 | transferFrom(address from,address to,uint256 amount) | nonpayable | (bool) |
| WERC20 | withdraw(uint256 wad) | nonpayable | none |
Approval and Transfer. WERC20 also emits Deposit and Withdrawal.
Reverts and errors
The checked ABI artifacts do not define custom Solidityerror entries.
| Case | Behavior |
|---|---|
| Stateful precompile action returns an error | Standard ABI Error(string) revert data |
| Unknown selector, short calldata, or failed ABI unpack in most stateless precompiles | Plain execution reverted |
| Read-only call to a state-changing method | EVM write-protection error |
| SDK gas panic or exhausted EVM gas | ErrOutOfGas |
| Verification failure in signature/hash helpers | Usually ABI-encoded false or empty bytes, depending on interface |
ERC20: transfer amount exceeds balance, ERC20: insufficient allowance, and ERC20: decreased allowance below zero.
Gas schedule
Variable-length stateless precompiles use:| Surface | Notes |
|---|---|
SP1 Groth16 verifyProof | 300000 + ceil((publicValuesBytes + proofBytes) / 32) * 16 |
SP1 Plonk verifyProof | 800000 + ceil((publicValuesBytes + proofBytes) / 32) * 16 |
| Stateful module precompiles | Use the shared stateful minimum formula, then meter SDK execution |
| P256 | Raw-call precompile; validate packed input shape in caller code |
Versioning rules
Use the repository tag as the compatibility boundary until a separate ABI package is formalized.| Change | Versioning expectation |
|---|---|
| Address changes, removed or changed signatures/events, changed revert behavior, or changed gas schedules | Breaking release |
| New static precompile, new dynamic precompile family, or additive function/event entries | Minor release |
| Documentation-only corrections or regenerated artifacts with no ABI/address/gas behavior change | Patch release |