From 14144c8c10152220d1dfa79a64d4a07a7c037f25 Mon Sep 17 00:00:00 2001 From: bruce-riley <96066700+bruce-riley@users.noreply.github.com> Date: Wed, 20 Dec 2023 14:11:12 -0600 Subject: [PATCH] Client/JS: Add new chains (#3610) --- clients/js/README.md | 20 ++-- clients/js/package-lock.json | 30 ++--- clients/js/package.json | 2 +- .../js/src/chains/generic/getOriginalAsset.ts | 9 +- .../chains/generic/getWrappedAssetAddress.ts | 9 +- clients/js/src/chains/generic/provider.ts | 7 ++ clients/js/src/cmds/submit.ts | 4 + clients/js/src/cmds/transfer.ts | 4 + clients/js/src/consts/networks.ts | 105 ++++++++++++++++++ 9 files changed, 164 insertions(+), 26 deletions(-) diff --git a/clients/js/README.md b/clients/js/README.md index 1511dfe80..67ea01a4f 100644 --- a/clients/js/README.md +++ b/clients/js/README.md @@ -255,8 +255,9 @@ Options: "avalanche", "oasis", "algorand", "aurora", "fantom", "karura", "acala", "klaytn", "celo", "near", "moonbeam", "neon", "terra2", "injective", "osmosis", "sui", "aptos", "arbitrum", "optimism", "gnosis", "pythnet", - "xpla", "btc", "base", "sei", "rootstock", "wormchain", "cosmoshub", "evmos", - "kujira", "sepolia"] + "xpla", "btc", "base", "sei", "rootstock", "scroll", "mantle", "wormchain", + "cosmoshub", "evmos", "kujira", "neutron", "celestia", "sepolia", + "arbitrum_sepolia", "base_sepolia", "optimism_sepolia"] -n, --network Network [required] [choices: "mainnet", "testnet", "devnet"] -a, --contract-address Contract to submit VAA to (override config) [string] @@ -311,15 +312,17 @@ Options: "avalanche", "oasis", "algorand", "aurora", "fantom", "karura", "acala", "klaytn", "celo", "near", "moonbeam", "neon", "terra2", "injective", "osmosis", "sui", "aptos", "arbitrum", "optimism", "gnosis", "pythnet", - "xpla", "btc", "base", "sei", "rootstock", "wormchain", "cosmoshub", "evmos", - "kujira", "sepolia"] + "xpla", "btc", "base", "sei", "rootstock", "scroll", "mantle", "wormchain", + "cosmoshub", "evmos", "kujira", "neutron", "celestia", "sepolia", + "arbitrum_sepolia", "base_sepolia", "optimism_sepolia"] --dst-chain destination chain [required] [choices: "solana", "ethereum", "terra", "bsc", "polygon", "avalanche", "oasis", "algorand", "aurora", "fantom", "karura", "acala", "klaytn", "celo", "near", "moonbeam", "neon", "terra2", "injective", "osmosis", "sui", "aptos", "arbitrum", "optimism", "gnosis", "pythnet", - "xpla", "btc", "base", "sei", "rootstock", "wormchain", "cosmoshub", "evmos", - "kujira", "sepolia"] + "xpla", "btc", "base", "sei", "rootstock", "scroll", "mantle", "wormchain", + "cosmoshub", "evmos", "kujira", "neutron", "celestia", "sepolia", + "arbitrum_sepolia", "base_sepolia", "optimism_sepolia"] --dst-addr destination address [string] [required] --token-addr token address [string] [default: native token] --amount token amount [string] [required] @@ -351,8 +354,9 @@ Positionals: "avalanche", "oasis", "algorand", "aurora", "fantom", "karura", "acala", "klaytn", "celo", "near", "moonbeam", "neon", "terra2", "injective", "osmosis", "sui", "aptos", "arbitrum", "optimism", "gnosis", "pythnet", - "xpla", "btc", "base", "sei", "rootstock", "wormchain", "cosmoshub", "evmos", - "kujira", "sepolia"] + "xpla", "btc", "base", "sei", "rootstock", "scroll", "mantle", "wormchain", + "cosmoshub", "evmos", "kujira", "neutron", "celestia", "sepolia", + "arbitrum_sepolia", "base_sepolia", "optimism_sepolia"] tx Source transaction hash [string] Options: diff --git a/clients/js/package-lock.json b/clients/js/package-lock.json index 016c30145..0216fba09 100644 --- a/clients/js/package-lock.json +++ b/clients/js/package-lock.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@celo-tools/celo-ethers-wrapper": "^0.1.0", - "@certusone/wormhole-sdk": "^0.10.5-beta.3", + "@certusone/wormhole-sdk": "^0.10.7", "@cosmjs/encoding": "^0.26.2", "@improbable-eng/grpc-web-node-http-transport": "^0.15.0", "@injectivelabs/networks": "^1.10.7", @@ -494,11 +494,11 @@ } }, "node_modules/@certusone/wormhole-sdk": { - "version": "0.10.5-beta.3", - "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.10.5-beta.3.tgz", - "integrity": "sha512-Q1IrWYQ/NPpLcuPs3J8MbUeRwBxBOTZFwLs3jahohgUFCQhGuBwhgpv02CdEYBR/iZpgaDrj2Eo3HOe3uNlYVA==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.10.7.tgz", + "integrity": "sha512-1qV/MYM7deFl+/d1kK34PzDsgDaUQrNvrUVCeUw60WQP8ySf/vWiWk5ny6kaad16d+Qv8JxmVRuHMV4GxZR9/g==", "dependencies": { - "@certusone/wormhole-sdk-proto-web": "0.0.6", + "@certusone/wormhole-sdk-proto-web": "0.0.7", "@certusone/wormhole-sdk-wasm": "^0.0.1", "@coral-xyz/borsh": "0.2.6", "@mysten/sui.js": "0.32.2", @@ -524,9 +524,9 @@ } }, "node_modules/@certusone/wormhole-sdk-proto-web": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.6.tgz", - "integrity": "sha512-LTyjsrWryefx5WmkoBP6FQ2EjLxhMExAGxLkloHUhufVQZdrbGh0htBBUviP+HaDSJBCMPMtulNFwkBJV6muqQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.7.tgz", + "integrity": "sha512-GCe1/bcqMS0Mt+hsWp4SE4NLL59pWmK0lhQXO0oqAKl0G9AuuTdudySMDF/sLc7z5H2w34bSuSrIEKvPuuSC+w==", "dependencies": { "@improbable-eng/grpc-web": "^0.15.0", "protobufjs": "^7.0.0", @@ -8367,11 +8367,11 @@ "requires": {} }, "@certusone/wormhole-sdk": { - "version": "0.10.5-beta.3", - "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.10.5-beta.3.tgz", - "integrity": "sha512-Q1IrWYQ/NPpLcuPs3J8MbUeRwBxBOTZFwLs3jahohgUFCQhGuBwhgpv02CdEYBR/iZpgaDrj2Eo3HOe3uNlYVA==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk/-/wormhole-sdk-0.10.7.tgz", + "integrity": "sha512-1qV/MYM7deFl+/d1kK34PzDsgDaUQrNvrUVCeUw60WQP8ySf/vWiWk5ny6kaad16d+Qv8JxmVRuHMV4GxZR9/g==", "requires": { - "@certusone/wormhole-sdk-proto-web": "0.0.6", + "@certusone/wormhole-sdk-proto-web": "0.0.7", "@certusone/wormhole-sdk-wasm": "^0.0.1", "@coral-xyz/borsh": "0.2.6", "@injectivelabs/networks": "1.10.12", @@ -8402,9 +8402,9 @@ } }, "@certusone/wormhole-sdk-proto-web": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.6.tgz", - "integrity": "sha512-LTyjsrWryefx5WmkoBP6FQ2EjLxhMExAGxLkloHUhufVQZdrbGh0htBBUviP+HaDSJBCMPMtulNFwkBJV6muqQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@certusone/wormhole-sdk-proto-web/-/wormhole-sdk-proto-web-0.0.7.tgz", + "integrity": "sha512-GCe1/bcqMS0Mt+hsWp4SE4NLL59pWmK0lhQXO0oqAKl0G9AuuTdudySMDF/sLc7z5H2w34bSuSrIEKvPuuSC+w==", "requires": { "@improbable-eng/grpc-web": "^0.15.0", "protobufjs": "^7.0.0", diff --git a/clients/js/package.json b/clients/js/package.json index 910afc7f5..ec6f55999 100644 --- a/clients/js/package.json +++ b/clients/js/package.json @@ -30,7 +30,7 @@ ], "dependencies": { "@celo-tools/celo-ethers-wrapper": "^0.1.0", - "@certusone/wormhole-sdk": "^0.10.5-beta.3", + "@certusone/wormhole-sdk": "^0.10.7", "@cosmjs/encoding": "^0.26.2", "@improbable-eng/grpc-web-node-http-transport": "^0.15.0", "@injectivelabs/networks": "^1.10.7", diff --git a/clients/js/src/chains/generic/getOriginalAsset.ts b/clients/js/src/chains/generic/getOriginalAsset.ts index 36b98db7c..40e3bf5b3 100644 --- a/clients/js/src/chains/generic/getOriginalAsset.ts +++ b/clients/js/src/chains/generic/getOriginalAsset.ts @@ -60,7 +60,12 @@ export const getOriginalAsset = async ( case "optimism": case "polygon": // case "rootstock": - case "sepolia": { + case "scroll": + case "mantle": + case "sepolia": + case "arbitrum_sepolia": + case "base_sepolia": + case "optimism_sepolia": { const provider = getProviderForChain(chainName, network, { rpc }); return getOriginalAssetEth( tokenBridgeAddress, @@ -113,6 +118,8 @@ export const getOriginalAsset = async ( case "cosmoshub": case "evmos": case "kujira": + case "neutron": + case "celestia": case "rootstock": throw new Error(`${chainName} not supported`); default: diff --git a/clients/js/src/chains/generic/getWrappedAssetAddress.ts b/clients/js/src/chains/generic/getWrappedAssetAddress.ts index 04046b069..53115e127 100644 --- a/clients/js/src/chains/generic/getWrappedAssetAddress.ts +++ b/clients/js/src/chains/generic/getWrappedAssetAddress.ts @@ -70,7 +70,12 @@ export const getWrappedAssetAddress = async ( case "optimism": case "polygon": // case "rootstock": - case "sepolia": { + case "scroll": + case "mantle": + case "sepolia": + case "arbitrum_sepolia": + case "base_sepolia": + case "optimism_sepolia": { const provider = getProviderForChain(chainName, network, { rpc }); return getForeignAssetEth( tokenBridgeAddress, @@ -159,6 +164,8 @@ export const getWrappedAssetAddress = async ( case "cosmoshub": case "evmos": case "kujira": + case "neutron": + case "celestia": case "rootstock": throw new Error(`${chainName} not supported`); default: diff --git a/clients/js/src/chains/generic/provider.ts b/clients/js/src/chains/generic/provider.ts index a1390c949..7784110c4 100644 --- a/clients/js/src/chains/generic/provider.ts +++ b/clients/js/src/chains/generic/provider.ts @@ -97,7 +97,12 @@ export const getProviderForChain = ( case "optimism": case "polygon": // case "rootstock": + case "scroll": + case "mantle": case "sepolia": + case "arbitrum_sepolia": + case "base_sepolia": + case "optimism_sepolia": return new ethers.providers.JsonRpcProvider(rpc) as ChainProvider; case "terra": case "terra2": @@ -157,6 +162,8 @@ export const getProviderForChain = ( case "cosmoshub": case "evmos": case "kujira": + case "neutron": + case "celestia": case "rootstock": throw new Error(`${chainName} not supported`); default: diff --git a/clients/js/src/cmds/submit.ts b/clients/js/src/cmds/submit.ts index 8d9e4eef0..270491d7d 100644 --- a/clients/js/src/cmds/submit.ts +++ b/clients/js/src/cmds/submit.ts @@ -190,6 +190,10 @@ async function executeSubmit( throw Error("Evmos is not supported yet"); } else if (chain === "kujira") { throw Error("kujira is not supported yet"); + } else if (chain === "neutron") { + throw Error("neutron is not supported yet"); + } else if (chain === "celestia") { + throw Error("celestia is not supported yet"); } else if (chain === "rootstock") { throw Error("rootstock is not supported yet"); } else { diff --git a/clients/js/src/cmds/transfer.ts b/clients/js/src/cmds/transfer.ts index 788be3a97..d7b508635 100644 --- a/clients/js/src/cmds/transfer.ts +++ b/clients/js/src/cmds/transfer.ts @@ -144,6 +144,10 @@ export const handler = async ( throw Error("evmos is not supported yet"); } else if (srcChain === "kujira") { throw Error("kujira is not supported yet"); + } else if (srcChain === "neutron") { + throw Error("neutron is not supported yet"); + } else if (srcChain === "celestia") { + throw Error("celestia is not supported yet"); } else if (srcChain === "rootstock") { throw Error("rootstock is not supported yet"); } else { diff --git a/clients/js/src/consts/networks.ts b/clients/js/src/consts/networks.ts index fec5e16ed..97239422a 100644 --- a/clients/js/src/consts/networks.ts +++ b/clients/js/src/consts/networks.ts @@ -193,6 +193,41 @@ const MAINNET = { key: undefined, chain_id: undefined, }, + neutron: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + celestia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + scroll: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + mantle: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + arbitrum_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + base_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + optimism_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, }; const TESTNET = { @@ -373,6 +408,41 @@ const TESTNET = { key: undefined, chain_id: undefined, }, + neutron: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + celestia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + scroll: { + rpc: "https://rpc.ankr.com/scroll_sepolia_testnet", + key: getEnvVar("ETH_KEY_TESTNET"), + chain_id: 534353, + }, + mantle: { + rpc: "https://rpc.ankr.com/mantle_testnet", + key: getEnvVar("ETH_KEY_TESTNET"), + chain_id: 5001, + }, + arbitrum_sepolia: { + rpc: "https://arbitrum-sepolia.publicnode.com", + key: getEnvVar("ETH_KEY_TESTNET"), + chain_id: 421614, + }, + base_sepolia: { + rpc: "https://sepolia.base.org", + key: getEnvVar("ETH_KEY_TESTNET"), + chain_id: 84532, + }, + optimism_sepolia: { + rpc: "https://rpc.ankr.com/optimism_sepolia", + key: getEnvVar("ETH_KEY_TESTNET"), + chain_id: 11155420, + }, }; const DEVNET = { @@ -530,6 +600,41 @@ const DEVNET = { rpc: undefined, key: undefined, }, + neutron: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + celestia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + scroll: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + mantle: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + arbitrum_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + base_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, + optimism_sepolia: { + rpc: undefined, + key: undefined, + chain_id: undefined, + }, }; /**