The EVM facade & AE-20
Aeva runs an EVM (Cosmos EVM, EIP-155 chain id 2382) next to its native modules. Every right kind and every asset’s bundle is exposed as an AE-20 token: an ERC-20 interface backed by a precompile at a derived address. The rights themselves stay in the native state; the ERC-20 is a view and a way in.
- Addresses are derived, not deployed:
right
keccak256("aeva/right/v1" ‖ asset_id ‖ uint32_be(kind_id))[12:], bundlekeccak256("aeva/bundle/v1" ‖ asset_id)[12:]. Every asset gets them at creation; the explorer shows them on the asset page. balanceOfis the transferable balance — units minus locked units (for a bundle, whole transferable units).unitsOf,encumberedOfandwholeUnitsOfgive the rest.- Policy applies. A transfer that the native policy refuses reverts with a
stable reason (for example
aeva: policy denied), listed in the reference. - No mint, burn, issue or redeem through the EVM; those stay native.
- Bundle transfers move one unit of every bundled kind per unit, all or nothing.
- Coins too: AEVA is the EVM’s native coin; aeUSD is an ERC-20 at
0x5aB37c022D0ce153F1C1949a88a93A8DC3E546D7. - One key, two addresses: an account’s
0x…andaeva1…forms are the same 20 bytes (see Wallets).
CLI
aevad query erc20rights tokens <asset-id> # the kind addresses, bundle last
aevad query erc20rights token <0x-address>With any Ethereum tool, against https://evm.aevachain.com:
cast call <ae20-address> "balanceOf(address)(uint256)" <0x-holder> --rpc-url https://evm.aevachain.comOn the explorer
/token/<0x> opens the asset an AE-20 address belongs to (the kind’s row for
a right token); /address/<0x> shows the account under its aeva1… form once
it has appeared on chain. Ethereum-style links work too:
/tx/<hash>, /address/<0x>, /token/<0x>, /block/<n>
(EIP-3091).
Last updated