A guide for asset issuers to deploy and register custom ERC20 contracts for their tokens on Ethereum
solidity-ibc-eureka
, receiving a non-native token (e.g., ATOM from Cosmos Hub) deploys a default IBCERC20
contract to represent that token on Ethereum.
Many teams bridging through the Cosmos Hub, however, want ownership and control over their ERC20 contracts on Ethereum. Since IBCERC20
is managed by the ICS20Transfer
contract and isn’t customizable, direct ownership isn’t possible.
To address this, we allow teams to deploy custom ERC20 contracts—provided they implement a simple interface that lets the ICS20Transfer
contract mint and burn tokens.
ibc/transfer/channel-0...
and can be represented with the name they are recognized by.IBCERC20
, your custom ERC20 contract must implement the IMintableAndBurnable
interface:
RefImplIBCERC20.sol
contract in the solidity-ibc-eureka
repository.
ICS20Transfer
contract:
0xa348CfE719B63151F228e3C30EB424BA5a983012
Security Note:
Access to themint
andburn
functions must be strictly limited to theICS20Transfer
proxy. Allowing any other address or contract to call these functions could lead to unauthorized token manipulation and compromise the integrity of your token. While token teams may implement additional access controls or rate limits as needed, theICS20Transfer
proxy must always retain its ability to perform mint and burn operations. Upgradability & Extensibility:
We may update our interface over time, but we’re committed to ensuring backwards compatibility. While making your contract upgradable is not required, doing so allows you to adopt new features or improvements we introduce in the future.
IMintableAndBurnable
interface. However, please note that if we extend the interface with new functionality in the future, a non-upgradable contract would not be able to utilize these new features.
ICS20Transfer
contract includes a permissioned method for registering a custom ERC20 via the setCustomERC20
function.
ERC20_CUSTOMIZER_ROLE
can call this function. This role is established by the protocol’s security council and administered by the Eureka Ops multi-sig. To request registration of your custom ERC20 contract, join our Discord and open a support ticket.
Additionally, the token’s denomination on the Cosmos Hub must be established. The token must either be live on the Hub, or its original denomination and complete IBC path must be known if it originates elsewhere. We require the token to be active on the Cosmos Hub before registration can proceed.
setCustomERC20
must be called before the first IBC transfer of the token to the chain where the custom ERC20 is deployed. Once the initial transfer is made, the ERC20 mapping becomes immutable.Implement the Interface
IMintableAndBurnable
interface with proper access controls for the ICS20Transfer
proxy. For an example, see the reference implementation in the solidity-ibc-eureka
repository.Request Registration
Verify and Launch