Skip to main content
This page is for app developers and CELO holders who use CELO as the native currency, as an ERC-20 token, or both. CELO is both at once: you can move it with a native transfer, the way ETH moves on Ethereum, or through the standard ERC-20 interface, and either way the tokens show up in both the native balance and the ERC-20 balance.

How it works

The CELO ERC-20 contract keeps no balances of its own. balanceOf returns the account’s native balance, and transfer and transferFrom trigger a native transfer through a contract built into the chain (a precompile) that only the CELO token can call. The token duality specification gives the precompile’s address, parameters and gas cost. The Registry, the on-chain directory of Celo’s core contracts, lists the CELO ERC-20 contract as GoldToken. Core Contracts gives the Registry and GoldToken addresses on each network.

Why it matters on Celo

An account has one CELO balance that both interfaces read and change, so unlike ETH and WETH there is nothing to wrap or unwrap. Wallets and apps can use native transfers, the ERC-20 interface, or both, and they see the same balance either way.

Resources