This reference tracks the checked-in c8ntinuum repository. The canonical ABI artifacts live beside the precompile implementations under precompiles/*/abi.json, with mirrored Solidity interfaces under contracts/solidity/precompiles.

Address catalog

AddressPrecompileInterface
0x0000000000000000000000000000000000000100P256 / secp256r1 verifierRaw call only, no Solidity ABI
0x0000000000000000000000000000000000000400Bech32Bech32I
0x0000000000000000000000000000000000000500Ed25519Ed25519I
0x0000000000000000000000000000000000000600SP1 Groth16 verifierSP1VerifierGroth16I
0x0000000000000000000000000000000000000700SP1 Plonk verifierSP1VerifierPlonkI
0x0000000000000000000000000000000000000701JSONJsonI
0x0000000000000000000000000000000000000703SchnorrSchnorrI
0x0000000000000000000000000000000000000704SchnorrkelSchnorrkelI
0x0000000000000000000000000000000000000705Gnark hashGnarkHashI
0x0000000000000000000000000000000000000706SHA3 hashSha3HashI
0x0000000000000000000000000000000000000707Blake2b hashBlake2bHashI
0x0000000000000000000000000000000000000708ECVRFECVRFI
0x0000000000000000000000000000000000000709FROSTFrostI
0x0000000000000000000000000000000000000711Poseidon hashPoseidonI
0x0000000000000000000000000000000000000712PQMLDSAPQMLDSAI
0x0000000000000000000000000000000000000713PQSLHDSAPQSLHDSAI
0x0000000000000000000000000000000000000714Validator rewardsValRewardsI
0x0000000000000000000000000000000000000715 - 0x0000000000000000000000000000000000000750Reserved slots 15-50No ABI, return empty data
0x0000000000000000000000000000000000000800StakingStakingI
0x0000000000000000000000000000000000000801DistributionDistributionI
0x0000000000000000000000000000000000000802ICS20 transferICS20I
0x0000000000000000000000000000000000000804BankIBank
0x0000000000000000000000000000000000000805GovernanceIGov
0x0000000000000000000000000000000000000806SlashingISlashing
0x0000000000000000000000000000000000000807ICS02 clientICS02I
Token-pair addressERC20 extensionIERC20Metadata
Token-pair addressWERC20 extensionIWERC20
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

SurfaceRepository locationNotes
Generated ABI artifactsprecompiles/*/abi.jsonCanonical ABI for function and event signatures. The ABI array is under the abi field.
Solidity interfacesprecompiles/*/*.solCanonical Solidity source interfaces and address constants.
Mirrored Solidity interfacescontracts/solidity/precompiles/*/*.solConsumer-friendly mirror used by the local contracts package and tests.
Local contracts packagecontracts/package.jsonNamed 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.
import "./contracts/solidity/precompiles/staking/StakingI.sol" as staking;

contract Delegator {
    function delegateTo(string calldata validatorAddress) external payable returns (bool) {
        return staking.STAKING_CONTRACT.delegate(
            address(this),
            validatorAddress,
            msg.value
        );
    }
}
import type { Abi } from "viem";
import stakingArtifact from "./precompiles/staking/abi.json";

export const STAKING_ADDRESS = "0x0000000000000000000000000000000000000800";
export const stakingAbi = stakingArtifact.abi as Abi;
No generated TypeScript binding package is committed today. Hardhat users can generate TypeChain bindings in their own workspace; viem users can pass the ABI array directly.

Core ABI catalog

Bank

SignatureMutabilityReturns
balances(address account)view(tuple[](address contractAddress,uint256 amount) balances)
supplyOf(address erc20Address)view(uint256 totalSupply)
totalSupply()view(tuple[](address contractAddress,uint256 amount) totalSupply)
Events: none.

Bech32

SignatureMutabilityReturns
bech32ToHex(string bech32Address)nonpayable(address addr)
hexToBech32(address addr,string prefix)nonpayable(string bech32Address)
Events: none.

Distribution

SignatureMutabilityReturns
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)
Events include ClaimRewards, DepositValidatorRewardsPool, FundCommunityPool, SetWithdrawerAddress, WithdrawDelegatorReward, and WithdrawValidatorCommission.

Governance

