sdk/js: Add wormhole chain

This commit is contained in:
Chirantan Ekbote 2022-07-28 18:17:58 +09:00 committed by Evan Gray
parent 13a18d2f7e
commit f64703c815
3 changed files with 33 additions and 1 deletions

View File

@ -1,6 +1,6 @@
import { zeroPad } from "ethers/lib/utils";
import { tryUint8ArrayToNative } from "./array";
import { canonicalAddress } from "../cosmos";
import { tryUint8ArrayToNative, tryNativeToHexString } from "./array";
test("terra address conversion", () => {
const human = "terra1x46rqay4d3cssq8gxxvqz8xt6nwlz4td20k38v";
@ -18,3 +18,12 @@ test("terra address conversion", () => {
expect(nativeContract).toBe(nativeContract);
// TODO: native to hex is wrong, which we should correct
});
test("wormchain address conversion", () => {
const human = "wormhole1ap5vgur5zlgys8whugfegnn43emka567dtq0jl";
const canonical = "000000000000000000000000e868c4707417d0481dd7e213944e758e776ed35e";
const native = tryUint8ArrayToNative(new Uint8Array(Buffer.from(canonical, "hex")), "wormholechain");
expect(native).toBe(human);
expect(tryNativeToHexString(human, "wormholechain")).toBe(canonical)
});

View File

@ -21,6 +21,7 @@ import {
CHAIN_ID_SOLANA,
CHAIN_ID_TERRA,
CHAIN_ID_TERRA2,
CHAIN_ID_WORMHOLE_CHAIN,
CHAIN_ID_UNSET,
coalesceChainId,
isEVMChain,
@ -89,6 +90,9 @@ export const tryUint8ArrayToNative = (
}
} else if (chainId === CHAIN_ID_ALGORAND) {
return uint8ArrayToNativeStringAlgorand(a);
} else if (chainId == CHAIN_ID_WORMHOLE_CHAIN) {
// wormhole-chain addresses are always 20 bytes.
return humanAddress("wormhole", a.slice(-20));
} else if (chainId === CHAIN_ID_NEAR) {
throw Error("uint8ArrayToNative: Near not supported yet.");
} else if (chainId === CHAIN_ID_INJECTIVE) {
@ -207,6 +211,8 @@ export const tryNativeToHexString = (
return buildTokenId(address);
} else if (chainId === CHAIN_ID_ALGORAND) {
return nativeStringToHexAlgorand(address);
} else if (chainId == CHAIN_ID_WORMHOLE_CHAIN) {
return uint8ArrayToHex(zeroPad(canonicalAddress(address), 32));
} else if (chainId === CHAIN_ID_NEAR) {
throw Error("hexToNativeString: Near not supported yet.");
} else if (chainId === CHAIN_ID_INJECTIVE) {

View File

@ -27,6 +27,7 @@ export const CHAINS = {
gnosis: 25,
pythnet: 26,
ropsten: 10001,
wormholechain: 3104,
} as const;
export type ChainName = keyof typeof CHAINS;
@ -209,6 +210,11 @@ const MAINNET = {
token_bridge: undefined,
nft_bridge: undefined,
},
wormholechain: {
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
};
const TESTNET = {
@ -353,6 +359,11 @@ const TESTNET = {
token_bridge: "0xF174F9A837536C449321df1Ca093Bb96948D5386",
nft_bridge: "0x2b048Da40f69c8dc386a56705915f8E966fe1eba",
},
wormholechain: {
core: undefined,
token_bridge: undefined,
nft_bridge: undefined,
},
};
const DEVNET = {
@ -497,6 +508,11 @@ const DEVNET = {
token_bridge: undefined,
nft_bridge: undefined,
},
wormholechain: {
core: "wormhole1ap5vgur5zlgys8whugfegnn43emka567dtq0jl",
token_bridge: "wormhole1zugu6cajc4z7ue29g9wnes9a5ep9cs7yu7rn3z",
nft_bridge: undefined,
},
};
/**
@ -565,6 +581,7 @@ export const CHAIN_ID_OPTIMISM = CHAINS["optimism"];
export const CHAIN_ID_GNOSIS = CHAINS["gnosis"];
export const CHAIN_ID_PYTHNET = CHAINS["pythnet"];
export const CHAIN_ID_ETHEREUM_ROPSTEN = CHAINS["ropsten"];
export const CHAIN_ID_WORMHOLE_CHAIN = CHAINS["wormholechain"];
// This inverts the [[CHAINS]] object so that we can look up a chain by id
export type ChainIdToName = {