Documentation Index
Fetch the complete documentation index at: https://initialabs-mintlify-changelog-interwovenkit-1777853576.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Tutorial GitHub Repository
This tutorial demonstrates how to convert between a hex-based ERC20 token
address and a Cosmos coin denom.
Prerequisites
Project Setup
First, create a new directory for your project.
mkdir cosmos-coin-to-erc20
cd cosmos-coin-to-erc20
Next, initialize the project and create an index.js file in a src directory.
npm init
touch src/index.js
Development
For this tutorial, assume that you have an ERC20 token address
0x5E5f1a92eECA58053E8364630b66763aa6265Ab0 that you want to convert to a
Cosmos coin denom, and then convert it back to an ERC20 token address.
First, initialize the variable for the chain’s REST endpoint and the ERC20 token
address.
const restUrl = `https://rest-evm-1.anvil.asia-southeast.initia.xyz`
const erc20Address = '0x5E5f1a92eECA58053E8364630b66763aa6265Ab0'
ERC20 to Cosmos Denom
To actually do the conversion, use the REST’s
/minievm/evm/v1/denoms/{contractAddress} endpoint.
// previous code
async function erc20ToCoinDenom(contractAddress) {
const response = await fetch(
`${restUrl}/minievm/evm/v1/denoms/${contractAddress}`,
)
const data = await response.json()
return data
}
If the address is a valid ERC20 token address, the response just returns the
token’s Cosmos coin denom.
evm/5E5f1a92eECA58053E8364630b66763aa6265Ab0
Cosmos Denom to ERC20 Address
To convert a Cosmos coin denom back to an ERC20 token address, use the REST’s
/minievm/evm/v1/contracts/by_denom?denom={denom} endpoint.
// previous code
async function coinDenomToErc20(denom) {
const response = await fetch(
`${restUrl}/minievm/evm/v1/contracts/by_denom?denom=${denom}`,
)
const data = await response.json()
return data
}
If the denom is a valid Cosmos coin denom, the response just returns the token’s
ERC20 token address.
0x5E5f1a92eECA58053E8364630b66763aa6265Ab0
The full code for the script, including the section to actually call the
function is as follows:
const restUrl = `https://rest-evm-1.anvil.asia-southeast.initia.xyz`
const erc20Address = '0x5E5f1a92eECA58053E8364630b66763aa6265Ab0'
async function erc20ToCoinDenom(contractAddress) {
const response = await fetch(
`${restUrl}/minievm/evm/v1/denoms/${contractAddress}`,
)
const data = await response.json()
return data
}
async function coinDenomToErc20(denom) {
const response = await fetch(
`${restUrl}/minievm/evm/v1/contracts/by_denom?denom=${denom}`,
)
const data = await response.json()
return data
}
;(async () => {
const coinDenomResponse = await erc20ToCoinDenom(erc20Address)
console.log(coinDenomResponse.denom)
const erc20Response = await coinDenomToErc20(coinDenomResponse.denom)
console.log(erc20Response.address)
})()
If you run this script, you should see the following output:
evm/5E5f1a92eECA58053E8364630b66763aa6265Ab0
0x5E5f1a92eECA58053E8364630b66763aa6265Ab0