diff --git a/sdk/js/src/cosmos/address.ts b/sdk/js/src/cosmos/address.ts new file mode 100644 index 000000000..340f253a3 --- /dev/null +++ b/sdk/js/src/cosmos/address.ts @@ -0,0 +1,8 @@ +import { bech32 } from "bech32"; + +export function canonicalAddress(humanAddress: string) { + return new Uint8Array(bech32.fromWords(bech32.decode(humanAddress).words)); +} +export function humanAddress(hrp: string, canonicalAddress: Uint8Array) { + return bech32.encode(hrp, bech32.toWords(canonicalAddress)); +} diff --git a/sdk/js/src/cosmos/index.ts b/sdk/js/src/cosmos/index.ts new file mode 100644 index 000000000..ce667bbed --- /dev/null +++ b/sdk/js/src/cosmos/index.ts @@ -0,0 +1 @@ +export * from "./address"; diff --git a/sdk/js/src/index.ts b/sdk/js/src/index.ts index 1715c3d00..51e273d6e 100644 --- a/sdk/js/src/index.ts +++ b/sdk/js/src/index.ts @@ -1,3 +1,4 @@ +export * from "./cosmos"; export * from "./ethers-contracts"; export * from "./solana"; export * from "./terra"; @@ -6,6 +7,7 @@ export * from "./utils"; export * from "./bridge"; export * from "./token_bridge"; +export * as cosmos from "./cosmos"; export * as ethers_contracts from "./ethers-contracts"; export * as solana from "./solana"; export * as terra from "./terra"; diff --git a/sdk/js/src/terra/address.ts b/sdk/js/src/terra/address.ts index e7730f7f8..ce5aff4f0 100644 --- a/sdk/js/src/terra/address.ts +++ b/sdk/js/src/terra/address.ts @@ -1,12 +1,4 @@ import { zeroPad } from "@ethersproject/bytes"; -import { bech32 } from "bech32"; - -export function canonicalAddress(humanAddress: string) { - return new Uint8Array(bech32.fromWords(bech32.decode(humanAddress).words)); -} -export function humanAddress(canonicalAddress: Uint8Array) { - return bech32.encode("terra", bech32.toWords(canonicalAddress)); -} // from https://github.com/terra-money/station/blob/dca7de43958ce075c6e46605622203b9859b0e14/src/lib/utils/is.ts#L12 export const isNativeTerra = (string = "") => diff --git a/sdk/js/src/token_bridge/getOriginalAsset.ts b/sdk/js/src/token_bridge/getOriginalAsset.ts index e34f338cb..fc104279b 100644 --- a/sdk/js/src/token_bridge/getOriginalAsset.ts +++ b/sdk/js/src/token_bridge/getOriginalAsset.ts @@ -7,7 +7,8 @@ import { decodeLocalState } from "../algorand"; import { buildTokenId } from "../cosmwasm/address"; import { TokenImplementation__factory } from "../ethers-contracts"; import { importTokenWasm } from "../solana/wasm"; -import { buildNativeId, canonicalAddress, isNativeDenom } from "../terra"; +import { buildNativeId, isNativeDenom } from "../terra"; +import { canonicalAddress } from "../cosmos"; import { ChainId, ChainName, diff --git a/sdk/js/src/utils/array.test.ts b/sdk/js/src/utils/array.test.ts index b060e6170..27cce9fc3 100644 --- a/sdk/js/src/utils/array.test.ts +++ b/sdk/js/src/utils/array.test.ts @@ -1,6 +1,6 @@ import { zeroPad } from "ethers/lib/utils"; -import { canonicalAddress } from "../terra"; import { tryUint8ArrayToNative } from "./array"; +import { canonicalAddress } from "../cosmos"; test("terra address conversion", () => { const human = "terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v"; diff --git a/sdk/js/src/utils/array.ts b/sdk/js/src/utils/array.ts index 287cb6fda..0baa55226 100644 --- a/sdk/js/src/utils/array.ts +++ b/sdk/js/src/utils/array.ts @@ -6,8 +6,9 @@ import { nativeStringToHexAlgorand, uint8ArrayToNativeStringAlgorand, } from "../algorand"; +import { canonicalAddress, humanAddress } from "../cosmos" import { buildTokenId } from "../cosmwasm/address"; -import { canonicalAddress, humanAddress, isNativeDenom } from "../terra"; +import { isNativeDenom } from "../terra"; import { ChainId, ChainName, @@ -82,9 +83,9 @@ export const tryUint8ArrayToNative = ( } else { if (chainId === CHAIN_ID_TERRA2 && !isLikely20ByteTerra(h)) { // terra 2 has 32 byte addresses for contracts and 20 for wallets - return humanAddress(a); + return humanAddress("terra", a); } - return humanAddress(a.slice(-20)); + return humanAddress("terra", a.slice(-20)); } } else if (chainId === CHAIN_ID_ALGORAND) { return uint8ArrayToNativeStringAlgorand(a);