The native token standard of Calix Chain — ERC-20 equivalent, deeply integrated with Cosmos SDK and EVM layer.
CLX20 is the fungible token standard on Calix Chain. CLX20 tokens can be created, transferred, and integrated with EVM smart contracts exactly like ERC-20, while being managed by the Cosmos SDK module x/clx20, allowing use in staking, governance, and IBC.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ICLX20 {
// ERC-20 standard
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
// CLX20 extensions
function mint(address to, uint256 amount) external; // owner only
function burn(address from, uint256 amount) external; // owner only
function transferOwnership(address newOwner) external;
function setMetadata(string calldata name, string calldata symbol) external;
function permit(address owner, address spender, uint256 value,
uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://calixchain.io/rpc");
const signer = new ethers.Wallet(PRIVATE_KEY, provider);
const token = new ethers.Contract(TOKEN_ADDRESS, [
"function balanceOf(address) view returns (uint256)",
"function transfer(address, uint256) returns (bool)",
"function approve(address, uint256) returns (bool)",
], signer);
// Check balance
const balance = await token.balanceOf(signer.address);
console.log("Balance:", ethers.formatUnits(balance, 18), "GBC");
// Transfer token
const tx = await token.transfer(RECIPIENT, ethers.parseUnits("100", 18));
await tx.wait();
console.log("Tx hash:", tx.hash);
All CLX20 tokens are listed at Calix Scan → Tokens. Each token has a detail page with total supply, holder count, and transaction history.
| Feature | ERC-20 | CLX20 |
|---|---|---|
| Basic interface | ✓ | ✓ |
| Permit (EIP-2612) | Optional | Built-in |
| Cosmos SDK module | — | x/clx20 |
| IBC transfer | — | Enableable |
| Mint/Burn (owner) | — | ✓ |
| Post-Quantum sig | — | ML-KEM-768 |