Skip to main content

Core Contracts (Wrapper/Registry)

How to interact with CELO assets using the wrapper and registry Celo Core Contracts.


Interacting with CELO & cUSD​

celo-blockchain has two initial coins: CELO and cUSD (Mento stabletoken). Both implement the ERC20 standard, and to interact with them is as simple as:

const goldtoken = await kit.contracts.getGoldToken();

const balance = await goldtoken.balanceOf(someAddress);

To send funds:

const oneGold = kit.web3.utils.toWei("1", "ether");
const tx = await goldtoken.transfer(someAddress, oneGold).send({
from: myAddress,
});

const hash = await tx.getHash();
const receipt = await tx.waitReceipt();

To interact with cUSD, is the same but with a different contract:

const stabletoken = await kit.contracts.getStableToken();

Interacting with Other Celo Contracts​

Apart from GoldToken and Mento stabletokens, there are many core contracts.

For the moment, we have contract wrappers for:

  • Accounts
  • Attestations
  • BlockchainParameters
  • DobleSigningSlasher
  • DowntimeSlasher
  • Election
  • Escrow
  • Exchange (Uniswap kind exchange between Gold and Stable tokens)
  • GasPriceMinimum
  • GoldToken
  • Governance
  • LockedGold
  • Reserve
  • SortedOracles
  • Validators
  • StableToken

A Note About Contract Addresses​

Celo Core Contracts addresses, can be obtained by looking at the Registry contract. That's actually how kit obtain them.

We expose the registry api, which can be accessed by:

const goldTokenAddress = await kit.registry.addressFor(CeloContract.GoldToken);

Accessing web3 contract wrappers​

Some user might want to access web3 native contract wrappers. We encourage to use the Celo contracts instead to avoid mistakes.

To do so, you can:

const web3Exchange = await kit._web3Contracts.getExchange();

We expose native wrappers for all Web3 contracts.

The complete list is:

  • Accounts
  • Attestations
  • BlockchainParameters
  • DoubleSigningSlasher
  • DowntimeSlasher
  • Election
  • EpochRewards
  • Escrow
  • Exchange
  • FeeCurrencyWhiteList
  • GasPriceMinimum
  • GoldToken
  • Governance
  • LockedGold
  • Random
  • Registry
  • Reserve
  • SortedOracles
  • StableToken
  • Validators

Debugging​

If you need to debug kit, we use the well known debug node library.

So set the environment variable DEBUG as:

DEBUG="kit:*,