SignatureMutabilityReturns
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)
Events include CancelProposal, Deposit, SubmitProposal, Vote, and VoteWeighted.

ICS02 and ICS20

PrecompileSignatureMutabilityReturns
ICS02getClientState(string clientId)view(bytes)
ICS02updateClient(string clientId,bytes updateMsg)nonpayable(uint8)
ICS02verifyMembership(string clientId,bytes proof,Height proofHeight,bytes[] path,bytes value)nonpayable(uint256)
ICS02verifyNonMembership(string clientId,bytes proof,Height proofHeight,bytes[] path)nonpayable(uint256)
ICS20denom(string hash)view(Denom denom)
ICS20denomHash(string trace)view(string hash)
ICS20denoms(PageRequest pageRequest)view(Denom[] denoms, PageResponse pageResponse)
ICS20transfer(string sourcePort,string sourceChannel,string denom,uint256 amount,address sender,string receiver,Height timeoutHeight,uint64 timeoutTimestamp,string memo)nonpayable(uint64 nextSequence)
ICS20 emits IBCTransfer(indexed address sender,indexed string receiver,string sourcePort,string sourceChannel,string denom,uint256 amount,string memo).

Slashing

SignatureMutabilityReturns
getParams()view(Params params)
getSigningInfo(address consAddress)view(SigningInfo signingInfo)
getSigningInfos(PageRequest pagination)view(SigningInfo[] signingInfos, PageResponse pageResponse)
unjail(address validatorAddress)nonpayable(bool success)
Event: ValidatorUnjailed(indexed address validator).

Staking

SignatureMutabilityReturns
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)
Events include CreateValidator, Delegate, EditValidator, Redelegate, Unbond, and CancelUnbondingDelegation.

Validator rewards

SignatureMutabilityReturns
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

ExtensionSignatureMutabilityReturns
ERC20/WERC20allowance(address owner,address spender)view(uint256)
ERC20/WERC20approve(address spender,uint256 amount)nonpayable(bool)
ERC20/WERC20balanceOf(address account)view(uint256)
ERC20/WERC20decimals()view(uint8)
WERC20deposit()payablenone
ERC20/WERC20name()view(string)
ERC20/WERC20symbol()view(string)
ERC20/WERC20totalSupply()view(uint256)
ERC20/WERC20transfer(address to,uint256 amount)nonpayable(bool)
ERC20/WERC20transferFrom(address from,address to,uint256 amount)nonpayable(bool)
WERC20withdraw(uint256 wad)nonpayablenone
ERC20 emits Approval and Transfer. WERC20 also emits Deposit and Withdrawal.

Reverts and errors

The checked ABI artifacts do not define custom Solidity error entries.
CaseBehavior
Stateful precompile action returns an errorStandard ABI Error(string) revert data
Unknown selector, short calldata, or failed ABI unpack in most stateless precompilesPlain execution reverted
Read-only call to a state-changing methodEVM write-protection error
SDK gas panic or exhausted EVM gasErrOutOfGas
Verification failure in signature/hash helpersUsually ABI-encoded false or empty bytes, depending on interface
ERC20 maps some SDK/bank errors to ERC20-style revert strings such as ERC20: transfer amount exceeds balance, ERC20: insufficient allowance, and ERC20: decreased allowance below zero.

Gas schedule

Variable-length stateless precompiles use:
base gas + ceil(input bytes / 32) * word gas
Stateful Cosmos module precompiles use a minimum formula before SDK execution:
2000 + 30 * input bytes   # transactions
1000 + 3 * input bytes    # queries
Actual SDK execution is also metered inside the precompile call.
SurfaceNotes
SP1 Groth16 verifyProof300000 + ceil((publicValuesBytes + proofBytes) / 32) * 16
SP1 Plonk verifyProof800000 + ceil((publicValuesBytes + proofBytes) / 32) * 16
Stateful module precompilesUse the shared stateful minimum formula, then meter SDK execution
P256Raw-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.
ChangeVersioning expectation
Address changes, removed or changed signatures/events, changed revert behavior, or changed gas schedulesBreaking release
New static precompile, new dynamic precompile family, or additive function/event entriesMinor release
Documentation-only corrections or regenerated artifacts with no ABI/address/gas behavior changePatch release