Tutorial GitHub Repository
This tutorial demonstrates how to convert between an EVM hex address and a Cosmos bech32 address.
Prerequisites
Project Setup
First, we need to create a new directory for our project.
mkdir address-conversion
cd address-conversion
Next, we will initialize the project and installed the bech32-converting
package.
npm init
npm install bech32-converting
We then create a new file called index.js
in the src
directory where we will write our code.
You can use any package that allows you to encode and decode bech32-prefixed addresses. However, the specific steps for using those packages may vary.
Development
For this tutorial, we will assume that we have an EVM address 0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636
that we want to convert to a Cosmos address, and then convert it back to an EVM address.
First, we import the bech32-converting
package and initialize the variable for the chain’s Bech32 prefix.
const converter = require("bech32-converting")
let bech32Address = "init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr";
EVM Address to Cosmos Address
To convert an EVM address to a Cosmos address, we will be using the bech32-converting
package’s toHex
function.
const hexAddress = converter('init').toHex(bech32Address)
console.log(hexAddress) // 0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636
Cosmos Address to EVM Address
To convert a Cosmos address to an EVM address, we will be using the bech32-converting
package’s fromHex
function.
bech32Address = converter('init').toBech32(hexAddress)
console.log(bech32Address) // init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr
The full code for the script is then as follows:
const converter = require("bech32-converting")
let bech32Address = "init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr";
const hexAddress = converter('init').toHex(bech32Address)
console.log(hexAddress) // 0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636
bech32Address = converter('init').toBech32(hexAddress)
console.log(bech32Address) // init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr
If we run this script, we should see the following output:
0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636
init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr