Skip to main content
Tutorial GitHub Repository This tutorial demonstrates how to convert between an EVM hex address and a Cosmos bech32 address.

Prerequisites

Project Setup

First, create a new directory for your project.
mkdir address-conversion
cd address-conversion
Next, initialize the project and install the bech32-converting package.
npm init
npm install bech32-converting
Then create a new file called index.js in the src directory where you will write your 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, assume that you have an EVM address 0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636 that you want to convert to a Cosmos address, and then convert it back to an EVM address. First, import the bech32-converting package and initialize the variable for the chain’s Bech32 prefix.
src/index.js
const converter = require('bech32-converting')
let bech32Address = 'init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr'

EVM Address to Cosmos Address

To convert an EVM address to a Cosmos address, use the bech32-converting package’s toHex function.
src/index.js
const hexAddress = converter('init').toHex(bech32Address)
console.log(hexAddress) // 0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636

Cosmos Address to EVM Address

To convert a Cosmos address to an EVM address, use the bech32-converting package’s fromHex function.
src/index.js
bech32Address = converter('init').toBech32(hexAddress)
console.log(bech32Address) // init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr
The full code for the script is then as follows:
src/index.js
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 you run this script, you should see the following output:
0x0901aeeD1d5144987DaE3D95AB219ff75e9bA636
init1pyq6amga29zfsldw8k26kgvl7a0fhf3kftflmr