From 9112d703d6412accf901d72895f7cec124f5f49a Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Mon, 19 Feb 2024 21:46:36 -0500 Subject: [PATCH 01/85] feat: add fraxtal contracts (#173) --- axelar-chains-config/info/mainnet.json | 44 ++++++++++++++++++++++++-- package-lock.json | 13 ++++---- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 5d9ad8a7..eb943efb 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2020,7 +2020,19 @@ "gasLimit": 8000000 }, "contracts": { - "AxelarGateway": {}, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-fraxtal-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, "AxelarGasService": { "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -2033,10 +2045,36 @@ "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821", "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f", "0x027c1882B975E2cd771AE068b0389FA38B9dda73" - ] + ], + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "InterchainGovernance": { - "minimumTimeDelay": 604800 + "minimumTimeDelay": 604800, + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "Operators": { + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "address": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" } }, "explorer": { diff --git a/package-lock.json b/package-lock.json index 037bac24..0f962ba0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@axelar-network/interchain-token-service": "1.2.1", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", - "@ledgerhq/hw-transport-node-hid": "^6.27.21", "axios": "^1.6.2", "path": "^0.12.7" }, @@ -5651,9 +5650,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "funding": [ { "type": "individual", @@ -10693,9 +10692,9 @@ } }, "node_modules/undici": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.0.tgz", - "integrity": "sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" From 2656b5c7ded64482e672197381f650f55bcf287c Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 20 Feb 2024 20:03:26 -0500 Subject: [PATCH 02/85] chore: add fraxtal mainnet gas service (#174) * chore: add fraxtal mainnet gas service * prettier --- axelar-chains-config/info/mainnet.json | 6 +++++- evm/deploy-gateway-v6.2.x.js | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index eb943efb..dd334e7d 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2034,7 +2034,11 @@ "salt": "AxelarGateway v6.2" }, "AxelarGasService": { - "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" + "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", + "salt": "AxelarGasService", + "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", + "implementation": "0x42E0fBA4785D23643B9F596774b3b6CAc0d40640", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "Multisig": { "threshold": 3, diff --git a/evm/deploy-gateway-v6.2.x.js b/evm/deploy-gateway-v6.2.x.js index 2ca09da0..7398e633 100644 --- a/evm/deploy-gateway-v6.2.x.js +++ b/evm/deploy-gateway-v6.2.x.js @@ -81,7 +81,7 @@ function getProxyParams(governance, mintLimiter) { } async function deploy(config, chain, options) { - const { privateKey, reuseProxy, reuseHelpers, verify, yes, predictOnly } = options; + const { privateKey, reuseProxy, reuseHelpers, reuseAuth, verify, yes, predictOnly } = options; const contractName = 'AxelarGateway'; @@ -176,7 +176,7 @@ async function deploy(config, chain, options) { if (options.skipExisting && contractConfig.authModule) { auth = authFactory.attach(contractConfig.authModule); - } else if (reuseProxy && reuseHelpers) { + } else if (reuseProxy && (reuseHelpers || reuseAuth)) { auth = authFactory.attach(await gateway.authModule()); } else { printInfo(`Deploying auth contract`); @@ -279,7 +279,7 @@ async function deploy(config, chain, options) { }); } - if (!(reuseProxy && reuseHelpers)) { + if (!(reuseProxy && (reuseHelpers || reuseAuth))) { printInfo('Transferring auth ownership'); await auth.transferOwnership(gateway.address, { gasLimit: 5e6, ...gasOptions }).then((tx) => tx.wait(chain.confirmations)); printInfo('Transferred auth ownership. All done!'); @@ -535,6 +535,7 @@ async function programHandler() { program.addOption( new Option('--reuseHelpers', 'reuse helper auth and token deployer contract modules for new implementation deployment'), ); + program.addOption(new Option('--reuseAuth', 'reuse auth module contract for new implementation deployment')); program.addOption(new Option('--ignoreError', 'Ignore deployment errors and proceed to next chain')); program.addOption(new Option('--governance ', 'governance address').env('GOVERNANCE')); program.addOption(new Option('--mintLimiter ', 'mint limiter address').env('MINT_LIMITER')); From c3d54b95311d413fa8ba83c73df0f014d274c0b6 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Thu, 22 Feb 2024 17:41:07 +0530 Subject: [PATCH 03/85] refactor: add id property in optimism-sepolia config (#176) --- axelar-chains-config/info/testnet.json | 1 + 1 file changed, 1 insertion(+) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 83ed847a..0fa2320d 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2096,6 +2096,7 @@ }, "optimism-sepolia": { "name": "Optimism-Sepolia", + "id": "optimism-sepolia", "axelarId": "optimism-sepolia", "chainId": 11155420, "rpc": "https://sepolia.optimism.io", From 1312e6cb9cca0e6618558933c40c347111323b35 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Fri, 23 Feb 2024 00:12:16 -0500 Subject: [PATCH 04/85] docs: clarify multicall decode util example (#177) --- evm/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/evm/README.md b/evm/README.md index 3e340052..888e0c08 100644 --- a/evm/README.md +++ b/evm/README.md @@ -89,11 +89,10 @@ To decode function calldata: 1. Run the command below with the calldata being decoded ```bash - node evm/decode.js -c CONTRACT_NAME --calldata [calldata] + node evm/decode.js -c [contractName] --calldata [calldata] ``` -2. The resulting decoded function call and arguments will be printed to the console. - Example output for multicall data with `deployInterchainToken` and `interchainTransfer` calls: +2. Example output for multicall data with `deployInterchainToken` and `interchainTransfer` calls. `contractName` can be `InterchainTokenService` or `InterchainTokenFactory` depending on which contract the ITS related method is for. ``` Decoded calldata: From f2608d94ae5117bf69231fc0f7c015c229c0374e Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Tue, 27 Feb 2024 16:04:34 +0530 Subject: [PATCH 05/85] feat: add config for Blast Sepolia (#178) * feat: add config for Blast Sepolia * refactor: updates chain names for blast and base --- axelar-chains-config/info/testnet.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 0fa2320d..a02dd6d4 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2112,7 +2112,7 @@ } }, "base-sepolia": { - "name": "Base Sepolia", + "name": "Base-Sepolia", "id": "base-sepolia", "axelarId": "base-sepolia", "chainId": 84532, @@ -2127,6 +2127,23 @@ "url": "https://sepolia-explorer.base.org", "api": "https://api-sepolia.basescan.org/api" } + }, + "blast-sepolia": { + "name": "Blast-Sepolia", + "id": "blast-sepolia", + "axelarId": "blast-sepolia", + "chainId": 168587773, + "rpc": "https://sepolia.blast.io/", + "tokenSymbol": "ETH", + "gasOptions": { + "gasLimit": 8000000 + }, + "confirmations": 2, + "explorer": { + "name": "Blastscan", + "url": "https://testnet.blastscan.io", + "api": "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" + } } }, "axelar": { From a49c61ba115636f30eb37090ed4c672e2d65d7e1 Mon Sep 17 00:00:00 2001 From: Canh Trinh Date: Mon, 4 Mar 2024 18:12:46 -0500 Subject: [PATCH 06/85] feat: fraxtal testnet configurations (#163) * feat: initial config for testnet fraxtal * chore: update frax config * chore: adding basic setup for interchain gov and multisig contracts * remove extra prints * deploy contracts * refactor: update fraxtal testnet rpc * chore: add explorer details for fraxtal --------- Co-authored-by: Milap Sheth Co-authored-by: blockchainguyy Co-authored-by: Milap Sheth --- axelar-chains-config/info/testnet.json | 86 ++++++++++++++++++++++++++ evm/deploy-gateway-v4.3.x.js | 1 - evm/deploy-gateway-v6.2.x.js | 1 - evm/min-deposit-proposal.js | 2 - evm/multisig.js | 2 - evm/ownership.js | 1 - evm/send-tokens.js | 4 +- 7 files changed, 87 insertions(+), 10 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index a02dd6d4..09e4a58e 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2094,6 +2094,92 @@ "url": "" } }, + "fraxtal": { + "name": "Fraxtal", + "id": "fraxtal", + "axelarId": "fraxtal", + "chainId": 2522, + "rpc": "https://rpc.testnet.frax.com", + "tokenSymbol": "frxETH", + "gasOptions": { + "gasLimit": 8000000 + }, + "contracts": { + "InterchainGovernance": { + "minimumTimeDelay": 300, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" + }, + "Multisig": { + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-fraxtal-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + } + }, + "explorer": { + "name": "Fraxscan", + "url": "https://holesky.fraxscan.com", + "api": "https://api-holesky.fraxscan.com/api" + } + }, "optimism-sepolia": { "name": "Optimism-Sepolia", "id": "optimism-sepolia", diff --git a/evm/deploy-gateway-v4.3.x.js b/evm/deploy-gateway-v4.3.x.js index 71f02df2..1e4ab5fa 100644 --- a/evm/deploy-gateway-v4.3.x.js +++ b/evm/deploy-gateway-v4.3.x.js @@ -265,7 +265,6 @@ async function upgrade(config, options) { const implementationCodehash = await getBytecodeHash(contractConfig.implementation, chainName, provider); const setupParams = '0x'; - printInfo('Chain', chain.name); printInfo('Gateway Proxy', gateway.address); printInfo('Current implementation', await gateway.implementation()); printInfo('Upgrading to implementation', contractConfig.implementation); diff --git a/evm/deploy-gateway-v6.2.x.js b/evm/deploy-gateway-v6.2.x.js index 7398e633..39c1c249 100644 --- a/evm/deploy-gateway-v6.2.x.js +++ b/evm/deploy-gateway-v6.2.x.js @@ -459,7 +459,6 @@ async function upgrade(_, chain, options) { setupParams = getProxyParams(governance, mintLimiter); } - printInfo('Chain', chain.name); printInfo('Gateway Proxy', gateway.address); if (!offline) { diff --git a/evm/min-deposit-proposal.js b/evm/min-deposit-proposal.js index adb6a80d..15529f21 100644 --- a/evm/min-deposit-proposal.js +++ b/evm/min-deposit-proposal.js @@ -9,8 +9,6 @@ const values = []; async function processCommand(_, chain, options) { const { address, deposit } = options; - printInfo('Chain', chain.name); - const contracts = chain.contracts; const contractConfig = contracts.InterchainGovernance; diff --git a/evm/multisig.js b/evm/multisig.js index 564bce46..e38cdb61 100644 --- a/evm/multisig.js +++ b/evm/multisig.js @@ -117,8 +117,6 @@ async function processCommand(_, chain, options) { const rpc = chain.rpc; const provider = getDefaultProvider(rpc); - printInfo('Chain', chain.name); - const wallet = await getWallet(privateKey, provider, options); const { address: walletAddress } = await printWalletInfo(wallet, options); diff --git a/evm/ownership.js b/evm/ownership.js index 3b04b3ce..0d481f2a 100644 --- a/evm/ownership.js +++ b/evm/ownership.js @@ -35,7 +35,6 @@ async function processCommand(options, chain) { const rpc = chain.rpc; const provider = getDefaultProvider(rpc); - printInfo('Chain', chain.name); printInfo('Contract name', contractName); const wallet = new Wallet(privateKey, provider); diff --git a/evm/send-tokens.js b/evm/send-tokens.js index e8f03bf3..21ef5c2a 100644 --- a/evm/send-tokens.js +++ b/evm/send-tokens.js @@ -47,8 +47,6 @@ async function processCommand(_, chain, options) { } } - printInfo('Chain', chain.name); - const gasOptions = await getGasOptions(chain, options); if ( @@ -107,7 +105,7 @@ if (require.main === module) { program.addOption(new Option('-r, --recipients ', 'comma-separated recipients of tokens').makeOptionMandatory(true)); program.addOption(new Option('-a, --amount ', 'amount to transfer (in terms of ETH)')); - program.addOption(new Option('--gasUsage ', 'amount to transfer based on gas usage and gas price').default('5000000')); + program.addOption(new Option('--gasUsage ', 'amount to transfer based on gas usage and gas price').default('50000000')); program.addOption(new Option('--offline', 'Run in offline mode')); program.addOption(new Option('--nonceOffset ', 'The value to add in local nonce if it deviates from actual wallet nonce')); From ec880ca8663f5b40ffaef3756b62c5666b13ff41 Mon Sep 17 00:00:00 2001 From: Canh Trinh Date: Mon, 4 Mar 2024 19:04:57 -0500 Subject: [PATCH 07/85] feat: add template config for mantle sepolia (#181) --- axelar-chains-config/info/testnet.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 09e4a58e..90c72af7 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2230,6 +2230,29 @@ "url": "https://testnet.blastscan.io", "api": "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" } + }, + "mantle-sepolia": { + "name": "Mantle Sepolia", + "id": "mantle-sepolia", + "chainId": 5003, + "rpc": "https://rpc.sepolia.mantle.xyz", + "tokenSymbol": "MNT", + "gasOptions": { + "gasLimit": 50000000000 + }, + "contracts": { + "InterchainGovernance": { + "minimumTimeDelay": 300 + }, + "Multisig": { + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ] + } + } } }, "axelar": { From 3cffaf3917f02330b4926f2b642f689b37e44f89 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 5 Mar 2024 00:35:34 -0500 Subject: [PATCH 08/85] feat: deploy contracts to L2 sepolia testnets (#182) * feat: deploy contracts to L2 sepolia testnets * fix names --- axelar-chains-config/info/testnet.json | 250 ++++++++++++++++++++++++- 1 file changed, 243 insertions(+), 7 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 90c72af7..88d667ad 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1995,8 +1995,39 @@ "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", "salt": "Create3Deployer" }, - "InterchainTokenService": { - "skip": true + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-arbitrum-sepolia-genesis" + ], + "address": "0xe1cE95479C84e9809269227C7F8524aE051Ae77a", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xb9902bc55605b8b80c8347c46fda6b3831ab006e33907a17f8aa67ab451deca6", + "authModule": "0x24C2b56128fF8E7bFaD578ABefB0fc7Dfa9ba358", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "InterchainGovernance": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Multisig": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" } }, "explorer": { @@ -2195,6 +2226,57 @@ "name": "Opscan", "url": "https://sepolia-optimistic.etherscan.io", "api": "https://api-sepolia-optimistic.etherscan.io/api" + }, + "contracts": { + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-optimism-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "InterchainGovernance": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Multisig": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + } } }, "base-sepolia": { @@ -2205,13 +2287,64 @@ "rpc": "https://sepolia.base.org", "tokenSymbol": "ETH", "gasOptions": { - "gasLimit": 3000000 + "gasLimit": 8000000 }, "confirmations": 2, "explorer": { "name": "Basescan", "url": "https://sepolia-explorer.base.org", "api": "https://api-sepolia.basescan.org/api" + }, + "contracts": { + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-base-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "InterchainGovernance": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Multisig": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + } } }, "blast-sepolia": { @@ -2229,20 +2362,79 @@ "name": "Blastscan", "url": "https://testnet.blastscan.io", "api": "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" + }, + "contracts": { + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-blast-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "InterchainGovernance": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Multisig": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + } } }, "mantle-sepolia": { - "name": "Mantle Sepolia", + "name": "Mantle-Sepolia", "id": "mantle-sepolia", + "axelarId": "mantle-sepolia", "chainId": 5003, "rpc": "https://rpc.sepolia.mantle.xyz", "tokenSymbol": "MNT", + "confirmations": 2, "gasOptions": { - "gasLimit": 50000000000 + "gasLimit": 10000000000 + }, + "explorer": { + "name": "Mantle Explorer", + "url": "https://explorer.sepolia.mantle.xyz", + "api": "https://explorer.sepolia.mantle.xyz/api" }, "contracts": { "InterchainGovernance": { - "minimumTimeDelay": 300 + "minimumTimeDelay": 300, + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "Multisig": { "threshold": 2, @@ -2250,7 +2442,51 @@ "0x15837c1318AB83d99b19392Fd4811813f520d843", "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ] + ], + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-mantle-sepolia-genesis" + ], + "address": "0xC8D18F85cB0Cee5C95eC29c69DeaF6cea972349c", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0x262d347314eb56d4331930c08d038205062766c5783f6e34809b1da803d01bf9", + "authModule": "0xC4FBd54fF3876377dE2B2F9471e581B44eaD1Ea9", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" } } } From 91d4e4fba849af07e149bcd8a514a6bb1a634135 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 5 Mar 2024 00:38:36 -0500 Subject: [PATCH 09/85] chore: remove old goerli L2s (#183) --- axelar-chains-config/info/testnet.json | 556 ------------------------- 1 file changed, 556 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 88d667ad..27cf98ca 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -669,117 +669,6 @@ "api": "https://api-testnet.bscscan.com/api" } }, - "arbitrum": { - "name": "Arbitrum", - "id": "arbitrum", - "axelarId": "arbitrum", - "chainId": 421613, - "rpc": "https://goerli-rollup.arbitrum.io/rpc", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "implementationCodehash": "0x940360094cd542573bfdb328d5408276843f4c99391518eb900c37b0df099fde", - "authModule": "0x6e0e885F0957086e173D95aAA08191a6c1Ac860d", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xb6241272C569767072e0587098415DF6BA0aaEe9", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b" - }, - "gasOptions": { - "gasLimit": 30000000 - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Arbiscan", - "url": "https://goerli.arbiscan.io", - "api": "https://api-goerli.arbiscan.io/api" - } - }, "celo": { "name": "Celo", "id": "celo", @@ -998,229 +887,6 @@ "url": "https://explorer.evm-alpha.kava.io" } }, - "optimism": { - "name": "Optimism", - "id": "optimism", - "axelarId": "optimism", - "chainId": 420, - "rpc": "https://optimism-goerli.public.blastapi.io", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "implementationCodehash": "0x940360094cd542573bfdb328d5408276843f4c99391518eb900c37b0df099fde", - "authModule": "0x6e0e885F0957086e173D95aAA08191a6c1Ac860d", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xb6241272C569767072e0587098415DF6BA0aaEe9", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "name": "Opscan", - "url": "https://goerli-optimism.etherscan.io", - "api": "https://api-goerli-optimism.etherscan.io/api" - }, - "gasOptions": { - "gasLimit": 8000000 - }, - "confirmations": 3 - }, - "base": { - "name": "Base", - "id": "base", - "axelarId": "base", - "chainId": 84531, - "rpc": "https://goerli.base.org", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "implementationCodehash": "0x940360094cd542573bfdb328d5408276843f4c99391518eb900c37b0df099fde", - "authModule": "0x6e0e885F0957086e173D95aAA08191a6c1Ac860d", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xd883C8bA523253c93d97b6C7a5087a7B5ff23d79", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Basescan", - "url": "https://goerli.basescan.org", - "api": "https://api-goerli.basescan.org/api" - }, - "gasOptions": { - "gasLimit": 8000000 - } - }, "filecoin": { "name": "Filecoin", "id": "filecoin-2", @@ -1444,228 +1110,6 @@ }, "confirmations": 4 }, - "polygon-zkevm": { - "name": "Polygon-zkEVM", - "id": "polygon-zkevm", - "axelarId": "polygon-zkevm", - "chainId": 1442, - "rpc": "https://rpc.public.zkevm-test.net", - "tokenSymbol": "ETH", - "contracts": { - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "AxelarGateway": { - "address": "0x999117D44220F33e0441fbAb2A5aDB8FF485c54D", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "authModule": "0xcbf7900138EBc9CdB3E933B9E6F7071587BD6cb8", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementationCodehash": "0xf9c0cf2181e91d9a39b38b9b1b32a5f170ddd5b6361b9ae5489224cf65d214be", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "salt": "AxelarDepositService", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xd883C8bA523253c93d97b6C7a5087a7B5ff23d79", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0x560e0fd29846f1419f347486d7078f378fc55231e275939c6fd837fd9f1a1df1", - "predeployCodehash": "0xd2e447f58ed8d9d3e7e4f0221882d65bf8d3cffba898bc0430e5478ef39855c6" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x010ce06f3c97c3ff3bec73d44d812abba4b84b0013ee83ffc810ed91b21d318b", - "predeployCodehash": "0xf2b4323e54849b56a7570de2bbb3e6de15e6bf681cf395bf2e1f9d700a123663", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x9839c528d6ad961c2f985354fd14dd602ef9781f5adbe71d482a04153bb25ccf", - "predeployCodehash": "0x9839c528d6ad961c2f985354fd14dd602ef9781f5adbe71d482a04153bb25ccf", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.0.0" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.0.0", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Polygonscan", - "url": "https://testnet-zkevm.polygonscan.com", - "api": "https://api-testnet-zkevm.polygonscan.com/api" - }, - "confirmations": 2, - "gasOptions": { - "gasLimit": 6000000 - } - }, - "mantle": { - "name": "Mantle", - "id": "mantle", - "axelarId": "mantle", - "chainId": 5001, - "rpc": "https://rpc.testnet.mantle.xyz", - "tokenSymbol": "MNT", - "contracts": { - "AxelarGateway": { - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "implementationCodehash": "0xa3a15aa7877eb4fc171c463cabda097d4bf37cfac04c177c1a26ac127c23b6c4", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "salt": "AxelarDepositService", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xd883C8bA523253c93d97b6C7a5087a7B5ff23d79", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "salt": "Create3Deployer", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.0.0" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.0.0", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Mantle Explorer", - "url": "https://explorer.testnet.mantle.xyz", - "api": "https://explorer.testnet.mantle.xyz/api" - }, - "gasOptions": { - "gasLimit": 8000000 - }, - "skipRevertTests": true - }, "scroll": { "name": "Scroll", "id": "scroll", From c0f3da28ea4109c1f6875bb338db35c991eb8db3 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Tue, 5 Mar 2024 12:09:21 +0530 Subject: [PATCH 10/85] feat: add blast mainnet config (#179) * feat: add blast mainnet config * refactor: correct the blast sepolia testnet api * chore: add properties AxelarGateway and AxelaGasService in contracts * feat: deploy Blast mainnet contracts * add blast rpc --------- Co-authored-by: Milap Sheth --- axelar-chains-config/info/mainnet.json | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index dd334e7d..582cfe85 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2086,6 +2086,75 @@ "url": "https://fraxscan.com", "api": "https://api.fraxscan.com/api" } + }, + "blast": { + "name": "Blast", + "id": "blast", + "axelarId": "blast", + "chainId": 81457, + "rpc": "https://rpc.blast.io", + "tokenSymbol": "ETH", + "contracts": { + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-blast-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "InterchainGovernance": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Multisig": { + "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "Operators": { + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "address": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", + "salt": "AxelarGasService", + "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", + "implementation": "0xE622B1D44F5061DB10ABa2594F1A8eb2DC1fC1d4", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + } + }, + "gasOptions": { + "gasLimit": 8000000 + }, + "confirmations": 2, + "explorer": { + "name": "Blastscan", + "url": "https://www.blastscan.io", + "api": "https://api.routescan.io/v2/network/mainnet/evm/81457/" + } } }, "axelar": { From 1c071c3fb7e9cad7ef246df625847bd308a5fb57 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 5 Mar 2024 01:47:58 -0500 Subject: [PATCH 11/85] fix: update blast explorer api (#184) --- axelar-chains-config/info/mainnet.json | 4 ++-- axelar-chains-config/info/testnet.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 582cfe85..25c1abe7 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2152,8 +2152,8 @@ "confirmations": 2, "explorer": { "name": "Blastscan", - "url": "https://www.blastscan.io", - "api": "https://api.routescan.io/v2/network/mainnet/evm/81457/" + "url": "https://blastscan.io", + "api": "https://api.blastscan.io/api" } } }, diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 27cf98ca..2bbeb397 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1805,7 +1805,7 @@ "explorer": { "name": "Blastscan", "url": "https://testnet.blastscan.io", - "api": "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" + "api": "https://api.testnet.blastscan.io/api" }, "contracts": { "ConstAddressDeployer": { From 3b11eb83b14efce4eb712e09026858e0ed99ed8f Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 5 Mar 2024 02:47:48 -0500 Subject: [PATCH 12/85] feat: deploy fraxtal ITS and governance contracts (#185) * feat: deploy fraxtal ITS and governance contracts * prettier --- axelar-chains-config/info/mainnet.json | 47 ++++++++++++++++++++++---- axelar-chains-config/info/testnet.json | 19 +++++++++++ evm/nonces.json | 8 +++++ 3 files changed, 68 insertions(+), 6 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 25c1abe7..cfbf9b0d 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2019,6 +2019,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "explorer": { + "name": "Fraxscan", + "url": "https://fraxscan.com", + "api": "https://api.fraxscan.com/api" + }, "contracts": { "AxelarGateway": { "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", @@ -2050,11 +2055,23 @@ "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f", "0x027c1882B975E2cd771AE068b0389FA38B9dda73" ], - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "InterchainGovernance": { "minimumTimeDelay": 604800, - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x70cb562f5d856fab1b0eee1e91dfcbb568be85f28e184c6a096b4c63b145a6c2", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "ConstAddressDeployer": { "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", @@ -2079,12 +2096,30 @@ "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", "salt": "Operators" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, - "explorer": { - "name": "Fraxscan", - "url": "https://fraxscan.com", - "api": "https://api.fraxscan.com/api" + "staticGasOptions": { + "gasLimit": 3000000, + "gasPrice": 5001270 } }, "blast": { diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 2bbeb397..6a27fa47 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1647,6 +1647,25 @@ "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", "salt": "Operators" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, "explorer": { diff --git a/evm/nonces.json b/evm/nonces.json index 6a59a4ba..55f7b38a 100644 --- a/evm/nonces.json +++ b/evm/nonces.json @@ -127,6 +127,14 @@ "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821": 0, "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f": 0, "0x027c1882B975E2cd771AE068b0389FA38B9dda73": 0 + }, + "fraxtal": { + "0x3f5876a2b06E54949aB106651Ab6694d0289b2b4": 0, + "0x9256Fd872118ed3a97754B0fB42c15015d17E0CC": 0, + "0x1486157d505C7F7E546aD00E3E2Eee25BF665C9b": 0, + "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821": 0, + "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f": 0, + "0x027c1882B975E2cd771AE068b0389FA38B9dda73": 0 } }, "testnet": { From e4ba59b6b167b458a7465d6f700cd2cf253f428a Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Wed, 6 Mar 2024 07:07:30 -0500 Subject: [PATCH 13/85] feat: deploy L2 testnet and blast governance and ITS contracts (#186) * feat: deploy L2 testnet and blast governance and ITS contracts * increase binance testnet gas adjustment * prettier --- axelar-chains-config/info/mainnet.json | 49 +++++- axelar-chains-config/info/testnet.json | 212 +++++++++++++++++++++++-- evm/deploy-its.js | 2 +- evm/its.js | 19 ++- evm/nonces.json | 8 + 5 files changed, 268 insertions(+), 22 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index cfbf9b0d..93ff2c10 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2159,10 +2159,32 @@ "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "minimumTimeDelay": 604800, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x70cb562f5d856fab1b0eee1e91dfcbb568be85f28e184c6a096b4c63b145a6c2", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "threshold": 3, + "signers": [ + "0x3f5876a2b06E54949aB106651Ab6694d0289b2b4", + "0x9256Fd872118ed3a97754B0fB42c15015d17E0CC", + "0x1486157d505C7F7E546aD00E3E2Eee25BF665C9b", + "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821", + "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f", + "0x027c1882B975E2cd771AE068b0389FA38B9dda73" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "Operators": { "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", @@ -2179,6 +2201,25 @@ "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", "implementation": "0xE622B1D44F5061DB10ABa2594F1A8eb2DC1fC1d4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, "gasOptions": { @@ -2189,6 +2230,10 @@ "name": "Blastscan", "url": "https://blastscan.io", "api": "https://api.blastscan.io/api" + }, + "staticGasOptions": { + "gasLimit": 3000000, + "gasPrice": 5641495 } } }, diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 6a27fa47..9a6e99d6 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -566,8 +566,11 @@ "id": "binance", "axelarId": "binance", "chainId": 97, - "rpc": "https://bsc-testnet.publicnode.com", + "rpc": "https://data-seed-prebsc-2-s2.bnbchain.org:8545", "tokenSymbol": "BNB", + "gasOptions": { + "gasPriceAdjustment": 1.4 + }, "contracts": { "AxelarGateway": { "address": "0x4D147dCb984e6affEEC47e44293DA442580A3Ec0", @@ -1453,10 +1456,29 @@ "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "minimumTimeDelay": 300, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x501dea3a0c7bf8ee998c8815a7b5c186d0160054f7b1e322611cdaf7c9de046a", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "Operators": { "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", @@ -1472,6 +1494,25 @@ "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, "explorer": { @@ -1720,10 +1761,29 @@ "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "minimumTimeDelay": 300, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "Operators": { "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", @@ -1739,6 +1799,25 @@ "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } } }, @@ -1788,10 +1867,29 @@ "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "minimumTimeDelay": 300, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "Operators": { "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", @@ -1807,6 +1905,25 @@ "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } } }, @@ -1824,7 +1941,7 @@ "explorer": { "name": "Blastscan", "url": "https://testnet.blastscan.io", - "api": "https://api.testnet.blastscan.io/api" + "api": "https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan" }, "contracts": { "ConstAddressDeployer": { @@ -1856,10 +1973,29 @@ "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "minimumTimeDelay": 300, + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "threshold": 2, + "signers": [ + "0x15837c1318AB83d99b19392Fd4811813f520d843", + "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", + "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" + ], + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "Operators": { "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", @@ -1875,6 +2011,25 @@ "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } } }, @@ -1887,7 +2042,7 @@ "tokenSymbol": "MNT", "confirmations": 2, "gasOptions": { - "gasLimit": 10000000000 + "gasLimit": 50000000000 }, "explorer": { "name": "Mantle Explorer", @@ -1897,7 +2052,14 @@ "contracts": { "InterchainGovernance": { "minimumTimeDelay": 300, - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0xf9e87dd846b7424c8451f31cdaeb553f2ace3c503af51bd647690d146dc009d1", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance v5.5" }, "Multisig": { "threshold": 2, @@ -1906,7 +2068,12 @@ "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" ], - "address": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig v5.5" }, "ConstAddressDeployer": { "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", @@ -1950,6 +2117,25 @@ "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, + "InterchainTokenService": { + "salt": "ITS v1.2.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", + "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", + "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", + "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", + "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } } } diff --git a/evm/deploy-its.js b/evm/deploy-its.js index 85cbe63c..42bc980f 100644 --- a/evm/deploy-its.js +++ b/evm/deploy-its.js @@ -330,7 +330,7 @@ async function deployAll(config, wallet, chain, options) { saveConfig(config, options.env); if (chain.chainId !== 31337) { - await sleep(2000); + await sleep(5000); } if (!(await isContract(contract.address, provider))) { diff --git a/evm/its.js b/evm/its.js index bd786c18..154c4e96 100644 --- a/evm/its.js +++ b/evm/its.js @@ -116,6 +116,11 @@ async function processCommand(config, chain, options) { const interchainTokenServiceAddress = address || contracts.InterchainTokenService?.address; + if (!interchainTokenServiceAddress) { + printWarn(`No InterchainTokenService address found for chain ${chain.name}`); + return; + } + validateParameters({ isValidAddress: { interchainTokenServiceAddress } }); const rpc = chain.rpc; @@ -457,9 +462,7 @@ async function processCommand(config, chain, options) { throw new Error(`${action} can only be performed by contract owner: ${owner}`); } - const { trustedAddress } = options; - - validateParameters({ isNonEmptyString: { trustedChain: options.trustedChain, trustedAddress } }); + validateParameters({ isNonEmptyString: { trustedChain: options.trustedChain } }); let trustedChains, trustedAddresses; @@ -469,16 +472,20 @@ async function processCommand(config, chain, options) { trustedAddresses = itsChains.map((_) => chain.contracts?.InterchainTokenService?.address); } else { const trustedChain = config.chains[options.trustedChain.toLowerCase()]?.axelarId; + const trustedAddress = + options.trustedAddress || config.chains[options.trustedChain.toLowerCase()]?.contracts?.InterchainTokenService?.address; - if (trustedChain === undefined) { - throw new Error(`Invalid chain: ${options.trustedChain}`); + if (trustedChain === undefined || trustedAddress === undefined) { + throw new Error(`Invalid chain/address: ${options.trustedChain}`); } trustedChains = [trustedChain]; trustedAddresses = [trustedAddress]; } - printInfo(`Setting trusted address for chain ${trustedChains} to ${trustedAddresses}`); + if (prompt(`Proceed with setting trusted address for chain ${trustedChains} to ${trustedAddresses}?`, options.yes)) { + return; + } for (const [trustedChain, trustedAddress] of trustedChains.map((chain, index) => [chain, trustedAddresses[index]])) { const tx = await interchainTokenService.setTrustedAddress(trustedChain, trustedAddress, gasOptions); diff --git a/evm/nonces.json b/evm/nonces.json index 55f7b38a..ac9b42e1 100644 --- a/evm/nonces.json +++ b/evm/nonces.json @@ -135,6 +135,14 @@ "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821": 0, "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f": 0, "0x027c1882B975E2cd771AE068b0389FA38B9dda73": 0 + }, + "blast": { + "0x3f5876a2b06E54949aB106651Ab6694d0289b2b4": 0, + "0x9256Fd872118ed3a97754B0fB42c15015d17E0CC": 0, + "0x1486157d505C7F7E546aD00E3E2Eee25BF665C9b": 0, + "0x2eC991B5c0B742AbD9d2ea31fe6c14a85e91C821": 0, + "0xf505462A29E36E26f25Ef0175Ca1eCBa09CC118f": 0, + "0x027c1882B975E2cd771AE068b0389FA38B9dda73": 0 } }, "testnet": { From 449bd41f2b2cfc5a5bdad84de59dfe547e7e6f26 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 13 Mar 2024 23:34:06 +0000 Subject: [PATCH 14/85] feat(wasm): flag for setting contract admin (#189) --- cosmwasm/deploy-contract.js | 7 ++++++- cosmwasm/utils.js | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 9dc7c0d4..763a2d82 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -7,7 +7,7 @@ const { SigningCosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const { DirectSecp256k1HdWallet } = require('@cosmjs/proto-signing'); const { printInfo, loadConfig, saveConfig, isString, isStringArray, isNumber, prompt } = require('../evm/utils'); -const { uploadContract, instantiateContract, isValidCosmosAddress } = require('./utils'); +const { uploadContract, instantiateContract, isValidCosmosAddress, governanceAddress } = require('./utils'); const { Command, Option } = require('commander'); @@ -425,6 +425,11 @@ const programHandler = () => { program.addOption(new Option('-n, --chainNames ', 'chain names').default('none')); program.addOption(new Option('-r, --reuseCodeId', 'reuse code Id')); program.addOption(new Option('-s, --salt ', 'salt for instantiate2. defaults to contract name').env('SALT')); + program.addOption( + new Option('--admin
', 'when instantiating contract, set an admin address. Defaults to governance module account').default( + governanceAddress, + ), + ); program.addOption( new Option( '-u, --uploadOnly', diff --git a/cosmwasm/utils.js b/cosmwasm/utils.js index 67850b23..79c0bffd 100644 --- a/cosmwasm/utils.js +++ b/cosmwasm/utils.js @@ -6,6 +6,8 @@ const { instantiate2Address } = require('@cosmjs/cosmwasm-stargate'); const { getSaltFromKey } = require('../evm/utils'); const { normalizeBech32 } = require('@cosmjs/encoding'); +const governanceAddress = 'axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj'; + const pascalToSnake = (str) => str.replace(/([A-Z])/g, (group) => `_${group.toLowerCase()}`).replace(/^_/, ''); const isValidCosmosAddress = (str) => { @@ -47,7 +49,7 @@ const uploadContract = async (client, wallet, config, options) => { }); }; -const instantiateContract = (client, wallet, initMsg, config, { contractName, salt, instantiate2, chainNames }) => { +const instantiateContract = (client, wallet, initMsg, config, { contractName, salt, instantiate2, chainNames, admin }) => { return wallet .getAccounts() .then(([account]) => { @@ -66,13 +68,17 @@ const instantiateContract = (client, wallet, initMsg, config, { contractName, sa initMsg, contractName, initFee, + { admin }, ) - : client.instantiate(account.address, contractConfig.codeId, initMsg, contractName, initFee); + : client.instantiate(account.address, contractConfig.codeId, initMsg, contractName, initFee, { + admin, + }); }) .then(({ contractAddress }) => contractAddress); }; module.exports = { + governanceAddress, uploadContract, instantiateContract, isValidCosmosAddress, From e6f549de873e0ad211a073218f172d03f6e92c3b Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Thu, 14 Mar 2024 04:12:34 +0000 Subject: [PATCH 15/85] chore(info): configuration for `devnet-amplifier` (#187) --- .../info/devnet-amplifier.json | 509 ++++++++++++++++++ 1 file changed, 509 insertions(+) create mode 100644 axelar-chains-config/info/devnet-amplifier.json diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json new file mode 100644 index 00000000..be7ae1c3 --- /dev/null +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -0,0 +1,509 @@ +{ + "chains": { + "avalanche": { + "name": "Avalanche", + "id": "avalanche", + "axelarId": "avalanche", + "chainId": 43113, + "rpc": "https://avalanche-fuji-c-chain-rpc.publicnode.com", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0xCa85f85C72df5f8428a440887CA7c449D94e0D0c", + "implementation": "0xB42a3c5Bf7fDaf253c0C26Bad3227Ac91594A6D9", + "implementationCodehash": "0xc867f56619b2b142b2a2dfe45eb42abab7a6cc21ac2df1035f365d8b10b22789", + "authModule": "0x569fE174ecd2a42E9463335F1f1B2FcF760aaAD8", + "tokenDeployer": "0xE427A8aBB85D90E652CBd92F8DB8EF102687785D", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xbdC2f1ab89Cef197DF3061Eb4af91d2700e881ce", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x0b81e74c664ad5a3a97065aa4880b29f332892898f1efe9f206c0ac6412bdb21", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0x8081A7a65288e3E3Eb5A3D5611a21Ec05546D78a", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0x938996c3685e4617B334e5ac10EF248762da0d9C", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0x1a4f5c3B632EBDD22a8A30b3c37374528168c51B", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGasService": { + "collector": "0x0000000000000000000000000000000000000000", + "address": "0x0000000000000000000000000000000000000000", + "implementation": "0x0000000000000000000000000000000000000000", + "deployer": "0x0000000000000000000000000000000000000000" + } + }, + "explorer": { + "name": "Snowtrace", + "url": "https://testnet.snowtrace.io", + "api": "https://api.routescan.io/v2/network/testnet/evm/43113/etherscan" + } + }, + "fantom": { + "name": "fantom", + "id": "fantom", + "axelarId": "fantom", + "chainId": 4002, + "rpc": "https://fantom.api.onfinality.io/public", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0x7aF5ab507E81C4F92e0E6C653F7087513F2C39D2", + "implementation": "0xdd68AaDd9a304380fe4167457e6cCbbD95B9E312", + "implementationCodehash": "0xcc8a18c2c1379d9147ae816531e1bae464a5440bd7bc0772cfdec73a50aa7223", + "authModule": "0x4e8C2e7659b48ec6a546dB883aec5b8C985c2229", + "tokenDeployer": "0x987997fad8C254F4b604DFa7B10785cA6500C662", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xEFa5C167B3c793d922E177422832FD8e5deC38CB", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0xd12966cd807a71aef0f7cc85cda2a4d65369ebc78ca018efb34a1a740794d18a", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0x3D8D2Bc4E0d13594Be04De460689F70d3FB19637", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0xa1a3bcc8d08A275907BFf9415bf45613DF2d0b40", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0x70F09056271e14AB1b0e69F6EF523C5EeF2238B9", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGasService": { + "collector": "0x0000000000000000000000000000000000000000", + "address": "0x0000000000000000000000000000000000000000", + "implementation": "0x0000000000000000000000000000000000000000", + "deployer": "0x0000000000000000000000000000000000000000" + } + }, + "explorer": { + "name": "Ftmscan", + "url": "https://testnet.ftmscan.com", + "api": "https://api-testnet.ftmscan.com/api" + } + }, + "ethereum-sepolia": { + "name": "ethereum-sepolia", + "id": "ethereum-sepolia", + "axelarId": "ethereum-sepolia", + "chainId": 11155111, + "rpc": "https://rpc.ankr.com/eth_sepolia", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0x6F4f1eb0546872c4BE7bCe4EaD35f24119A5DA77", + "implementation": "0xaaFa38E8e1B628573582493c617cD61474b86C36", + "implementationCodehash": "0x2885abf9636a74016fbb00663bfdd3269bc437aa2b812a0e505804b030510af7", + "authModule": "0x88D8531b96087B77dc4F536C1a40831fc8b73E7B", + "tokenDeployer": "0x11EC7EE7f7377d071254D1Fa2a774B450E4F5a73", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xccc3071FC654E8769B8946080cc13B15234e836f", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x097ee66694762b16803e1181ad3dae89fd8502eef32b4f470f10d9f4854a9598", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0xb4fed451532414B328e2A25E253a4610d9bf9cb2", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0xe6CAFA8f875Ce8D50b108E6926637824C2EE62e0", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0xDccC53824Ae7db14eADFbB43dAa2732EE089e0B3", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGasService": { + "collector": "0x0000000000000000000000000000000000000000", + "address": "0x0000000000000000000000000000000000000000", + "implementation": "0x0000000000000000000000000000000000000000", + "deployer": "0x0000000000000000000000000000000000000000" + } + }, + "explorer": { + "explorer": "Sepoliascan", + "url": "https://sepolia.etherscan.io", + "api": "https://api-sepolia.etherscan.io/api" + } + }, + "op-sepolia": { + "name": "op-sepolia", + "id": "op-sepolia", + "axelarId": "op-sepolia", + "chainId": 11155420, + "rpc": "https://sepolia.optimism.io", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0x58a06F3e8B4c79CD5901f490EE718665f88d2e34", + "implementation": "0x25F97150c5fC84ddF7e739D5Cbe2CFF3e902b16C", + "implementationCodehash": "0xef58668bb5aed99fa168d9952f82b19f1c055b9d3f17348a28bb1a544dc3a78e", + "authModule": "0x0304BE8b3d98b286c7354b382f3f5Eb00472a8ac", + "tokenDeployer": "0x501F51FaCDBD57309f19bd1612F39ca4F7a5A3c9", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xE7e38e86708B6AF2ED15e3c9Cabd89C3552a2756", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x085af2093b701de1c24e1df60224a62138d2ec73eb83a53be82068a0e8d17ded", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0x8C9208fa20fc4232760CBCCea032D907E085FFd3", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0x469981f1EeAd30A4794f167CB074ffa94211e724", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0x3246a56A964bD3d78240A02d2ceA730f561664fe", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "AxelarGasService": { + "collector": "0x0000000000000000000000000000000000000000", + "address": "0x0000000000000000000000000000000000000000", + "implementation": "0x0000000000000000000000000000000000000000", + "deployer": "0x0000000000000000000000000000000000000000" + } + }, + "explorer": { + "name": "Opscan", + "url": "https://sepolia-optimistic.etherscan.io", + "api": "https://api-sepolia-optimistic.etherscan.io/api" + } + } + }, + "axelar": { + "contracts": { + "ServiceRegistry": { + "governanceAccount": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "codeId": 3, + "address": "axelar1hrpna9v7vs3stzyd4z3xf00676kf78zpe2u5ksvljswn2vnjp3ystlgl4x" + }, + "ConnectionRouter": { + "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "codeId": 1, + "address": "axelar1fmsa0f5rs5jyauama96k0umzkktemqawrtn28zrjc0rvx47f68fqckxwuj" + }, + "Multisig": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "blockExpiry": 10, + "codeId": 5, + "address": "axelar1ufs3tlq4umljk0qfe8k5ya0x6hpavn897u2cnf9k0en9jr7qarqqa9263g" + }, + "Rewards": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "rewardsDenom": "uamplifier", + "params": { + "epoch_duration": "10", + "rewards_per_epoch": "100", + "participation_threshold": [ + "9", + "10" + ] + }, + "codeId": 4, + "address": "axelar1wkwy0xh89ksdgj9hr347dyd2dw7zesmtrue6kfzyml4vdtz6e5ws2pvc5e" + }, + "NexusGateway": { + "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", + "codeId": 2, + "address": "axelar1f4833h09j73ussy9amadhcnssl4pnuwe6krqcrf39smw30mmxkqq4nxzdz" + }, + "VotingVerifier": { + "avalanche": { + "serviceName": "validators", + "sourceGatewayAddress": "0xCa85f85C72df5f8428a440887CA7c449D94e0D0c", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" + }, + "codeId": 6, + "fantom": { + "serviceName": "validators", + "sourceGatewayAddress": "0x7aF5ab507E81C4F92e0E6C653F7087513F2C39D2", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" + }, + "ethereum-sepolia": { + "serviceName": "validators", + "sourceGatewayAddress": "0x6F4f1eb0546872c4BE7bCe4EaD35f24119A5DA77", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" + }, + "op-sepolia": { + "serviceName": "validators", + "sourceGatewayAddress": "0x58a06F3e8B4c79CD5901f490EE718665f88d2e34", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" + } + }, + "Gateway": { + "avalanche": { + "address": "axelar13ehuhysn5mqjeaheeuew2gjs785f6k7jm8vfsqg3jhtpkwppcmzqtedxty" + }, + "codeId": 7, + "fantom": { + "address": "axelar1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsrmfyk6" + }, + "ethereum-sepolia": { + "address": "axelar18csycs4vm6varkp00apuqlsm7v4twg8jsljk8wfdd7cghr7g4rtsltrlkp" + }, + "op-sepolia": { + "address": "axelar14ph4e660eyqz0j36zlkaey4zgzexm5twkmjlqaequxr2cjm9eprqpe6u2s" + } + }, + "MultisigProver": { + "avalanche": { + "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "destinationChainID": "43113", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1qum2tr7hh4y7ruzew68c64myjec0dq2s2njf6waja5t0w879lutqv062tl" + }, + "codeId": 8, + "fantom": { + "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "destinationChainID": "4002", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1rl8su3hadqqq2v86lscpuklsh2mh84cxqvjdew4jt9yd07dzekyqk7mg2m" + }, + "ethereum-sepolia": { + "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "destinationChainID": "11155111", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1335rlmhujm0gj5e9gh7at9jpqvqckz0mpe4v284ar4lw5mlkryzsnug9tg" + }, + "op-sepolia": { + "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "destinationChainID": "11155420", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar10sfpr8ykh9xn93u8xec4ed3990nmvh86e0vaegkauqhlkxspysyqwc00au" + } + } + }, + "id": "Axelarnet", + "axelarId": "Axelarnet", + "rpc": "http://devnet-amplifier.axelar.dev:26657", + "lcd": "http://devnet-amplifier.axelar.dev:1317", + "grpc": "devnet-amplifier.axelar.dev:9090", + "tokenSymbol": "AMPLIFIER", + "gasPrice": "0.00005uamplifier", + "gasLimit": 5000000 + } +} From b36e62bec1716dbd9ae34955ee3b9f4d62135007 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Fri, 15 Mar 2024 07:22:25 +0000 Subject: [PATCH 16/85] chore(info): add `devnet-verifiers` config file (#190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add devnet-verifiers config file * addendum * remove gas service requirement --------- Co-authored-by: João Sousa Co-authored-by: Talal Ashraf Co-authored-by: Milap Sheth --- .../info/devnet-amplifier.json | 24 - .../info/devnet-verifiers.json | 485 ++++++++++++++++++ axelar-chains-config/tests/schema/index.js | 4 +- 3 files changed, 487 insertions(+), 26 deletions(-) create mode 100644 axelar-chains-config/info/devnet-verifiers.json diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index be7ae1c3..609a5014 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -71,12 +71,6 @@ "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", "salt": "Create3Deployer" - }, - "AxelarGasService": { - "collector": "0x0000000000000000000000000000000000000000", - "address": "0x0000000000000000000000000000000000000000", - "implementation": "0x0000000000000000000000000000000000000000", - "deployer": "0x0000000000000000000000000000000000000000" } }, "explorer": { @@ -156,12 +150,6 @@ "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", "salt": "Create3Deployer" - }, - "AxelarGasService": { - "collector": "0x0000000000000000000000000000000000000000", - "address": "0x0000000000000000000000000000000000000000", - "implementation": "0x0000000000000000000000000000000000000000", - "deployer": "0x0000000000000000000000000000000000000000" } }, "explorer": { @@ -241,12 +229,6 @@ "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", "salt": "Create3Deployer" - }, - "AxelarGasService": { - "collector": "0x0000000000000000000000000000000000000000", - "address": "0x0000000000000000000000000000000000000000", - "implementation": "0x0000000000000000000000000000000000000000", - "deployer": "0x0000000000000000000000000000000000000000" } }, "explorer": { @@ -326,12 +308,6 @@ "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", "salt": "Create3Deployer" - }, - "AxelarGasService": { - "collector": "0x0000000000000000000000000000000000000000", - "address": "0x0000000000000000000000000000000000000000", - "implementation": "0x0000000000000000000000000000000000000000", - "deployer": "0x0000000000000000000000000000000000000000" } }, "explorer": { diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json new file mode 100644 index 00000000..a8d3a5c5 --- /dev/null +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -0,0 +1,485 @@ +{ + "chains": { + "avalanche": { + "name": "avalanche", + "id": "avalanche", + "axelarId": "avalanche", + "chainId": 43113, + "rpc": "https://avalanche-fuji-c-chain-rpc.publicnode.com", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0xe1d5870E69F84A464ca2723a633a08175f89b702", + "implementation": "0x26A9E765aD04020fC150559b30D01B8d1A277888", + "implementationCodehash": "0xc6205ecd87047d92df14362523372e766df41c5dd3b6d647a820b9bba2b9d4ae", + "authModule": "0xfc3e170CcFcb25616cAaA30bA1c5eFF70a4D7C28", + "tokenDeployer": "0xeB1560B5c2eA5dF822733dF11e919D47aBcE625E", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xf6C1fec9606Efd5b1e43e07ceF1d1a7dC8771947", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x05244d3fa7abc1a663dc7873b44430f1a03ae5331a20b2bc923e392950d8305d", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0xE8895b6bDEDe1EeA2B906020c8DE7Ad9C5540789", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0x9482BAb06a52152650d2C701834651522EB347E6", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0x25414c43f39abD2144fD6eA949Fc159b015CFDAF", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + } + }, + "explorer": { + "name": "Snowtrace", + "url": "https://testnet.snowtrace.io", + "api": "https://api.routescan.io/v2/network/testnet/evm/43113/etherscan" + } + }, + "fantom": { + "name": "fantom", + "id": "fantom", + "axelarId": "fantom", + "chainId": 4002, + "rpc": "https://fantom.api.onfinality.io/public", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0x2e175a334DA974ca5d355601e85003ff2Bc9cBf4", + "implementation": "0x2a00a13B3F5D7a3F77489767e356751AF4D74Be3", + "implementationCodehash": "0x4fc175c23b623e17e42fa0dc1da121a6b8d338eaac2516649d9f01ebf650bacc", + "authModule": "0x2e4E2Dc3415b7F894B740463c0CF1Dc91E98E00E", + "tokenDeployer": "0x9C326DBa075809d80D18a2f26d5F503355E2a237", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0x4f7080c6ab705367B4193Ad583bC9a2548d65728", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x78be13f9dad0203bdac06c71953e22ae8d8608928b4bbe889311656245896530", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0x11983F18E48a434099d21E82a1Fe5C9319481bBD", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0x945989C19f8c569ca2dF10775E65C29A37B158bc", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0xA1C7E26BAfA040B5118551F82Eaa82A7Fa11f95d", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + } + }, + "explorer": { + "name": "Ftmscan", + "url": "https://testnet.ftmscan.com", + "api": "https://api-testnet.ftmscan.com/api" + } + }, + "ethereum-sepolia": { + "name": "ethereum-sepolia", + "id": "ethereum-sepolia", + "axelarId": "ethereum-sepolia", + "chainId": 11155111, + "rpc": "https://rpc.ankr.com/eth_sepolia", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0xe8bF3a935D535E5Cc54Df3C76592357DE60A7EdF", + "implementation": "0x2e7E04f6b9e0A9CCF53Ea297d761591c0F187FDc", + "implementationCodehash": "0xe2dff4bce052f071dfd264b3386bcf7061110e06cc8e0eabae00d48e4acc8a4f", + "authModule": "0x2771515c95e76B530BBe040FEa1c53b3831cAA42", + "tokenDeployer": "0x5338fC86a81b8d0162EE9133F968830d46B29519", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0xAe71DFf9281AD8D0755573828211A2822f85d91A", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x2cf936c395027fd7369a010a083ccc4a228fd09f523ecbf57b06a4bdee476399", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0xF3294396C863297F3e5735632E29a9b4e61951Ff", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0xEf15F4Ab713Dd80EB8A35067f21b3CF09479f975", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0xF6a0F4B4C06e730ad66f3882E9B95C0C9f2247e7", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + } + }, + "explorer": { + "explorer": "Sepoliascan", + "url": "https://sepolia.etherscan.io", + "api": "https://api-sepolia.etherscan.io/api" + } + }, + "op-sepolia": { + "name": "op-sepolia", + "id": "op-sepolia", + "axelarId": "op-sepolia", + "chainId": 11155420, + "rpc": "https://sepolia.optimism.io", + "tokenSymbol": "ETH", + "confirmations": 1, + "gasOptions": { + "gasLimit": 5000000 + }, + "contracts": { + "AxelarGateway": { + "gasOptions": { + "gasLimit": 5000000 + }, + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "startingKeyIDs": [ + null + ], + "address": "0x2ABBb098e8372B5CF23E264e8f7Fe7b212803eea", + "implementation": "0x20eC3c31740F2A4e0c5F69bD7b3C3fd8647a7C30", + "implementationCodehash": "0x0ee1271547473f72cb57c6ca84bb242ecd95a4855fcbc2316e8ab378b4c5bce8", + "authModule": "0x257a5aCa060e953ac40A764f11F3B027718a2172", + "tokenDeployer": "0xfc4b97E962953F059baA6665b7Aec3c1916494da", + "deploymentMethod": "create" + }, + "InterchainGovernance": { + "governanceChain": "Axelarnet", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "minimumTimeDelay": 100, + "address": "0x3301326B51488b89177EE8Ba61E36B1d02d5C3C9", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x22c6f7189418f3cf2fe3b6ee9a31712f9276c592016bbcae9eaa1f80c0b3255d", + "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", + "salt": "InterchainGovernance" + }, + "Multisig": { + "signers": [ + "0x7974A6e10B93e3508affB174c4F047f9965A4F85", + "0x987DA658eee3cABd227DA3280d722AB9b36F7323", + "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", + "0xE50E91E947ad52273C6032eb8540d439624dEd8F", + "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", + "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", + "0x0782681B18b5B62670161F60f86b0BA9545abb1A", + "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" + ], + "threshold": 4, + "address": "0xC6aE7584Db9C214fA1201abDbC40b1A116eA3b67", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create3", + "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", + "salt": "Multisig" + }, + "ConstAddressDeployer": { + "address": "0xd859f5EA0661569659410d18Cf74cc7309F31FD7", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create", + "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", + "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + }, + "Create3Deployer": { + "address": "0x95CBe71a1Ede1f8Aa782cd047f32872b10fA08ec", + "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + } + }, + "explorer": { + "name": "Opscan", + "url": "https://sepolia-optimistic.etherscan.io", + "api": "https://api-sepolia-optimistic.etherscan.io/api" + } + } + }, + "axelar": { + "contracts": { + "ServiceRegistry": { + "governanceAccount": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "codeId": 3, + "address": "axelar1hrpna9v7vs3stzyd4z3xf00676kf78zpe2u5ksvljswn2vnjp3ystlgl4x" + }, + "ConnectionRouter": { + "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "codeId": 1, + "address": "axelar12dtt66cn7dzfjnxytc2rdtwfr528g4vfxng65z85c730s83397fql8sgwh" + }, + "Multisig": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "blockExpiry": 10, + "codeId": 5, + "address": "axelar1ufs3tlq4umljk0qfe8k5ya0x6hpavn897u2cnf9k0en9jr7qarqqa9263g" + }, + "Rewards": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "rewardsDenom": "uverifiers", + "params": { + "epoch_duration": "10", + "rewards_per_epoch": "100", + "participation_threshold": [ + "9", + "10" + ] + }, + "codeId": 4, + "address": "axelar1wkwy0xh89ksdgj9hr347dyd2dw7zesmtrue6kfzyml4vdtz6e5ws2pvc5e" + }, + "NexusGateway": { + "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", + "codeId": 2, + "address": "axelar1qsykzlhsee4vm8h95tpt6p389tu9e0k0vp8t73kheqn7e4skwwmsff4nq9" + }, + "VotingVerifier": { + "avalanche": { + "serviceName": "validators", + "sourceGatewayAddress": "0xe1d5870E69F84A464ca2723a633a08175f89b702", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" + }, + "codeId": 6, + "fantom": { + "serviceName": "validators", + "sourceGatewayAddress": "0x2e175a334DA974ca5d355601e85003ff2Bc9cBf4", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" + }, + "ethereum-sepolia": { + "serviceName": "validators", + "sourceGatewayAddress": "0xe8bF3a935D535E5Cc54Df3C76592357DE60A7EdF", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" + }, + "op-sepolia": { + "serviceName": "validators", + "sourceGatewayAddress": "0x2ABBb098e8372B5CF23E264e8f7Fe7b212803eea", + "votingThreshold": [ + "9", + "10" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" + } + }, + "Gateway": { + "avalanche": { + "address": "axelar13ehuhysn5mqjeaheeuew2gjs785f6k7jm8vfsqg3jhtpkwppcmzqtedxty" + }, + "codeId": 7, + "fantom": { + "address": "axelar1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsrmfyk6" + }, + "ethereum-sepolia": { + "address": "axelar18csycs4vm6varkp00apuqlsm7v4twg8jsljk8wfdd7cghr7g4rtsltrlkp" + }, + "op-sepolia": { + "address": "axelar14ph4e660eyqz0j36zlkaey4zgzexm5twkmjlqaequxr2cjm9eprqpe6u2s" + } + }, + "MultisigProver": { + "avalanche": { + "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "destinationChainID": "43113", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1qum2tr7hh4y7ruzew68c64myjec0dq2s2njf6waja5t0w879lutqv062tl" + }, + "codeId": 8, + "fantom": { + "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "destinationChainID": "4002", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1rl8su3hadqqq2v86lscpuklsh2mh84cxqvjdew4jt9yd07dzekyqk7mg2m" + }, + "ethereum-sepolia": { + "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "destinationChainID": "11155111", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar1335rlmhujm0gj5e9gh7at9jpqvqckz0mpe4v284ar4lw5mlkryzsnug9tg" + }, + "op-sepolia": { + "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "destinationChainID": "11155420", + "signingThreshold": [ + "4", + "5" + ], + "serviceName": "validators", + "workerSetDiffThreshold": 1, + "encoder": "abi", + "keyType": "ecdsa", + "address": "axelar10sfpr8ykh9xn93u8xec4ed3990nmvh86e0vaegkauqhlkxspysyqwc00au" + } + } + }, + "id": "Axelarnet", + "axelarId": "Axelarnet", + "rpc": "http://devnet-verifiers.axelar.dev:26657", + "lcd": "http://devnet-verifiers.axelar.dev:1317", + "grpc": "devnet-verifiers.axelar.dev:9090", + "tokenSymbol": "VERIFIERS", + "gasPrice": "0.00005uverifiers", + "gasLimit": 5000000 + } +} diff --git a/axelar-chains-config/tests/schema/index.js b/axelar-chains-config/tests/schema/index.js index 9f9ab0a0..64516685 100644 --- a/axelar-chains-config/tests/schema/index.js +++ b/axelar-chains-config/tests/schema/index.js @@ -25,7 +25,7 @@ export const contractSchema = { id: '/info.chains.contracts', type: 'object', patternProperties: { - // PascalName e.g. 'AxelarGasService', 'AxelarGateway', 'InterchainGovernanceExecutor', etc. + // PascalName e.g. 'AxelarGasService', 'AxelarGateway' etc. '\b[A-Z][a-z]*([A-Z][a-z]*)*\b': { $ref: contractValueSchema.id, }, @@ -35,7 +35,7 @@ export const contractSchema = { type: 'boolean', }, }, - required: ['AxelarGateway', 'AxelarGasService'], + required: ['AxelarGateway'], }; export const explorerSchema = { From bff28229f44900a80ba44dd00692dd078627455f Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Mon, 18 Mar 2024 13:10:11 +0530 Subject: [PATCH 17/85] feat: add script to generate block finality difference (#188) * chore: add tag for finality * feat: add script for printing avg and max difference in latest and finalized blocks * refactor: update script description and remove unused params * refactor: address PR comments * refactor: address PR comments --- axelar-chains-config/info/mainnet.json | 76 ++++++++++---- axelar-chains-config/info/stagenet.json | 56 ++++++++--- axelar-chains-config/info/testnet.json | 80 +++++++++++---- axelar-chains-config/tests/schema/index.js | 2 + evm/determine-finality-latency.js | 110 +++++++++++++++++++++ 5 files changed, 271 insertions(+), 53 deletions(-) create mode 100644 evm/determine-finality-latency.js diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 93ff2c10..cd9a40d6 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -122,7 +122,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 150000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "avalanche": { "name": "Avalanche", @@ -242,7 +244,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 150000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "fantom": { "name": "Fantom", @@ -366,7 +370,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 1000000000000 - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "polygon": { "name": "Polygon", @@ -489,7 +495,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 350000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 5 }, "moonbeam": { "name": "Moonbeam", @@ -609,7 +617,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 625000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "binance": { "name": "Binance", @@ -734,7 +744,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 30000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 2 }, "arbitrum": { "name": "Arbitrum", @@ -855,7 +867,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 2000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "celo": { "name": "Celo", @@ -977,7 +991,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 100000000000 - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "kava": { "name": "Kava", @@ -1097,7 +1113,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 50000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "filecoin": { "name": "Filecoin", @@ -1221,7 +1239,9 @@ "staticGasOptions": { "gasLimit": 100000000, "maxFeePerGas": 1000000000 - } + }, + "finality": "120", + "approxFinalityWaitTime": 60 }, "optimism": { "name": "Optimism", @@ -1345,7 +1365,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 10000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "linea": { "name": "Linea", @@ -1469,7 +1491,9 @@ "gasOptions": { "gasLimit": 8000000, "gasPriceAdjustment": 2 - } + }, + "finality": "400", + "approxFinalityWaitTime": 30 }, "base": { "name": "Base", @@ -1590,7 +1614,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 10000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 30 }, "mantle": { "name": "Mantle", @@ -1715,7 +1741,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 25000000000 - } + }, + "finality": "9000", + "approxFinalityWaitTime": 60 }, "scroll": { "name": "Scroll", @@ -1833,7 +1861,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 25000000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 60 }, "centrifuge": { "name": "Centrifuge", @@ -1930,7 +1960,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 40 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "immutable": { "name": "Immutable", @@ -2006,7 +2038,9 @@ "name": "Immutable Explorer", "url": "https://explorer.immutable.com", "api": "https://explorer.immutable.com/api" - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "fraxtal": { "name": "Fraxtal", @@ -2120,7 +2154,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 5001270 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 80 }, "blast": { "name": "Blast", @@ -2234,7 +2270,9 @@ "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 5641495 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 } }, "axelar": { diff --git a/axelar-chains-config/info/stagenet.json b/axelar-chains-config/info/stagenet.json index 369bcb22..1738583f 100644 --- a/axelar-chains-config/info/stagenet.json +++ b/axelar-chains-config/info/stagenet.json @@ -84,7 +84,9 @@ "explorer": { "url": "https://goerli.etherscan.io", "api": "https://api-goerli.etherscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "avalanche": { "name": "Avalanche", @@ -166,7 +168,9 @@ "explorer": { "url": "https://testnet.snowtrace.io", "api": "https://api-testnet.snowtrace.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "fantom": { "name": "Fantom", @@ -248,7 +252,9 @@ "explorer": { "url": "https://testnet.ftmscan.com", "api": "https://api-testnet.ftmscan.com/api" - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "polygon": { "name": "Polygon", @@ -330,7 +336,9 @@ "explorer": { "url": "https://mumbai.polygonscan.com", "api": "https://api-testnet.polygonscan.com/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 5 }, "moonbeam": { "name": "Moonbeam", @@ -412,7 +420,9 @@ "explorer": { "url": "https://moonbase.moonscan.io", "api": "https://api-moonbase.moonscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "binance": { "name": "Binance", @@ -494,7 +504,9 @@ "explorer": { "url": "https://testnet.bscscan.com", "api": "https://api-testnet.bscscan.com/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "arbitrum": { "name": "Arbitrum", @@ -579,7 +591,9 @@ "explorer": { "url": "https://goerli.arbiscan.io", "api": "https://api-goerli.arbiscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "kava": { "name": "Kava", @@ -661,7 +675,9 @@ "explorer": { "url": "https://explorer.evm-alpha.kava.io", "api": "" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "optimism": { "name": "Optimism", @@ -746,7 +762,9 @@ }, "gasOptions": { "gasLimit": 5000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "base": { "name": "Base", @@ -830,7 +848,9 @@ }, "gasOptions": { "gasLimit": 5000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 30 }, "immutable-devnet": { "name": "immutable-devnet", @@ -926,7 +946,9 @@ "explorer": { "url": "", "api": "" - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "ethereum-sepolia": { "name": "Ethereum-Sepolia", @@ -995,7 +1017,9 @@ "gasOptions": { "maxFeePerGas": 110000000, "maxPriorityFeePerGas": 100000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "arbitrum-sepolia": { "name": "Arbitrum-Sepolia", @@ -1060,7 +1084,9 @@ "explorer": { "url": "https://sepolia.arbiscan.io", "api": "https://api-sepolia.arbiscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "centrifuge": { "name": "Centrifuge", @@ -1125,7 +1151,9 @@ "explorer": { "url": "", "api": "" - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 } }, "axelar": { diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 9a6e99d6..85d20d1d 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -110,7 +110,9 @@ "name": "Etherscan", "url": "https://goerli.etherscan.io", "api": "https://api-goerli.etherscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "avalanche": { "name": "Avalanche", @@ -218,7 +220,9 @@ "name": "Snowtrace", "url": "https://testnet.snowtrace.io", "api": "https://api.routescan.io/v2/network/testnet/evm/43113/etherscan" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "fantom": { "name": "Fantom", @@ -335,7 +339,9 @@ }, "gasOptions": { "gasLimit": 8000000 - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "polygon": { "name": "Polygon", @@ -446,7 +452,9 @@ }, "gasOptions": { "gasLimit": 8000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 5 }, "moonbeam": { "name": "Moonbeam", @@ -559,7 +567,9 @@ }, "gasOptions": { "gasLimit": 12000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "binance": { "name": "Binance", @@ -670,7 +680,9 @@ "name": "Bscscan", "url": "https://testnet.bscscan.com", "api": "https://api-testnet.bscscan.com/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 2 }, "celo": { "name": "Celo", @@ -781,7 +793,9 @@ }, "gasOptions": { "gasLimit": 8000000 - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "kava": { "name": "Kava", @@ -888,7 +902,9 @@ "explorer": { "name": "Kavascan", "url": "https://explorer.evm-alpha.kava.io" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "filecoin": { "name": "Filecoin", @@ -999,7 +1015,9 @@ "gasLimit": 300000000 }, "confirmations": 3, - "eip1559": true + "eip1559": true, + "finality": "120", + "approxFinalityWaitTime": 60 }, "linea": { "name": "Linea", @@ -1111,7 +1129,9 @@ "gasOptions": { "gasPrice": 3000000000 }, - "confirmations": 4 + "confirmations": 4, + "finality": "400", + "approxFinalityWaitTime": 30 }, "scroll": { "name": "Scroll", @@ -1220,7 +1240,9 @@ "gasOptions": { "gasLimit": 7000000, "gasPriceAdjustment": 0.25 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 60 }, "immutable": { "name": "Immutable", @@ -1311,7 +1333,9 @@ "name": "Immutable Explorer", "url": "https://explorer.testnet.immutable.com", "api": "https://explorer.testnet.immutable.com/api" - } + }, + "finality": "1", + "approxFinalityWaitTime": 1 }, "ethereum-sepolia": { "name": "Ethereum-Sepolia", @@ -1416,7 +1440,9 @@ }, "gasOptions": { "gasLimit": 8000000 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "arbitrum-sepolia": { "name": "Arbitrum-Sepolia", @@ -1519,7 +1545,9 @@ "name": "Arbiscan", "url": "https://sepolia.arbiscan.io", "api": "https://api-sepolia.arbiscan.io/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "centrifuge": { "name": "Centrifuge", @@ -1608,7 +1636,9 @@ "explorer": { "name": "", "url": "" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 }, "fraxtal": { "name": "Fraxtal", @@ -1713,7 +1743,9 @@ "name": "Fraxscan", "url": "https://holesky.fraxscan.com", "api": "https://api-holesky.fraxscan.com/api" - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 80 }, "optimism-sepolia": { "name": "Optimism-Sepolia", @@ -1819,7 +1851,9 @@ "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "base-sepolia": { "name": "Base-Sepolia", @@ -1925,7 +1959,9 @@ "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 30 }, "blast-sepolia": { "name": "Blast-Sepolia", @@ -2031,7 +2067,9 @@ "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 25 }, "mantle-sepolia": { "name": "Mantle-Sepolia", @@ -2137,7 +2175,9 @@ "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 60 } }, "axelar": { diff --git a/axelar-chains-config/tests/schema/index.js b/axelar-chains-config/tests/schema/index.js index 64516685..c8ec637e 100644 --- a/axelar-chains-config/tests/schema/index.js +++ b/axelar-chains-config/tests/schema/index.js @@ -74,6 +74,8 @@ export const chainValueSchema = { explorer: { $ref: explorerSchema.id }, gasOptions: { $ref: gasOptionSchema.id }, confirmations: { type: 'number' }, + finality: { type: 'string' }, + approxFinalityWaitTime: { type: 'number' }, }, required: ['name', 'id', 'axelarId', 'chainId', 'rpc', 'tokenSymbol', 'contracts', 'explorer'], }; diff --git a/evm/determine-finality-latency.js b/evm/determine-finality-latency.js new file mode 100644 index 00000000..8a3bcaad --- /dev/null +++ b/evm/determine-finality-latency.js @@ -0,0 +1,110 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { + providers: { JsonRpcProvider }, +} = ethers; +const { Command, Option } = require('commander'); +const { printInfo, mainProcessor, sleep } = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); + +function updateFinality(finality, chain, update) { + if (update) { + chain.finality = finality; + } +} + +function updateFinalityWaitTime(approxFinalityWaitTime, chain, update) { + if (update) { + chain.approxFinalityWaitTime = approxFinalityWaitTime; + } +} + +async function processCommand(_config, chain, options) { + let { confirmations, attempts, blockTime, delay } = options; + + const rpc = options.rpc || chain.rpc; + + let max = 0; + let min = Number.MAX_SAFE_INTEGER; + let sum = 0; + + const provider = new JsonRpcProvider(rpc); + + try { + await provider.getBlock('finalized'); + } catch { + printInfo('Finalized tag not supported by rpc for chain', chain.name); + + if (confirmations) { + confirmations = parseInt(confirmations); + updateFinality(confirmations, chain, options.update); + updateFinalityWaitTime(confirmations * blockTime, chain, options.update); + printInfo('Wait time', confirmations * blockTime); + } + + return; + } + + for (let i = 0; i < attempts; i++) { + const latestBlockPromise = provider.getBlock('latest'); // resolved promises afterwards to make difference more precise + const finalizedBlockPromise = provider.getBlock('finalized'); + + const latestBlock = await latestBlockPromise; + const finalizedBlock = await finalizedBlockPromise; + + const difference = latestBlock.number - finalizedBlock.number; + + printInfo(`Difference in block number for ${i + 1} time`, difference); + + sum += difference; + max = difference > max ? difference : max; + min = difference < min ? difference : min; + + await sleep(delay); + } + + const avg = sum / attempts; + + printInfo('Max difference', max); + printInfo('Avg difference', avg); + printInfo('Min difference', min); + + printInfo('Max wait time', max * blockTime); + printInfo('Avg wait time', avg * blockTime); + printInfo('Min wait time', min * blockTime); + + updateFinality('finalized', chain, options.update); + updateFinalityWaitTime(max * blockTime, chain, options.update); +} + +async function main(options) { + await mainProcessor(options, processCommand); +} + +if (require.main === module) { + const program = new Command(); + + program + .name('determine-finality-latency') + .description( + 'Determine the latency between finalized and latest blocks based on finalized tag or block confirmations, and update chain config', + ); + + addBaseOptions(program); + + program.addOption(new Option('--rpc ', 'chain rpc')); + program.addOption(new Option('--update', 'update finality setting in the chain config based on result')); + program.addOption(new Option('--confirmations ', 'default wait time to add if finalized tag is not supported')); + program.addOption( + new Option('--attempts ', 'number of attempts to calculate difference in block number to reach conclusion').default(200), + ); + program.addOption(new Option('--blockTime ', 'default block confirmations to wait for if finalized tag is not supported')); + program.addOption(new Option('--delay ', 'delay between calculating consecutive block finality differences').default(10)); + + program.action((options) => { + main(options); + }); + + program.parse(); +} From 8ee0106f5bd07b5f644c69ad52b2f715b093550f Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Sun, 24 Mar 2024 19:28:08 -0400 Subject: [PATCH 18/85] chore: remove eth goerli testnet (#196) --- axelar-chains-config/info/testnet.json | 198 ++++++------------------- 1 file changed, 42 insertions(+), 156 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 85d20d1d..f6dd6f0b 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1,39 +1,14 @@ { "chains": { - "ethereum": { - "name": "Ethereum", - "id": "ethereum-2", - "axelarId": "ethereum-2", - "chainId": 5, - "rpc": "https://ethereum-goerli.publicnode.com", + "ethereum-sepolia": { + "name": "Ethereum-Sepolia", + "id": "ethereum-sepolia", + "axelarId": "ethereum-sepolia", + "chainId": 11155111, + "rpc": "https://1rpc.io/sepolia", "tokenSymbol": "ETH", + "confirmations": 2, "contracts": { - "AxelarGateway": { - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "implementationCodehash": "0x0b12a50b462d9a3ecc09389589ce6f82b0972df4506df19db55070c737233bf4", - "authModule": "0xcbf7900138EBc9CdB3E933B9E6F7071587BD6cb8", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xb6241272C569767072e0587098415DF6BA0aaEe9", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b", - "wrappedSymbol": "WETH", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF" - }, "ConstAddressDeployer": { "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", @@ -42,31 +17,31 @@ "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "salt": "Create3Deployer", "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "AxelarGateway": { "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" + "startingKeyIDs": [ + "evm-ethereum-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" }, "InterchainGovernance": { + "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create3", "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", @@ -87,6 +62,21 @@ "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", "salt": "Multisig v5.5" }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + }, "InterchainTokenService": { "salt": "ITS v1.2.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", @@ -107,9 +97,12 @@ } }, "explorer": { - "name": "Etherscan", - "url": "https://goerli.etherscan.io", - "api": "https://api-goerli.etherscan.io/api" + "explorer": "Sepoliascan", + "url": "https://sepolia.etherscan.io", + "api": "https://api-sepolia.etherscan.io/api" + }, + "gasOptions": { + "gasLimit": 8000000 }, "finality": "finalized", "approxFinalityWaitTime": 40 @@ -1337,113 +1330,6 @@ "finality": "1", "approxFinalityWaitTime": 1 }, - "ethereum-sepolia": { - "name": "Ethereum-Sepolia", - "id": "ethereum-sepolia", - "axelarId": "ethereum-sepolia", - "chainId": 11155111, - "rpc": "https://1rpc.io/sepolia", - "tokenSymbol": "ETH", - "confirmations": 2, - "contracts": { - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", - "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", - "deploymentMethod": "create", - "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", - "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" - }, - "Create3Deployer": { - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", - "salt": "Create3Deployer" - }, - "AxelarGateway": { - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "startingKeyIDs": [ - "evm-ethereum-sepolia-genesis" - ], - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", - "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", - "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", - "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "InterchainGovernance": { - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", - "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", - "salt": "Operators" - }, - "AxelarGasService": { - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.1", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.0.0" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.0.0", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "explorer": "Sepoliascan", - "url": "https://sepolia.etherscan.io", - "api": "https://api-sepolia.etherscan.io/api" - }, - "gasOptions": { - "gasLimit": 8000000 - }, - "finality": "finalized", - "approxFinalityWaitTime": 40 - }, "arbitrum-sepolia": { "name": "Arbitrum-Sepolia", "id": "arbitrum-sepolia", From 430dfecbc300207758452339120ad906e1c8b093 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Mon, 25 Mar 2024 03:06:01 -0400 Subject: [PATCH 19/85] chore: upgrade ITS to v1.2.4 (#197) * chore: upgrade ITS to v1.2.2 * chore: upgrade ITS to v1.2.3 * misc * add contract name * upgrade to v1.2.4 * update scripts * bump package version * prettier * fix artifact path --- axelar-chains-config/info/mainnet.json | 173 ++++++++++---------- axelar-chains-config/info/testnet.json | 210 ++++++++++++------------- axelar-chains-config/package-lock.json | 4 +- axelar-chains-config/package.json | 2 +- evm/deploy-its.js | 21 ++- evm/its.js | 19 ++- package-lock.json | 4 +- package.json | 2 +- 8 files changed, 222 insertions(+), 213 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index cd9a40d6..eb2d62fe 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -95,22 +95,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -217,22 +217,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -339,22 +339,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -465,22 +465,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "proxySalt": "ITS v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -590,22 +590,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -713,22 +713,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -839,22 +839,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -964,22 +964,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "proxySalt": "ITS v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1086,22 +1086,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1208,22 +1208,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1334,22 +1334,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1460,22 +1460,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1586,22 +1586,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1709,22 +1709,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1734,9 +1734,6 @@ "url": "https://explorer.mantle.xyz", "api": "https://explorer.mantle.xyz/api" }, - "gasOptions": { - "gasLimit": 8000000 - }, "skipRevertTests": true, "staticGasOptions": { "gasLimit": 3000000, @@ -1830,22 +1827,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2132,22 +2129,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2239,22 +2236,22 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index f6dd6f0b..df7e605e 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -78,21 +78,21 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -153,21 +153,21 @@ "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" }, "InterchainProposalSender": { @@ -222,7 +222,7 @@ "id": "Fantom", "axelarId": "Fantom", "chainId": 4002, - "rpc": "https://xapi.testnet.fantom.network/lachesis", + "rpc": "https://rpc.testnet.fantom.network", "tokenSymbol": "FTM", "contracts": { "AxelarGateway": { @@ -269,21 +269,21 @@ "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" }, "InterchainProposalSender": { @@ -420,21 +420,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -535,21 +535,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -569,7 +569,7 @@ "id": "binance", "axelarId": "binance", "chainId": 97, - "rpc": "https://data-seed-prebsc-2-s2.bnbchain.org:8545", + "rpc": "https://bsc-testnet-rpc.publicnode.com", "tokenSymbol": "BNB", "gasOptions": { "gasPriceAdjustment": 1.4 @@ -651,21 +651,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -723,21 +723,21 @@ "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" }, "InterchainProposalSender": { @@ -874,21 +874,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -982,21 +982,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1096,21 +1096,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.2.1" + "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { - "salt": "ITS Factory v1.2.1", + "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1206,21 +1206,21 @@ "salt": "Multisig v5.5" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", "proxySalt": "ITS v1.0.0" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1408,22 +1408,22 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1606,22 +1606,22 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1719,22 +1719,22 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1827,22 +1827,22 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1935,22 +1935,22 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2043,22 +2043,22 @@ "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { - "salt": "ITS v1.2.1", + "salt": "ITS v1.2.4", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0xC1B09c9c16117417A1B414A52Dd92CF1f634e786", - "tokenHandler": "0x9Ef1f24EF4Ed0520DC1Da282a0fe76271A183b36", - "implementation": "0x30DEFb998D7FdDC75ffb8D002fC15BbB75115758", + "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", + "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", + "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0x440B118f34d6224B20b4641835AC9161BD4f0994", + "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, diff --git a/axelar-chains-config/package-lock.json b/axelar-chains-config/package-lock.json index 661a42fb..c2ad0ad7 100644 --- a/axelar-chains-config/package-lock.json +++ b/axelar-chains-config/package-lock.json @@ -1,12 +1,12 @@ { "name": "@axelar-network/axelar-chains-config", - "version": "1.1.0", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@axelar-network/axelar-chains-config", - "version": "1.1.0", + "version": "1.2.0", "license": "MIT", "dependencies": { "@ethersproject/keccak256": "^5.7.0", diff --git a/axelar-chains-config/package.json b/axelar-chains-config/package.json index 27694c8b..f3b70fc3 100644 --- a/axelar-chains-config/package.json +++ b/axelar-chains-config/package.json @@ -1,6 +1,6 @@ { "name": "@axelar-network/axelar-chains-config", - "version": "1.1.0", + "version": "1.2.0", "description": "A utility to get chain information from Axelar", "main": "src/index.js", "types": "dist/index.d.ts", diff --git a/evm/deploy-its.js b/evm/deploy-its.js index 42bc980f..715fe1a2 100644 --- a/evm/deploy-its.js +++ b/evm/deploy-its.js @@ -136,6 +136,7 @@ async function deployAll(config, wallet, chain, options) { const deployments = { tokenManagerDeployer: { name: 'Token Manager Deployer', + contractName: 'TokenManagerDeployer', async deploy() { return await deployContract( deployMethod, @@ -151,6 +152,7 @@ async function deployAll(config, wallet, chain, options) { }, interchainToken: { name: 'Interchain Token', + contractName: 'InterchainToken', async deploy() { return await deployContract( deployMethod, @@ -166,6 +168,7 @@ async function deployAll(config, wallet, chain, options) { }, interchainTokenDeployer: { name: 'Interchain Token Deployer', + contractName: 'InterchainTokenDeployer', async deploy() { return await deployContract( deployMethod, @@ -181,6 +184,7 @@ async function deployAll(config, wallet, chain, options) { }, tokenManager: { name: 'Token Manager', + contractName: 'TokenManager', async deploy() { return await deployContract( deployMethod, @@ -196,6 +200,7 @@ async function deployAll(config, wallet, chain, options) { }, tokenHandler: { name: 'Token Handler', + contractName: 'TokenHandler', async deploy() { return await deployContract( deployMethod, @@ -211,6 +216,7 @@ async function deployAll(config, wallet, chain, options) { }, implementation: { name: 'Interchain Token Service Implementation', + contractName: 'InterchainTokenService', async deploy() { const args = [ contractConfig.tokenManagerDeployer, @@ -239,6 +245,7 @@ async function deployAll(config, wallet, chain, options) { }, address: { name: 'Interchain Token Service Proxy', + contractName: 'InterchainProxy', async deploy() { const operatorAddress = options.operatorAddress || wallet.address; @@ -265,6 +272,7 @@ async function deployAll(config, wallet, chain, options) { }, interchainTokenFactoryImplementation: { name: 'Interchain Token Factory Implementation', + contractName: 'InterchainTokenFactory', async deploy() { return await deployContract( deployMethod, @@ -280,6 +288,7 @@ async function deployAll(config, wallet, chain, options) { }, interchainTokenFactory: { name: 'Interchain Token Factory Proxy', + contractName: 'InterchainProxy', async deploy() { const args = [itsFactoryContractConfig.implementation, wallet.address, '0x']; printInfo('ITS Factory Proxy args', args); @@ -303,13 +312,9 @@ async function deployAll(config, wallet, chain, options) { const deployment = deployments[key]; - if (key === 'address' && options.reuseProxy) { - printInfo(`Reusing ${deployment.name} deployment at ${contractConfig.address}`); - continue; - } - - if (key === 'interchainTokenFactory' && options.reuseProxy) { - printInfo(`Reusing ${deployment.name} deployment at ${itsFactoryContractConfig.address}`); + // When upgrading/reusing proxy, avoid re-deploying the proxy and the interchain token contract + if (options.reuseProxy && ['InterchainToken', 'InterchainProxy'].includes(deployment.contractName)) { + printInfo(`Reusing ${deployment.name} deployment for contract ${deployment.contractName} at ${contractConfig[key]}`); continue; } @@ -473,7 +478,7 @@ if (require.main === module) { .default('create3'), ); - addExtendedOptions(program, { skipExisting: true, upgrade: true, predictOnly: true }); + addExtendedOptions(program, { artifactPath: true, skipExisting: true, upgrade: true, predictOnly: true }); program.addOption(new Option('--reuseProxy', 'reuse existing proxy (useful for upgrade deployments')); program.addOption(new Option('--contractName ', 'contract name').default('InterchainTokenService')); // added for consistency diff --git a/evm/its.js b/evm/its.js index 154c4e96..373a1b18 100644 --- a/evm/its.js +++ b/evm/its.js @@ -3,7 +3,7 @@ const { ethers } = require('hardhat'); const { getDefaultProvider, - utils: { hexZeroPad, toUtf8Bytes, keccak256 }, + utils: { hexZeroPad, toUtf8Bytes, keccak256, defaultAbiCoder }, BigNumber, constants: { AddressZero }, Contract, @@ -33,10 +33,11 @@ const IOwnable = getContractJSON('IOwnable'); const { addExtendedOptions } = require('./cli-utils'); const { getSaltFromKey } = require('@axelar-network/axelar-gmp-sdk-solidity/scripts/utils'); const tokenManagerImplementations = { - MINT_BURN: 0, + INTERCHAIN_TOKEN: 0, MINT_BURN_FROM: 1, LOCK_UNLOCK: 2, LOCK_UNLOCK_FEE: 3, + MINT_BURN: 4, }; function getDeploymentSalt(options) { @@ -242,22 +243,26 @@ async function processCommand(config, chain, options) { } case 'deployTokenManager': { - const { destinationChain, type, params, gasValue } = options; + const { destinationChain, type, operator, tokenAddress, gasValue } = options; const deploymentSalt = getDeploymentSalt(options); + const tokenManagerType = tokenManagerImplementations[type]; validateParameters({ isString: { destinationChain }, - isValidCalldata: { params }, - isValidNumber: { gasValue }, + isValidAddress: { tokenAddress }, + isValidCalldata: { operator }, + isValidNumber: { gasValue, tokenManagerType }, }); isValidDestinationChain(config, destinationChain); + const params = defaultAbiCoder.encode(['bytes', 'address'], [operator, tokenAddress]); + const tx = await interchainTokenService.deployTokenManager( deploymentSalt, destinationChain, - tokenManagerImplementations[type], + tokenManagerType, params, gasValue, gasOptions, @@ -697,6 +702,8 @@ if (require.main === module) { program.addOption(new Option('--destinationChain ', 'destination chain')); program.addOption(new Option('--destinationAddress ', 'destination address')); program.addOption(new Option('--params ', 'params for TokenManager deployment')); + program.addOption(new Option('--tokenAddress ', 'token address to use for token manager deployment')); + program.addOption(new Option('--operator ', 'operator address to use for token manager')); program.addOption(new Option('--gasValue ', 'gas value').default(0)); program.addOption(new Option('--name ', 'token name')); program.addOption(new Option('--symbol ', 'token symbol')); diff --git a/package-lock.json b/package-lock.json index 0f962ba0..f26e5cd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@axelar-network/axelar-contract-deployments", - "version": "1.1.0", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@axelar-network/axelar-contract-deployments", - "version": "1.1.0", + "version": "1.2.0", "license": "MIT", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", diff --git a/package.json b/package.json index 839dbfa6..40dc65bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@axelar-network/axelar-contract-deployments", - "version": "1.1.0", + "version": "1.2.0", "description": "Axelar contract deployment scripts", "main": "index.js", "scripts": { From a916abaeafc61248b2136327f4b3c15c563aa4ce Mon Sep 17 00:00:00 2001 From: Dean Date: Mon, 25 Mar 2024 22:30:37 -0400 Subject: [PATCH 20/85] feat: add blacksmith (#198) * feat: add blacksmith * feat: checkout code before npm ci * fix: indentation --- .github/workflows/lint.yaml | 17 +++++++---------- .github/workflows/test-chains-config.yaml | 20 ++++++++------------ .github/workflows/test.yaml | 20 ++++++++------------ package-lock.json | 2 +- package.json | 2 +- 5 files changed, 25 insertions(+), 36 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 8ceb6a8e..adee4bbb 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -4,20 +4,17 @@ on: pull_request jobs: lint: - strategy: - matrix: - node-version: - - 18.x - os: - - ubuntu-latest - runs-on: ${{ matrix.os }} + runs-on: blacksmith-2vcpu-ubuntu-2204 + steps: - - uses: actions/checkout@v4 + - name: Checkout code + uses: actions/checkout@v4 - name: Install Node.js - uses: actions/setup-node@v3 + uses: useblacksmith/setup-node@v5 with: - node-version: ${{ matrix.node-version }} + node-version: 18.x + cache: 'npm' - name: Install Dependencies run: npm ci diff --git a/.github/workflows/test-chains-config.yaml b/.github/workflows/test-chains-config.yaml index 5957734b..c002abc3 100644 --- a/.github/workflows/test-chains-config.yaml +++ b/.github/workflows/test-chains-config.yaml @@ -4,22 +4,18 @@ on: pull_request jobs: test: - strategy: - matrix: - node-version: - - 18.x - os: - - ubuntu-latest - runs-on: ${{ matrix.os }} - steps: - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} + runs-on: blacksmith-2vcpu-ubuntu-2204 + steps: - name: Checkout code uses: actions/checkout@v4 + - name: Install Node.js + uses: useblacksmith/setup-node@v5 + with: + node-version: 18.x + cache: 'npm' + - name: Install run: npm ci working-directory: axelar-chains-config diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index fa22e925..5d7071cf 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -4,22 +4,18 @@ on: pull_request jobs: test: - strategy: - matrix: - node-version: - - 18.x - os: - - ubuntu-latest - runs-on: ${{ matrix.os }} - steps: - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} + runs-on: blacksmith-2vcpu-ubuntu-2204 + steps: - name: Checkout code uses: actions/checkout@v4 + - name: Install Node.js + uses: useblacksmith/setup-node@v5 + with: + node-version: 18.x + cache: 'npm' + - name: Install run: npm ci diff --git a/package-lock.json b/package-lock.json index f26e5cd4..fe790ab3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "readline-sync": "^1.4.10" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@0xpolygonhermez/zkevm-commonjs": { diff --git a/package.json b/package.json index 40dc65bd..825c4620 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,6 @@ "@openzeppelin/defender-relay-client": "^1.54.1" }, "engines": { - "node": ">=16" + "node": ">=18" } } From e4e551f5a518d06b9cbb772f44822e4888676c35 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 26 Mar 2024 01:50:13 -0400 Subject: [PATCH 21/85] chore: upgrade deps (#199) * chore: upgrade deps * bump hardhat * bump hardhat version to 2.19 * downgrade gmp sdk --- hardhat.config.js | 2 + package-lock.json | 469 ++++++++++++++++++++++++++++++---------------- package.json | 8 +- 3 files changed, 312 insertions(+), 167 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index c136374b..d55b7a99 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -6,6 +6,8 @@ const chains = require(`${__dirname}/axelar-chains-config/info/${env}.json`); const keys = readJSON(`${__dirname}/keys.json`); const { networks, etherscan } = importNetworks(chains, keys); +networks.hardhat.hardfork = process.env.EVM_VERSION || 'merge'; + /** * @type import('hardhat/config').HardhatUserConfig */ diff --git a/package-lock.json b/package-lock.json index fe790ab3..e4ec476b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "license": "MIT", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", - "@axelar-network/axelar-cgp-solidity": "6.2.1", + "@axelar-network/axelar-cgp-solidity": "6.3.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4", - "@axelar-network/interchain-token-service": "1.2.1", + "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", "axios": "^1.6.2", @@ -26,10 +26,10 @@ "chalk": "^4.1.2", "commander": "^11.0.0", "dotenv": "^16.0.1", - "eslint": "^8.36.0", + "eslint": "^8.57.0", "eslint-config-richardpringle": "^2.0.0", "fs-extra": "^11.1.1", - "hardhat": "^2.13.0", + "hardhat": "~2.19.5", "mocha": "^10.2.0", "prettier": "^2.8.7", "readline-sync": "^1.4.10" @@ -120,14 +120,22 @@ "dev": true }, "node_modules/@axelar-network/axelar-cgp-solidity": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.2.1.tgz", - "integrity": "sha512-0RaxLYmsp3elXBytn7+eZUil1KFS6jjHR/ECrN/3IC7TeTDPUYunyy6JDxCdNYNtiD6EKgUAfQ7G4DrBb6hRxg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.3.0.tgz", + "integrity": "sha512-dHE2UgaFZvQvL0ythMi+aBsr4t+eR6zrVGmCU5BxslEqi6Tx+Wmjwg1O1p15EqoztalSqRKj+r57n3GtgeUpig==", "dependencies": { - "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4" + "@axelar-network/axelar-gmp-sdk-solidity": "5.7.0" }, "engines": { - "node": ">=16" + "node": ">=18" + } + }, + "node_modules/@axelar-network/axelar-cgp-solidity/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.7.0.tgz", + "integrity": "sha512-JlokiWFxvR6bFQtDjdErtk0mZrr3GH1A8bKps1zVP/Bu4XOHR0WsrWGPVhWIbvT8a8Ag3dva4hskBYgdq+pLig==", + "engines": { + "node": ">=18" } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { @@ -139,9 +147,9 @@ } }, "node_modules/@axelar-network/interchain-token-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-1.2.1.tgz", - "integrity": "sha512-l7X9xi9aveAfUts48kBsPzkWGIVdAjX2iRLWSqQkqeCvXZjDsEq54NFF2/JK7Cf2YTTJcVvFDJn9T18i5bzAfQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-1.2.4.tgz", + "integrity": "sha512-Sgw2M4VzW5hjL9TBe2ljL5wo+paYqlL2XNQlq1dyaDAD6E7PG1MQ+0U44QnfJfhhAwcqZtKQmb92ZNwV+BEdVw==", "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.2.1", "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4" @@ -150,6 +158,17 @@ "node": ">=16" } }, + "node_modules/@axelar-network/interchain-token-service/node_modules/@axelar-network/axelar-cgp-solidity": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.2.1.tgz", + "integrity": "sha512-0RaxLYmsp3elXBytn7+eZUil1KFS6jjHR/ECrN/3IC7TeTDPUYunyy6JDxCdNYNtiD6EKgUAfQ7G4DrBb6hRxg==", + "dependencies": { + "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@chainsafe/as-sha256": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", @@ -363,9 +382,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -386,9 +405,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1205,13 +1224,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -1232,9 +1251,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@jridgewell/resolve-uri": { @@ -2703,9 +2722,9 @@ "peer": true }, "node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz", + "integrity": "sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==", "dev": true, "dependencies": { "buffer": "^6.0.3", @@ -2800,16 +2819,6 @@ "node": ">=0.4.0" } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -2906,6 +2915,38 @@ "node": ">=0.4.2" } }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -3356,6 +3397,51 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3709,9 +3795,9 @@ } }, "node_modules/classic-level": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", + "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3734,6 +3820,18 @@ "node": ">=6" } }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-table3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", @@ -4145,14 +4243,17 @@ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dev": true, "peer": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/death": { @@ -4348,21 +4449,6 @@ "node": ">=8" } }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dev": true, - "peer": true, - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -4597,15 +4683,16 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "dev": true, "hasInstallScript": true, "peer": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -4632,14 +4719,17 @@ "peer": true }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dev": true, "peer": true, "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/escalade": { @@ -4752,16 +4842,16 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -5104,6 +5194,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "peer": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -5438,6 +5544,17 @@ "npm": ">=3" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/eventemitter3": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", @@ -5481,13 +5598,6 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true, - "peer": true - }, "node_modules/fast-base64-decode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", @@ -5650,9 +5760,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -6024,9 +6134,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -6128,9 +6238,9 @@ } }, "node_modules/hardhat": { - "version": "2.18.3", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.18.3.tgz", - "integrity": "sha512-JuYaTG+4ZHVjEHCW5Hn6jCHH3LpO75dtgznZpM/dLv12RcSlw/xHbeQh3FAsGahQr1epKryZcZEMHvztVZHe0g==", + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.19.5.tgz", + "integrity": "sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -6152,6 +6262,7 @@ "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", "chalk": "^2.4.2", "chokidar": "^3.4.0", "ci-info": "^2.0.0", @@ -7304,11 +7415,12 @@ } }, "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.1.tgz", + "integrity": "sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==", "dev": true, "dependencies": { + "abstract-level": "^1.0.4", "browser-level": "^1.0.1", "classic-level": "^1.2.0" }, @@ -9654,17 +9766,16 @@ } }, "node_modules/solidity-coverage": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.5.tgz", - "integrity": "sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.11.tgz", + "integrity": "sha512-yy0Yk+olovBbXn0Me8BWULmmv7A69ZKkP5aTOJGOO8u61Tu2zS989erfjtFlUjDnfWtxRAVkd8BsQD704yLWHw==", "dev": true, "peer": true, "dependencies": { "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.16.0", + "@solidity-parser/parser": "^0.18.0", "chalk": "^2.4.2", "death": "^1.1.0", - "detect-port": "^1.3.0", "difflib": "^0.2.4", "fs-extra": "^8.1.0", "ghost-testrpc": "^0.0.2", @@ -9672,7 +9783,7 @@ "globby": "^10.0.1", "jsonschema": "^1.2.4", "lodash": "^4.17.15", - "mocha": "10.2.0", + "mocha": "^10.2.0", "node-emoji": "^1.10.0", "pify": "^4.0.1", "recursive-readdir": "^2.2.2", @@ -9689,14 +9800,11 @@ } }, "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.1.tgz", - "integrity": "sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", "dev": true, - "peer": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } + "peer": true }, "node_modules/solidity-coverage/node_modules/ansi-styles": { "version": "3.2.1", @@ -10423,9 +10531,9 @@ "dev": true }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true, "peer": true }, @@ -10836,59 +10944,59 @@ "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, "node_modules/web3-core": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.3.tgz", - "integrity": "sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", + "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", "dev": true, "peer": true, "dependencies": { "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.3", - "web3-core-method": "1.10.3", - "web3-core-requestmanager": "1.10.3", - "web3-utils": "1.10.3" + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-requestmanager": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-helpers": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", - "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", + "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", "dev": true, "peer": true, "dependencies": { - "web3-eth-iban": "1.10.3", - "web3-utils": "1.10.3" + "web3-eth-iban": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-method": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.3.tgz", - "integrity": "sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", + "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", "dev": true, "peer": true, "dependencies": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.3", - "web3-core-promievent": "1.10.3", - "web3-core-subscriptions": "1.10.3", - "web3-utils": "1.10.3" + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-promievent": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", - "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", + "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", "dev": true, "peer": true, "dependencies": { @@ -10899,17 +11007,17 @@ } }, "node_modules/web3-core-requestmanager": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz", - "integrity": "sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", + "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", "dev": true, "peer": true, "dependencies": { "util": "^0.12.5", - "web3-core-helpers": "1.10.3", - "web3-providers-http": "1.10.3", - "web3-providers-ipc": "1.10.3", - "web3-providers-ws": "1.10.3" + "web3-core-helpers": "1.10.4", + "web3-providers-http": "1.10.4", + "web3-providers-ipc": "1.10.4", + "web3-providers-ws": "1.10.4" }, "engines": { "node": ">=8.0.0" @@ -10930,14 +11038,14 @@ } }, "node_modules/web3-core-subscriptions": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz", - "integrity": "sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", + "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", "dev": true, "peer": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.3" + "web3-core-helpers": "1.10.4" }, "engines": { "node": ">=8.0.0" @@ -10951,58 +11059,58 @@ "peer": true }, "node_modules/web3-eth-iban": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", - "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", + "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", "dev": true, "peer": true, "dependencies": { "bn.js": "^5.2.1", - "web3-utils": "1.10.3" + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-http": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.3.tgz", - "integrity": "sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", + "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", "dev": true, "peer": true, "dependencies": { "abortcontroller-polyfill": "^1.7.5", "cross-fetch": "^4.0.0", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.3" + "web3-core-helpers": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz", - "integrity": "sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", + "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", "dev": true, "peer": true, "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.10.3" + "web3-core-helpers": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz", - "integrity": "sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", + "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", "dev": true, "peer": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.3", + "web3-core-helpers": "1.10.4", "websocket": "^1.0.32" }, "engines": { @@ -11010,9 +11118,9 @@ } }, "node_modules/web3-utils": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", - "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "dev": true, "peer": true, "dependencies": { @@ -11156,6 +11264,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index 825c4620..c2b14926 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "homepage": "https://github.com/axelarnetwork/axelar-contract-deployments#readme", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", - "@axelar-network/axelar-cgp-solidity": "6.2.1", + "@axelar-network/axelar-cgp-solidity": "6.3.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4", - "@axelar-network/interchain-token-service": "1.2.1", + "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", "path": "^0.12.7", @@ -37,10 +37,10 @@ "chalk": "^4.1.2", "commander": "^11.0.0", "dotenv": "^16.0.1", - "eslint": "^8.36.0", + "eslint": "^8.57.0", "eslint-config-richardpringle": "^2.0.0", "fs-extra": "^11.1.1", - "hardhat": "^2.13.0", + "hardhat": "~2.19.5", "mocha": "^10.2.0", "prettier": "^2.8.7", "readline-sync": "^1.4.10", From b86264e9a3151c6f6dcbaef822be0cb033b8cfb1 Mon Sep 17 00:00:00 2001 From: re1ro Date: Tue, 26 Mar 2024 19:48:14 -0400 Subject: [PATCH 22/85] feat(AxelarServiceGovernance): new external multisig setup (#169) * feat(AxelarServiceGovernance): new external multisig setup * ci(test): deploy AxelarServiceGovernance * fix(lint): remove unused variable * fix(lint): semicolon * fix(lint): space * chore(npm): GMP SDK version bump --- .github/workflows/test.yaml | 7 +---- evm/deploy-contract.js | 14 +++------ evm/governance.js | 60 +------------------------------------ package-lock.json | 20 ++++++------- package.json | 12 ++++---- 5 files changed, 22 insertions(+), 91 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 5d7071cf..a2e90526 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -42,12 +42,7 @@ jobs: }, "AxelarServiceGovernance": { "minimumTimeDelay": 3600, - "cosigners": [ - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" - ], - "threshold": 2 + "multisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, "Multisig": { "signers": [ diff --git a/evm/deploy-contract.js b/evm/deploy-contract.js index f944a49b..23c988fb 100644 --- a/evm/deploy-contract.js +++ b/evm/deploy-contract.js @@ -60,19 +60,13 @@ async function getConstructorArgs(contractName, chain, wallet) { throw new Error(`Missing AxelarServiceGovernance.minimumTimeDelay in the chain info.`); } - const cosigners = contractConfig.cosigners; + const multisig = contractConfig.multisig; - if (!isAddressArray(cosigners)) { - throw new Error(`Missing AxelarServiceGovernance.cosigners in the chain info.`); + if (!isAddress(multisig)) { + throw new Error(`Missing AxelarServiceGovernance.multisig address in the chain info.`); } - const threshold = contractConfig.threshold; - - if (!isNumber(threshold)) { - throw new Error(`Missing AxelarServiceGovernance.threshold in the chain info.`); - } - - return [gateway, governanceChain, governanceAddress, minimumTimeDelay, cosigners, threshold]; + return [gateway, governanceChain, governanceAddress, minimumTimeDelay, multisig]; } case 'InterchainProposalSender': { diff --git a/evm/governance.js b/evm/governance.js index 531d70b8..33a372a1 100644 --- a/evm/governance.js +++ b/evm/governance.js @@ -3,7 +3,7 @@ const { ethers } = require('hardhat'); const { getDefaultProvider, - utils: { defaultAbiCoder, keccak256, Interface, parseEther }, + utils: { defaultAbiCoder, keccak256, parseEther }, Contract, BigNumber, constants: { AddressZero }, @@ -19,7 +19,6 @@ const { getCurrentTimeInSeconds, wasEventEmitted, printWarn, - printError, getBytecodeHash, isValidAddress, mainProcessor, @@ -423,62 +422,6 @@ async function processCommand(_, chain, options) { break; } - case 'executeMultisig': { - if (contractName === 'InterchainGovernance') { - throw new Error(`Invalid governance action for InterchainGovernance: ${action}`); - } - - const proposalHash = keccak256(defaultAbiCoder.encode(['address', 'bytes', 'uint256'], [target, calldata, nativeValue])); - const isApproved = await governance.multisigApprovals(proposalHash); - - if (!isApproved) { - throw new Error('Multisig proposal has not been approved.'); - } - - const isSigner = await governance.isSigner(wallet.address); - - if (!isSigner) { - throw new Error(`Caller is not a valid signer address: ${wallet.address}`); - } - - const executeInterface = new Interface(governance.interface.fragments); - const executeCalldata = executeInterface.encodeFunctionData('executeMultisigProposal', [target, calldata, nativeValue]); - const topic = keccak256(executeCalldata); - - const hasSignerVoted = await governance.hasSignerVoted(wallet.address, topic); - - if (hasSignerVoted) { - throw new Error(`Signer has already voted: ${wallet.address}`); - } - - const signerVoteCount = await governance.getSignerVotesCount(topic); - printInfo(`${signerVoteCount} signers have already voted.`); - - let receipt; - - if (prompt('Proceed with executing this proposal?', yes)) { - throw new Error('Proposal execution cancelled.'); - } - - try { - const tx = await governance.executeMultisigProposal(target, calldata, nativeValue, gasOptions); - receipt = await tx.wait(chain.confirmations); - } catch (error) { - printError(error); - return; - } - - const eventEmitted = wasEventEmitted(receipt, governance, 'MultisigExecuted'); - - if (!eventEmitted) { - throw new Error('Multisig proposal execution failed.'); - } - - printInfo('Multisig proposal executed.'); - - break; - } - default: { throw new Error(`Unknown proposal action ${proposalAction}`); } @@ -564,7 +507,6 @@ if (require.main === module) { 'cancel', 'scheduleMultisig', 'submitMultisig', - 'executeMultisig', 'cancelMultisig', ]), ); diff --git a/package-lock.json b/package-lock.json index e4ec476b..ec82aa61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4", + "@axelar-network/axelar-gmp-sdk-solidity": "^5.7.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", @@ -130,7 +130,7 @@ "node": ">=18" } }, - "node_modules/@axelar-network/axelar-cgp-solidity/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.7.0.tgz", "integrity": "sha512-JlokiWFxvR6bFQtDjdErtk0mZrr3GH1A8bKps1zVP/Bu4XOHR0WsrWGPVhWIbvT8a8Ag3dva4hskBYgdq+pLig==", @@ -138,14 +138,6 @@ "node": ">=18" } }, - "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.6.4.tgz", - "integrity": "sha512-PQjV+HeJynmSRMhyM3SexwnbFNruSaiRUeNCWjV8/7CkdPsDqypoqIXVRVU8Zk92DUUHeqZZzL/3qP2LYuvlnA==", - "engines": { - "node": ">=16" - } - }, "node_modules/@axelar-network/interchain-token-service": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-1.2.4.tgz", @@ -169,6 +161,14 @@ "node": ">=16" } }, + "node_modules/@axelar-network/interchain-token-service/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.6.4.tgz", + "integrity": "sha512-PQjV+HeJynmSRMhyM3SexwnbFNruSaiRUeNCWjV8/7CkdPsDqypoqIXVRVU8Zk92DUUHeqZZzL/3qP2LYuvlnA==", + "engines": { + "node": ">=16" + } + }, "node_modules/@chainsafe/as-sha256": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", diff --git a/package.json b/package.json index c2b14926..1635b3a8 100644 --- a/package.json +++ b/package.json @@ -24,15 +24,17 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "5.6.4", + "@axelar-network/axelar-gmp-sdk-solidity": "^5.7.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", - "path": "^0.12.7", - "axios": "^1.6.2" + "axios": "^1.6.2", + "path": "^0.12.7" }, "devDependencies": { + "@ledgerhq/hw-transport-node-hid": "^6.27.21", "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@openzeppelin/defender-relay-client": "^1.54.1", "chai": "^4.3.7", "chalk": "^4.1.2", "commander": "^11.0.0", @@ -43,9 +45,7 @@ "hardhat": "~2.19.5", "mocha": "^10.2.0", "prettier": "^2.8.7", - "readline-sync": "^1.4.10", - "@ledgerhq/hw-transport-node-hid": "^6.27.21", - "@openzeppelin/defender-relay-client": "^1.54.1" + "readline-sync": "^1.4.10" }, "engines": { "node": ">=18" From 7f63705b940d63856dad9fa544b9c3e68f988f91 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 27 Mar 2024 18:10:33 +0000 Subject: [PATCH 23/85] chore(wasm): update MultisigProver instantiate message (#201) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update MultisigProver instantiate message * prettier --------- Co-authored-by: João Sousa --- cosmwasm/README.md | 7 ++++--- cosmwasm/deploy-contract.js | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cosmwasm/README.md b/cosmwasm/README.md index 516983f4..f1ea15b7 100644 --- a/cosmwasm/README.md +++ b/cosmwasm/README.md @@ -18,14 +18,14 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif }, "ConnectionRouter": { "adminAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz", - "governanceAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz" + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj" }, "Multisig": { - "governanceAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "blockExpiry": 10 }, "Rewards": { - "governanceAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "rewardsDenom": "uamplifier", "params": { "epoch_duration": "10", @@ -69,6 +69,7 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif }, "MultisigProver": { "ethereum-2": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "adminAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz", "destinationChainID": "0", "signingThreshold": [ diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 763a2d82..2d5a112b 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -156,13 +156,26 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain }, } = contracts; const { - [chainId]: { adminAddress, destinationChainID, signingThreshold, serviceName, workerSetDiffThreshold, encoder, keyType }, + [chainId]: { + adminAddress, + governanceAddress, + destinationChainID, + signingThreshold, + serviceName, + workerSetDiffThreshold, + encoder, + keyType, + }, } = contractConfig; if (!validateAddress(adminAddress)) { throw new Error(`Missing or invalid MultisigProver[${chainId}].adminAddress in axelar info`); } + if (!validateAddress(governanceAddress)) { + throw new Error(`Missing or invalid MultisigProver[${chainId}].governanceAddress in axelar info`); + } + if (!validateAddress(gatewayAddress)) { throw new Error(`Missing or invalid Gateway[${chainId}].address in axelar info`); } @@ -205,6 +218,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain return { admin_address: adminAddress, + governance_address: governanceAddress, gateway_address: gatewayAddress, multisig_address: multisigAddress, service_registry_address: serviceRegistryAddress, From a62ee8244c7ee1e8881f23ff761179b6bd96f8f0 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Mon, 1 Apr 2024 15:15:30 +0530 Subject: [PATCH 24/85] feat: add script to automate contract deployment testing (#194) * feat: add script to automate contract deployment testing * refactor: address PR comments * refactor: add note for testing --- evm/contracts-deployment-test.js | 60 +++++++++++++++++++++++++++++++ evm/deploy-test-gateway-token.js | 62 ++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 evm/contracts-deployment-test.js create mode 100644 evm/deploy-test-gateway-token.js diff --git a/evm/contracts-deployment-test.js b/evm/contracts-deployment-test.js new file mode 100644 index 00000000..a84dc3e7 --- /dev/null +++ b/evm/contracts-deployment-test.js @@ -0,0 +1,60 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { execSync } = require('child_process'); +const { + Wallet, + providers: { JsonRpcProvider }, +} = ethers; +const { Command, Option } = require('commander'); + +const { mainProcessor } = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); + +async function processCommand(_, chain, options) { + const wallet = new Wallet(options.privateKey, new JsonRpcProvider(chain.rpc)); + + const cmds = [ + `node evm/deploy-contract.js -c ConstAddressDeployer -m create --artifactPath ../evm/legacy/ConstAddressDeployer.json`, + `node evm/deploy-contract.js -c Create3Deployer -m create2`, + `node evm/deploy-gateway-v6.2.x.js -m create3 --keyID ${wallet.address} --mintLimiter ${wallet.address} --governance ${wallet.address}`, + `node evm/gateway.js --action params`, + `node evm/deploy-contract.js -c Operators -m create2`, + `node evm/deploy-upgradable.js -c AxelarGasService -m create${options.env === 'testnet' ? '' : '2'}`, + `node evm/deploy-contract.js -c Multisig -m create3 -s 'testSalt'`, + `node evm/deploy-contract.js -c InterchainGovernance -m create3`, + `node evm/deploy-its.js -s "testSalt" --proxySalt 'testSalt'`, + `node evm/gateway.js --action transferMintLimiter`, + `node evm/gateway.js --action transferGovernance`, + ]; + + if (options.deployDepositService) { + cmds.push( + `node evm/deploy-test-gateway-token.js`, + `node evm/deploy-upgradable.js -c AxelarDepositService -m create --salt "testSalt"`, + ); + } + + for (let i = 0; i < cmds.length; i++) { + execSync(`${cmds[i]} -n ${options.chainNames} -p ${options.privateKey} ${options.yes ? '-y' : ''}`, { stdio: 'inherit' }); + } +} + +async function main(options) { + await mainProcessor(options, processCommand, false); +} + +if (require.main === module) { + const program = new Command(); + + program.name('contracts-deployment-test').description('Deploy contracts to test deployment on chain'); + program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); + program.addOption(new Option('--deployDepositService', 'include AxelarDepositService in deployment tests').env('deployDepositService')); + addBaseOptions(program); + + program.action((options) => { + main(options); + }); + + program.parse(); +} diff --git a/evm/deploy-test-gateway-token.js b/evm/deploy-test-gateway-token.js new file mode 100644 index 00000000..7f568376 --- /dev/null +++ b/evm/deploy-test-gateway-token.js @@ -0,0 +1,62 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { + Contract, + Wallet, + providers: { JsonRpcProvider }, + utils: { parseEther, keccak256, defaultAbiCoder, arrayify, hexlify, randomBytes }, + constants: { AddressZero }, +} = ethers; +const { Command, Option } = require('commander'); + +const { mainProcessor, getContractJSON, printInfo } = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); + +async function getCommandId(gateway) { + return hexlify(randomBytes(32)); +} + +async function processCommand(_, chain, options) { + printInfo('This script is for testing deployment, not for deployment in production'); + const provider = new JsonRpcProvider(chain.rpc); + const wallet = new Wallet(options.privateKey, provider); + const gatewayAddress = chain.contracts.AxelarGateway.address; + const gateway = new Contract(gatewayAddress, getContractJSON('AxelarGateway').abi, provider); + + const commandID = await getCommandId(gateway); + const chainId = chain.chainId; + const command = 'deployToken'; + const params = defaultAbiCoder.encode( + ['string', 'string', 'uint256', 'uint256', 'address', 'uint256'], + ['WrappedNativeToken', `W${chain.tokenSymbol}`, 18, parseEther('100'), AddressZero, parseEther('10')], + ); + const data = defaultAbiCoder.encode(['uint256', 'bytes32[]', 'string[]', 'bytes[]'], [chainId, [commandID], [command], [params]]); + + const dataHash = arrayify(keccak256(data)); + const signature = await wallet.signMessage(dataHash); + const proof = defaultAbiCoder.encode(['address[]', 'uint256[]', 'uint256', 'bytes[]'], [[wallet.address], [1], 1, [signature]]); + const input = defaultAbiCoder.encode(['bytes', 'bytes'], [data, proof]); + + await gateway.connect(wallet).execute(input, chain.gasOptions); +} + +async function main(options) { + await mainProcessor(options, processCommand, false); +} + +if (require.main === module) { + const program = new Command(); + + program + .name('deploy-test-gateway-token') + .description('Deploy a native wrapped token and integrate with AxelarGateway in order to test AxelarDepositService deployment'); + program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); + addBaseOptions(program); + + program.action((options) => { + main(options); + }); + + program.parse(); +} From f18a173d027d4ecd2659049b4e9c8e4294295e8b Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 3 Apr 2024 22:44:24 +0100 Subject: [PATCH 25/85] chore(wasm): update VotingVerifier instantiate message (#205) --- cosmwasm/README.md | 2 ++ cosmwasm/deploy-contract.js | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cosmwasm/README.md b/cosmwasm/README.md index f1ea15b7..76e21bf4 100644 --- a/cosmwasm/README.md +++ b/cosmwasm/README.md @@ -41,6 +41,7 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif }, "VotingVerifier": { "ethereum-2": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "serviceName": "validators", "sourceGatewayAddress": "0xe432150cce91c13a887f7D836923d5597adD8E31", "votingThreshold": [ @@ -51,6 +52,7 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif "confirmationHeight": 1 }, "Avalanche": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "serviceName": "validators", "sourceGatewayAddress": "0xe432150cce91c13a887f7D836923d5597adD8E31", "votingThreshold": [ diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 2d5a112b..04e13f47 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -85,7 +85,7 @@ const makeVotingVerifierInstantiateMsg = ( { id: chainId }, ) => { const { - [chainId]: { serviceName, sourceGatewayAddress, votingThreshold, blockExpiry, confirmationHeight }, + [chainId]: { governanceAddress, serviceName, sourceGatewayAddress, votingThreshold, blockExpiry, confirmationHeight }, } = contractConfig; if (!validateAddress(serviceRegistryAddress)) { @@ -96,6 +96,10 @@ const makeVotingVerifierInstantiateMsg = ( throw new Error('Missing or invalid Rewards.address in axelar info'); } + if (!validateAddress(governanceAddress)) { + throw new Error(`Missing or invalid VotingVerifier[${chainId}].governanceAddress in axelar info`); + } + if (!isString(serviceName)) { throw new Error(`Missing or invalid VotingVerifier[${chainId}].serviceName in axelar info`); } @@ -119,6 +123,7 @@ const makeVotingVerifierInstantiateMsg = ( return { service_registry_address: serviceRegistryAddress, rewards_address: rewardsAddress, + governance_address: governanceAddress, service_name: serviceName, source_gateway_address: sourceGatewayAddress, voting_threshold: votingThreshold, From dc7607b5cde7d08bf34197dcd1c92a498de3f378 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Fri, 5 Apr 2024 12:46:52 +0530 Subject: [PATCH 26/85] feat: add flag to execute scripts in parallel w.r.t. chains (#203) * feat: add parallel flag to execute scripts concurrently wrt chain * chore: add chains-info to gitignore * chore: load config only when save is true * chore: rename functions * refactor: use promises instead of await for script execution * chore: update executeAllChains function * chore: resolving promises for different chains --- .gitignore | 1 + evm/cli-utils.js | 2 ++ evm/utils.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7d727be9..53997b1f 100644 --- a/.gitignore +++ b/.gitignore @@ -106,6 +106,7 @@ dist build/ cache/ artifacts/ +chains-info/ local.json keys.json diff --git a/evm/cli-utils.js b/evm/cli-utils.js index 59b98df5..8c43accd 100644 --- a/evm/cli-utils.js +++ b/evm/cli-utils.js @@ -13,6 +13,8 @@ const addBaseOptions = (program, options = {}) => { .env('ENV'), ); program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); + program.addOption(new Option('--parallel', 'run script parallely wrt chains')); + program.addOption(new Option('--saveChainSeparately', 'save chain info separately')); program.addOption(new Option('--gasOptions ', 'gas options cli override')); if (!options.ignoreChainNames) { diff --git a/evm/utils.js b/evm/utils.js index de43c27c..b8ad21ff 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -26,6 +26,7 @@ const { const { CosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const CreateDeploy = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/deploy/CreateDeploy.sol/CreateDeploy.json'); const IDeployer = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IDeployer.json'); +const { exec } = require('child_process'); const { verifyContract } = require(`${__dirname}/../axelar-chains-config`); const getSaltFromKey = (key) => { @@ -668,10 +669,18 @@ function loadConfig(env) { return require(`${__dirname}/../axelar-chains-config/info/${env}.json`); } +function loadParallelExecutionConfig(env, chain) { + return require(`${__dirname}/../chains-info/${env}-${chain}.json`); +} + function saveConfig(config, env) { writeJSON(config, `${__dirname}/../axelar-chains-config/info/${env}.json`); } +function saveParallelExecutionConfig(config, env, chain) { + writeJSON(config, `${__dirname}/../chains-info/${env}-${chain}.json`); +} + async function printWalletInfo(wallet, options = {}) { let balance = 0; const address = await wallet.getAddress(); @@ -852,6 +861,73 @@ const mainProcessor = async (options, processCommand, save = true, catchErr = fa } } + if (options.parallel && chains.length > 1) { + const cmds = process.argv.filter((command) => command); + let chainCommandIndex = -1; + let skipPrompt = false; + + for (let commandIndex = 0; commandIndex < cmds.length; commandIndex++) { + const cmd = cmds[commandIndex]; + + if (cmd === '-n' || cmd === '--chainName' || cmd === '--chainNames') { + chainCommandIndex = commandIndex; + } else if (cmd === '--parallel') { + cmds[commandIndex] = '--saveChainSeparately'; + } else if (cmd === '-y' || cmd === '--yes') { + skipPrompt = true; + } + } + + if (!skipPrompt) { + cmds.push('-y'); + } + + const successfullChains = []; + + const executeChain = (chainName) => { + const chain = config.chains[chainName.toLowerCase()]; + + if ( + chainsToSkip.includes(chain.name.toLowerCase()) || + chain.status === 'deactive' || + (chain.contracts && chain.contracts[options.contractName]?.skip) + ) { + printWarn('Skipping chain', chain.name); + return Promise.resolve(); + } + + return new Promise((resolve) => { + cmds[chainCommandIndex + 1] = chainName; + + exec(cmds.join(' '), { stdio: 'inherit' }, (error, stdout) => { + printInfo('-------------------------------------------------------'); + printInfo(`Logs for ${chainName}`, stdout); + + if (error) { + printError(`Error while running script for ${chainName}`, error); + } else { + successfullChains.push(chainName); + printInfo(`Finished running script for chain`, chainName); + } + + resolve(); + }); + }); + }; + + await Promise.all(chains.map(executeChain)); + + if (save) { + for (const chainName of successfullChains) { + config.chains[chainName.toLowerCase()] = loadParallelExecutionConfig(options.env, chainName); + } + + saveConfig(config, options.env); + } + + return; + } + for (const chainName of chains) { const chain = config.chains[chainName.toLowerCase()]; @@ -878,7 +954,11 @@ const mainProcessor = async (options, processCommand, save = true, catchErr = fa } if (save) { - saveConfig(config, options.env); + if (options.saveChainSeparately) { + saveParallelExecutionConfig(config.chains[chainName.toLowerCase()], options.env, chainName); + } else { + saveConfig(config, options.env); + } } } }; From dbd818bb682cdcf021547e3d368558f329b6c8dc Mon Sep 17 00:00:00 2001 From: re1ro Date: Sun, 7 Apr 2024 22:00:18 -0400 Subject: [PATCH 27/85] feat(GasService): script with gas service commands (#192) * feat(GasService): script with gas service commands * fix(GasService): moving extra gas service methods to a separate branch * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * fix(GasService): moving extra gas service methods to a separate branch * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * config(GasService): gas estimation params * fix(GasService): PR feedback * fix(lint): prettier * fix(GasService): PR feedback * Update axelar-chains-config/info/stagenet.json Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * fix: lint error & trailing spaces * Update evm/gas-service.js Co-authored-by: Dean * fix(GasService): PR feedback * fix(GasService): PR feedback * feat(GasService): calling updateGasInfo through Operators * refactor(GasService): PR feedback * refactor(GasService): calculating gas in floating numbers * fix(GasService): flow * feat(GasService): added AxelarScan gas estimate * refactor(GasService): converting floating numbers to integer strings * feat(GasService): adding support for express estimation * style(JS): prettier * fix(GasService): updated estimation script * chore(npm): CGP version bump * style(JS): prettier * fix(GasService): testnet config --------- Co-authored-by: Milap Sheth Co-authored-by: Dean Amiel --- axelar-chains-config/info/mainnet.json | 20 +- axelar-chains-config/info/stagenet.json | 20 +- axelar-chains-config/info/testnet.json | 18 +- evm/gas-service.js | 289 ++++++++++++++++++++++++ evm/operators.js | 66 +++++- evm/utils.js | 16 +- 6 files changed, 410 insertions(+), 19 deletions(-) create mode 100644 evm/gas-service.js diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index eb2d62fe..79d4b259 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -124,7 +124,10 @@ "gasPrice": 150000000000 }, "finality": "finalized", - "approxFinalityWaitTime": 40 + "approxFinalityWaitTime": 40, + "onchainGasEstimate": { + "blobBaseFee": 1 + } }, "avalanche": { "name": "Avalanche", @@ -1367,7 +1370,11 @@ "gasPrice": 10000000000 }, "finality": "finalized", - "approxFinalityWaitTime": 25 + "approxFinalityWaitTime": 25, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + } }, "linea": { "name": "Linea", @@ -1616,7 +1623,11 @@ "gasPrice": 10000000000 }, "finality": "finalized", - "approxFinalityWaitTime": 30 + "approxFinalityWaitTime": 30, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + } }, "mantle": { "name": "Mantle", @@ -2278,6 +2289,7 @@ "rpc": "https://rpc-axelar.imperator.co:443", "lcd": "https://lcd-axelar.imperator.co:443", "grpc": "grpc-axelar.imperator.co:2062", - "tokenSymbol": "AXL" + "tokenSymbol": "AXL", + "axelarscanApi": "https://api.axelarscan.io" } } diff --git a/axelar-chains-config/info/stagenet.json b/axelar-chains-config/info/stagenet.json index 1738583f..5df00bd0 100644 --- a/axelar-chains-config/info/stagenet.json +++ b/axelar-chains-config/info/stagenet.json @@ -86,7 +86,10 @@ "api": "https://api-goerli.etherscan.io/api" }, "finality": "finalized", - "approxFinalityWaitTime": 40 + "approxFinalityWaitTime": 40, + "onchainGasEstimate": { + "blobBaseFee": 50187563959 + } }, "avalanche": { "name": "Avalanche", @@ -763,6 +766,10 @@ "gasOptions": { "gasLimit": 5000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "finality": "finalized", "approxFinalityWaitTime": 25 }, @@ -849,6 +856,10 @@ "gasOptions": { "gasLimit": 5000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "finality": "finalized", "approxFinalityWaitTime": 30 }, @@ -1018,6 +1029,10 @@ "maxFeePerGas": 110000000, "maxPriorityFeePerGas": 100000000 }, + "onchainGasEstimate": { + "chainName": "ethereum", + "blobBaseFee": 50187563959 + }, "finality": "finalized", "approxFinalityWaitTime": 40 }, @@ -1162,6 +1177,7 @@ "rpc": "", "lcd": "", "grpc": "", - "tokenSymbol": "AXL" + "tokenSymbol": "AXL", + "axelarscanApi": "https://testnet.api.axelarscan.io" } } diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index df7e605e..f048ba06 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -105,7 +105,10 @@ "gasLimit": 8000000 }, "finality": "finalized", - "approxFinalityWaitTime": 40 + "approxFinalityWaitTime": 40, + "onchainGasEstimate": { + "blobBaseFee": 50187563959 + } }, "avalanche": { "name": "Avalanche", @@ -1643,6 +1646,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "chainName": "optimism", + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "confirmations": 3, "explorer": { "name": "Opscan", @@ -1751,6 +1759,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "chainName": "base", + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "confirmations": 2, "explorer": { "name": "Basescan", @@ -2072,6 +2085,7 @@ "rpc": "https://rpc-axelar-testnet.imperator.co:443", "lcd": "https://lcd-axelar-testnet.imperator.co:443", "grpc": "grpc-axelar-testnet.imperator.co:2062", - "tokenSymbol": "AXL" + "tokenSymbol": "AXL", + "axelarscanApi": "https://testnet.api.axelarscan.io" } } diff --git a/evm/gas-service.js b/evm/gas-service.js new file mode 100644 index 00000000..c4c0ce08 --- /dev/null +++ b/evm/gas-service.js @@ -0,0 +1,289 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { + getDefaultProvider, + Contract, + constants: { AddressZero }, +} = ethers; +const { Command, Option } = require('commander'); +const { + printInfo, + printWalletInfo, + printWarn, + printError, + mainProcessor, + prompt, + getContractJSON, + getGasOptions, + wasEventEmitted, + isValidAddress, + validateParameters, + httpPost, +} = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); +const { getWallet } = require('./sign-utils'); + +let failedChainUpdates = []; + +async function getGasUpdates(config, env, chain, destinationChains) { + const api = config.axelar.axelarscanApi; + + validateParameters({ + isNonEmptyStringArray: { destinationChains }, + }); + + let gasUpdates = await Promise.all( + destinationChains.map(async (destinationChain) => { + const destinationConfig = config.chains[destinationChain]; + + if (!destinationConfig) { + printError(`Error: chain ${destinationChain} not found in config.`); + printError(`Skipping ${destinationChain}.`); + failedChainUpdates.push({ chain: chain.axelarId, destinationChain }); + return null; + } + + const { axelarId, onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0 } = {} } = destinationConfig; + + let data; + + try { + data = await httpPost(`${api}/gmp/getFees`, { + sourceChain: chain.axelarId, + destinationChain: axelarId, + sourceTokenAddress: AddressZero, + }); + } catch (e) { + printError(`Error getting gas info for ${chain.axelarId} -> ${axelarId}`); + printError(e); + failedChainUpdates.push({ chain: chain.axelarId, destinationChain: axelarId }); + return null; + } + + const { + source_base_fee: sourceBaseFee, + source_express_fee: { total: sourceExpressFee }, + source_token: { + gas_price_in_units: { value: gasPrice }, + token_price: { usd: srcTokenPrice }, + decimals, + }, + destination_native_token: { + token_price: { usd: destinationTokenPrice }, + }, + execute_gas_multiplier: multiplier = 1.1, + } = data.result; + + const axelarBaseFee = Math.ceil(parseFloat(sourceBaseFee) * Math.pow(10, decimals)).toString(); + const expressFee = Math.ceil(parseFloat(sourceExpressFee) * Math.pow(10, decimals)).toString(); + const relativeGasPrice = Math.ceil(parseFloat(gasPrice) * parseFloat(multiplier)).toString(); + const gasPriceRatio = parseFloat(destinationTokenPrice) / parseFloat(srcTokenPrice); + const relativeBlobBaseFee = Math.ceil(blobBaseFee * gasPriceRatio).toString(); + + return { + chain: destinationChain, + gasInfo: [gasEstimationType, axelarBaseFee, expressFee, relativeGasPrice, relativeBlobBaseFee], + }; + }), + ); + + gasUpdates = gasUpdates.filter((update) => update !== null); + + // Adding lowercase chain names for case insensitivity + gasUpdates.forEach((update) => { + const { chain: destination, gasInfo } = update; + const { axelarId, onchainGasEstimate: { chainName } = {} } = config.chains[destination]; + + update.chain = axelarId; + + // Adding lowercase chain names for case insensitivity + if (axelarId.toLowerCase() !== axelarId) { + gasUpdates.push({ + chain: axelarId.toLowerCase(), + gasInfo, + }); + } + + // Adding a duplicate entry for the specified chain name if it is different from axelarId + // Allows to have `ethereum` entry for `ethereum-sepolia` chain + if (chainName && chainName !== axelarId) { + gasUpdates.push({ + chain: chainName, + gasInfo, + }); + + // Adding lowercase chain names for case insensitivity + if (chainName.toLowerCase() !== chainName) { + gasUpdates.push({ + chain: chainName.toLowerCase(), + gasInfo, + }); + } + } + }); + + return { + chainsToUpdate: gasUpdates.map(({ chain }) => chain), + gasInfoUpdates: gasUpdates.map(({ gasInfo }) => gasInfo), + }; +} + +function printFailedChainUpdates() { + if (failedChainUpdates.length > 0) { + printError('Failed to update gas info for following chain combinations'); + + failedChainUpdates.forEach(({ chain, destinationChain }) => { + printError(`${chain} -> ${destinationChain}`); + }); + } + + failedChainUpdates = []; +} + +async function processCommand(config, chain, options) { + const { env, contractName, address, action, privateKey, chains, destinationChain, destinationAddress, isExpress, yes } = options; + const executionGasLimit = parseInt(options.executionGasLimit); + + const contracts = chain.contracts; + const contractConfig = contracts[contractName]; + + let GasServiceAddress; + + if (isValidAddress(address)) { + GasServiceAddress = address; + } else { + if (!contractConfig?.address) { + throw new Error(`Contract ${contractName} is not deployed on ${chain.name}`); + } + + GasServiceAddress = contractConfig.address; + } + + const rpc = chain.rpc; + const provider = getDefaultProvider(rpc); + + const wallet = await getWallet(privateKey, provider, options); + await printWalletInfo(wallet, options); + + printInfo('Contract name', contractName); + printInfo('Contract address', GasServiceAddress); + + const gasService = new Contract(GasServiceAddress, getContractJSON('IAxelarGasService').abi, wallet); + + const gasOptions = await getGasOptions(chain, options, contractName); + + printInfo('GasService Action', action); + + if (prompt(`Proceed with action ${action} on chain ${chain.name}?`, yes)) { + return; + } + + switch (action) { + case 'estimateGasFee': { + validateParameters({ + isNonEmptyString: { destinationChain }, + isValidAddress: { destinationAddress }, + isNumber: { executionGasLimit }, + }); + + const payload = options.payload || '0x'; + + const api = config.axelar.axelarscanApi; + + printInfo(`Estimating cross-chain gas fee from ${chain.axelarId} to ${destinationChain}`); + + if (api) { + const estimate = await httpPost(`${api}/gmp/estimateGasFee`, { + sourceChain: chain.axelarId, + destinationChain, + sourceTokenAddress: AddressZero, + gasLimit: executionGasLimit, + executeData: payload, + }); + + printInfo('AxelarScan estimate ', estimate); + } + + if (isExpress) { + printInfo('Estimating express gas fee'); + } + + const gasEstimate = await gasService.estimateGasFee(destinationChain, destinationAddress, payload, executionGasLimit, '0x'); + + printInfo('GasService estimate ', gasEstimate.toString()); + printInfo('-'.repeat(50)); + + break; + } + + case 'updateGasInfo': { + validateParameters({ + isNonEmptyStringArray: { chains }, + }); + + const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); + + if (prompt(`Update gas info for following chains ${chainsToUpdate.join(', ')}?`, yes)) { + return; + } + + const tx = await gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions); + + printInfo('TX', tx.hash); + + const receipt = await tx.wait(chain.confirmations); + + const eventEmitted = wasEventEmitted(receipt, gasService, 'GasInfoUpdated'); + + if (!eventEmitted) { + printWarn('Event not emitted in receipt.'); + } + + break; + } + + default: + throw new Error(`Unknown action: ${action}`); + } +} + +async function main(options) { + await mainProcessor(options, processCommand, false); + + printFailedChainUpdates(); +} + +if (require.main === module) { + const program = new Command(); + + program.name('GasService').description('Script to manage GasService actions'); + + addBaseOptions(program, { address: true }); + + program.addOption(new Option('-c, --contractName ', 'contract name').default('AxelarGasService')); + program.addOption( + new Option('--action ', 'GasService action').choices(['estimateGasFee', 'updateGasInfo']).makeOptionMandatory(true), + ); + program.addOption(new Option('--offline', 'run script in offline mode')); + program.addOption(new Option('--nonceOffset ', 'The value to add in local nonce if it deviates from actual wallet nonce')); + + // options for estimateGasFee + program.addOption(new Option('--destinationChain ', 'Destination chain name')); + program.addOption(new Option('--destinationAddress ', 'Destination contract address')); + program.addOption(new Option('--payload ', 'Payload for the contract call').env('PAYLOAD')); + program.addOption(new Option('--executionGasLimit ', 'Execution gas limit')); + program.addOption(new Option('--isExpress', 'Estimate express gas fee')); + + // options for updateGasInfo + program.addOption(new Option('--chains ', 'Chain names')); + + program.action((options) => { + main(options); + }); + + program.parse(); +} + +exports.getGasUpdates = getGasUpdates; +exports.printFailedChainUpdates = printFailedChainUpdates; diff --git a/evm/operators.js b/evm/operators.js index ad3c9e63..2487cce9 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -20,15 +20,27 @@ const { prompt, getGasOptions, mainProcessor, + validateParameters, + getContractJSON, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); -const IAxelarGasService = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IAxelarGasService.json'); -const IOperators = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IOperators.json'); +const { getGasUpdates, printFailedChainUpdates } = require('./gas-service'); -async function processCommand(_, chain, options) { - const { contractName, address, action, privateKey, args, yes } = options; +async function processCommand(config, chain, options) { + const { + env, + contractName, + address, + action, + privateKey, + args, - const argsArray = parseArgs(args); + chains, + + yes, + } = options; + + const argsArray = args ? parseArgs(args) : []; const contracts = chain.contracts; const contractConfig = contracts[contractName]; @@ -53,7 +65,7 @@ async function processCommand(_, chain, options) { printInfo('Contract name', contractName); - const operatorsContract = new Contract(operatorsAddress, IOperators.abi, wallet); + const operatorsContract = new Contract(operatorsAddress, getContractJSON('IOperators').abi, wallet); const gasOptions = await getGasOptions(chain, options, contractName); @@ -166,7 +178,7 @@ async function processCommand(_, chain, options) { throw new Error(`Missing AxelarGasService address in the chain info.`); } - const gasServiceInterface = new Interface(IAxelarGasService.abi); + const gasServiceInterface = new Interface(getContractJSON('IAxelarGasService').abi); const collectFeesCalldata = gasServiceInterface.encodeFunctionData('collectFees', [receiver, tokens, amounts]); try { @@ -217,7 +229,7 @@ async function processCommand(_, chain, options) { throw new Error(`Missing AxelarGasService address in the chain info.`); } - const gasServiceInterface = new Interface(IAxelarGasService.abi); + const gasServiceInterface = new Interface(getContractJSON('IAxelarGasService').abi); const refundCalldata = gasServiceInterface.encodeFunctionData('refund', [txHash, logIndex, receiver, token, amount]); try { @@ -229,6 +241,34 @@ async function processCommand(_, chain, options) { break; } + case 'updateGasInfo': { + const target = chain.contracts.AxelarGasService?.address; + + validateParameters({ + isNonEmptyStringArray: { chains }, + isAddress: { target }, + }); + + const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); + + if (prompt(`Update gas info for following chains ${chainsToUpdate.join(', ')}?`, yes)) { + return; + } + + const gasServiceInterface = new Interface(getContractJSON('IAxelarGasService').abi); + const updateGasInfoCalldata = gasServiceInterface.encodeFunctionData('updateGasInfo', [chainsToUpdate, gasInfoUpdates]); + + try { + const tx = await operatorsContract.executeContract(target, updateGasInfoCalldata, 0, gasOptions); + printInfo('TX', tx.hash); + await tx.wait(chain.confirmations); + } catch (error) { + printError(error); + } + + break; + } + default: { throw new Error(`Unknown operator action: ${action}`); } @@ -237,6 +277,8 @@ async function processCommand(_, chain, options) { async function main(options) { await mainProcessor(options, processCommand); + + printFailedChainUpdates(); } if (require.main === module) { @@ -246,7 +288,7 @@ if (require.main === module) { addBaseOptions(program, { address: true }); - program.addOption(new Option('-c, --contractName ', 'contract name').default('Operators').makeOptionMandatory(false)); + program.addOption(new Option('-c, --contractName ', 'contract name').default('Operators')); program.addOption( new Option('--action ', 'operator action').choices([ 'isOperator', @@ -254,9 +296,13 @@ if (require.main === module) { 'removeOperator', 'collectFees', 'refund', + 'updateGasInfo', ]), ); - program.addOption(new Option('--args ', 'operator action arguments').makeOptionMandatory(true)); + program.addOption(new Option('--args ', 'operator action arguments')); + + // options for updateGasInfo + program.addOption(new Option('--chains ', 'Chain names')); program.action((options) => { main(options); diff --git a/evm/utils.js b/evm/utils.js index b8ad21ff..87d81cd1 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -193,6 +193,17 @@ const httpGet = (url) => { }); }; +const httpPost = async (url, data) => { + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); + return response.json(); +}; + const isNonEmptyString = (arg) => { return typeof arg === 'string' && arg !== ''; }; @@ -424,7 +435,7 @@ function validateParameters(parameters) { * Parses the input string into an array of arguments, recognizing and converting * to the following types: boolean, number, array, and string. * - * @param {string} input - The string of arguments to parse. + * @param {string} args - The string of arguments to parse. * * @returns {Array} - An array containing parsed arguments. * @@ -456,6 +467,8 @@ const parseArgs = (args) => { * Compute bytecode hash for a deployed contract or contract factory as it would appear on-chain. * Some chains don't use keccak256 for their state representation, which is taken into account by this function. * @param {Object} contractObject - An instance of the contract or a contract factory (ethers.js Contract or ContractFactory object) + * @param {string} chain - The chain name + * @param {Object} provider - The provider to use for online deployment * @returns {Promise} - The keccak256 hash of the contract bytecode */ async function getBytecodeHash(contractObject, chain = '', provider = null) { @@ -1168,6 +1181,7 @@ module.exports = { writeJSON, copyObject, httpGet, + httpPost, printObj, printLog, printInfo, From 1d05cffdd75216fe72739f5f6bcc154cf2c05c36 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 9 Apr 2024 11:16:27 -0400 Subject: [PATCH 28/85] feat: upgrade gas service on testnet to v6.3.0 (#200) * feat: upgrade gas service on testnet to v6.3.0 * prettier --- axelar-chains-config/info/testnet.json | 38 +++++++++++++------------- evm/deploy-upgradable.js | 1 + evm/ownership.js | 23 ++-------------- evm/upgradable.js | 18 +++++++++++- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index f048ba06..532aa88a 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -74,7 +74,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -131,7 +131,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -244,7 +244,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -360,7 +360,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -475,7 +475,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -591,7 +591,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -701,7 +701,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -815,7 +815,7 @@ "salt": "AxelarGasService", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, @@ -926,7 +926,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbe406f0189a0b4cf3a05c286473d23791dd44cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, @@ -1038,7 +1038,7 @@ "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1152,7 +1152,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "AxelarDepositService": { @@ -1313,7 +1313,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x5168950236fdc05708468a4e7F6eDd5E092AFC7e", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1407,7 +1407,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1512,7 +1512,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1596,7 +1596,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "Operators": { @@ -1723,7 +1723,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1836,7 +1836,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1944,7 +1944,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -2052,7 +2052,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { diff --git a/evm/deploy-upgradable.js b/evm/deploy-upgradable.js index 6ee9e712..545acd48 100644 --- a/evm/deploy-upgradable.js +++ b/evm/deploy-upgradable.js @@ -172,6 +172,7 @@ async function processCommand(_, chain, options) { gasOptions, verifyOptions, chain.name, + options, ); contractConfig.implementation = await contract.implementation(); diff --git a/evm/ownership.js b/evm/ownership.js index 0d481f2a..98f40f83 100644 --- a/evm/ownership.js +++ b/evm/ownership.js @@ -9,12 +9,12 @@ const { Contract, } = ethers; const { Command, Option } = require('commander'); -const { printInfo, printWalletInfo, loadConfig, saveConfig, prompt, getGasOptions } = require('./utils'); +const { printInfo, printWalletInfo, mainProcessor, prompt, getGasOptions } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const IOwnable = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/interfaces/IOwnable.sol/IOwnable.json'); -async function processCommand(options, chain) { +async function processCommand(_, chain, options) { const { contractName, address, action, privateKey, newOwner, yes } = options; const contracts = chain.contracts; @@ -165,24 +165,7 @@ async function processCommand(options, chain) { } async function main(options) { - const config = loadConfig(options.env); - - let chains = options.chainNames.split(',').map((str) => str.trim()); - - if (options.chainNames === 'all') { - chains = Object.keys(config.chains); - } - - for (const chain of chains) { - if (config.chains[chain.toLowerCase()] === undefined) { - throw new Error(`Chain ${chain} is not defined in the info file`); - } - } - - for (const chain of chains) { - await processCommand(options, config.chains[chain.toLowerCase()]); - saveConfig(config, options.env); - } + await mainProcessor(options, processCommand); } if (require.main === module) { diff --git a/evm/upgradable.js b/evm/upgradable.js index 4786d9c6..e68def97 100644 --- a/evm/upgradable.js +++ b/evm/upgradable.js @@ -5,7 +5,17 @@ const { Contract, ContractFactory } = ethers; const { deployAndInitContractConstant, create3DeployAndInitContract } = require('@axelar-network/axelar-gmp-sdk-solidity'); const IUpgradable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IUpgradable.json'); -const { verifyContract, deployCreate, getBytecodeHash, deployContract, printInfo, getDeployedAddress, isContract } = require('./utils'); +const { + verifyContract, + deployCreate, + getBytecodeHash, + deployContract, + printInfo, + getDeployedAddress, + isContract, + prompt, + printWarn, +} = require('./utils'); async function deployUpgradable( wallet, @@ -109,6 +119,7 @@ async function upgradeUpgradable( gasOptions = {}, verifyOptions = null, chain = '', + options = {}, ) { const proxy = new Contract(proxyAddress, IUpgradable.abi, wallet); @@ -142,6 +153,11 @@ async function upgradeUpgradable( const implementationCodeHash = await getBytecodeHash(implementation, chain); printInfo('New Implementation Code Hash', implementationCodeHash); + if (prompt('Proceed with upgrade?', options.yes)) { + printWarn('Operation Cancelled'); + return; + } + const tx = await proxy.upgrade(implementation.address, implementationCodeHash, setupParams, gasOptions); await tx.wait(); From f15eeee75a3d6d8c99fba53cf062c7271f95b8a3 Mon Sep 17 00:00:00 2001 From: re1ro Date: Tue, 9 Apr 2024 22:57:04 -0400 Subject: [PATCH 29/85] ci(GasService): update GasInfo every 2 hours (#202) * feat(GasService): script with gas service commands * fix(GasService): moving extra gas service methods to a separate branch * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * fix(GasService): moving extra gas service methods to a separate branch * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * config(GasService): gas estimation params * fix(GasService): PR feedback * fix(lint): prettier * fix(GasService): PR feedback * Update axelar-chains-config/info/stagenet.json Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * fix: lint error & trailing spaces * Update evm/gas-service.js Co-authored-by: Dean * fix(GasService): PR feedback * fix(GasService): PR feedback * feat(GasService): calling updateGasInfo through Operators * refactor(GasService): PR feedback * refactor(GasService): calculating gas in floating numbers * fix(GasService): flow * feat(GasService): added AxelarScan gas estimate * refactor(GasService): converting floating numbers to integer strings * feat(GasService): adding support for express estimation * style(JS): prettier * fix(GasService): updated estimation script * chore(npm): CGP version bump * style(JS): prettier * ci(GasService): update GasInfo every 2 hours * style(yaml): prettier * ci(GasService): update GasInfo manually * style(yaml): prettier * ci(GasService): update GasInfo on pr * ci(GasService): update GasInfo with -y * fix(GasService): toBigNumberString * fix(GasService): better logging * feat(GasService): update for all chains * fix(GasService): testnet config * fix(GasService): error handling * style(JS): prettier * ci(GasService): test GasInfo fail * ci(GasService): test GasInfo fail * ci(GasService): revert GasInfo fail * ci(GasService): remove GasUpdate on PR * fix(GasService): testnet config * Update .github/workflows/update-gas-info.yaml Co-authored-by: Milap Sheth * fix(GasService): merge conflicts * fix(GasEstimation): estimateMultiplier * fix(GasService): testnet config --------- Co-authored-by: Milap Sheth Co-authored-by: Dean Amiel --- .github/workflows/update-gas-info.yaml | 50 +++++++++++++++++ axelar-chains-config/info/testnet.json | 37 +++++++++++-- evm/gas-service.js | 77 +++++++++++++++++--------- evm/operators.js | 10 +++- evm/utils.js | 5 ++ 5 files changed, 146 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/update-gas-info.yaml diff --git a/.github/workflows/update-gas-info.yaml b/.github/workflows/update-gas-info.yaml new file mode 100644 index 00000000..14317cbc --- /dev/null +++ b/.github/workflows/update-gas-info.yaml @@ -0,0 +1,50 @@ +name: 'Update Gas Info on Testnet' + +on: + workflow_dispatch: + inputs: + environment: + description: Environment to update gas info on + required: true + default: testnet + type: choice + options: + - testnet + - mainnet + - stagenet + +jobs: + update-gas: + name: 'Update Gas Info' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + - run: npm ci + - run: | + if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then + ENV="${{ github.event.inputs.environment }}" + else + ENV="testnet" + fi + + case "$ENV" in + testnet) + PRIVATE_KEY="${{ secrets.TESTNET_PRIVATE_KEY }}" + ;; + mainnet) + PRIVATE_KEY="${{ secrets.MAINNET_PRIVATE_KEY }}" + ;; + stagenet) + PRIVATE_KEY="${{ secrets.STAGENET_PRIVATE_KEY }}" + ;; + esac + + echo "PRIVATE_KEY=$PRIVATE_KEY" >> .env + echo "ENV=$ENV" >> .env + echo "CHAINS=all" >> .env + + node evm/operators.js --action updateGasInfo --chains all -y diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 532aa88a..e40f1a63 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -104,11 +104,12 @@ "gasOptions": { "gasLimit": 8000000 }, - "finality": "finalized", - "approxFinalityWaitTime": 40, "onchainGasEstimate": { + "chainName": "ethereum", "blobBaseFee": 50187563959 - } + }, + "finality": "finalized", + "approxFinalityWaitTime": 40 }, "avalanche": { "name": "Avalanche", @@ -1125,6 +1126,9 @@ "gasOptions": { "gasPrice": 3000000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum" + }, "confirmations": 4, "finality": "400", "approxFinalityWaitTime": 30 @@ -1237,6 +1241,10 @@ "gasLimit": 7000000, "gasPriceAdjustment": 0.25 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "finality": "finalized", "approxFinalityWaitTime": 60 }, @@ -1436,7 +1444,11 @@ "api": "https://api-sepolia.arbiscan.io/api" }, "finality": "finalized", - "approxFinalityWaitTime": 25 + "approxFinalityWaitTime": 25, + "onchainGasEstimate": { + "chainName": "arbitrum", + "l1ChainName": "ethereum" + } }, "centrifuge": { "name": "Centrifuge", @@ -1522,6 +1534,9 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "chainName": "centrifuge" + }, "explorer": { "name": "", "url": "" @@ -1539,6 +1554,10 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "contracts": { "InterchainGovernance": { "minimumTimeDelay": 300, @@ -1872,6 +1891,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "chainName": "blast", + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "confirmations": 2, "explorer": { "name": "Blastscan", @@ -1981,6 +2005,11 @@ "gasOptions": { "gasLimit": 50000000000 }, + "onchainGasEstimate": { + "chainName": "mantle", + "l1ChainName": "ethereum", + "gasEstimationType": 1 + }, "explorer": { "name": "Mantle Explorer", "url": "https://explorer.sepolia.mantle.xyz", diff --git a/evm/gas-service.js b/evm/gas-service.js index c4c0ce08..e135e323 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -20,12 +20,31 @@ const { isValidAddress, validateParameters, httpPost, + toBigNumberString, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); let failedChainUpdates = []; +function addFailedChainUpdate(chain, destinationChain) { + failedChainUpdates.push({ chain, destinationChain }); +} + +function printFailedChainUpdates() { + if (failedChainUpdates.length > 0) { + printError('Failed to update gas info for following chain combinations'); + + failedChainUpdates.forEach(({ chain, destinationChain }) => { + printError(`${chain} -> ${destinationChain}`); + }); + + failedChainUpdates = []; + + throw new Error('Failed to update gas info for the chain combinations above'); + } +} + async function getGasUpdates(config, env, chain, destinationChains) { const api = config.axelar.axelarscanApi; @@ -33,6 +52,10 @@ async function getGasUpdates(config, env, chain, destinationChains) { isNonEmptyStringArray: { destinationChains }, }); + if (destinationChains.includes('all')) { + destinationChains = Object.keys(config.chains); + } + let gasUpdates = await Promise.all( destinationChains.map(async (destinationChain) => { const destinationConfig = config.chains[destinationChain]; @@ -40,11 +63,12 @@ async function getGasUpdates(config, env, chain, destinationChains) { if (!destinationConfig) { printError(`Error: chain ${destinationChain} not found in config.`); printError(`Skipping ${destinationChain}.`); - failedChainUpdates.push({ chain: chain.axelarId, destinationChain }); + addFailedChainUpdate(chain.axelarId, destinationChain); return null; } - const { axelarId, onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0 } = {} } = destinationConfig; + const { axelarId, onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0, multiplier: estimateMultiplier = 1.1 } = {} } = + destinationConfig; let data; @@ -57,7 +81,7 @@ async function getGasUpdates(config, env, chain, destinationChains) { } catch (e) { printError(`Error getting gas info for ${chain.axelarId} -> ${axelarId}`); printError(e); - failedChainUpdates.push({ chain: chain.axelarId, destinationChain: axelarId }); + addFailedChainUpdate(chain.axelarId, axelarId); return null; } @@ -75,15 +99,15 @@ async function getGasUpdates(config, env, chain, destinationChains) { execute_gas_multiplier: multiplier = 1.1, } = data.result; - const axelarBaseFee = Math.ceil(parseFloat(sourceBaseFee) * Math.pow(10, decimals)).toString(); - const expressFee = Math.ceil(parseFloat(sourceExpressFee) * Math.pow(10, decimals)).toString(); - const relativeGasPrice = Math.ceil(parseFloat(gasPrice) * parseFloat(multiplier)).toString(); + const axelarBaseFee = parseFloat(sourceBaseFee) * Math.pow(10, decimals); + const expressFee = parseFloat(sourceExpressFee) * Math.pow(10, decimals); + const relativeGasPrice = parseFloat(gasPrice) * parseFloat(multiplier) * parseFloat(estimateMultiplier); const gasPriceRatio = parseFloat(destinationTokenPrice) / parseFloat(srcTokenPrice); - const relativeBlobBaseFee = Math.ceil(blobBaseFee * gasPriceRatio).toString(); + const relativeBlobBaseFee = blobBaseFee * gasPriceRatio; return { chain: destinationChain, - gasInfo: [gasEstimationType, axelarBaseFee, expressFee, relativeGasPrice, relativeBlobBaseFee], + gasInfo: [gasEstimationType, axelarBaseFee, expressFee, relativeGasPrice, relativeBlobBaseFee].map(toBigNumberString), }; }), ); @@ -129,18 +153,6 @@ async function getGasUpdates(config, env, chain, destinationChains) { }; } -function printFailedChainUpdates() { - if (failedChainUpdates.length > 0) { - printError('Failed to update gas info for following chain combinations'); - - failedChainUpdates.forEach(({ chain, destinationChain }) => { - printError(`${chain} -> ${destinationChain}`); - }); - } - - failedChainUpdates = []; -} - async function processCommand(config, chain, options) { const { env, contractName, address, action, privateKey, chains, destinationChain, destinationAddress, isExpress, yes } = options; const executionGasLimit = parseInt(options.executionGasLimit); @@ -224,20 +236,30 @@ async function processCommand(config, chain, options) { const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); - if (prompt(`Update gas info for following chains ${chainsToUpdate.join(', ')}?`, yes)) { + printInfo('Collected gas info for the following chain names', chainsToUpdate.join(', ')); + + if (prompt(`Update gas info?`, yes)) { return; } - const tx = await gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions); + try { + const tx = await gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions); + + printInfo('TX', tx.hash); - printInfo('TX', tx.hash); + const receipt = await tx.wait(chain.confirmations); - const receipt = await tx.wait(chain.confirmations); + const eventEmitted = wasEventEmitted(receipt, gasService, 'GasInfoUpdated'); - const eventEmitted = wasEventEmitted(receipt, gasService, 'GasInfoUpdated'); + if (!eventEmitted) { + printWarn('Event not emitted in receipt.'); + } + } catch (error) { + for (let i = 0; i < chainsToUpdate.length; i++) { + addFailedChainUpdate(chain.name, chainsToUpdate[i]); + } - if (!eventEmitted) { - printWarn('Event not emitted in receipt.'); + printError(error); } break; @@ -286,4 +308,5 @@ if (require.main === module) { } exports.getGasUpdates = getGasUpdates; +exports.addFailedChainUpdate = addFailedChainUpdate; exports.printFailedChainUpdates = printFailedChainUpdates; diff --git a/evm/operators.js b/evm/operators.js index 2487cce9..5a1f9b40 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -24,7 +24,7 @@ const { getContractJSON, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); -const { getGasUpdates, printFailedChainUpdates } = require('./gas-service'); +const { getGasUpdates, printFailedChainUpdates, addFailedChainUpdate } = require('./gas-service'); async function processCommand(config, chain, options) { const { @@ -251,7 +251,9 @@ async function processCommand(config, chain, options) { const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); - if (prompt(`Update gas info for following chains ${chainsToUpdate.join(', ')}?`, yes)) { + printInfo('Collected gas info for the following chain names', chainsToUpdate.join(', ')); + + if (prompt(`Submit gas update transaction?`, yes)) { return; } @@ -263,6 +265,10 @@ async function processCommand(config, chain, options) { printInfo('TX', tx.hash); await tx.wait(chain.confirmations); } catch (error) { + for (let i = 0; i < chainsToUpdate.length; i++) { + addFailedChainUpdate(chain.name, chainsToUpdate[i]); + } + printError(error); } diff --git a/evm/utils.js b/evm/utils.js index 87d81cd1..1c3a75a4 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1173,6 +1173,10 @@ function isValidChain(config, chainName) { } } +function toBigNumberString(number) { + return Math.ceil(number).toLocaleString('en', { useGrouping: false }); +} + module.exports = { deployCreate, deployCreate2, @@ -1231,4 +1235,5 @@ module.exports = { getSaltFromKey, getDeployOptions, isValidChain, + toBigNumberString, }; From 416c98d114e070072d54944a17d9216a0eeea245 Mon Sep 17 00:00:00 2001 From: re1ro Date: Fri, 12 Apr 2024 01:01:43 -0400 Subject: [PATCH 30/85] feat(GasService): caching GMP fee results (#208) * feat(GasService): caching GMP fee results * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/gas-service.js Co-authored-by: Milap Sheth * fix(GasService): PR feedback * fix(GasService): PR feedback --------- Co-authored-by: Milap Sheth --- evm/gas-service.js | 77 ++++++++++++++++++++++++++++++++-------------- evm/operators.js | 6 ++++ 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/evm/gas-service.js b/evm/gas-service.js index e135e323..1d1427ce 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -45,6 +45,22 @@ function printFailedChainUpdates() { } } +const feesCache = {}; + +async function getFeeData(api, sourceChain, destinationChain) { + const key = `${sourceChain}-${destinationChain}`; + + if (!feesCache[key]) { + feesCache[key] = httpPost(`${api}/gmp/getFees`, { + sourceChain, + destinationChain, + sourceTokenAddress: AddressZero, + }).then(({ result }) => (feesCache[key] = result)); + } + + return feesCache[key]; +} + async function getGasUpdates(config, env, chain, destinationChains) { const api = config.axelar.axelarscanApi; @@ -56,6 +72,8 @@ async function getGasUpdates(config, env, chain, destinationChains) { destinationChains = Object.keys(config.chains); } + const referenceChain = Object.values(config.chains)[0]; + let gasUpdates = await Promise.all( destinationChains.map(async (destinationChain) => { const destinationConfig = config.chains[destinationChain]; @@ -67,42 +85,50 @@ async function getGasUpdates(config, env, chain, destinationChains) { return null; } - const { axelarId, onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0, multiplier: estimateMultiplier = 1.1 } = {} } = - destinationConfig; + const { + axelarId: destinationAxelarId, + onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0, multiplier: onchainGasVolatilityMultiplier = 1.1 } = {}, + } = destinationConfig; - let data; + let destinationFeeData; + let sourceFeeData; try { - data = await httpPost(`${api}/gmp/getFees`, { - sourceChain: chain.axelarId, - destinationChain: axelarId, - sourceTokenAddress: AddressZero, - }); + [sourceFeeData, destinationFeeData] = await Promise.all([ + getFeeData(api, referenceChain.axelarId, chain.axelarId), + getFeeData(api, referenceChain.axelarId, destinationAxelarId), + ]); } catch (e) { - printError(`Error getting gas info for ${chain.axelarId} -> ${axelarId}`); + printError(`Error getting gas info for ${chain.axelarId} -> ${destinationAxelarId}`); printError(e); - addFailedChainUpdate(chain.axelarId, axelarId); + addFailedChainUpdate(chain.axelarId, destinationAxelarId); return null; } const { - source_base_fee: sourceBaseFee, - source_express_fee: { total: sourceExpressFee }, - source_token: { - gas_price_in_units: { value: gasPrice }, + destination_native_token: { token_price: { usd: srcTokenPrice }, - decimals, + decimals: srcTokenDecimals, }, + } = sourceFeeData; + + const { + base_fee_usd: baseFeeUsd, + destination_express_fee: { total_usd: expressFeeUsd }, destination_native_token: { - token_price: { usd: destinationTokenPrice }, + token_price: { usd: destTokenPrice }, + gas_price_in_units: { value: gasPriceInDestToken }, }, - execute_gas_multiplier: multiplier = 1.1, - } = data.result; - - const axelarBaseFee = parseFloat(sourceBaseFee) * Math.pow(10, decimals); - const expressFee = parseFloat(sourceExpressFee) * Math.pow(10, decimals); - const relativeGasPrice = parseFloat(gasPrice) * parseFloat(multiplier) * parseFloat(estimateMultiplier); - const gasPriceRatio = parseFloat(destinationTokenPrice) / parseFloat(srcTokenPrice); + execute_gas_multiplier: executeGasMultiplier = 1.1, + } = destinationFeeData; + + const axelarBaseFee = (parseFloat(baseFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); + const expressFee = (parseFloat(expressFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); + const gasPriceRatio = parseFloat(destTokenPrice) / parseFloat(srcTokenPrice); + const relativeGasPrice = + parseFloat(executeGasMultiplier) * + parseFloat(onchainGasVolatilityMultiplier) * + (parseFloat(gasPriceInDestToken) / gasPriceRatio); const relativeBlobBaseFee = blobBaseFee * gasPriceRatio; return { @@ -236,6 +262,11 @@ async function processCommand(config, chain, options) { const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); + if (chainsToUpdate.length === 0) { + printWarn('No gas info updates found.'); + return; + } + printInfo('Collected gas info for the following chain names', chainsToUpdate.join(', ')); if (prompt(`Update gas info?`, yes)) { diff --git a/evm/operators.js b/evm/operators.js index 5a1f9b40..8e9a0de7 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -22,6 +22,7 @@ const { mainProcessor, validateParameters, getContractJSON, + printWarn, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getGasUpdates, printFailedChainUpdates, addFailedChainUpdate } = require('./gas-service'); @@ -251,6 +252,11 @@ async function processCommand(config, chain, options) { const { chainsToUpdate, gasInfoUpdates } = await getGasUpdates(config, env, chain, chains); + if (chainsToUpdate.length === 0) { + printWarn('No gas info updates found.'); + return; + } + printInfo('Collected gas info for the following chain names', chainsToUpdate.join(', ')); if (prompt(`Submit gas update transaction?`, yes)) { From d0fb9f8844f3d9708e7c3690de26c163306108b7 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Fri, 12 Apr 2024 15:49:36 +0530 Subject: [PATCH 31/85] chore: read env variables (#207) * chore: read env variables * refactor: address PR comments --- evm/sign-message.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/evm/sign-message.js b/evm/sign-message.js index 366bdf55..035baa01 100644 --- a/evm/sign-message.js +++ b/evm/sign-message.js @@ -7,6 +7,7 @@ const { const { Command, Option } = require('commander'); const { getWallet } = require('./sign-utils'); const { printInfo, validateParameters } = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); async function processCommand(options) { const { message, privateKey } = options; @@ -38,8 +39,8 @@ if (require.main === module) { program.name('sign-message').description('sign a message from the user wallet'); + addBaseOptions(program, { ignoreChainNames: true }); program.addOption(new Option('-m, --message ', 'the message to be signed').makeOptionMandatory(true).env('MESSAGE')); - program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); program.action((options) => { main(options); From c913a62249146485a43aa97da4993d7c31e381ba Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:40:54 +0100 Subject: [PATCH 32/85] chore(cosmwasm): add support for deployment of monitoring contract (#210) --- cosmwasm/README.md | 3 +++ cosmwasm/deploy-contract.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/cosmwasm/README.md b/cosmwasm/README.md index 76e21bf4..c8853f24 100644 --- a/cosmwasm/README.md +++ b/cosmwasm/README.md @@ -13,6 +13,9 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif ``` "axelar": { "contracts": { + "Monitoring": { + "governanceAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz" + }, "ServiceRegistry": { "governanceAccount": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz" }, diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 04e13f47..e03f7a8d 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -15,6 +15,14 @@ const validateAddress = (address) => { return isString(address) && isValidCosmosAddress(address); }; +const makeMonitoringInstantiateMsg = ({ governanceAddress }) => { + if (!validateAddress(governanceAddress)) { + throw new Error('Missing or invalid Monitoring.governanceAddress in axelar info'); + } + + return { governance_address: governanceAddress }; +}; + const makeServiceRegistryInstantiateMsg = ({ governanceAccount }) => { if (!validateAddress(governanceAccount)) { throw new Error('Missing or invalid ServiceRegistry.governanceAccount in axelar info'); @@ -253,6 +261,14 @@ const makeInstantiateMsg = (contractName, chainName, config) => { } switch (contractName) { + case 'Monitoring': { + if (chainConfig) { + throw new Error('Monitoring does not support chainNames option'); + } + + return makeMonitoringInstantiateMsg(contractConfig); + } + case 'ServiceRegistry': { if (chainConfig) { throw new Error('ServiceRegistry does not support chainNames option'); From b71ce9949aaf15b2e3aabaf93389afcd7f695399 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:43:05 +0100 Subject: [PATCH 33/85] chore(cosmwasm): update MultisigProver instantiation (#209) --- cosmwasm/deploy-contract.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index e03f7a8d..6777b4d2 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -159,6 +159,7 @@ const makeGatewayInstantiateMsg = ({ ConnectionRouter: { address: connectionRout const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chainId }) => { const { + Monitoring: { address: monitoringAddress }, Multisig: { address: multisigAddress }, ServiceRegistry: { address: serviceRegistryAddress }, VotingVerifier: { @@ -193,6 +194,10 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid Gateway[${chainId}].address in axelar info`); } + if (!validateAddress(monitoringAddress)) { + throw new Error('Missing or invalid Monitoring.address in axelar info'); + } + if (!validateAddress(multisigAddress)) { throw new Error('Missing or invalid Multisig.address in axelar info'); } @@ -233,6 +238,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain admin_address: adminAddress, governance_address: governanceAddress, gateway_address: gatewayAddress, + monitoring_address: monitoringAddress, multisig_address: multisigAddress, service_registry_address: serviceRegistryAddress, voting_verifier_address: verifierAddress, From 4f22eb8596752fe04059c3db75170739276dded8 Mon Sep 17 00:00:00 2001 From: re1ro Date: Thu, 18 Apr 2024 00:03:04 -0400 Subject: [PATCH 34/85] feat(GasService): new structure for GasInfo (#213) * feat(GasService): new structure for GasInfo * style(JS): prettier * chore(npm): CGP and GMP SDK versions bump * fix(testnet): gas estimation config * feat(GasService): timeout for GasInfo updates * style(JS): prettier --- axelar-chains-config/info/testnet.json | 29 ++++++------ evm/gas-service.js | 64 ++++++++++++++++++++++---- evm/operators.js | 7 ++- evm/utils.js | 8 ++++ package-lock.json | 18 ++++---- package.json | 4 +- 6 files changed, 93 insertions(+), 37 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index e40f1a63..1ccf9b05 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1243,7 +1243,8 @@ }, "onchainGasEstimate": { "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 4, + "l1FeeScalar": 1150000000 }, "finality": "finalized", "approxFinalityWaitTime": 60 @@ -1446,8 +1447,8 @@ "finality": "finalized", "approxFinalityWaitTime": 25, "onchainGasEstimate": { - "chainName": "arbitrum", - "l1ChainName": "ethereum" + "l1ChainName": "ethereum", + "gasEstimationType": 3 } }, "centrifuge": { @@ -1534,9 +1535,6 @@ "gasOptions": { "gasLimit": 8000000 }, - "onchainGasEstimate": { - "chainName": "centrifuge" - }, "explorer": { "name": "", "url": "" @@ -1556,7 +1554,8 @@ }, "onchainGasEstimate": { "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 2, + "l1FeeScalar": 50000 }, "contracts": { "InterchainGovernance": { @@ -1666,9 +1665,9 @@ "gasLimit": 8000000 }, "onchainGasEstimate": { - "chainName": "optimism", "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 1, + "l1FeeScalar": 7600 }, "confirmations": 3, "explorer": { @@ -1779,9 +1778,9 @@ "gasLimit": 8000000 }, "onchainGasEstimate": { - "chainName": "base", "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 1, + "l1FeeScalar": 1101 }, "confirmations": 2, "explorer": { @@ -1892,9 +1891,9 @@ "gasLimit": 8000000 }, "onchainGasEstimate": { - "chainName": "blast", "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 2, + "l1FeeScalar": 684000 }, "confirmations": 2, "explorer": { @@ -2006,9 +2005,9 @@ "gasLimit": 50000000000 }, "onchainGasEstimate": { - "chainName": "mantle", "l1ChainName": "ethereum", - "gasEstimationType": 1 + "gasEstimationType": 2, + "l1FeeScalar": 10000 }, "explorer": { "name": "Mantle Explorer", diff --git a/evm/gas-service.js b/evm/gas-service.js index 1d1427ce..f88514a3 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -21,6 +21,7 @@ const { validateParameters, httpPost, toBigNumberString, + timeout, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); @@ -51,11 +52,20 @@ async function getFeeData(api, sourceChain, destinationChain) { const key = `${sourceChain}-${destinationChain}`; if (!feesCache[key]) { - feesCache[key] = httpPost(`${api}/gmp/getFees`, { - sourceChain, - destinationChain, - sourceTokenAddress: AddressZero, - }).then(({ result }) => (feesCache[key] = result)); + feesCache[key] = timeout( + httpPost(`${api}/gmp/getFees`, { + sourceChain, + destinationChain, + sourceTokenAddress: AddressZero, + }), + 10000, + new Error(`Timeout fetching fees for ${sourceChain} -> ${destinationChain}`), + ) + .then(({ result }) => (feesCache[key] = result)) + .catch((e) => { + delete feesCache[key]; + throw e; + }); } return feesCache[key]; @@ -87,7 +97,12 @@ async function getGasUpdates(config, env, chain, destinationChains) { const { axelarId: destinationAxelarId, - onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0, multiplier: onchainGasVolatilityMultiplier = 1.1 } = {}, + onchainGasEstimate: { + gasEstimationType = 0, + blobBaseFee = 0, + multiplier: onchainGasVolatilityMultiplier = 1.1, + l1FeeScalar = 0, + } = {}, } = destinationConfig; let destinationFeeData; @@ -105,23 +120,36 @@ async function getGasUpdates(config, env, chain, destinationChains) { return null; } - const { + let { destination_native_token: { + symbol: srcSymbol, token_price: { usd: srcTokenPrice }, decimals: srcTokenDecimals, }, + ethereum_token: { + token_price: { usd: ethPrice }, + }, } = sourceFeeData; - const { + let { base_fee_usd: baseFeeUsd, destination_express_fee: { total_usd: expressFeeUsd }, destination_native_token: { + symbol: destSymbol, token_price: { usd: destTokenPrice }, gas_price_in_units: { value: gasPriceInDestToken }, }, execute_gas_multiplier: executeGasMultiplier = 1.1, } = destinationFeeData; + if (srcSymbol === 'ETH' && srcTokenPrice === 100) { + srcTokenPrice = ethPrice; + } + + if (destSymbol === 'ETH' && destTokenPrice === 100) { + destTokenPrice = ethPrice; + } + const axelarBaseFee = (parseFloat(baseFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); const expressFee = (parseFloat(expressFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); const gasPriceRatio = parseFloat(destTokenPrice) / parseFloat(srcTokenPrice); @@ -131,9 +159,21 @@ async function getGasUpdates(config, env, chain, destinationChains) { (parseFloat(gasPriceInDestToken) / gasPriceRatio); const relativeBlobBaseFee = blobBaseFee * gasPriceRatio; + const gasInfo = { + gasEstimationType, + l1FeeScalar, + axelarBaseFee, + relativeGasPrice, + relativeBlobBaseFee, + expressFee, + }; + Object.keys(gasInfo).forEach((key) => { + gasInfo[key] = toBigNumberString(gasInfo[key]); + }); + return { chain: destinationChain, - gasInfo: [gasEstimationType, axelarBaseFee, expressFee, relativeGasPrice, relativeBlobBaseFee].map(toBigNumberString), + gasInfo, }; }), ); @@ -274,7 +314,11 @@ async function processCommand(config, chain, options) { } try { - const tx = await gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions); + const tx = await timeout( + gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions), + chain.timeout || 60000, + new Error(`Timeout updating gas info for ${chain.name}`), + ); printInfo('TX', tx.hash); diff --git a/evm/operators.js b/evm/operators.js index 8e9a0de7..a5c5d818 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -23,6 +23,7 @@ const { validateParameters, getContractJSON, printWarn, + timeout, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getGasUpdates, printFailedChainUpdates, addFailedChainUpdate } = require('./gas-service'); @@ -267,7 +268,11 @@ async function processCommand(config, chain, options) { const updateGasInfoCalldata = gasServiceInterface.encodeFunctionData('updateGasInfo', [chainsToUpdate, gasInfoUpdates]); try { - const tx = await operatorsContract.executeContract(target, updateGasInfoCalldata, 0, gasOptions); + const tx = await timeout( + operatorsContract.executeContract(target, updateGasInfoCalldata, 0, gasOptions), + chain.timeout || 60000, + new Error(`Timeout updating gas info for ${chain.name}`), + ); printInfo('TX', tx.hash); await tx.wait(chain.confirmations); } catch (error) { diff --git a/evm/utils.js b/evm/utils.js index 1c3a75a4..e49527c8 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1177,6 +1177,13 @@ function toBigNumberString(number) { return Math.ceil(number).toLocaleString('en', { useGrouping: false }); } +function timeout(prom, time, exception) { + let timer; + return Promise.race([prom, new Promise((resolve, reject) => (timer = setTimeout(reject, time, exception)))]).finally(() => + clearTimeout(timer), + ); +} + module.exports = { deployCreate, deployCreate2, @@ -1236,4 +1243,5 @@ module.exports = { getDeployOptions, isValidChain, toBigNumberString, + timeout, }; diff --git a/package-lock.json b/package-lock.json index ec82aa61..2030801e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "MIT", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", - "@axelar-network/axelar-cgp-solidity": "6.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.7.0", + "@axelar-network/axelar-cgp-solidity": "6.3.1", + "@axelar-network/axelar-gmp-sdk-solidity": "5.8.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", @@ -120,20 +120,20 @@ "dev": true }, "node_modules/@axelar-network/axelar-cgp-solidity": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.3.0.tgz", - "integrity": "sha512-dHE2UgaFZvQvL0ythMi+aBsr4t+eR6zrVGmCU5BxslEqi6Tx+Wmjwg1O1p15EqoztalSqRKj+r57n3GtgeUpig==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.3.1.tgz", + "integrity": "sha512-RJmcOQbj2VhQb8uqBtu0beNj4MKRVjiYj74wXu6QI/a4bJ5EwwZK3+uCbTVNM9Qc7LqJqObhtGQfKUnAXEFCHA==", "dependencies": { - "@axelar-network/axelar-gmp-sdk-solidity": "5.7.0" + "@axelar-network/axelar-gmp-sdk-solidity": "5.8.0" }, "engines": { "node": ">=18" } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.7.0.tgz", - "integrity": "sha512-JlokiWFxvR6bFQtDjdErtk0mZrr3GH1A8bKps1zVP/Bu4XOHR0WsrWGPVhWIbvT8a8Ag3dva4hskBYgdq+pLig==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.8.0.tgz", + "integrity": "sha512-ThiCWK7lhwmsipgjKkw8c0z0ubB9toRMV9X0tRVOXHHSknKp5DCFfatbCwjpSC5GZRa+61ciTSqJNtCc7j9YoQ==", "engines": { "node": ">=18" } diff --git a/package.json b/package.json index 1635b3a8..12561a1e 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,8 @@ "homepage": "https://github.com/axelarnetwork/axelar-contract-deployments#readme", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", - "@axelar-network/axelar-cgp-solidity": "6.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.7.0", + "@axelar-network/axelar-cgp-solidity": "6.3.1", + "@axelar-network/axelar-gmp-sdk-solidity": "5.8.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", From 4ca2905e48cfefe73861b32bd11daf3fa36aedb8 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:51:28 +0100 Subject: [PATCH 35/85] rename ConnectionRouter and Monitoring contracts (#215) --- cosmwasm/README.md | 17 ++++++++------- cosmwasm/deploy-contract.js | 42 ++++++++++++++++++------------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/cosmwasm/README.md b/cosmwasm/README.md index c8853f24..cfded868 100644 --- a/cosmwasm/README.md +++ b/cosmwasm/README.md @@ -13,13 +13,13 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif ``` "axelar": { "contracts": { - "Monitoring": { + "Coordinator": { "governanceAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz" }, "ServiceRegistry": { "governanceAccount": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz" }, - "ConnectionRouter": { + "Router": { "adminAddress": "axelar1gtm0wr3gpkzwgpjujzlyxvgj7a5ltcku99fdcz", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj" }, @@ -114,16 +114,17 @@ Deploy each contract. Chain name should match the key of an object in the `chain `node deploy-contract.js -m [mnemonic] -a [path to contract artifacts] -c [contract name] -e [environment] -n ` Some of the contracts depend on each other and need to be deployed in a specific order. Note the connection router and nexus gateway each need to know the other's address, so you need to pass `--instantiate2`, and upload each contract before instatiating (by passing `-u`). - 1. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "ConnectionRouter" --instantiate2 -e devnet -u` + 1. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Router" --instantiate2 -e devnet -u` 2. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "NexusGateway" --instantiate2 -e devnet -u` 3. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "NexusGateway" --instantiate2 -e devnet -r` - 4. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "ConnectionRouter" --instantiate2 -e devnet -r` + 4. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Router" --instantiate2 -e devnet -r` 5. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "ServiceRegistry" -e devnet` 6. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Rewards" -e devnet` - 7. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Multisig" -e devnet` - 8. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "VotingVerifier" -e devnet -n "ethereum,avalanche"` - 9. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Gateway" -e devnet -n "ethereum,avalanche"` - 10. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "MultisigProver" -e devnet -n "ethereum,avalanche"` + 7. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Coordinator" -e devnet` + 8. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Multisig" -e devnet` + 9. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "VotingVerifier" -e devnet -n "ethereum,avalanche"` + 10. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "Gateway" -e devnet -n "ethereum,avalanche"` + 11. `node deploy-contract.js -m [mnemonic] -a [path to artifacts] -c "MultisigProver" -e devnet -n "ethereum,avalanche"` ### Constant Address Deployment diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 6777b4d2..da431fee 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -15,9 +15,9 @@ const validateAddress = (address) => { return isString(address) && isValidCosmosAddress(address); }; -const makeMonitoringInstantiateMsg = ({ governanceAddress }) => { +const makeCoordinatorInstantiateMsg = ({ governanceAddress }) => { if (!validateAddress(governanceAddress)) { - throw new Error('Missing or invalid Monitoring.governanceAddress in axelar info'); + throw new Error('Missing or invalid Coordinator.governanceAddress in axelar info'); } return { governance_address: governanceAddress }; @@ -59,13 +59,13 @@ const makeRewardsInstantiateMsg = ({ governanceAddress, rewardsDenom, params }) return { governance_address: governanceAddress, rewards_denom: rewardsDenom, params }; }; -const makeConnectionRouterInstantiateMsg = ({ adminAddress, governanceAddress }, { NexusGateway: { address: nexusGateway } }) => { +const makeRouterInstantiateMsg = ({ adminAddress, governanceAddress }, { NexusGateway: { address: nexusGateway } }) => { if (!validateAddress(adminAddress)) { - throw new Error('Missing or invalid ConnectionRouter.adminAddress in axelar info'); + throw new Error('Missing or invalid Router.adminAddress in axelar info'); } if (!validateAddress(governanceAddress)) { - throw new Error('Missing or invalid ConnectionRouter.governanceAddress in axelar info'); + throw new Error('Missing or invalid Router.governanceAddress in axelar info'); } if (!validateAddress(nexusGateway)) { @@ -75,13 +75,13 @@ const makeConnectionRouterInstantiateMsg = ({ adminAddress, governanceAddress }, return { admin_address: adminAddress, governance_address: governanceAddress, nexus_gateway: nexusGateway }; }; -const makeNexusGatewayInstantiateMsg = ({ nexus }, { ConnectionRouter: { address: router } }) => { +const makeNexusGatewayInstantiateMsg = ({ nexus }, { Router: { address: router } }) => { if (!validateAddress(nexus)) { throw new Error('Missing or invalid NexusGateway.nexus in axelar info'); } if (!validateAddress(router)) { - throw new Error('Missing or invalid ConnectionRouter.address in axelar info'); + throw new Error('Missing or invalid Router.address in axelar info'); } return { nexus, router }; @@ -141,25 +141,25 @@ const makeVotingVerifierInstantiateMsg = ( }; }; -const makeGatewayInstantiateMsg = ({ ConnectionRouter: { address: connectionRouterAddress }, VotingVerifier }, { id: chainId }) => { +const makeGatewayInstantiateMsg = ({ Router: { address: routerAddress }, VotingVerifier }, { id: chainId }) => { const { [chainId]: { address: verifierAddress }, } = VotingVerifier; - if (!validateAddress(connectionRouterAddress)) { - throw new Error('Missing or invalid ConnectionRouter.address in axelar info'); + if (!validateAddress(routerAddress)) { + throw new Error('Missing or invalid Router.address in axelar info'); } if (!validateAddress(verifierAddress)) { throw new Error(`Missing or invalid VotingVerifier[${chainId}].address in axelar info`); } - return { router_address: connectionRouterAddress, verifier_address: verifierAddress }; + return { router_address: routerAddress, verifier_address: verifierAddress }; }; const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chainId }) => { const { - Monitoring: { address: monitoringAddress }, + Coordinator: { address: coordinatorAddress }, Multisig: { address: multisigAddress }, ServiceRegistry: { address: serviceRegistryAddress }, VotingVerifier: { @@ -194,8 +194,8 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid Gateway[${chainId}].address in axelar info`); } - if (!validateAddress(monitoringAddress)) { - throw new Error('Missing or invalid Monitoring.address in axelar info'); + if (!validateAddress(coordinatorAddress)) { + throw new Error('Missing or invalid Coordinator.address in axelar info'); } if (!validateAddress(multisigAddress)) { @@ -238,7 +238,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain admin_address: adminAddress, governance_address: governanceAddress, gateway_address: gatewayAddress, - monitoring_address: monitoringAddress, + coordinator_address: coordinatorAddress, multisig_address: multisigAddress, service_registry_address: serviceRegistryAddress, voting_verifier_address: verifierAddress, @@ -267,12 +267,12 @@ const makeInstantiateMsg = (contractName, chainName, config) => { } switch (contractName) { - case 'Monitoring': { + case 'Coordinator': { if (chainConfig) { - throw new Error('Monitoring does not support chainNames option'); + throw new Error('Coordinator does not support chainNames option'); } - return makeMonitoringInstantiateMsg(contractConfig); + return makeCoordinatorInstantiateMsg(contractConfig); } case 'ServiceRegistry': { @@ -299,12 +299,12 @@ const makeInstantiateMsg = (contractName, chainName, config) => { return makeRewardsInstantiateMsg(contractConfig); } - case 'ConnectionRouter': { + case 'Router': { if (chainConfig) { - throw new Error('ConnectionRouter does not support chainNames option'); + throw new Error('Router does not support chainNames option'); } - return makeConnectionRouterInstantiateMsg(contractConfig, contracts); + return makeRouterInstantiateMsg(contractConfig, contracts); } case 'NexusGateway': { From b5e732e9fbcb7b3d8aaa82d6fc47623e18a8f030 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Tue, 23 Apr 2024 05:59:20 +0100 Subject: [PATCH 36/85] chore(cosmwasm): use gas estimation when uploading contracts (#216) --- cosmwasm/deploy-contract.js | 4 ++-- cosmwasm/utils.js | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index da431fee..dc84824f 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -345,8 +345,8 @@ const makeInstantiateMsg = (contractName, chainName, config) => { const prepareWallet = ({ mnemonic }) => DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: 'axelar' }); -const prepareClient = ({ axelar: { rpc } }, wallet) => - SigningCosmWasmClient.connectWithSigner(rpc, wallet).then((client) => { +const prepareClient = ({ axelar: { rpc, gasPrice } }, wallet) => + SigningCosmWasmClient.connectWithSigner(rpc, wallet, { gasPrice }).then((client) => { return { wallet, client }; }); diff --git a/cosmwasm/utils.js b/cosmwasm/utils.js index 79c0bffd..adf37c55 100644 --- a/cosmwasm/utils.js +++ b/cosmwasm/utils.js @@ -28,11 +28,10 @@ const uploadContract = async (client, wallet, config, options) => { .getAccounts() .then(([account]) => { const wasm = readFileSync(`${artifactPath}/${pascalToSnake(contractName)}${aarch64 ? '-aarch64' : ''}.wasm`); - const { axelar: { gasPrice, gasLimit }, } = config; - const uploadFee = calculateFee(gasLimit, GasPrice.fromString(gasPrice)); + const uploadFee = gasLimit === 'auto' ? 'auto' : calculateFee(gasLimit, GasPrice.fromString(gasPrice)); return client.upload(account.address, wasm, uploadFee).then(({ checksum, codeId }) => ({ checksum, codeId, account })); }) .then(({ account, checksum, codeId }) => { @@ -58,7 +57,7 @@ const instantiateContract = (client, wallet, initMsg, config, { contractName, sa const { axelar: { gasPrice, gasLimit }, } = config; - const initFee = calculateFee(gasLimit, GasPrice.fromString(gasPrice)); + const initFee = gasLimit === 'auto' ? 'auto' : calculateFee(gasLimit, GasPrice.fromString(gasPrice)); return instantiate2 ? client.instantiate2( From 4fcefa304135751b9ec34c4d5af0255452598395 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Fri, 26 Apr 2024 13:36:36 +0530 Subject: [PATCH 37/85] chore: update mantle explorer and api url (#220) --- axelar-chains-config/info/mainnet.json | 4 ++-- axelar-chains-config/info/testnet.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 79d4b259..b43601ae 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -1742,8 +1742,8 @@ "confirmations": 2, "explorer": { "name": "Mantle Explorer", - "url": "https://explorer.mantle.xyz", - "api": "https://explorer.mantle.xyz/api" + "url": "https://mantlescan.xyz", + "api": "https://api.mantlescan.xyz/api" }, "skipRevertTests": true, "staticGasOptions": { diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 1ccf9b05..0385b4c6 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2011,8 +2011,8 @@ }, "explorer": { "name": "Mantle Explorer", - "url": "https://explorer.sepolia.mantle.xyz", - "api": "https://explorer.sepolia.mantle.xyz/api" + "url": "https://sepolia.mantlescan.xyz", + "api": "https://api-sepolia.mantlescan.xyz/api" }, "contracts": { "InterchainGovernance": { From e5336711736f467ca724d047a902c473b9e0c666 Mon Sep 17 00:00:00 2001 From: CJ Cobb <46455409+cjcobb23@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:44:21 -0400 Subject: [PATCH 38/85] feat: add msg id format to voting verifier instantiation msg (#219) * feat: add msg id format to voting verifier instantiation msg --- axelar-chains-config/info/devnet-amplifier.json | 4 ++++ axelar-chains-config/info/devnet-verifiers.json | 4 ++++ cosmwasm/deploy-contract.js | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index 609a5014..ac8dfa52 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -365,6 +365,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" }, "codeId": 6, @@ -377,6 +378,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" }, "ethereum-sepolia": { @@ -388,6 +390,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" }, "op-sepolia": { @@ -399,6 +402,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" } }, diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index a8d3a5c5..a48e997c 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -365,6 +365,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" }, "codeId": 6, @@ -377,6 +378,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" }, "ethereum-sepolia": { @@ -388,6 +390,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" }, "op-sepolia": { @@ -399,6 +402,7 @@ ], "blockExpiry": 10, "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" } }, diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index dc84824f..d7df701c 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -93,7 +93,7 @@ const makeVotingVerifierInstantiateMsg = ( { id: chainId }, ) => { const { - [chainId]: { governanceAddress, serviceName, sourceGatewayAddress, votingThreshold, blockExpiry, confirmationHeight }, + [chainId]: { governanceAddress, serviceName, sourceGatewayAddress, votingThreshold, blockExpiry, confirmationHeight, msgIdFormat }, } = contractConfig; if (!validateAddress(serviceRegistryAddress)) { @@ -128,6 +128,10 @@ const makeVotingVerifierInstantiateMsg = ( throw new Error(`Missing or invalid VotingVerifier[${chainId}].confirmationHeight in axelar info`); } + if (!isString(msgIdFormat)) { + throw new Error(`Missing or invalid VotingVerifier[${chainId}].msgIdFormat in axelar info`); + } + return { service_registry_address: serviceRegistryAddress, rewards_address: rewardsAddress, @@ -138,6 +142,7 @@ const makeVotingVerifierInstantiateMsg = ( block_expiry: blockExpiry, confirmation_height: confirmationHeight, source_chain: chainId, + msg_id_format: msgIdFormat, }; }; From dbe2f798cc157e9902b66736201e6b01a3924d4e Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Tue, 30 Apr 2024 14:08:30 +0530 Subject: [PATCH 39/85] feat: add config for Polygon Amoy testnet (#204) * feat: add config for polygon testnet amoy * refactor: prettier * refactor: address PR comments * refactor: update confirmations * - constaddrdeployer * - create 3 deployer * - gateway * - operators * - gas service * chore: update explorer and api url --------- Co-authored-by: Talal Ashraf --- axelar-chains-config/info/testnet.json | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 0385b4c6..3b4ae172 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2105,6 +2105,76 @@ }, "finality": "finalized", "approxFinalityWaitTime": 60 + }, + "polygon-sepolia": { + "name": "Polygon-Sepolia", + "id": "polygon-sepolia", + "axelarId": "polygon-sepolia", + "chainId": 80002, + "rpc": "https://rpc-amoy.polygon.technology/", + "tokenSymbol": "MATIC", + "confirmations": 2, + "contracts": { + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-polygon-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "InterchainGovernance": { + "address": "0x943AAd94e45bad24A3da01a3ba815C03fCAC53FC" + }, + "Multisig": { + "address": "0x943AAd94e45bad24A3da01a3ba815C03fCAC53FC" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + } + }, + "explorer": { + "name": "Polygonscan", + "url": "https://amoy.polygonscan.com", + "api": "https://api-amoy.polygonscan.com/api" + }, + "gasOptions": { + "gasLimit": 6000000 + }, + "finality": "finalized", + "approxFinalityWaitTime": 1 } }, "axelar": { From 4931c218c053f1fd1b8cce18518b05d93489b188 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 30 Apr 2024 15:53:51 -0400 Subject: [PATCH 40/85] feat(gas-service): upgrade gas service to v6.3.1 on testnet (#223) * chore: update testnet gas service to v6.3.1 * upgrade testnet gas service --- axelar-chains-config/info/testnet.json | 41 +++++++++++++------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 3b4ae172..87c708c0 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -74,7 +74,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -132,7 +132,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -245,7 +245,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -476,7 +476,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -592,7 +592,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -702,7 +702,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" @@ -816,7 +816,7 @@ "salt": "AxelarGasService", "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, @@ -927,7 +927,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbe406f0189a0b4cf3a05c286473d23791dd44cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, @@ -1039,7 +1039,7 @@ "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1138,7 +1138,7 @@ "id": "scroll", "axelarId": "scroll", "chainId": 534351, - "rpc": "https://scroll-testnet-public.unifra.io", + "rpc": "https://sepolia-rpc.scroll.io", "tokenSymbol": "ETH", "contracts": { "AxelarGateway": { @@ -1156,7 +1156,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "AxelarDepositService": { @@ -1238,8 +1238,7 @@ }, "confirmations": 2, "gasOptions": { - "gasLimit": 7000000, - "gasPriceAdjustment": 0.25 + "gasLimit": 7000000 }, "onchainGasEstimate": { "l1ChainName": "ethereum", @@ -1322,7 +1321,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1416,7 +1415,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1525,7 +1524,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1614,7 +1613,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "Operators": { @@ -1741,7 +1740,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1854,7 +1853,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -1967,7 +1966,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { @@ -2080,7 +2079,7 @@ "AxelarGasService": { "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", + "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" }, "InterchainTokenService": { From 48acddd4e32c681ed61ca46435c08b8d3a3bc096 Mon Sep 17 00:00:00 2001 From: re1ro Date: Tue, 30 Apr 2024 20:19:45 -0400 Subject: [PATCH 41/85] chore: enable cron for testnet gas info updates (#214) * ci: enable chron for testnet gas info updates * ci: 12hr chron for gas updates * fix(GasService): making onchainGasVolatilityMultiplier 2 by default * fix(GasService): fixing optimized gas formula * style(JS): prettier * fix(GasService): keeping discounted estimation for testnet * fix(GasService): updating formula with onchainGasVolatilityMultiplier * fix(GasService): updating testnet config * style(JS): prettier --- .github/workflows/update-gas-info.yaml | 3 + axelar-chains-config/info/testnet.json | 113 ------------------------- evm/gas-service.js | 32 +++---- 3 files changed, 14 insertions(+), 134 deletions(-) diff --git a/.github/workflows/update-gas-info.yaml b/.github/workflows/update-gas-info.yaml index 14317cbc..3ceaa167 100644 --- a/.github/workflows/update-gas-info.yaml +++ b/.github/workflows/update-gas-info.yaml @@ -13,6 +13,9 @@ on: - mainnet - stagenet + schedule: + - cron: '0 */12 * * *' + jobs: update-gas: name: 'Update Gas Info' diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 87c708c0..0d5da367 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -340,119 +340,6 @@ "finality": "1", "approxFinalityWaitTime": 1 }, - "polygon": { - "name": "Polygon", - "id": "Polygon", - "axelarId": "Polygon", - "chainId": 80001, - "rpc": "https://polygon-mumbai.g.alchemy.com/v2/Ksd4J1QVWaOJAJJNbr_nzTcJBJU-6uP3", - "tokenSymbol": "MATIC", - "contracts": { - "AxelarGateway": { - "address": "0xBF62ef1486468a6bd26Dd669C06db43dEd5B849B", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "implementationCodehash": "0xb17ab564df4137d57dc47255a1890c32f98e02529d234d89cb6a8e2e71b2c6a0", - "authModule": "0xE39d7d526DFd7B6D10972708C77ED19c3f2f5625", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0x697F0BB8e15958a640EAD2C4D366B11Fc89a4c0e", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xb6241272C569767072e0587098415DF6BA0aaEe9", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b", - "wrappedSymbol": "WMATIC", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0xf6e97396f1eaf0f74c057715baab06e5f7b1ef1f53d923dcea512475533033b1", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.4", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.0.0" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.0.0", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Polygonscan", - "url": "https://mumbai.polygonscan.com", - "api": "https://api-testnet.polygonscan.com/api" - }, - "gasOptions": { - "gasLimit": 8000000 - }, - "finality": "finalized", - "approxFinalityWaitTime": 5 - }, "moonbeam": { "name": "Moonbeam", "id": "Moonbeam", diff --git a/evm/gas-service.js b/evm/gas-service.js index f88514a3..04c27be2 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -100,7 +100,7 @@ async function getGasUpdates(config, env, chain, destinationChains) { onchainGasEstimate: { gasEstimationType = 0, blobBaseFee = 0, - multiplier: onchainGasVolatilityMultiplier = 1.1, + multiplier: onchainGasVolatilityMultiplier = 1.5, l1FeeScalar = 0, } = {}, } = destinationConfig; @@ -120,44 +120,34 @@ async function getGasUpdates(config, env, chain, destinationChains) { return null; } - let { + const { destination_native_token: { - symbol: srcSymbol, token_price: { usd: srcTokenPrice }, decimals: srcTokenDecimals, }, - ethereum_token: { - token_price: { usd: ethPrice }, - }, } = sourceFeeData; - let { + const { base_fee_usd: baseFeeUsd, destination_express_fee: { total_usd: expressFeeUsd }, destination_native_token: { - symbol: destSymbol, token_price: { usd: destTokenPrice }, gas_price_in_units: { value: gasPriceInDestToken }, + decimals: destTokenDecimals, }, execute_gas_multiplier: executeGasMultiplier = 1.1, } = destinationFeeData; - if (srcSymbol === 'ETH' && srcTokenPrice === 100) { - srcTokenPrice = ethPrice; - } - - if (destSymbol === 'ETH' && destTokenPrice === 100) { - destTokenPrice = ethPrice; - } - - const axelarBaseFee = (parseFloat(baseFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); - const expressFee = (parseFloat(expressFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); + const axelarBaseFee = + onchainGasVolatilityMultiplier * (parseFloat(baseFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); + const expressFee = + onchainGasVolatilityMultiplier * (parseFloat(expressFeeUsd) / parseFloat(srcTokenPrice)) * Math.pow(10, srcTokenDecimals); const gasPriceRatio = parseFloat(destTokenPrice) / parseFloat(srcTokenPrice); const relativeGasPrice = - parseFloat(executeGasMultiplier) * parseFloat(onchainGasVolatilityMultiplier) * - (parseFloat(gasPriceInDestToken) / gasPriceRatio); - const relativeBlobBaseFee = blobBaseFee * gasPriceRatio; + parseFloat(executeGasMultiplier) * + ((parseFloat(gasPriceInDestToken) / Math.pow(10, destTokenDecimals)) * gasPriceRatio * Math.pow(10, srcTokenDecimals)); + const relativeBlobBaseFee = onchainGasVolatilityMultiplier * blobBaseFee * gasPriceRatio; const gasInfo = { gasEstimationType, From 2117c436c015cc3d1bd5b9c8079b26f1f6b54888 Mon Sep 17 00:00:00 2001 From: re1ro Date: Wed, 1 May 2024 23:49:20 -0400 Subject: [PATCH 42/85] ci(gas-info): handling timeout for Scroll (#224) * ci(gas-info): handling timeout for Scroll * style(JS): prettier * docs(timeout): comments --- axelar-chains-config/info/testnet.json | 3 ++- evm/gas-service.js | 6 +++++- evm/operators.js | 7 ++++++- evm/utils.js | 11 ++++++++--- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 0d5da367..870a2f72 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1125,7 +1125,8 @@ }, "confirmations": 2, "gasOptions": { - "gasLimit": 7000000 + "gasLimit": 7000000, + "gasPriceAdjustment": 1.5 }, "onchainGasEstimate": { "l1ChainName": "ethereum", diff --git a/evm/gas-service.js b/evm/gas-service.js index 04c27be2..6eef38d7 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -312,7 +312,11 @@ async function processCommand(config, chain, options) { printInfo('TX', tx.hash); - const receipt = await tx.wait(chain.confirmations); + const receipt = await timeout( + tx.wait(chain.confirmations), + chain.timeout || 60000, + new Error(`Timeout updating gas info for ${chain.name}`), + ); const eventEmitted = wasEventEmitted(receipt, gasService, 'GasInfoUpdated'); diff --git a/evm/operators.js b/evm/operators.js index a5c5d818..fc2a8838 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -274,7 +274,12 @@ async function processCommand(config, chain, options) { new Error(`Timeout updating gas info for ${chain.name}`), ); printInfo('TX', tx.hash); - await tx.wait(chain.confirmations); + + await timeout( + tx.wait(chain.confirmations), + chain.timeout || 60000, + new Error(`Timeout updating gas info for ${chain.name}`), + ); } catch (error) { for (let i = 0; i < chainsToUpdate.length; i++) { addFailedChainUpdate(chain.name, chainsToUpdate[i]); diff --git a/evm/utils.js b/evm/utils.js index e49527c8..aa6f7985 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1179,9 +1179,14 @@ function toBigNumberString(number) { function timeout(prom, time, exception) { let timer; - return Promise.race([prom, new Promise((resolve, reject) => (timer = setTimeout(reject, time, exception)))]).finally(() => - clearTimeout(timer), - ); + + // Racing the promise with a timer + // If the timer resolves first, the promise is rejected with the exception + const race = Promise.race([prom, new Promise((resolve, reject) => (timer = setTimeout(reject, time, exception)))]); + + race.finally(() => clearTimeout(timer)); + + return race; } module.exports = { From 5e74dfd4d74c13b4c57a12465c882e057045236a Mon Sep 17 00:00:00 2001 From: re1ro Date: Thu, 2 May 2024 21:11:15 -0400 Subject: [PATCH 43/85] ci(gas-info): handling timeout for Filecoin (#225) --- evm/utils.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/evm/utils.js b/evm/utils.js index aa6f7985..83b4f467 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1182,11 +1182,9 @@ function timeout(prom, time, exception) { // Racing the promise with a timer // If the timer resolves first, the promise is rejected with the exception - const race = Promise.race([prom, new Promise((resolve, reject) => (timer = setTimeout(reject, time, exception)))]); - - race.finally(() => clearTimeout(timer)); - - return race; + return Promise.race([prom, new Promise((resolve, reject) => (timer = setTimeout(reject, time, exception)))]).finally(() => + clearTimeout(timer), + ); } module.exports = { From ff4340a7a31fe2c9f94f9b2c9711b79ad00ef147 Mon Sep 17 00:00:00 2001 From: re1ro Date: Thu, 2 May 2024 21:19:46 -0400 Subject: [PATCH 44/85] ci(gas-info): handling timeout for Filecoin (#226) * ci(gas-info): handling timeout for Filecoin * style(JS): prettier * ci(gas-info): handling timeout for Filecoin --- axelar-chains-config/info/testnet.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 870a2f72..99e3a064 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -901,7 +901,8 @@ "confirmations": 3, "eip1559": true, "finality": "120", - "approxFinalityWaitTime": 60 + "approxFinalityWaitTime": 60, + "timeout": 180000 }, "linea": { "name": "Linea", From bb23db7bbc26cd744ce3decaa2b5579a7e3fc322 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 8 May 2024 21:14:31 +0100 Subject: [PATCH 45/85] chore(info): update amplifier contracts for `devnet-amplifier` and `devnet-verifiers` (#222) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update amplifier contracts for devnet-amplifier and devnet-verifiers * revert deletion * revert deletion * Update axelar-chains-config/info/devnet-amplifier.json --------- Co-authored-by: João Sousa Co-authored-by: Milap Sheth --- .../info/devnet-amplifier.json | 179 ++++++++++-------- .../info/devnet-verifiers.json | 179 ++++++++++-------- 2 files changed, 192 insertions(+), 166 deletions(-) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index ac8dfa52..378dbd48 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -20,21 +20,21 @@ "startingKeyIDs": [ null ], - "address": "0xCa85f85C72df5f8428a440887CA7c449D94e0D0c", - "implementation": "0xB42a3c5Bf7fDaf253c0C26Bad3227Ac91594A6D9", - "implementationCodehash": "0xc867f56619b2b142b2a2dfe45eb42abab7a6cc21ac2df1035f365d8b10b22789", - "authModule": "0x569fE174ecd2a42E9463335F1f1B2FcF760aaAD8", - "tokenDeployer": "0xE427A8aBB85D90E652CBd92F8DB8EF102687785D", + "address": "0xeA3D3979ffa953FB209FcF6D13EA49AFC0A05604", + "implementation": "0xfF99ED85b998bD7e2DD973cEFCb738c0C8F560EA", + "implementationCodehash": "0x57eb84f26ff5fab154371ae86f74219e19497e6c2c70ba1dc4116a8dc85c4eaf", + "authModule": "0x8d0Fbce6554ef89BBB2b200389C5e7B0Ef8Aa54b", + "tokenDeployer": "0xBf428fb6B2831EC30d7c098A3c3dC4d6972686d9", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xbdC2f1ab89Cef197DF3061Eb4af91d2700e881ce", + "address": "0xd7A0e641Bfbb9AA83aAb9f3e89bf83e128d321c4", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x0b81e74c664ad5a3a97065aa4880b29f332892898f1efe9f206c0ac6412bdb21", + "codehash": "0x7a42cdec9730e5e54cfd6b6eae340b35922e538338839cd5d23ff8e75fb24dd0", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -50,7 +50,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0x8081A7a65288e3E3Eb5A3D5611a21Ec05546D78a", + "address": "0x8b04c2d794Fe7c00328B3Cca2693dF2ed0084Aa2", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -58,14 +58,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x938996c3685e4617B334e5ac10EF248762da0d9C", + "address": "0x93C65E1f545c8abb1f9Bad30e5fbdB2d1396EaFb", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0x1a4f5c3B632EBDD22a8A30b3c37374528168c51B", + "address": "0x7c79fcd2237f58Eeed5Bdf7c26C5726d86C895f0", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -99,21 +99,21 @@ "startingKeyIDs": [ null ], - "address": "0x7aF5ab507E81C4F92e0E6C653F7087513F2C39D2", - "implementation": "0xdd68AaDd9a304380fe4167457e6cCbbD95B9E312", - "implementationCodehash": "0xcc8a18c2c1379d9147ae816531e1bae464a5440bd7bc0772cfdec73a50aa7223", - "authModule": "0x4e8C2e7659b48ec6a546dB883aec5b8C985c2229", - "tokenDeployer": "0x987997fad8C254F4b604DFa7B10785cA6500C662", + "address": "0xBC647142c98b6a886a3581cccb0d9E6148Ed76B9", + "implementation": "0xb6EaD9BBB2c8581128F01b57719Ec130a36922aB", + "implementationCodehash": "0x3c3d115c7f9dbc903af3a1dd327af83842396dfe797f50e7acc38e1b02a82c3d", + "authModule": "0x40fEA06609ce54A1F0Ca829c980D3633f73b1869", + "tokenDeployer": "0xC0be3306fE72D59f8B56Ad587a3751e0be406D8C", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xEFa5C167B3c793d922E177422832FD8e5deC38CB", + "address": "0x0aa18e321c89bbdfCE9913aa0cA20B977aDc4B48", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0xd12966cd807a71aef0f7cc85cda2a4d65369ebc78ca018efb34a1a740794d18a", + "codehash": "0x239a905161dd2c2ee8f567b0d3f10d8c82285bbc9bcd0a283ca20c1e743ce734", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -129,7 +129,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0x3D8D2Bc4E0d13594Be04De460689F70d3FB19637", + "address": "0xDF3f7D718A7Be68C34f5c566BE47cB419157BFb9", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -137,14 +137,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xa1a3bcc8d08A275907BFf9415bf45613DF2d0b40", + "address": "0xeCEB890FAf55ff7314DA6717F9a5Cf5EAB479FD5", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0x70F09056271e14AB1b0e69F6EF523C5EeF2238B9", + "address": "0x27682c1b1F5A8dEAdd052331D1E977c711D0b862", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -178,21 +178,21 @@ "startingKeyIDs": [ null ], - "address": "0x6F4f1eb0546872c4BE7bCe4EaD35f24119A5DA77", - "implementation": "0xaaFa38E8e1B628573582493c617cD61474b86C36", - "implementationCodehash": "0x2885abf9636a74016fbb00663bfdd3269bc437aa2b812a0e505804b030510af7", - "authModule": "0x88D8531b96087B77dc4F536C1a40831fc8b73E7B", - "tokenDeployer": "0x11EC7EE7f7377d071254D1Fa2a774B450E4F5a73", + "address": "0xADb2C397B2496fB2Ef9d3BFAad322c888A3E182d", + "implementation": "0x3f7235dFD12Ef2fCa128078937C7503421EAbC7E", + "implementationCodehash": "0x80b4ebdab0c0d249caed3f39e5ce7dc0d28b0d63c30e705fa8ab8029c103025a", + "authModule": "0x3bBF2f935177dc06356dCbD83365788C0F21a865", + "tokenDeployer": "0x17310d0967626063af4C81cc7d0A9C631d9546c0", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xccc3071FC654E8769B8946080cc13B15234e836f", + "address": "0x3Cd679Cd00b61a8540Fcc3aE90Bba30DC3eeb6ee", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x097ee66694762b16803e1181ad3dae89fd8502eef32b4f470f10d9f4854a9598", + "codehash": "0x186df8a587b3ad2edea4fbaf0a44c1da6a365dcd9481cca1645bd99d857485ca", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -208,7 +208,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0xb4fed451532414B328e2A25E253a4610d9bf9cb2", + "address": "0x0cE4E66DB54d5Aeb2fC2e5605b53590009e2F525", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -216,14 +216,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xe6CAFA8f875Ce8D50b108E6926637824C2EE62e0", + "address": "0xF5668BbEFBca143f7B31A74708C5E11fe00Fd039", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0xDccC53824Ae7db14eADFbB43dAa2732EE089e0B3", + "address": "0xb2cdFD9286018e592aBc1637cB0bb4fE5BFd4Cf6", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -257,21 +257,21 @@ "startingKeyIDs": [ null ], - "address": "0x58a06F3e8B4c79CD5901f490EE718665f88d2e34", - "implementation": "0x25F97150c5fC84ddF7e739D5Cbe2CFF3e902b16C", - "implementationCodehash": "0xef58668bb5aed99fa168d9952f82b19f1c055b9d3f17348a28bb1a544dc3a78e", - "authModule": "0x0304BE8b3d98b286c7354b382f3f5Eb00472a8ac", - "tokenDeployer": "0x501F51FaCDBD57309f19bd1612F39ca4F7a5A3c9", + "address": "0x774299C3C101a5934B31264DC695a7D472Cf0B6B", + "implementation": "0xF093D641d5D3c79b45F351C9d1C4062Bb474Ae70", + "implementationCodehash": "0xe27d102637cb5caf15ff440e968f8bf622eb550f4c0b00480a2cb39c418007b1", + "authModule": "0xFB427588ea4107A59bC6dEb2Fa342d5519800f26", + "tokenDeployer": "0xEe0c0Cb87ee21e5f3CC5ed23cbF374F913369Ab7", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xE7e38e86708B6AF2ED15e3c9Cabd89C3552a2756", + "address": "0xE7741c9044F96FDb1fb08405a6199995E94Ef6ba", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x085af2093b701de1c24e1df60224a62138d2ec73eb83a53be82068a0e8d17ded", + "codehash": "0x5d6623658f7d8d16360ef8060d5ad5be7bbd0cc0204339565d9f94e6889c559c", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -287,7 +287,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0x8C9208fa20fc4232760CBCCea032D907E085FFd3", + "address": "0x78F3EF3cD7C680C90A5104237B46474b078f530a", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -295,14 +295,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x469981f1EeAd30A4794f167CB074ffa94211e724", + "address": "0xd55525A1De3270C28F021b7d7843F826a0fdd21B", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0x3246a56A964bD3d78240A02d2ceA730f561664fe", + "address": "0xC72A500AF130367B7F31eC885C3Cf2Fae41938cD", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -321,20 +321,25 @@ "contracts": { "ServiceRegistry": { "governanceAccount": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", - "codeId": 3, - "address": "axelar1hrpna9v7vs3stzyd4z3xf00676kf78zpe2u5ksvljswn2vnjp3ystlgl4x" + "codeId": 117, + "address": "axelar1c9fkszt5lq34vvvlat3fxj6yv7ejtqapz04e97vtc9m5z9cwnamq8zjlhz" }, - "ConnectionRouter": { + "Router": { "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", - "codeId": 1, - "address": "axelar1fmsa0f5rs5jyauama96k0umzkktemqawrtn28zrjc0rvx47f68fqckxwuj" + "codeId": 115, + "address": "axelar14jjdxqhuxk803e9pq64w4fgf385y86xxhkpzswe9crmu6vxycezst0zq8y" }, "Multisig": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "blockExpiry": 10, - "codeId": 5, - "address": "axelar1ufs3tlq4umljk0qfe8k5ya0x6hpavn897u2cnf9k0en9jr7qarqqa9263g" + "codeId": 120, + "address": "axelar19jxy26z0qnnspa45y5nru0l5rmy9d637z5km2ndjxthfxf5qaswst9290r" + }, + "Coordinator": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", + "codeId": 119, + "address": "axelar1m2498n4h2tskcsmssjnzswl5e6eflmqnh487ds47yxyu6y5h4zuqr9zk4g" }, "Rewards": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", @@ -347,133 +352,141 @@ "10" ] }, - "codeId": 4, - "address": "axelar1wkwy0xh89ksdgj9hr347dyd2dw7zesmtrue6kfzyml4vdtz6e5ws2pvc5e" + "codeId": 118, + "address": "axelar1vaj9sfzc3z0gpel90wu4ljutncutv0wuhvvwfsh30rqxq422z89qnd989l" }, "NexusGateway": { "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", - "codeId": 2, - "address": "axelar1f4833h09j73ussy9amadhcnssl4pnuwe6krqcrf39smw30mmxkqq4nxzdz" + "codeId": 116, + "address": "axelar1jjjr3tqs0nzjv3y9fg4xvzkww50jq06a9qp77r8kzmqyla97556sxx7702" }, "VotingVerifier": { "avalanche": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0xCa85f85C72df5f8428a440887CA7c449D94e0D0c", + "sourceGatewayAddress": "0xeA3D3979ffa953FB209FcF6D13EA49AFC0A05604", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" + "address": "axelar1ty7mx0cllgz8xuvhn2j7e3qy8999ssgmjtktyqetl335em0g88lq6rjhl2" }, - "codeId": 6, + "codeId": 121, "fantom": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0x7aF5ab507E81C4F92e0E6C653F7087513F2C39D2", + "sourceGatewayAddress": "0xBC647142c98b6a886a3581cccb0d9E6148Ed76B9", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" + "address": "axelar1n7sftvs3ul6yy5wqykka4dtmzm76ewmlc58q8xgvuxuurkjxtjcsw7ucyf" }, "ethereum-sepolia": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0x6F4f1eb0546872c4BE7bCe4EaD35f24119A5DA77", + "sourceGatewayAddress": "0xADb2C397B2496fB2Ef9d3BFAad322c888A3E182d", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" + "address": "axelar1e6jnuljng6aljk0tjct6f0hl9tye6l0n9p067pwx2374h82dmr0s9qcqy9" }, "op-sepolia": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0x58a06F3e8B4c79CD5901f490EE718665f88d2e34", + "sourceGatewayAddress": "0x774299C3C101a5934B31264DC695a7D472Cf0B6B", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" + "address": "axelar1h6k0vnwagv3a5pmwck0g2dlwahr6p8aqlcueqnk259y6252adx5sn0f8jx" } }, "Gateway": { "avalanche": { - "address": "axelar13ehuhysn5mqjeaheeuew2gjs785f6k7jm8vfsqg3jhtpkwppcmzqtedxty" + "address": "axelar16hdkkxjyapw5zyf2wxs42854278tpwgqkz87kst8wamvr4pcy4pqrpn96s" }, - "codeId": 7, + "codeId": 122, "fantom": { - "address": "axelar1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsrmfyk6" + "address": "axelar1pvcj8m7gp30tl26kt7n2ncg9g7xnt86wlqatlvwehh8s2ve2anmq6ea96w" }, "ethereum-sepolia": { - "address": "axelar18csycs4vm6varkp00apuqlsm7v4twg8jsljk8wfdd7cghr7g4rtsltrlkp" + "address": "axelar1hdx49xndyxzrs3t5jkzart00taqysu6kmaf77waxv8regwxxpp4qcsea2w" }, "op-sepolia": { - "address": "axelar14ph4e660eyqz0j36zlkaey4zgzexm5twkmjlqaequxr2cjm9eprqpe6u2s" + "address": "axelar1ap6vtz5gf2wcayqgl39aag07auj6qecd78el7m6fxw76sl5rnnuqqhvugs" } }, "MultisigProver": { "avalanche": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "destinationChainID": "43113", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1qum2tr7hh4y7ruzew68c64myjec0dq2s2njf6waja5t0w879lutqv062tl" + "address": "axelar1g6520uhs8u37el40wqngf60z06mjgk6z7nezytd2mxrmh7yesnmsyc0zjw" }, - "codeId": 8, + "codeId": 123, "fantom": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "destinationChainID": "4002", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1rl8su3hadqqq2v86lscpuklsh2mh84cxqvjdew4jt9yd07dzekyqk7mg2m" + "address": "axelar17fa8wruwmk2y0h32wrg5rxwespvcvz5zc2hjnczz58tnmg8enh0sunsshp" }, "ethereum-sepolia": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "destinationChainID": "11155111", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1335rlmhujm0gj5e9gh7at9jpqvqckz0mpe4v284ar4lw5mlkryzsnug9tg" + "address": "axelar1274ntw3prlrzzys4m0mc5xxhzu09x0r3d37886xdz65w59ey7mgs6v0j5z" }, "op-sepolia": { + "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "destinationChainID": "11155420", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar10sfpr8ykh9xn93u8xec4ed3990nmvh86e0vaegkauqhlkxspysyqwc00au" + "address": "axelar1xdmwwl44tcdpljupjkafqpznrny4t60xgyyqw7hgnvztjtvlgurqx9k960" } } }, @@ -484,6 +497,6 @@ "grpc": "devnet-amplifier.axelar.dev:9090", "tokenSymbol": "AMPLIFIER", "gasPrice": "0.00005uamplifier", - "gasLimit": 5000000 + "gasLimit": "auto" } } diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index a48e997c..80dc6823 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -20,21 +20,21 @@ "startingKeyIDs": [ null ], - "address": "0xe1d5870E69F84A464ca2723a633a08175f89b702", - "implementation": "0x26A9E765aD04020fC150559b30D01B8d1A277888", - "implementationCodehash": "0xc6205ecd87047d92df14362523372e766df41c5dd3b6d647a820b9bba2b9d4ae", - "authModule": "0xfc3e170CcFcb25616cAaA30bA1c5eFF70a4D7C28", - "tokenDeployer": "0xeB1560B5c2eA5dF822733dF11e919D47aBcE625E", + "address": "0x3bcBd03B123d817f98bccBf45B38631739496E94", + "implementation": "0x0cAF30063a94382bd55AAbc834bB23129D030012", + "implementationCodehash": "0xf39269736d1c878058c823265bbbafe6cb28827ae30b3230a49bc12b14a11439", + "authModule": "0x7fF4F27f1C476e24c555556C5D47bd7D29151e5d", + "tokenDeployer": "0xDa41938e8bbE78517a15e3A6ab897fABb23f3d35", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xf6C1fec9606Efd5b1e43e07ceF1d1a7dC8771947", + "address": "0x3230E865358d8d1a560192ae8cb3Eae303cBd098", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x05244d3fa7abc1a663dc7873b44430f1a03ae5331a20b2bc923e392950d8305d", + "codehash": "0xfbb0bec06f9f73bec57b6e4da96719f79802d497216dc9b5d63b2ca14966c645", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -50,7 +50,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0xE8895b6bDEDe1EeA2B906020c8DE7Ad9C5540789", + "address": "0x7eeE33A59Db27d762AA1Fa31b26efeE0dABa1132", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -58,14 +58,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x9482BAb06a52152650d2C701834651522EB347E6", + "address": "0xE53fBC049371843ae49800308563E22f2a95f364", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0x25414c43f39abD2144fD6eA949Fc159b015CFDAF", + "address": "0x9ee090d9121B2d687bAa33e393104C254Fe24b54", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -99,21 +99,21 @@ "startingKeyIDs": [ null ], - "address": "0x2e175a334DA974ca5d355601e85003ff2Bc9cBf4", - "implementation": "0x2a00a13B3F5D7a3F77489767e356751AF4D74Be3", - "implementationCodehash": "0x4fc175c23b623e17e42fa0dc1da121a6b8d338eaac2516649d9f01ebf650bacc", - "authModule": "0x2e4E2Dc3415b7F894B740463c0CF1Dc91E98E00E", - "tokenDeployer": "0x9C326DBa075809d80D18a2f26d5F503355E2a237", + "address": "0xE5Cd4e66082352b293Ae8e8B0Ef256b26B6A9658", + "implementation": "0x90135db9eCE092818948c50cF5b266ef64D49e85", + "implementationCodehash": "0x1408bf6cf8720e377efdc26389859c8d0bf7e5d546e680fd58044c8365b1c15a", + "authModule": "0xDe3dE140a4b1621B6b04673c5CC4178daad01256", + "tokenDeployer": "0xB0d15dBCa48449999c53AC330F84fdEB0Df974bB", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0x4f7080c6ab705367B4193Ad583bC9a2548d65728", + "address": "0x23888e6A0e0FE2D1C337e297D4dE3F2Ac8C721F6", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x78be13f9dad0203bdac06c71953e22ae8d8608928b4bbe889311656245896530", + "codehash": "0xa147b5c69545de35b1ae07e08dd53b7ff9293fd7d910ce3127acb827cfd63bd1", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -129,7 +129,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0x11983F18E48a434099d21E82a1Fe5C9319481bBD", + "address": "0x573D6F53529300a6fbc5820c7404cC856f063eA3", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -137,14 +137,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x945989C19f8c569ca2dF10775E65C29A37B158bc", + "address": "0x93f661521971AB41a003b76EcE98Fe52FD50EB25", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0xA1C7E26BAfA040B5118551F82Eaa82A7Fa11f95d", + "address": "0xe573f3Fc5C9Ce5D145732b13e02B5e1F44eCe108", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -178,21 +178,21 @@ "startingKeyIDs": [ null ], - "address": "0xe8bF3a935D535E5Cc54Df3C76592357DE60A7EdF", - "implementation": "0x2e7E04f6b9e0A9CCF53Ea297d761591c0F187FDc", - "implementationCodehash": "0xe2dff4bce052f071dfd264b3386bcf7061110e06cc8e0eabae00d48e4acc8a4f", - "authModule": "0x2771515c95e76B530BBe040FEa1c53b3831cAA42", - "tokenDeployer": "0x5338fC86a81b8d0162EE9133F968830d46B29519", + "address": "0xFef54D5C6648aB29C2B0D13CA6fadc46B811fD6D", + "implementation": "0xe8b3DeDa0804387f2A1F41Ed910cc5bF0412A84C", + "implementationCodehash": "0xae93179b77858c665289631ac7bb55f00eefe0915bde2b67fb3e86fc32839fbb", + "authModule": "0x2c24A8E6Dfb973d9C5D9309519C62065e6a75651", + "tokenDeployer": "0xF2eF04A73Ef579de638b5658072BEB676530C5F2", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0xAe71DFf9281AD8D0755573828211A2822f85d91A", + "address": "0x01117C0Bb2a764Fc66162C6132F4069576D9226e", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x2cf936c395027fd7369a010a083ccc4a228fd09f523ecbf57b06a4bdee476399", + "codehash": "0x3a628ebe2880fcbb1be162b09672baf4d828060d291efce5e5b04953be45ae39", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -208,7 +208,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0xF3294396C863297F3e5735632E29a9b4e61951Ff", + "address": "0xc423989304021C77af8FFebE786DAA5979A27850", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -216,14 +216,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xEf15F4Ab713Dd80EB8A35067f21b3CF09479f975", + "address": "0x0d3cB37dc4589bBA912BE2fe0AAFc70358675efB", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0xF6a0F4B4C06e730ad66f3882E9B95C0C9f2247e7", + "address": "0xF5e96a85EA4f40d2A388f55d22aCf31F78487aEA", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -257,21 +257,21 @@ "startingKeyIDs": [ null ], - "address": "0x2ABBb098e8372B5CF23E264e8f7Fe7b212803eea", - "implementation": "0x20eC3c31740F2A4e0c5F69bD7b3C3fd8647a7C30", - "implementationCodehash": "0x0ee1271547473f72cb57c6ca84bb242ecd95a4855fcbc2316e8ab378b4c5bce8", - "authModule": "0x257a5aCa060e953ac40A764f11F3B027718a2172", - "tokenDeployer": "0xfc4b97E962953F059baA6665b7Aec3c1916494da", + "address": "0x4e6d2B261a28066db189D02cDCfaF092d8e5003a", + "implementation": "0x8A109C9d0Af3d8755b7d3ca4E38f4a0f2F811363", + "implementationCodehash": "0xd5955d12167011f693b3c36705be2dc0d20a57dc7465671badebf06b3bf4b736", + "authModule": "0x626DE43fc27396deE25f81343d7f20863179F5dE", + "tokenDeployer": "0x032ee8934e4f50CBc58f5F84FA487dfD46401618", "deploymentMethod": "create" }, "InterchainGovernance": { "governanceChain": "Axelarnet", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "minimumTimeDelay": 100, - "address": "0x3301326B51488b89177EE8Ba61E36B1d02d5C3C9", + "address": "0x552CA7dA45EB6CbA0Ad8b5167CceDb37Bd587136", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", - "codehash": "0x22c6f7189418f3cf2fe3b6ee9a31712f9276c592016bbcae9eaa1f80c0b3255d", + "codehash": "0xa416c261a4b1623a9fd3cbb868b767c7b92f8eb0c6a292e092f708b733427769", "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, @@ -287,7 +287,7 @@ "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" ], "threshold": 4, - "address": "0xC6aE7584Db9C214fA1201abDbC40b1A116eA3b67", + "address": "0x2Def301bD5792Ae75368c41E835C12C5D2f1Bc19", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create3", "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", @@ -295,14 +295,14 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xd859f5EA0661569659410d18Cf74cc7309F31FD7", + "address": "0xBFd7DC5C977E81F16760A6C57cD443C334C18d30", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create", "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" }, "Create3Deployer": { - "address": "0x95CBe71a1Ede1f8Aa782cd047f32872b10fA08ec", + "address": "0x597B811dE2fb8EDc47Ef1D3Db101bC7a137EfC6c", "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", @@ -321,20 +321,25 @@ "contracts": { "ServiceRegistry": { "governanceAccount": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", - "codeId": 3, - "address": "axelar1hrpna9v7vs3stzyd4z3xf00676kf78zpe2u5ksvljswn2vnjp3ystlgl4x" + "codeId": 11, + "address": "axelar1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luas9x8txw" }, - "ConnectionRouter": { + "Router": { "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", - "codeId": 1, - "address": "axelar12dtt66cn7dzfjnxytc2rdtwfr528g4vfxng65z85c730s83397fql8sgwh" + "codeId": 9, + "address": "axelar1q3g7fdqfpftqfpuakwn7x037k80wv35jj9ged7v5e798pds7hnasgj6azz" }, "Multisig": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "blockExpiry": 10, - "codeId": 5, - "address": "axelar1ufs3tlq4umljk0qfe8k5ya0x6hpavn897u2cnf9k0en9jr7qarqqa9263g" + "codeId": 14, + "address": "axelar15nczwuqh0zcu6syeqsc4td6dphql7n2p7cgkl9raz97z5s3zdjrsc8we9y" + }, + "Coordinator": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", + "codeId": 13, + "address": "axelar12wrtrzqt7atsen2wsl9k5hu82jsj6739h7pck20gtdd24mqyxv6q43lyh7" }, "Rewards": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", @@ -347,133 +352,141 @@ "10" ] }, - "codeId": 4, - "address": "axelar1wkwy0xh89ksdgj9hr347dyd2dw7zesmtrue6kfzyml4vdtz6e5ws2pvc5e" + "codeId": 12, + "address": "axelar1guczj53xxl4347adagh23eelyhnxvugw2nqq0q0dr6kws7q35jyqqnan33" }, "NexusGateway": { "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", - "codeId": 2, - "address": "axelar1qsykzlhsee4vm8h95tpt6p389tu9e0k0vp8t73kheqn7e4skwwmsff4nq9" + "codeId": 10, + "address": "axelar1e77ukfqk3yjjpscurp0la3ae3ssafw5zmvxfqsvljh0duectfcnqzxc86l" }, "VotingVerifier": { "avalanche": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0xe1d5870E69F84A464ca2723a633a08175f89b702", + "sourceGatewayAddress": "0x3bcBd03B123d817f98bccBf45B38631739496E94", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1466nf3zuxpya8q9emxukd7vftaf6h4psr0a07srl5zw74zh84yjq4687qd" + "address": "axelar1elaymnd2epmfr498h2x9p2nezc4eklv95uv92u9csfs8wl75w7yqdc0h67" }, - "codeId": 6, + "codeId": 18, "fantom": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0x2e175a334DA974ca5d355601e85003ff2Bc9cBf4", + "sourceGatewayAddress": "0xE5Cd4e66082352b293Ae8e8B0Ef256b26B6A9658", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1fyr2mptjswz4w6xmgnpgm93x0q4s4wdl6srv3rtz3utc4f6fmxeq27n223" + "address": "axelar19g43wyj843ydkc845dcdea6su4mgfjwn5jpa84emhemt9grh8qcs9wztck" }, "ethereum-sepolia": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0xe8bF3a935D535E5Cc54Df3C76592357DE60A7EdF", + "sourceGatewayAddress": "0xFef54D5C6648aB29C2B0D13CA6fadc46B811fD6D", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar132xmxm33vwjlur2pszl4hu9r32lqmqagvunnuc5hq4htps7rr3kqprupcw" + "address": "axelar1sxujcvele5eqtx0xc4wuy6jr0m28y0yt8spn7efc3527vc2j2xrqk6wkay" }, "op-sepolia": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0x2ABBb098e8372B5CF23E264e8f7Fe7b212803eea", + "sourceGatewayAddress": "0x4e6d2B261a28066db189D02cDCfaF092d8e5003a", "votingThreshold": [ - "9", + "6", "10" ], "blockExpiry": 10, "confirmationHeight": 1, "msgIdFormat": "hex_tx_hash_and_event_index", - "address": "axelar1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqje99z6" + "address": "axelar1h4j7geavjplss8ulw3agy5244kghe3yz9gljm90kv55dh2yrav6se2nx4d" } }, "Gateway": { "avalanche": { - "address": "axelar13ehuhysn5mqjeaheeuew2gjs785f6k7jm8vfsqg3jhtpkwppcmzqtedxty" + "address": "axelar1vnfn0e4vnn58ydpm05wqcc9zp8t5ztwd5rw5f895lykqaezmuccqujmwl2" }, - "codeId": 7, + "codeId": 19, "fantom": { - "address": "axelar1utjx3594tlvfw4375esgu72wa4sdgf0q7x4ye27husf5kvuzp5rsrmfyk6" + "address": "axelar12xk7d7lksh6z94vvt4qqur765trqdcn7w86mfak62qjz63zvmhvstaswtt" }, "ethereum-sepolia": { - "address": "axelar18csycs4vm6varkp00apuqlsm7v4twg8jsljk8wfdd7cghr7g4rtsltrlkp" + "address": "axelar17llq4ch6xwwmmpz2uc0qgyqs0mruhd5888a49n50z79q3cdrceushfjq3h" }, "op-sepolia": { - "address": "axelar14ph4e660eyqz0j36zlkaey4zgzexm5twkmjlqaequxr2cjm9eprqpe6u2s" + "address": "axelar1kt33w2ztud5duv0e6sc05y2xk046dtv4n8tfg38h4x2ryj5td9kqgjgugz" } }, "MultisigProver": { "avalanche": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "destinationChainID": "43113", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1qum2tr7hh4y7ruzew68c64myjec0dq2s2njf6waja5t0w879lutqv062tl" + "address": "axelar1qt0gkcrvcpv765k8ec4tl2svvg6hd3e3td8pvg2fsncrt3dzjefswsq3w2" }, - "codeId": 8, + "codeId": 20, "fantom": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "destinationChainID": "4002", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1rl8su3hadqqq2v86lscpuklsh2mh84cxqvjdew4jt9yd07dzekyqk7mg2m" + "address": "axelar17q90gwd9279une6fagsxqrak87fmc3gtusv9dglwc0ezcxufrtdshr7pxt" }, "ethereum-sepolia": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "destinationChainID": "11155111", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar1335rlmhujm0gj5e9gh7at9jpqvqckz0mpe4v284ar4lw5mlkryzsnug9tg" + "address": "axelar1xz4cya4qm2ws6nzperhvc40wdjcq4872fl6d3j2s4cytyx8j80eqenv87g" }, "op-sepolia": { + "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "destinationChainID": "11155420", "signingThreshold": [ - "4", - "5" + "6", + "10" ], "serviceName": "validators", "workerSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", - "address": "axelar10sfpr8ykh9xn93u8xec4ed3990nmvh86e0vaegkauqhlkxspysyqwc00au" + "address": "axelar17aatfk5ktm834djmyk3dsgr48mja54e8hjzcs4c8vyunlpacc7qscftcs7" } } }, @@ -484,6 +497,6 @@ "grpc": "devnet-verifiers.axelar.dev:9090", "tokenSymbol": "VERIFIERS", "gasPrice": "0.00005uverifiers", - "gasLimit": 5000000 + "gasLimit": "auto" } } From eaa1ae7d248cf5247e09c5a9cc6d588e88f18a38 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Sat, 11 May 2024 09:08:18 +0530 Subject: [PATCH 46/85] feat: add config for linea sepolia (#206) * feat: add config for linea sepolia * feat: add finality and gasPrice * refactor: address PR comments * refactor: udpate gas limit * refactor: update gas limit * - added constaddrdeployer * - create 3 deployer * - gateway * - operator * - gas service * refactor: update gaslimit for linea-sepolia --------- Co-authored-by: Talal Ashraf Co-authored-by: Milap Sheth --- axelar-chains-config/info/testnet.json | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 99e3a064..7fc4b401 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2063,6 +2063,76 @@ }, "finality": "finalized", "approxFinalityWaitTime": 1 + }, + "linea-sepolia": { + "name": "Linea-Sepolia", + "id": "linea-sepolia", + "axelarId": "linea-sepolia", + "chainId": 59141, + "rpc": "https://rpc.sepolia.linea.build", + "tokenSymbol": "ETH", + "contracts": { + "AxelarGateway": { + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "startingKeyIDs": [ + "evm-linea-sepolia-genesis" + ], + "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", + "implementation": "0xc1712652326E87D193Ac11910934085FF45C2F48", + "implementationCodehash": "0xd0e057031b5acbd22b8e98686f6cda19dcbcac6495bd7297cff31dcb22ddcbae", + "authModule": "0x1a920B29eBD437074225cAeE44f78FC700B27a5d", + "tokenDeployer": "0xD2aDceFd0496449E3FDE873A2332B18A0F0FCADf", + "deploymentMethod": "create3", + "salt": "AxelarGateway v6.2" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" + }, + "InterchainGovernance": { + "address": "0x943AAd94e45bad24A3da01a3ba815C03fCAC53FC" + }, + "Multisig": { + "address": "0x943AAd94e45bad24A3da01a3ba815C03fCAC53FC" + }, + "Operators": { + "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", + "deploymentMethod": "create2", + "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", + "salt": "Operators" + }, + "AxelarGasService": { + "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", + "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", + "implementation": "0xCD6b34FaF1FD1056C728A27426AB6807f84BAa1b", + "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85" + } + }, + "explorer": { + "name": "Lineascan", + "url": "https://sepolia.lineascan.build/", + "api": "https://api-sepolia.lineascan.build/api" + }, + "gasOptions": { + "gasLimit": 7000000 + }, + "confirmations": 1, + "finality": "400", + "approxFinalityWaitTime": 30 } }, "axelar": { From f571344995182ee558928baaf706c0aec8f68789 Mon Sep 17 00:00:00 2001 From: re1ro Date: Fri, 10 May 2024 23:44:30 -0400 Subject: [PATCH 47/85] ci(gas-info): handling timeout for linea and mantle (#230) --- axelar-chains-config/info/testnet.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 7fc4b401..aac0c96c 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1019,7 +1019,8 @@ }, "confirmations": 4, "finality": "400", - "approxFinalityWaitTime": 30 + "approxFinalityWaitTime": 30, + "timeout": 120000 }, "scroll": { "name": "Scroll", @@ -1889,9 +1890,6 @@ "rpc": "https://rpc.sepolia.mantle.xyz", "tokenSymbol": "MNT", "confirmations": 2, - "gasOptions": { - "gasLimit": 50000000000 - }, "onchainGasEstimate": { "l1ChainName": "ethereum", "gasEstimationType": 2, From 777fe35a851d59a29a3f248c659c169dacb37f29 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Sat, 11 May 2024 00:45:03 -0400 Subject: [PATCH 48/85] feat(stellar): add stellar operators scripts (#227) * add stellar sdk * add stellar to chain configs * add stellar utils and operators scripts * cleanup * ftm gas price revert * add retry * prettier * lint --- axelar-chains-config/info/mainnet.json | 11 ++ axelar-chains-config/info/testnet.json | 12 ++ package-lock.json | 96 +++++++++++-- package.json | 1 + stellar/README.md | 17 +++ stellar/balances.js | 33 +++++ stellar/cli-utils.js | 3 + stellar/generate-bindings.js | 54 ++++++++ stellar/operators.js | 82 +++++++++++ stellar/utils.js | 183 +++++++++++++++++++++++++ 10 files changed, 479 insertions(+), 13 deletions(-) create mode 100644 stellar/README.md create mode 100644 stellar/balances.js create mode 100644 stellar/cli-utils.js create mode 100644 stellar/generate-bindings.js create mode 100644 stellar/operators.js create mode 100644 stellar/utils.js diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index b43601ae..f5e4d6ee 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2283,6 +2283,17 @@ "approxFinalityWaitTime": 25 } }, + "stellar": { + "id": "stellar", + "rpc": "https://rpc.ankr.com/stellar_soroban", + "horizonRpc": "https://horizon.stellar.org", + "networkType": "mainnet", + "explorer": { + "name": "Soroban Nownodes", + "url": "https://soroban.nownodes.io" + }, + "tokenSymbol": "XLM" + }, "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index aac0c96c..9291eba2 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2133,6 +2133,18 @@ "approxFinalityWaitTime": 30 } }, + "stellar": { + "id": "stellar", + "rpc": "https://soroban-testnet.stellar.org:443", + "horizonRpc": "https://horizon-testnet.stellar.org", + "networkType": "testnet", + "explorer": { + "name": "Soroban Nownodes", + "url": "https://soroban.nownodes.io/testnet" + }, + "tokenSymbol": "XLM", + "contracts": {} + }, "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", diff --git a/package-lock.json b/package-lock.json index 2030801e..1496abeb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", + "@stellar/stellar-sdk": "^11.3.0", "axios": "^1.6.2", "path": "^0.12.7" }, @@ -2454,6 +2455,41 @@ "antlr4ts": "^0.5.0-alpha.4" } }, + "node_modules/@stellar/js-xdr": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.1.tgz", + "integrity": "sha512-3gnPjAz78htgqsNEDkEsKHKosV2BF2iZkoHCNxpmZwUxiPsw+2VaXMed8RRMe0rGk3d5GZe7RrSba8zV80J3Ag==" + }, + "node_modules/@stellar/stellar-base": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-11.1.0.tgz", + "integrity": "sha512-nMg7QSpFqCZFq3Je/lG12+DY18y01QHRNyCxvjM8i4myS9tPRMDq7zqGcd215BGbCJxenckiOW45YJjQjzdcMQ==", + "dependencies": { + "@stellar/js-xdr": "^3.1.1", + "base32.js": "^0.1.0", + "bignumber.js": "^9.1.2", + "buffer": "^6.0.3", + "sha.js": "^2.3.6", + "tweetnacl": "^1.0.3" + }, + "optionalDependencies": { + "sodium-native": "^4.1.1" + } + }, + "node_modules/@stellar/stellar-sdk": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-11.3.0.tgz", + "integrity": "sha512-i+heopibJNRA7iM8rEPz0AXphBPYvy2HDo8rxbDwWpozwCfw8kglP9cLkkhgJe8YicgLrdExz/iQZaLpqLC+6w==", + "dependencies": { + "@stellar/stellar-base": "^11.0.1", + "axios": "^1.6.8", + "bignumber.js": "^9.1.2", + "eventsource": "^2.0.2", + "randombytes": "^2.1.0", + "toml": "^3.0.0", + "urijs": "^1.19.1" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -3257,11 +3293,11 @@ } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3293,6 +3329,14 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/base32.js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", + "integrity": "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3527,7 +3571,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -5570,6 +5613,14 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -8182,9 +8233,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -9693,6 +9744,16 @@ "node": ">=8" } }, + "node_modules/sodium-native": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.1.1.tgz", + "integrity": "sha512-LXkAfRd4FHtkQS4X6g+nRcVaN7mWVNepV06phIsC6+IZFvGh1voW5TNQiQp2twVaMf05gZqQjuS+uWLM6gHhNQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.8.0" + } + }, "node_modules/solc": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", @@ -10396,6 +10457,11 @@ "node": ">=0.6" } }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -10521,8 +10587,7 @@ "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "node_modules/tweetnacl-util": { "version": "0.15.1", @@ -10800,9 +10865,9 @@ } }, "node_modules/undici": { - "version": "5.28.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", - "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" @@ -10849,6 +10914,11 @@ "punycode": "^2.1.0" } }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, "node_modules/usb": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/usb/-/usb-2.9.0.tgz", diff --git a/package.json b/package.json index 12561a1e..83a0a367 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", + "@stellar/stellar-sdk": "^11.3.0", "axios": "^1.6.2", "path": "^0.12.7" }, diff --git a/stellar/README.md b/stellar/README.md new file mode 100644 index 00000000..2be5d99e --- /dev/null +++ b/stellar/README.md @@ -0,0 +1,17 @@ +# Stellar deployments + +## Installation + +Install `libsodium` for faster signing operations optionally. Install npm dependencies afterwards. + +```sh +brew install libsodium + +npm ci +``` + +## Contracts + +### Operators + + diff --git a/stellar/balances.js b/stellar/balances.js new file mode 100644 index 00000000..a1a45b92 --- /dev/null +++ b/stellar/balances.js @@ -0,0 +1,33 @@ +const { Command, Option } = require('commander'); +const { getWallet } = require('./utils'); +const { loadConfig } = require('../evm/utils'); +require('./cli-utils'); + +async function processCommand(options, _, chain) { + await getWallet(chain, options); +} + +if (require.main === module) { + const program = new Command(); + + program.name('balances').description('Wallet balance'); + + program.addOption( + new Option('-e, --env ', 'environment') + .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) + .default('testnet') + .makeOptionMandatory(true) + .env('ENV'), + ); + + program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); + + program.addOption(new Option('-v, --verbose', 'verbose output').default(false)); + + program.action((options) => { + const config = loadConfig(options.env); + processCommand(options, config, config.stellar); + }); + + program.parse(); +} diff --git a/stellar/cli-utils.js b/stellar/cli-utils.js new file mode 100644 index 00000000..a38e4e67 --- /dev/null +++ b/stellar/cli-utils.js @@ -0,0 +1,3 @@ +'use strict'; + +require('dotenv').config(); diff --git a/stellar/generate-bindings.js b/stellar/generate-bindings.js new file mode 100644 index 00000000..f06d7712 --- /dev/null +++ b/stellar/generate-bindings.js @@ -0,0 +1,54 @@ +'use strict'; + +const { Command, Option } = require('commander'); +const { execSync } = require('child_process'); +const { loadConfig } = require('../evm/utils'); +const path = require('path'); +const { getNetworkPassphrase } = require('./utils'); +require('./cli-utils'); + +function processCommand(options, config) { + const { wasmPath, contractId, outputDir } = options; + const network = 'stellar'; + const overwrite = true; + + const { rpc, networkType } = config[network]; + const networkPassphrase = getNetworkPassphrase(networkType); + + const cmd = `soroban contract bindings typescript --wasm ${wasmPath} --rpc-url ${rpc} --network-passphrase "${networkPassphrase}" --contract-id ${contractId} --output-dir ${outputDir} ${ + overwrite ? '--overwrite' : '' + }`; + console.log(`Executing command: ${cmd}`); + + execSync(cmd, { stdio: 'inherit' }); + console.log('Bindings generated successfully!'); +} + +function main() { + const program = new Command(); + program.name('Generate TypeScript Bindings for Soroban contract').description('Generates TypeScript bindings for a Soroban contract.'); + + program.addOption( + new Option('-e, --env ', 'environment') + .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) + .default('testnet') + .makeOptionMandatory(true) + .env('ENV'), + ); + program.addOption(new Option('--wasmPath ', 'path to the WASM file').makeOptionMandatory(true)); + program.addOption(new Option('--contractId ', 'contract ID').makeOptionMandatory(true)); + program.addOption( + new Option('--outputDir ', 'output directory for the generated bindings').default(path.join(__dirname, 'bindings')), + ); + + program.action((options) => { + const config = loadConfig(options.env); + processCommand(options, config); + }); + + program.parse(); +} + +if (require.main === module) { + main(); +} diff --git a/stellar/operators.js b/stellar/operators.js new file mode 100644 index 00000000..7ced89e2 --- /dev/null +++ b/stellar/operators.js @@ -0,0 +1,82 @@ +const { Contract, Address } = require('@stellar/stellar-sdk'); +const { Command, Option } = require('commander'); +const { getWallet, prepareTransaction, buildTransaction, sendTransaction, estimateCost } = require('./utils'); +const { loadConfig, printInfo } = require('../evm/utils'); +require('./cli-utils'); + +async function processCommand(options, _, chain) { + const [wallet, server] = await getWallet(chain, options); + + const contract = new Contract(options.address || chain.contracts?.axelar_operators?.address); + + let operation; + + const address = Address.fromString(options.args || wallet.publicKey()); + + switch (options.action) { + case 'is_operator': { + operation = contract.call('is_operator', address.toScVal()); + break; + } + + case 'add_operator': { + operation = contract.call('add_operator', address.toScVal()); + break; + } + + case 'remove_operator': { + operation = contract.call('remove_operator', address.toScVal()); + break; + } + + default: { + throw new Error(`Unknown action: ${options.action}`); + } + } + + if (options.estimateCost) { + const tx = await buildTransaction(operation, server, wallet, chain.networkType, options); + const resourceCost = await estimateCost(tx, server); + printInfo('Resource cost', JSON.stringify(resourceCost, null, 2)); + return; + } + + const signedTx = await prepareTransaction(operation, server, wallet, chain.networkType, options); + const returnValue = await sendTransaction(signedTx, server); + + if (returnValue) { + printInfo('Return value', returnValue); + } +} + +if (require.main === module) { + const program = new Command(); + + program.name('operators').description('Operators contract management'); + + program.addOption( + new Option('-e, --env ', 'environment') + .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) + .default('testnet') + .makeOptionMandatory(true) + .env('ENV'), + ); + + program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); + program.addOption(new Option('-v, --verbose', 'verbose output').default(false)); + program.addOption( + new Option('--action ', 'operator contract action') + .choices(['is_operator', 'add_operator', 'remove_operator']) + .makeOptionMandatory(true), + ); + program.addOption(new Option('--estimateCost', 'estimate on-chain resources').default(false)); + program.addOption(new Option('--args ', 'arguments for the contract call')); + program.addOption(new Option('--address
', 'contract address')); + + program.action((options) => { + const config = loadConfig(options.env); + processCommand(options, config, config.stellar); + }); + + program.parse(); +} diff --git a/stellar/utils.js b/stellar/utils.js new file mode 100644 index 00000000..c03ebfb0 --- /dev/null +++ b/stellar/utils.js @@ -0,0 +1,183 @@ +'use strict'; + +const { + Keypair, + SorobanRpc, + Horizon, + TransactionBuilder, + Networks, + BASE_FEE, + xdr: { DiagnosticEvent, SorobanTransactionData }, +} = require('@stellar/stellar-sdk'); +const { printInfo, sleep } = require('../evm/utils'); + +function getNetworkPassphrase(networkType) { + switch (networkType) { + case 'local': + return Networks.SANDBOX; + case 'futurenet': + return Networks.FUTURENET; + case 'testnet': + return Networks.TESTNET; + case 'mainnet': + return Networks.PUBLIC; + default: + throw new Error(`Unknown network type: ${networkType}`); + } +} + +async function buildTransaction(operation, server, wallet, networkType, options = {}) { + const account = await server.getAccount(wallet.publicKey()); + const networkPassphrase = getNetworkPassphrase(networkType); + const builtTransaction = new TransactionBuilder(account, { + fee: BASE_FEE, + networkPassphrase, + }) + .addOperation(operation) + .setTimeout(options.timeout || 30) + .build(); + + if (options.verbose) { + printInfo('Tx', builtTransaction.toXDR()); + } + + return builtTransaction; +} + +const prepareTransaction = async (operation, server, wallet, networkType, options = {}) => { + const builtTransaction = await buildTransaction(operation, server, wallet, networkType, options); + + // We use the RPC server to "prepare" the transaction. This simulating the + // transaction, discovering the storage footprint, and updating the + // transaction to include that footprint. If you know the footprint ahead of + // time, you could manually use `addFootprint` and skip this step. + const preparedTransaction = await server.prepareTransaction(builtTransaction); + + preparedTransaction.sign(wallet); + + if (options.verbose) { + printInfo('Signed tx', preparedTransaction.toEnvelope().toXDR('base64')); + } + + return preparedTransaction; +}; + +async function sendTransaction(tx, server, options = {}) { + // Submit the transaction to the Soroban-RPC server. The RPC server will + // then submit the transaction into the network for us. Then we will have to + // wait, polling `getTransaction` until the transaction completes. + try { + const sendResponse = await server.sendTransaction(tx); + printInfo('Transaction hash', '0x' + sendResponse.hash); + + if (options.verbose) { + printInfo('Transaction broadcast response', JSON.stringify(sendResponse)); + } + + if (sendResponse.status !== 'PENDING') { + throw Error(sendResponse.errorResultXdr); + } + + let getResponse = await server.getTransaction(sendResponse.hash); + const retryWait = 1000; // 1 sec + let retries = 10; + + while (getResponse.status === 'NOT_FOUND' && retries > 0) { + await sleep(retryWait); + + getResponse = await server.getTransaction(sendResponse.hash); + + retries -= 1; + } + + if (options.verbose) { + printInfo('Transaction response', JSON.stringify(getResponse)); + } + + if (getResponse.status !== 'SUCCESS') { + throw Error(`Transaction failed: ${getResponse.resultXdr}`); + } + + // Make sure the transaction's resultMetaXDR is not empty + // TODO: might be empty if the operation doesn't have a return value + if (!getResponse.resultMetaXdr) { + throw Error('Empty resultMetaXDR in getTransaction response'); + } + + const transactionMeta = getResponse.resultMetaXdr; + const returnValue = transactionMeta.v3().sorobanMeta().returnValue(); + + if (options.verbose) { + printInfo('Transaction result', returnValue.value()); + } + + return returnValue.value(); + } catch (err) { + console.log('Sending transaction failed'); + throw err; + } +} + +function getAssetCode(balance, chain) { + return balance.asset_type === 'native' ? chain.tokenSymbol : balance.asset_code; +} + +async function getWallet(chain, options) { + const keypair = Keypair.fromSecret(options.privateKey); + const address = keypair.publicKey(); + const provider = new SorobanRpc.Server(chain.rpc); + const horizonServer = new Horizon.Server(chain.horizonRpc); + + printInfo('Wallet address', address); + const account = await provider.getAccount(address); + + const { balances } = await horizonServer.accounts().accountId(address).call(); + printInfo('Wallet Balances', balances.map((balance) => `${balance.balance} ${getAssetCode(balance, chain)}`).join(' ')); + + printInfo('Wallet sequence', account.sequenceNumber()); + + return [keypair, provider]; +} + +async function estimateCost(tx, server) { + await server.simulateTransaction(tx); + + const response = await server._simulateTransaction(tx); + + const events = response.events.map((event) => { + const e = DiagnosticEvent.fromXDR(event, 'base64'); + + if (e.event().type().name === 'diagnostic') return 0; + + return e.toXDR().length; + }); + + const eventsAndReturnValueSize = + events.reduce((accumulator, currentValue) => accumulator + currentValue, 0) + // events + Buffer.from(response.results[0].xdr, 'base64').length; // return value size + + const sorobanTransactionData = SorobanTransactionData.fromXDR(response.transactionData, 'base64'); + + return { + // the first two lines are incorrect. use sorobanTransactionData instead of `cost` + cpu_instructions: Number(response.cost.cpuInsns), + ram: Number(response.cost.memBytes), + + min_resource_fee: response.minResourceFee, + ledger_read_bytes: sorobanTransactionData.resources().readBytes(), + ledger_write_bytes: sorobanTransactionData.resources().writeBytes(), + ledger_entry_reads: sorobanTransactionData.resources().footprint().readOnly().length, + ledger_entry_writes: sorobanTransactionData.resources().footprint().readWrite().length, + events_and_return_value_size: eventsAndReturnValueSize, + transaction_size: Buffer.from(response.transactionData, 'base64').length, + }; +} + +module.exports = { + buildTransaction, + prepareTransaction, + sendTransaction, + getWallet, + estimateCost, + getNetworkPassphrase, +}; From 1a5797109748cd8011cf263aa0bd85cb982337b4 Mon Sep 17 00:00:00 2001 From: re1ro Date: Sat, 11 May 2024 01:08:14 -0400 Subject: [PATCH 49/85] ci(gas-info): Linea timeout (#231) --- axelar-chains-config/info/testnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 9291eba2..22cd15f5 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1020,7 +1020,7 @@ "confirmations": 4, "finality": "400", "approxFinalityWaitTime": 30, - "timeout": 120000 + "timeout": 180000 }, "scroll": { "name": "Scroll", From f6e7c825e7519ccc1a6d5b7978f63f759d84c6c7 Mon Sep 17 00:00:00 2001 From: re1ro Date: Sat, 11 May 2024 01:22:19 -0400 Subject: [PATCH 50/85] config(testnet): removed Linea Goerli (#232) --- axelar-chains-config/info/testnet.json | 118 ------------------------- 1 file changed, 118 deletions(-) diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 22cd15f5..5aa07ad1 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -904,124 +904,6 @@ "approxFinalityWaitTime": 60, "timeout": 180000 }, - "linea": { - "name": "Linea", - "id": "linea", - "axelarId": "linea", - "chainId": 59140, - "rpc": "https://linea-goerli.infura.io/v3/a4812158fbab4a2aaa849e6f4a6dc605", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "implementation": "0x99B5FA03a5ea4315725c43346e55a6A6fbd94098", - "authModule": "0x50D84DE83c089184E8EbA074ab38887B0CA30A0d", - "tokenDeployer": "0xb28478319B64f8D47e19A120209A211D902F8b8f", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementationCodehash": "0x327eb5816918332c7b6787ef777587c8f9b39af4ec7b8710cdd037d976b65d5f", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "collector": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0x5b593E7b1725dc6FcbbFe80b2415B19153F94A85", - "address": "0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6", - "implementation": "0xA72afaa3130fE7F25CfcA4A49ed48e377a35aB6C", - "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "wrappedSymbol": "", - "refundIssuer": "0x4f671f34d2d23fec3eE3087E3A0221f8D314D9dF", - "deployer": "0xd55cd98cdE61c3CcE1286F9aF50cDbF16f5dba5b", - "address": "0xc1DCb196BA862B337Aa23eDA1Cb9503C0801b955", - "implementation": "0xd883C8bA523253c93d97b6C7a5087a7B5ff23d79" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "InterchainProposalSender": { - "address": "0x1f8A4d195B647647c7dD45650CBd553FD33cCAA6", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "salt": "InterchainProposalSender v1.2" - }, - "Operators": { - "owner": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "address": "0x7F83F5cA2AE4206AbFf8a3C3668e88ce5F11C0B5", - "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xfDF36A30070ea0241d69052ea85ff44Ad0476a66", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x4bc0efa16652748f5c3fbb77aedff01e0c1df4156a4f4c82d6d8748ee28cb9af", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x15837c1318AB83d99b19392Fd4811813f520d843", - "0x64247a441CeF0b7A46614AC34d046c0fdfe35954", - "0xEE64c8eb48437DbD2D5B8598dc4A3E8a6c8CEaD9" - ], - "address": "0xCC940AE49C78F20E3F13F3cF37e996b98Ac3EC68", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainTokenService": { - "salt": "ITS v1.2.4", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", - "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", - "proxySalt": "ITS v1.0.0" - }, - "InterchainTokenFactory": { - "salt": "ITS Factory v1.0.0", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", - "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" - } - }, - "explorer": { - "name": "Lineascan", - "url": "https://goerli.lineascan.build", - "api": "https://api-goerli.lineascan.build/api" - }, - "gasOptions": { - "gasPrice": 3000000000 - }, - "onchainGasEstimate": { - "l1ChainName": "ethereum" - }, - "confirmations": 4, - "finality": "400", - "approxFinalityWaitTime": 30, - "timeout": 180000 - }, "scroll": { "name": "Scroll", "id": "scroll", From e61f717ed9b5431737ea5ebf35d5a5f33a387d36 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Mon, 13 May 2024 11:48:49 +0530 Subject: [PATCH 51/85] fix: contract verification script failing for fantom and scroll (#212) * fix: add try catch to continue verifying if task fails for fantom testnet * refactor: update explorer for scroll mainnet * refactor: console chain name instead of object * refactor: replace execSync with exec * chore: use try catch with execsync * chore: pipe stderr and stdout while running cmd * chore: update error statement Co-authored-by: Milap Sheth --------- Co-authored-by: Milap Sheth --- axelar-chains-config/info/mainnet.json | 4 ++-- axelar-chains-config/src/utils/verifyContract.js | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index f5e4d6ee..967c0e9a 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -1859,8 +1859,8 @@ }, "explorer": { "name": "Scroll Explorer", - "url": "https://blockscout.scroll.io", - "api": "https://blockscout.scroll.io/api" + "url": "https://scrollscan.com/", + "api": "https://api.scrollscan.com/api" }, "confirmations": 2, "gasOptions": { diff --git a/axelar-chains-config/src/utils/verifyContract.js b/axelar-chains-config/src/utils/verifyContract.js index 0924b6f5..ab8fe4b9 100644 --- a/axelar-chains-config/src/utils/verifyContract.js +++ b/axelar-chains-config/src/utils/verifyContract.js @@ -27,9 +27,16 @@ const verifyContract = (env, chain, contract, args, options = {}) => { console.log(`Verifying contract ${contract} with args '${stringArgs.join(',')}'`); console.log(cmd); - execSync(cmd, { stdio: 'inherit' }); - - console.log('Verified!'); + try { + execSync(cmd, { stdio: ['inherit', 'pipe', 'pipe'] }); + console.log('Verified!'); + } catch (error) { + if (error.message.includes('Reason: Already Verified')) { + console.log(`Contract ${contract} is already verified on ${chain.toLowerCase()}.`); + } else { + throw new Error(`An error occurred while trying to verify ${contract} on ${chain.toLowerCase()}:\n${error}`); + } + } }; module.exports = { From a98a9821ec75f89eb5ba1bf0ddfd39f8df723e16 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Mon, 13 May 2024 12:23:00 +0530 Subject: [PATCH 52/85] fix: contract deployment testing script (#211) * fix: contract deployment testing script * refactor: remove readFileSync * chore: add args processing in scripts * chore: update readme to add instructions for running contracts-deployment-test.js * chore: update script to use json for optional args * chore: update Readme files * chore: set args to empty json if not passed * chore: merge args into contractConfig * chore: use try catch for parsing args --- README.md | 2 +- evm/README.md | 19 +++++++++++++++++++ evm/contracts-deployment-test.js | 31 ++++++++++++++++++++++++------- evm/deploy-contract.js | 9 +++++---- evm/deploy-upgradable.js | 17 ++++++++++++----- 5 files changed, 61 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 64c10ba1..7a4b8178 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,4 @@ Install dependencies via `npm ci` -[EVM deployment instructions](./evm/README.md) \ No newline at end of file +[EVM deployment instructions](./evm/README.md) diff --git a/evm/README.md b/evm/README.md index 888e0c08..af4b2a61 100644 --- a/evm/README.md +++ b/evm/README.md @@ -129,6 +129,25 @@ To decode function calldata: To update the min deposit on Axelar with a param change proposal, you can generate the proposal via `node evm/min-deposit-proposal.js -e mainnet -n all --deposit 1000000` +## Mock Deployment of Contracts + +Test mock deployment of contracts using the `contracts-deployment-test.js` script: + +```bash +node evm/contracts-deployment-test.js -e -n +``` + +For example, to deploy contracts on the Famtom chain in the testnet environment: +```bash +node evm/contracts-deployment-test.js -e testnet -n fantom +``` +The script also supports optional flag parameters -y and --deployDepositService, which can also be specified in a .env file under the variables YES and DEPLOY_DEPOSIT_SERVICE. + +Example with optional flags +```bash +node evm/contracts-deployment-test.js -e testnet -n fantom -y --deployDepositService +``` + ## Contract Verification ### Prerequisites diff --git a/evm/contracts-deployment-test.js b/evm/contracts-deployment-test.js index a84dc3e7..cd894685 100644 --- a/evm/contracts-deployment-test.js +++ b/evm/contracts-deployment-test.js @@ -11,8 +11,19 @@ const { Command, Option } = require('commander'); const { mainProcessor } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); -async function processCommand(_, chain, options) { +async function processCommand(config, chain, options) { const wallet = new Wallet(options.privateKey, new JsonRpcProvider(chain.rpc)); + const deploymentMethod = options.env === 'testnet' ? 'create' : 'create2'; + const collector = wallet.address; + const signers = [wallet.address]; + const threshold = 1; + const minimumTimeDelay = 300; + const wrappedSymbol = `W${chain.tokenSymbol}`; + const refundIssuer = wallet.address; + const argsAxelarGasService = JSON.stringify({ collector }); + const argsMultisig = JSON.stringify({ signers, threshold }); + const argsInterchainGovernance = JSON.stringify({ minimumTimeDelay }); + const argsAxelarDepositService = JSON.stringify({ wrappedSymbol, refundIssuer }); const cmds = [ `node evm/deploy-contract.js -c ConstAddressDeployer -m create --artifactPath ../evm/legacy/ConstAddressDeployer.json`, @@ -20,9 +31,9 @@ async function processCommand(_, chain, options) { `node evm/deploy-gateway-v6.2.x.js -m create3 --keyID ${wallet.address} --mintLimiter ${wallet.address} --governance ${wallet.address}`, `node evm/gateway.js --action params`, `node evm/deploy-contract.js -c Operators -m create2`, - `node evm/deploy-upgradable.js -c AxelarGasService -m create${options.env === 'testnet' ? '' : '2'}`, - `node evm/deploy-contract.js -c Multisig -m create3 -s 'testSalt'`, - `node evm/deploy-contract.js -c InterchainGovernance -m create3`, + `node evm/deploy-upgradable.js -c AxelarGasService -m ${deploymentMethod} --args '${argsAxelarGasService}'`, + `node evm/deploy-contract.js -c Multisig -m create3 -s 'testSalt' --args '${argsMultisig}'`, + `node evm/deploy-contract.js -c InterchainGovernance -m create3 --args '${argsInterchainGovernance}'`, `node evm/deploy-its.js -s "testSalt" --proxySalt 'testSalt'`, `node evm/gateway.js --action transferMintLimiter`, `node evm/gateway.js --action transferGovernance`, @@ -31,12 +42,14 @@ async function processCommand(_, chain, options) { if (options.deployDepositService) { cmds.push( `node evm/deploy-test-gateway-token.js`, - `node evm/deploy-upgradable.js -c AxelarDepositService -m create --salt "testSalt"`, + `node evm/deploy-upgradable.js -c AxelarDepositService -m create --salt 'testSalt' --args '${argsAxelarDepositService}'`, ); } for (let i = 0; i < cmds.length; i++) { - execSync(`${cmds[i]} -n ${options.chainNames} -p ${options.privateKey} ${options.yes ? '-y' : ''}`, { stdio: 'inherit' }); + execSync(`${cmds[i]} -n ${options.chainNames} -p ${options.privateKey} ${options.yes ? '-y' : ''}`, { + stdio: 'inherit', + }); } } @@ -49,7 +62,11 @@ if (require.main === module) { program.name('contracts-deployment-test').description('Deploy contracts to test deployment on chain'); program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); - program.addOption(new Option('--deployDepositService', 'include AxelarDepositService in deployment tests').env('deployDepositService')); + program.addOption( + new Option('--deployDepositService', 'include AxelarDepositService in deployment tests') + .makeOptionMandatory(true) + .env('DEPLOY_DEPOSIT_SERVICE'), + ); addBaseOptions(program); program.action((options) => { diff --git a/evm/deploy-contract.js b/evm/deploy-contract.js index 23c988fb..8690e92b 100644 --- a/evm/deploy-contract.js +++ b/evm/deploy-contract.js @@ -28,9 +28,10 @@ const { } = require('./utils'); const { addExtendedOptions } = require('./cli-utils'); -async function getConstructorArgs(contractName, chain, wallet) { - const config = chain.contracts; +async function getConstructorArgs(contractName, config, wallet, options) { + const args = options.args ? JSON.parse(options.args) : {}; const contractConfig = config[contractName]; + Object.assign(contractConfig, args); switch (contractName) { case 'AxelarServiceGovernance': { @@ -106,7 +107,6 @@ async function getConstructorArgs(contractName, chain, wallet) { } const minimumTimeDelay = contractConfig.minimumTimeDelay; - contractConfig.minimumTimeDelay = minimumTimeDelay; if (!isNumber(minimumTimeDelay)) { throw new Error(`Missing InterchainGovernance.minimumTimeDelay in the chain info.`); @@ -244,7 +244,7 @@ async function processCommand(config, chain, options) { const predeployCodehash = await getBytecodeHash(contractJson, chain.axelarId); printInfo('Pre-deploy Contract bytecode hash', predeployCodehash); - const constructorArgs = await getConstructorArgs(contractName, chain, wallet, options); + const constructorArgs = await getConstructorArgs(contractName, contracts, wallet, options); const gasOptions = await getGasOptions(chain, options, contractName); printInfo(`Constructor args for chain ${chain.name}`, constructorArgs); @@ -352,6 +352,7 @@ if (require.main === module) { new Option('-m, --deployMethod ', 'deployment method').choices(['create', 'create2', 'create3']).default('create2'), ); program.addOption(new Option('--ignoreError', 'ignore errors during deployment for a given chain')); + program.addOption(new Option('--args ', 'custom deployment args')); program.action((options) => { main(options); diff --git a/evm/deploy-upgradable.js b/evm/deploy-upgradable.js index 545acd48..24707d62 100644 --- a/evm/deploy-upgradable.js +++ b/evm/deploy-upgradable.js @@ -12,7 +12,7 @@ const IUpgradable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/ const { Command, Option } = require('commander'); const { deployUpgradable, deployCreate2Upgradable, deployCreate3Upgradable, upgradeUpgradable } = require('./upgradable'); -const { printInfo, printError, printWalletInfo, getDeployedAddress, prompt, getGasOptions, mainProcessor } = require('./utils'); +const { printInfo, printError, printWalletInfo, getDeployedAddress, prompt, getGasOptions, mainProcessor, printLog } = require('./utils'); const { addExtendedOptions } = require('./cli-utils'); function getProxy(wallet, proxyAddress) { @@ -20,14 +20,21 @@ function getProxy(wallet, proxyAddress) { } async function getImplementationArgs(contractName, config, options) { + let args; + + try { + args = options.args ? JSON.parse(options.args) : {}; + console.log('Parsed args:\n'); + printLog(args); + } catch (error) { + console.error('Error parsing args:\n', error.message); + } + const contractConfig = config[contractName]; + Object.assign(contractConfig, args); switch (contractName) { case 'AxelarGasService': { - if (options.args) { - contractConfig.collector = options.args; - } - const collector = contractConfig.collector; if (!isAddress(collector)) { From 94e22465792a08f86503dc8aa60d229be9d34b29 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Tue, 14 May 2024 12:26:58 +0530 Subject: [PATCH 53/85] chore: add case for appproving execute tx using batch data (#228) * chore: add case for appproving execute tx using batch data * chore: use batchId directly in body * chore: use lcd api instead of axelarscan api --- evm/gateway.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/evm/gateway.js b/evm/gateway.js index 96fbb81e..6852e242 100644 --- a/evm/gateway.js +++ b/evm/gateway.js @@ -20,6 +20,7 @@ const { mainProcessor, printError, getGasOptions, + httpGet, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); @@ -55,6 +56,17 @@ const getSignedWeightedExecuteInput = async (data, operators, weights, threshold ); }; +const fetchBatchData = async (apiUrl, batchId) => { + try { + const response = await httpGet(`${apiUrl}/${batchId}`); + const data = response?.execute_data; + + return '0x' + data; + } catch (error) { + throw new Error(`Failed to fetch batch data: ${error.message}`); + } +}; + async function processCommand(config, chain, options) { const { privateKey, address, action, yes } = options; @@ -183,6 +195,38 @@ async function processCommand(config, chain, options) { break; } + case 'approveWithBatch': { + const { batchID, api } = options; + + if (!batchID) { + throw new Error('Batch ID is required for the approve action'); + } + + const batchId = batchID.startsWith('0x') ? batchID.substring(2) : batchID; + let apiUrl = api || `${config.axelar.lcd}/axelar/evm/v1beta1/batched_commands/${chain.name.toLowerCase()}`; + apiUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl; + + const executeData = await fetchBatchData(apiUrl, batchId); + + const tx = { + to: gatewayAddress, + data: executeData, + ...gasOptions, + }; + + const response = await wallet.sendTransaction(tx); + printInfo('Approve tx', response.hash); + + const receipt = await response.wait(chain.confirmations); + const eventEmitted = wasEventEmitted(receipt, gateway, 'ContractCallApproved'); + + if (!eventEmitted) { + printWarn('Event not emitted in receipt.'); + } + + break; + } + case 'approve': // eslint-disable-next-line no-fallthrough @@ -389,6 +433,7 @@ if (require.main === module) { 'transferMintLimiter', 'mintLimit', 'params', + 'approveWithBatch', ]) .makeOptionMandatory(true), ); From a61cc1dfc6e0e427886d341b6c8c6b86e8e934d3 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 14 May 2024 17:33:02 -0400 Subject: [PATCH 54/85] feat(amplifier): add amplifier gateway deployment script (#218) * feat(amplifier): add amplifier gateway deployment script * more checks * cleanup cli arg * keep shorthand flag * add to test gh action * bump gmp sdk dep * add gateway operator support * add rotateSigners to gateway.js * add domain separator flag * add minimum rotation delay flag * add nonce encoding support --------- Co-authored-by: Blockchain Guy Co-authored-by: jcs47 <11947034+jcs47@users.noreply.github.com> --- .github/workflows/test.yaml | 5 +- evm/README.md | 8 + evm/cli-utils.js | 8 + evm/deploy-amplifier-gateway.js | 451 ++++++++++++++++++++++++++++++++ evm/deploy-gateway-v6.2.x.js | 12 +- evm/gateway.js | 40 +++ evm/utils.js | 2 +- package-lock.json | 12 +- package.json | 2 +- 9 files changed, 527 insertions(+), 13 deletions(-) create mode 100644 evm/deploy-amplifier-gateway.js diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a2e90526..8dcf1b5e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -73,8 +73,11 @@ jobs: - name: Deploy Create3Deployer run: node evm/deploy-contract.js -c Create3Deployer -m create2 -y + - name: Deploy AxelarAmplifierGateway + run: node evm/deploy-amplifier-gateway.js --deployMethod create3 -s "AxelarAmplifierGateway v5.8" --owner 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y + - name: Deploy AxelarGateway - run: node evm/deploy-gateway-v6.2.x.js -m create3 -s "AxelarGateway v6.2" --governance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --mintLimiter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y + run: node evm/deploy-gateway-v6.2.x.js --deployMethod create3 -s "AxelarGateway v6.2" --governance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --mintLimiter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y - name: Call Method on Gateway run: node evm/gateway.js --action callContract --destinationChain test2 -y diff --git a/evm/README.md b/evm/README.md index af4b2a61..8f0f088c 100644 --- a/evm/README.md +++ b/evm/README.md @@ -15,6 +15,14 @@ Deploy the gateway contract. `node evm/deploy-gateway-v6.2.x.js -e testnet -n ethereum` +## Axelar Amplifier Gateway + +Deploy the Axelar Amplifier Gateway contract. This is the required gateway contract for EVM chains connecting via Axelar's Amplifier protocol. + +`node evm/deploy-amplifier-gateway.js -e testnet -n ethereum` + +For debugging, you can deploy a gateway with the wallet set as the signer using `--keyID`. An owner can be set via `--owner` as well. It'll default to the deployer and can be transferred to governance later. + ## Gateway Upgrade 1. When upgrading the gateway, the proxy contract will be reused. diff --git a/evm/cli-utils.js b/evm/cli-utils.js index 8c43accd..7ef99024 100644 --- a/evm/cli-utils.js +++ b/evm/cli-utils.js @@ -54,6 +54,14 @@ const addExtendedOptions = (program, options = {}) => { program.addOption(new Option('-c, --contractName ', 'contract name').makeOptionMandatory(true)); } + if (options.deployMethod) { + program.addOption( + new Option('-m, --deployMethod ', 'deployment method') + .choices(['create', 'create2', 'create3']) + .default(options.deployMethod), + ); + } + if (options.salt) { program.addOption(new Option('-s, --salt ', 'salt to use for create2 deployment').env('SALT')); } diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js new file mode 100644 index 00000000..05d1d0e9 --- /dev/null +++ b/evm/deploy-amplifier-gateway.js @@ -0,0 +1,451 @@ +'use strict'; + +const { Command, Option } = require('commander'); +const chalk = require('chalk'); +const { ethers } = require('hardhat'); +const { + ContractFactory, + Contract, + Wallet, + BigNumber, + utils: { defaultAbiCoder, getContractAddress, keccak256 }, + constants: { HashZero }, + getDefaultProvider, +} = ethers; + +const { + saveConfig, + getBytecodeHash, + printInfo, + getAmplifierKeyAddresses, + printError, + printWalletInfo, + printWarn, + prompt, + mainProcessor, + deployContract, + getGasOptions, + isValidAddress, +} = require('./utils'); +const { addExtendedOptions } = require('./cli-utils'); +const { storeSignedTx, signTransaction, getWallet } = require('./sign-utils.js'); + +const { WEIGHTED_SIGNERS_TYPE, encodeWeightedSigners } = require('@axelar-network/axelar-gmp-sdk-solidity/scripts/utils'); +const AxelarAmplifierGatewayProxy = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/gateway/AxelarAmplifierGatewayProxy.sol/AxelarAmplifierGatewayProxy.json'); +const AxelarAmplifierGateway = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/gateway/AxelarAmplifierGateway.sol/AxelarAmplifierGateway.json'); + +async function getWeightedSigners(config, chain, options) { + printInfo(`Retrieving verifier addresses for ${chain.name} from Axelar network`); + + let signers; + + if (isValidAddress(options.keyID)) { + // set the keyID as the signer for debug deployments + signers = { + signers: [ + { + signer: options.keyID, + weight: 1, + }, + ], + threshold: 1, + nonce: HashZero, + }; + } else { + const addresses = getAmplifierKeyAddresses(config, chain.axelarId); + const nonce = ethers.utils.hexZeroPad(BigNumber.from(addresses.created_at).toHexString(), 32); + + signers = { + signers: addresses.addresses.map(({ address, weight }) => ({ signer: address, weight })), + threshold: Number(addresses.threshold), + nonce, + }; + } + + return [signers]; +} + +async function getSetupParams(config, chain, operator, options) { + const signerSets = await getWeightedSigners(config, chain, options); + printInfo('Setup params', JSON.stringify([operator, signerSets], null, 2)); + return defaultAbiCoder.encode([`address`, `${WEIGHTED_SIGNERS_TYPE}[]`], [operator, signerSets]); +} + +async function deploy(config, chain, options) { + const { privateKey, reuseProxy, yes, predictOnly } = options; + + const contractName = 'AxelarGateway'; + + const rpc = options.rpc || chain.rpc; + const provider = getDefaultProvider(rpc); + + const wallet = new Wallet(privateKey).connect(provider); + await printWalletInfo(wallet); + + if (chain.contracts === undefined) { + chain.contracts = {}; + } + + if (chain.contracts[contractName] === undefined) { + chain.contracts[contractName] = {}; + } + + const contractConfig = chain.contracts[contractName]; + const owner = options.owner || chain.contracts.InterchainGovernance?.address || wallet.address; + + if (!reuseProxy) { + if (owner === undefined) { + throw new Error('owner address is required'); + } + + if (owner !== wallet.address) { + printWarn( + 'Governance address is not set to the wallet address. This is needed for official deployment and is transferred after deployment', + ); + } + + printInfo('Owner address', owner); + } + + const gasOptions = await getGasOptions(chain, options, contractName); + + const gatewayFactory = new ContractFactory(AxelarAmplifierGateway.abi, AxelarAmplifierGateway.bytecode, wallet); + + const deployerContract = + options.deployMethod === 'create3' ? chain.contracts.Create3Deployer?.address : chain.contracts.ConstAddressDeployer?.address; + + let gateway; + let proxyAddress; + + if (reuseProxy) { + proxyAddress = chain.contracts.AxelarGateway?.address; + + if (proxyAddress === undefined) { + throw new Error('Proxy address is missing in the config file'); + } + + printInfo('Reusing Gateway Proxy address', proxyAddress); + gateway = gatewayFactory.attach(proxyAddress); + } else { + const transactionCount = await wallet.getTransactionCount(); + proxyAddress = getContractAddress({ + from: wallet.address, + nonce: transactionCount + 1, + }); + printInfo('Predicted gateway proxy address', proxyAddress, chalk.cyan); + } + + let existingAddress; + + for (const chainConfig of Object.values(config.chains)) { + existingAddress = chainConfig.contracts?.[contractName]?.address; + + if (existingAddress !== undefined) { + break; + } + } + + if (existingAddress !== undefined && proxyAddress !== existingAddress) { + printWarn(`Predicted address ${proxyAddress} does not match existing deployment ${existingAddress} in chain configs.`); + printWarn('For official deployment, recheck the deployer, salt, args, or contract bytecode.'); + } + + if (predictOnly || prompt(`Does derived address match existing gateway deployments? Proceed with deployment on ${chain.name}?`, yes)) { + return; + } + + contractConfig.deployer = wallet.address; + const domainSeparator = options.domainSeparator; // TODO: retrieve domain separator from amplifier / calculate the same way + const minimumRotationDelay = options.minimumRotationDelay; + const salt = options.salt || ''; + + printInfo(`Deploying gateway implementation contract`); + printInfo('Gateway Implementation args', `${options.previousSignersRetention}, ${domainSeparator}, ${minimumRotationDelay}`); + printInfo('Deploy method', options.deployMethod); + printInfo('Deploy salt (if not create based deployment)', salt); + + let implementation; + + if (options.skipExisting && contractConfig.implementation) { + implementation = gatewayFactory.attach(contractConfig.implementation); + } else { + const implementationSalt = `${salt} Implementation`; + + implementation = await deployContract( + options.deployMethod, + wallet, + AxelarAmplifierGateway, + [options.previousSignersRetention, domainSeparator, minimumRotationDelay], + { salt: implementationSalt, deployerContract }, + gasOptions, + {}, + chain, + ); + } + + printInfo('Gateway Implementation', implementation.address); + + const implementationCodehash = await getBytecodeHash(implementation, chain.axelarId); + printInfo('Gateway Implementation codehash', implementationCodehash); + + if (options.skipExisting && contractConfig.address) { + proxyAddress = contractConfig?.address; + gateway = gatewayFactory.attach(proxyAddress); + } else if (!reuseProxy) { + const operator = options.operator || contractConfig.operator || wallet.address; + const params = await getSetupParams(config, chain, operator, options); + + printInfo('Deploying gateway proxy contract'); + printInfo('Proxy deployment args', `${implementation.address}, ${params}`); + + contractConfig.operator = operator; + + const gatewayProxy = await deployContract( + options.deployMethod, + wallet, + AxelarAmplifierGatewayProxy, + [implementation.address, owner, params], + { salt, deployerContract }, + gasOptions, + {}, + chain, + ); + + printInfo('Gateway Proxy', gatewayProxy.address); + + gateway = gatewayFactory.attach(gatewayProxy.address); + } + + // Verify deployment + let error = false; + + const ownerAddress = await gateway.owner(); + + printInfo(`Existing owner`, ownerAddress); + + if (!reuseProxy && owner !== ownerAddress) { + printError(`ERROR: Retrieved governance address is different:`); + printError(` Actual: ${ownerAddress}`); + printError(` Expected: ${owner}`); + error = true; + } + + const gatewayImplementation = await gateway.implementation(); + + if (!reuseProxy && gatewayImplementation !== implementation.address) { + printError( + `ERROR: Implementation contract retrieved from gateway ${gatewayImplementation} doesn't match deployed contract ${implementation.address}`, + ); + error = true; + } + + if (options.previousSignersRetention !== (await gateway.previousSignersRetention()).toNumber()) { + printError('ERROR: Previous signer retention mismatch'); + error = true; + } + + if (domainSeparator !== (await gateway.domainSeparator())) { + printError('ERROR: Domain separator mismatch'); + error = true; + } + + if (minimumRotationDelay !== (await gateway.minimumRotationDelay()).toNumber()) { + printError('ERROR: Minimum rotation delay mismatch'); + error = true; + } + + if (contractConfig.operator !== (await gateway.operator())) { + printError('ERROR: Operator mismatch'); + error = true; + } + + if (!reuseProxy) { + const signerSets = await getWeightedSigners(config, chain, options); + + for (let i = 0; i < signerSets.length; i++) { + const signerHash = keccak256(encodeWeightedSigners(signerSets[i])); + const epoch = (await gateway.epochBySignerHash(signerHash)).toNumber(); + const signerHashByEpoch = await gateway.signerHashByEpoch(i + 1); + + if (epoch !== i + 1) { + printError(`ERROR: Epoch mismatch for signer set ${i + 1}`); + printError(` Actual: ${epoch}`); + printError(` Expected: ${i + 1}`); + error = true; + } + + if (signerHashByEpoch !== signerHash) { + printError(`ERROR: Signer hash mismatch for signer set ${i + 1}`); + printError(` Actual: ${signerHashByEpoch}`); + printError(` Expected: ${signerHash}`); + error = true; + } + } + } + + if (error) { + printError('Deployment status', 'FAILED'); + return; + } + + contractConfig.address = gateway.address; + contractConfig.implementation = implementation.address; + contractConfig.implementationCodehash = implementationCodehash; + contractConfig.deploymentMethod = options.deployMethod; + contractConfig.previousSignersRetention = options.previousSignersRetention; + contractConfig.domainSeparator = domainSeparator; + contractConfig.minimumRotationDelay = minimumRotationDelay; + + if (options.deployMethod !== 'create') { + contractConfig.salt = salt; + } + + if (!chain.contracts.InterchainGovernance) { + chain.contracts.InterchainGovernance = {}; + } + + chain.contracts.InterchainGovernance.address = owner; + + printInfo('Deployment status', 'SUCCESS'); + + saveConfig(config, options.env); +} + +async function upgrade(_, chain, options) { + const { privateKey, yes, offline, env, predictOnly } = options; + const contractName = 'AxelarGateway'; + const chainName = chain.name.toLowerCase(); + + const rpc = options.rpc || chain.rpc; + const provider = getDefaultProvider(rpc); + + const wallet = await getWallet(privateKey, provider, options); + + const { address } = await printWalletInfo(wallet, options); + + const contractConfig = chain.contracts[contractName]; + + const gateway = new Contract(contractConfig.address, AxelarAmplifierGateway.abi, wallet); + let implementationCodehash = contractConfig.implementationCodehash; + const owner = options.owner || chain.contracts.InterchainGovernance?.address; + const setupParams = '0x'; + + if (!chain.contracts.InterchainGovernance) { + chain.contracts.InterchainGovernance = {}; + } + + chain.contracts.InterchainGovernance.address = owner; + + if (!offline) { + const codehash = await getBytecodeHash(contractConfig.implementation, chain.axelarId, provider); + + if (!implementationCodehash) { + // retrieve codehash dynamically if not specified in the config file + implementationCodehash = codehash; + } else if (codehash !== implementationCodehash) { + throw new Error( + `Implementation codehash mismatch. Expected ${implementationCodehash} but got ${codehash}. Please check if the implementation contract is deployed correctly.`, + ); + } + } else { + if (!implementationCodehash) { + throw new Error('Implementation codehash is missing in the config file'); + } + } + + printInfo('Gateway Proxy', gateway.address); + + if (!offline) { + printInfo('Current implementation', await gateway.implementation()); + } + + printInfo('Upgrading to implementation', contractConfig.implementation); + printInfo('New Implementation codehash', implementationCodehash); + printInfo('Owner', owner); + printInfo('Setup params', setupParams); + + const gasOptions = await getGasOptions(chain, options, contractName); + + if (predictOnly || prompt(`Proceed with an upgrade on ${chain.name}?`, yes)) { + return; + } + + const tx = await gateway.populateTransaction.upgrade(contractConfig.implementation, implementationCodehash, setupParams, gasOptions); + + const { baseTx, signedTx } = await signTransaction(wallet, chain, tx, options); + + if (offline) { + const filePath = `./tx/signed-tx-${env}-gateway-upgrade-${chainName}-address-${address}-nonce-${baseTx.nonce}.json`; + printInfo(`Storing signed Tx offline in file ${filePath}`); + + // Storing the fields in the data that will be stored in file + const data = { + msg: `This transaction will upgrade gateway ${gateway.address} to implementation ${contractConfig.implementation} on chain ${chain.name}`, + unsignedTx: baseTx, + signedTx, + status: 'PENDING', + }; + + storeSignedTx(filePath, data); + } else { + const newImplementation = await gateway.implementation(); + printInfo('New implementation', newImplementation); + + if (newImplementation !== contractConfig.implementation) { + printWarn('Implementation not upgraded yet!'); + return; + } + + printInfo('Upgraded!'); + } +} + +async function processCommand(config, chain, options) { + if (!options.upgrade) { + await deploy(config, chain, options); + } else { + await upgrade(config, chain, options); + } +} + +async function main(options) { + await mainProcessor(options, processCommand); +} + +async function programHandler() { + const program = new Command(); + + program.name('deploy-amplifier-gateway').description('Deploy Amplifier Gateway'); + + // use create3 as default deploy method + addExtendedOptions(program, { salt: true, deployMethod: 'create3', skipExisting: true, upgrade: true, predictOnly: true }); + + program.addOption(new Option('-r, --rpc ', 'chain rpc url').env('URL')); + program.addOption(new Option('--previousSignersRetention ', 'previous signer retention').default(15)); + program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); + program.addOption( + new Option('--minimumRotationDelay ', 'minium delay for signer rotations').default(24 * 60 * 60), + ); // 1 day + + program.addOption(new Option('--reuseProxy', 'reuse proxy contract modules for new implementation deployment')); + program.addOption(new Option('--ignoreError', 'Ignore deployment errors and proceed to next chain')); + program.addOption(new Option('--owner ', 'owner/governance address').env('OWNER')); + program.addOption(new Option('--operator ', 'gateway operator address')); + program.addOption(new Option('--keyID ', 'use the specified key ID address instead of the querying the chain').env('KEY_ID')); + program.addOption(new Option('--offline', 'Run in offline mode')); + program.addOption(new Option('--nonceOffset ', 'The value to add in local nonce if it deviates from actual wallet nonce')); + + program.action((options) => { + main(options); + }); + + program.parse(); +} + +if (require.main === module) { + programHandler(); +} + +module.exports = { + deployAmplifierGateway: deploy, +}; diff --git a/evm/deploy-gateway-v6.2.x.js b/evm/deploy-gateway-v6.2.x.js index 39c1c249..314fec41 100644 --- a/evm/deploy-gateway-v6.2.x.js +++ b/evm/deploy-gateway-v6.2.x.js @@ -524,13 +524,10 @@ async function programHandler() { program.name('deploy-gateway-v6.2.x').description('Deploy gateway v6.2.x'); - addExtendedOptions(program, { salt: true, skipExisting: true, upgrade: true, predictOnly: true }); + addExtendedOptions(program, { salt: true, deployMethod: 'create', skipExisting: true, upgrade: true, predictOnly: true }); program.addOption(new Option('-r, --rpc ', 'chain rpc url').env('URL')); - program.addOption( - new Option('-m, --deployMethod ', 'deployment method').choices(['create', 'create2', 'create3']).default('create'), - ); - program.addOption(new Option('-r, --reuseProxy', 'reuse proxy contract modules for new implementation deployment')); + program.addOption(new Option('--reuseProxy', 'reuse proxy contract modules for new implementation deployment')); program.addOption( new Option('--reuseHelpers', 'reuse helper auth and token deployer contract modules for new implementation deployment'), ); @@ -538,12 +535,11 @@ async function programHandler() { program.addOption(new Option('--ignoreError', 'Ignore deployment errors and proceed to next chain')); program.addOption(new Option('--governance ', 'governance address').env('GOVERNANCE')); program.addOption(new Option('--mintLimiter ', 'mint limiter address').env('MINT_LIMITER')); - program.addOption(new Option('-k, --keyID ', 'key ID').env('KEY_ID')); + program.addOption(new Option('--keyID ', 'key ID').env('KEY_ID')); program.addOption(new Option('-a, --amplifier', 'deploy amplifier gateway').env('AMPLIFIER')); program.addOption(new Option('--prevKeyIDs ', 'previous key IDs to be used for auth contract')); program.addOption(new Option('--offline', 'Run in offline mode')); program.addOption(new Option('--nonceOffset ', 'The value to add in local nonce if it deviates from actual wallet nonce')); - program.addOption(new Option('-x, --skipExisting', 'skip existing if contract was already deployed on chain')); program.action((options) => { main(options); @@ -557,5 +553,5 @@ if (require.main === module) { } module.exports = { - deployGatewayv5: deploy, + deployGatewayv6: deploy, }; diff --git a/evm/gateway.js b/evm/gateway.js index 6852e242..be74bdde 100644 --- a/evm/gateway.js +++ b/evm/gateway.js @@ -5,6 +5,7 @@ const { ethers } = require('hardhat'); const { getDefaultProvider, utils: { keccak256, id, defaultAbiCoder, arrayify }, + constants: { HashZero }, Contract, } = ethers; const { Command, Option } = require('commander'); @@ -21,6 +22,7 @@ const { printError, getGasOptions, httpGet, + getContractJSON, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); @@ -28,6 +30,7 @@ const { getWallet } = require('./sign-utils'); const IGateway = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IAxelarGateway.json'); const IAxelarExecutable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/IAxelarExecutable.json'); const IAuth = require('@axelar-network/axelar-cgp-solidity/interfaces/IAxelarAuthWeighted.json'); +const { getWeightedSignersProof, WEIGHTED_SIGNERS_TYPE } = require('@axelar-network/axelar-gmp-sdk-solidity/scripts/utils'); const getApproveContractCall = (sourceChain, source, destination, payloadHash, sourceTxHash, sourceEventIndex) => { return defaultAbiCoder.encode( @@ -399,6 +402,42 @@ async function processCommand(config, chain, options) { break; } + case 'rotateSigners': { + // TODO: use args for new signers + const gateway = new Contract(gatewayAddress, getContractJSON('AxelarAmplifierGateway').abi, wallet); + + const weightedSigners = { + signers: [ + { + signer: wallet.address, + weight: 1, + }, + ], + threshold: 1, + nonce: HashZero, + }; + + const newSigners = { + ...weightedSigners, + nonce: id('1'), + }; + + const data = defaultAbiCoder.encode(['uint8', WEIGHTED_SIGNERS_TYPE], [1, newSigners]); + console.log(JSON.stringify(newSigners, null, 2)); + const proof = await getWeightedSignersProof(data, HashZero, weightedSigners, [wallet]); + const tx = await gateway.rotateSigners(newSigners, proof, gasOptions); + + const receipt = await tx.wait(chain.confirmations); + + const eventEmitted = wasEventEmitted(receipt, gateway, 'SignersRotated'); + + if (!eventEmitted) { + throw new Error('Event not emitted in receipt.'); + } + + break; + } + default: { throw new Error(`Unknown action ${action}`); } @@ -434,6 +473,7 @@ if (require.main === module) { 'mintLimit', 'params', 'approveWithBatch', + 'rotateSigners', ]) .makeOptionMandatory(true), ); diff --git a/evm/utils.js b/evm/utils.js index 83b4f467..b65d2acc 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -671,7 +671,7 @@ const getAmplifierKeyAddresses = async (config, chain) => { weight: signer.weight, })); - return { addresses: weightedAddresses, threshold: workerSet.threshold }; + return { addresses: weightedAddresses, threshold: workerSet.threshold, created_at: workerSet.created_at }; }; function sleep(ms) { diff --git a/package-lock.json b/package-lock.json index 1496abeb..8dd0cf85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-gmp-sdk-solidity": "5.8.0", + "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", @@ -131,7 +131,7 @@ "node": ">=18" } }, - "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "node_modules/@axelar-network/axelar-cgp-solidity/node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.8.0.tgz", "integrity": "sha512-ThiCWK7lhwmsipgjKkw8c0z0ubB9toRMV9X0tRVOXHHSknKp5DCFfatbCwjpSC5GZRa+61ciTSqJNtCc7j9YoQ==", @@ -139,6 +139,14 @@ "node": ">=18" } }, + "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", + "integrity": "sha512-BarUqOln3m5jnvBo+LF6ARWwbRXqek93dDtCgIevKGl+Be2JcNOaBB32Bg2LOOBnpOKJBvJq1SI2ZoGurBQ4Qg==", + "engines": { + "node": ">=18" + } + }, "node_modules/@axelar-network/interchain-token-service": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-1.2.4.tgz", diff --git a/package.json b/package.json index 83a0a367..73628829 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-gmp-sdk-solidity": "5.8.0", + "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", From 584a817adfe12a86671777fcdc5f2688a109368b Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Thu, 16 May 2024 01:55:49 +0100 Subject: [PATCH 55/85] chore: update contracts deployment script (#233) --- cosmwasm/deploy-contract.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index d7df701c..c695df53 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -6,7 +6,7 @@ const { isNil } = require('lodash'); const { SigningCosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const { DirectSecp256k1HdWallet } = require('@cosmjs/proto-signing'); -const { printInfo, loadConfig, saveConfig, isString, isStringArray, isNumber, prompt } = require('../evm/utils'); +const { printInfo, loadConfig, saveConfig, isString, isStringArray, isNumberArray, isNumber, prompt } = require('../evm/utils'); const { uploadContract, instantiateContract, isValidCosmosAddress, governanceAddress } = require('./utils'); const { Command, Option } = require('commander'); @@ -178,7 +178,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain [chainId]: { adminAddress, governanceAddress, - destinationChainID, + domainSeparator, signingThreshold, serviceName, workerSetDiffThreshold, @@ -215,8 +215,8 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid VotingVerifier[${chainId}].address in axelar info`); } - if (!isString(destinationChainID)) { - throw new Error(`Missing or invalid MultisigProver[${chainId}].destinationChainID in axelar info`); + if (!isNumberArray(domainSeparator)) { + throw new Error(`Missing or invalid MultisigProver[${chainId}].domainSeparator in axelar info`); } if (!isStringArray(signingThreshold)) { @@ -247,7 +247,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain multisig_address: multisigAddress, service_registry_address: serviceRegistryAddress, voting_verifier_address: verifierAddress, - destination_chain_id: destinationChainID, + domain_separator: domainSeparator, signing_threshold: signingThreshold, service_name: serviceName, chain_name: chainId, From 3e43967091a024fbaf6bd049fa781c92046bb48d Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Thu, 16 May 2024 01:58:06 +0100 Subject: [PATCH 56/85] feat(evm): retrieve domain separator from axelar (#234) --- .github/workflows/test.yaml | 2 +- evm/deploy-amplifier-gateway.js | 21 +++++++++++++++++---- evm/utils.js | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 8dcf1b5e..b94b2642 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -74,7 +74,7 @@ jobs: run: node evm/deploy-contract.js -c Create3Deployer -m create2 -y - name: Deploy AxelarAmplifierGateway - run: node evm/deploy-amplifier-gateway.js --deployMethod create3 -s "AxelarAmplifierGateway v5.8" --owner 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y + run: node evm/deploy-amplifier-gateway.js --deployMethod create3 -s "AxelarAmplifierGateway v5.8" --owner 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --domainSeparator 0xe95c4726b1aca58a875174db9810fff4d337011a24b81e31ad812a1b53ed8970 -y - name: Deploy AxelarGateway run: node evm/deploy-gateway-v6.2.x.js --deployMethod create3 -s "AxelarGateway v6.2" --governance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --mintLimiter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index 05d1d0e9..80ae8ea0 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -8,7 +8,7 @@ const { Contract, Wallet, BigNumber, - utils: { defaultAbiCoder, getContractAddress, keccak256 }, + utils: { defaultAbiCoder, getContractAddress, keccak256, hexlify }, constants: { HashZero }, getDefaultProvider, } = ethers; @@ -26,6 +26,8 @@ const { deployContract, getGasOptions, isValidAddress, + isKeccak256Hash, + getContractConfig, } = require('./utils'); const { addExtendedOptions } = require('./cli-utils'); const { storeSignedTx, signTransaction, getWallet } = require('./sign-utils.js'); @@ -52,7 +54,7 @@ async function getWeightedSigners(config, chain, options) { nonce: HashZero, }; } else { - const addresses = getAmplifierKeyAddresses(config, chain.axelarId); + const addresses = await getAmplifierKeyAddresses(config, chain.axelarId); const nonce = ethers.utils.hexZeroPad(BigNumber.from(addresses.created_at).toHexString(), 32); signers = { @@ -65,6 +67,17 @@ async function getWeightedSigners(config, chain, options) { return [signers]; } +async function getDomainSeparator(config, chain, options) { + printInfo(`Retrieving domain separator for ${chain.name} from Axelar network`); + + if (isKeccak256Hash(options.domainSeparator)) { + // return the domainSeparator for debug deployments + return options.domainSeparator; + } + + return hexlify((await getContractConfig(config, chain.name)).domain_separator); +} + async function getSetupParams(config, chain, operator, options) { const signerSets = await getWeightedSigners(config, chain, options); printInfo('Setup params', JSON.stringify([operator, signerSets], null, 2)); @@ -155,7 +168,7 @@ async function deploy(config, chain, options) { } contractConfig.deployer = wallet.address; - const domainSeparator = options.domainSeparator; // TODO: retrieve domain separator from amplifier / calculate the same way + const domainSeparator = await getDomainSeparator(config, chain, options); const minimumRotationDelay = options.minimumRotationDelay; const salt = options.salt || ''; @@ -422,7 +435,7 @@ async function programHandler() { program.addOption(new Option('-r, --rpc ', 'chain rpc url').env('URL')); program.addOption(new Option('--previousSignersRetention ', 'previous signer retention').default(15)); - program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); + program.addOption(new Option('--domainSeparator ', 'domain separator')); program.addOption( new Option('--minimumRotationDelay ', 'minium delay for signer rotations').default(24 * 60 * 60), ); // 1 day diff --git a/evm/utils.js b/evm/utils.js index b65d2acc..041678e4 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -661,6 +661,13 @@ const getEVMAddresses = async (config, chain, options = {}) => { return { addresses, weights, threshold, keyID: evmAddresses.key_id }; }; +const getContractConfig = async (config, chain) => { + const key = Buffer.from('config'); + const client = await CosmWasmClient.connect(config.axelar.rpc); + const value = await client.queryContractRaw(config.axelar.contracts.MultisigProver[chain].address, key); + return JSON.parse(Buffer.from(value).toString('ascii')); +}; + const getAmplifierKeyAddresses = async (config, chain) => { const client = await CosmWasmClient.connect(config.axelar.rpc); const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_worker_set'); @@ -1247,4 +1254,6 @@ module.exports = { isValidChain, toBigNumberString, timeout, + getAmplifierKeyAddresses, + getContractConfig, }; From fe4b0891c1c5d84bc21c045468a96a88e23d7425 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Thu, 16 May 2024 22:16:25 +0100 Subject: [PATCH 57/85] fix(amplifier): enforce sorting of signers (#236) --- evm/deploy-amplifier-gateway.js | 6 +++--- evm/utils.js | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index 80ae8ea0..0053cc34 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -58,7 +58,7 @@ async function getWeightedSigners(config, chain, options) { const nonce = ethers.utils.hexZeroPad(BigNumber.from(addresses.created_at).toHexString(), 32); signers = { - signers: addresses.addresses.map(({ address, weight }) => ({ signer: address, weight })), + signers: addresses.addresses.map(({ address, weight }) => ({ signer: address, weight: Number(weight) })), threshold: Number(addresses.threshold), nonce, }; @@ -169,7 +169,7 @@ async function deploy(config, chain, options) { contractConfig.deployer = wallet.address; const domainSeparator = await getDomainSeparator(config, chain, options); - const minimumRotationDelay = options.minimumRotationDelay; + const minimumRotationDelay = Number(options.minimumRotationDelay); const salt = options.salt || ''; printInfo(`Deploying gateway implementation contract`); @@ -252,7 +252,7 @@ async function deploy(config, chain, options) { error = true; } - if (options.previousSignersRetention !== (await gateway.previousSignersRetention()).toNumber()) { + if (Number(options.previousSignersRetention) !== (await gateway.previousSignersRetention()).toNumber()) { printError('ERROR: Previous signer retention mismatch'); error = true; } diff --git a/evm/utils.js b/evm/utils.js index 041678e4..bcd1fe0e 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -673,10 +673,12 @@ const getAmplifierKeyAddresses = async (config, chain) => { const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_worker_set'); const signers = Object.values(workerSet.signers); - const weightedAddresses = signers.map((signer) => ({ - address: computeAddress(`0x${signer.pub_key.ecdsa}`), - weight: signer.weight, - })); + const weightedAddresses = signers + .map((signer) => ({ + address: computeAddress(`0x${signer.pub_key.ecdsa}`), + weight: signer.weight, + })) + .sort((a, b) => a.address.localeCompare(b.address)); return { addresses: weightedAddresses, threshold: workerSet.threshold, created_at: workerSet.created_at }; }; From d3012dfbca1d57468b7227e43245b732eb7281d3 Mon Sep 17 00:00:00 2001 From: albertov19 <64150856+albertov19@users.noreply.github.com> Date: Fri, 17 May 2024 08:25:36 +0200 Subject: [PATCH 58/85] fix(evm): evm amplifier deployment fixes (#235) * Add devnet-amplifiers to cli utils * Export getAmplifierKeyAddresses from utils.js * Update evm/cli-utils.js * Update evm/utils.js --------- Co-authored-by: Milap Sheth Co-authored-by: Milap Sheth --- evm/cli-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evm/cli-utils.js b/evm/cli-utils.js index 7ef99024..88fbc4a9 100644 --- a/evm/cli-utils.js +++ b/evm/cli-utils.js @@ -7,7 +7,7 @@ const { Option } = require('commander'); const addBaseOptions = (program, options = {}) => { program.addOption( new Option('-e, --env ', 'environment') - .choices(['local', 'devnet', 'stagenet', 'testnet', 'mainnet']) + .choices(['local', 'devnet', 'devnet-amplifier', 'devnet-verifiers', 'stagenet', 'testnet', 'mainnet']) .default('testnet') .makeOptionMandatory(true) .env('ENV'), From 3c1c79c68c73d05990bdb3bc71400fdab3bd3fe9 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Thu, 23 May 2024 12:40:44 +0530 Subject: [PATCH 59/85] refactor: approve with batch (#238) * refactor: use api directly from config, use try catch while fetching data * refactor: update axelar schema to check lcd url * chore: add more checks on reponse data * chore: move response checks outside below try catch * chore: renamed response var --- axelar-chains-config/tests/schema/index.js | 3 +- evm/gateway.js | 37 ++++++++++++---------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/axelar-chains-config/tests/schema/index.js b/axelar-chains-config/tests/schema/index.js index c8ec637e..97e11af8 100644 --- a/axelar-chains-config/tests/schema/index.js +++ b/axelar-chains-config/tests/schema/index.js @@ -5,7 +5,8 @@ const axelarSchema = { id: { type: 'string' }, axelarId: { type: 'string' }, rpc: { type: 'string' }, - lcd: { type: 'string' }, + // Matches for "" "http://example.com:443" "https://example.com:443" "https://example.com" "http://example.com" + lcd: { type: 'string', pattern: '^$|^(https?:\\/\\/[^\\/\\:]+(:\\d+)?)$' }, grpc: { type: 'string' }, tokenSymbol: { type: 'string' }, }, diff --git a/evm/gateway.js b/evm/gateway.js index be74bdde..58212bf2 100644 --- a/evm/gateway.js +++ b/evm/gateway.js @@ -59,17 +59,6 @@ const getSignedWeightedExecuteInput = async (data, operators, weights, threshold ); }; -const fetchBatchData = async (apiUrl, batchId) => { - try { - const response = await httpGet(`${apiUrl}/${batchId}`); - const data = response?.execute_data; - - return '0x' + data; - } catch (error) { - throw new Error(`Failed to fetch batch data: ${error.message}`); - } -}; - async function processCommand(config, chain, options) { const { privateKey, address, action, yes } = options; @@ -199,17 +188,31 @@ async function processCommand(config, chain, options) { } case 'approveWithBatch': { - const { batchID, api } = options; + const { batchID } = options; if (!batchID) { throw new Error('Batch ID is required for the approve action'); } const batchId = batchID.startsWith('0x') ? batchID.substring(2) : batchID; - let apiUrl = api || `${config.axelar.lcd}/axelar/evm/v1beta1/batched_commands/${chain.name.toLowerCase()}`; - apiUrl = apiUrl.endsWith('/') ? apiUrl.slice(0, -1) : apiUrl; + const apiUrl = `${config.axelar.lcd}/axelar/evm/v1beta1/batched_commands/${chain.axelarId}/${batchId}`; - const executeData = await fetchBatchData(apiUrl, batchId); + let executeData, response; + + try { + response = await httpGet(`${apiUrl}`); + executeData = '0x' + response.execute_data; + } catch (error) { + throw new Error(`Failed to fetch batch data: ${error.message}`); + } + + if (response == null || !response.execute_data) { + throw new Error('Response does not contain execute_data'); + } + + if (response.status !== 'BATCHED_COMMANDS_STATUS_SIGNED') { + throw new Error('Data is not yet signed by operators'); + } const tx = { to: gatewayAddress, @@ -217,8 +220,8 @@ async function processCommand(config, chain, options) { ...gasOptions, }; - const response = await wallet.sendTransaction(tx); - printInfo('Approve tx', response.hash); + const txResponse = await wallet.sendTransaction(tx); + printInfo('Approve tx', txResponse.hash); const receipt = await response.wait(chain.confirmations); const eventEmitted = wasEventEmitted(receipt, gateway, 'ContractCallApproved'); From 65dba4398f2970671c19adb915d595aa60b87de0 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Sun, 26 May 2024 21:48:51 -0400 Subject: [PATCH 60/85] chore: deploy immutable mainnet factory contracts (#239) --- axelar-chains-config/info/mainnet.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 967c0e9a..6275c53b 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2036,6 +2036,21 @@ "deploymentMethod": "create", "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb" + }, + "ConstAddressDeployer": { + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", + "deploymentMethod": "create", + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" + }, + "Create3Deployer": { + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "deploymentMethod": "create2", + "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", + "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", + "salt": "Create3Deployer" } }, "gasOptions": { From 481d5967aea76903a80932981afe8dc1a526519d Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 29 May 2024 00:01:18 +0100 Subject: [PATCH 61/85] chore(cosmwasm): update deployment scripts (#241) --- .github/workflows/test.yaml | 2 +- cosmwasm/deploy-contract.js | 42 ++++++++++++++++++++++++--------- cosmwasm/utils.js | 8 +++++++ evm/deploy-amplifier-gateway.js | 16 ++++++++++++- evm/utils.js | 6 ++--- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b94b2642..d773b858 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -74,7 +74,7 @@ jobs: run: node evm/deploy-contract.js -c Create3Deployer -m create2 -y - name: Deploy AxelarAmplifierGateway - run: node evm/deploy-amplifier-gateway.js --deployMethod create3 -s "AxelarAmplifierGateway v5.8" --owner 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --domainSeparator 0xe95c4726b1aca58a875174db9810fff4d337011a24b81e31ad812a1b53ed8970 -y + run: node evm/deploy-amplifier-gateway.js --deployMethod create3 -s "AxelarAmplifierGateway v5.8" --owner 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --domainSeparator 0x361b9fa2ae14de79d4b32164841b42ebc840b9d3ddb98cba1a45dc79a13214fc -y - name: Deploy AxelarGateway run: node evm/deploy-gateway-v6.2.x.js --deployMethod create3 -s "AxelarGateway v6.2" --governance 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --mintLimiter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --keyID 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -y diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index c695df53..a538fcae 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -6,11 +6,16 @@ const { isNil } = require('lodash'); const { SigningCosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const { DirectSecp256k1HdWallet } = require('@cosmjs/proto-signing'); -const { printInfo, loadConfig, saveConfig, isString, isStringArray, isNumberArray, isNumber, prompt } = require('../evm/utils'); -const { uploadContract, instantiateContract, isValidCosmosAddress, governanceAddress } = require('./utils'); +const { printInfo, loadConfig, saveConfig, isString, isStringArray, isKeccak256Hash, isNumber, prompt } = require('../evm/utils'); +const { uploadContract, instantiateContract, isValidCosmosAddress, calculateDomainSeparator, governanceAddress } = require('./utils'); const { Command, Option } = require('commander'); +const { ethers } = require('hardhat'); +const { + utils: { arrayify }, +} = ethers; + const validateAddress = (address) => { return isString(address) && isValidCosmosAddress(address); }; @@ -162,8 +167,16 @@ const makeGatewayInstantiateMsg = ({ Router: { address: routerAddress }, VotingV return { router_address: routerAddress, verifier_address: verifierAddress }; }; -const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chainId }) => { +const makeMultisigProverInstantiateMsg = (config, chainName) => { + const { + axelar: { contracts, chainId: axelarChainId, axelarId }, + chains: { [chainName]: chainConfig }, + } = config; + + const { axelarId: chainId } = chainConfig; + const { + Router: { address: routerAddress }, Coordinator: { address: coordinatorAddress }, Multisig: { address: multisigAddress }, ServiceRegistry: { address: serviceRegistryAddress }, @@ -173,6 +186,7 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain Gateway: { [chainId]: { address: gatewayAddress }, }, + MultisigProver: contractConfig, } = contracts; const { [chainId]: { @@ -181,12 +195,14 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain domainSeparator, signingThreshold, serviceName, - workerSetDiffThreshold, + verifierSetDiffThreshold, encoder, keyType, }, } = contractConfig; + const separator = domainSeparator || calculateDomainSeparator(axelarId, routerAddress, axelarChainId); + if (!validateAddress(adminAddress)) { throw new Error(`Missing or invalid MultisigProver[${chainId}].adminAddress in axelar info`); } @@ -199,6 +215,10 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid Gateway[${chainId}].address in axelar info`); } + if (!validateAddress(routerAddress)) { + throw new Error('Missing or invalid Router.address in axelar info'); + } + if (!validateAddress(coordinatorAddress)) { throw new Error('Missing or invalid Coordinator.address in axelar info'); } @@ -215,8 +235,8 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid VotingVerifier[${chainId}].address in axelar info`); } - if (!isNumberArray(domainSeparator)) { - throw new Error(`Missing or invalid MultisigProver[${chainId}].domainSeparator in axelar info`); + if (!isKeccak256Hash(separator)) { + throw new Error(`Invalid MultisigProver[${chainId}].domainSeparator in axelar info`); } if (!isStringArray(signingThreshold)) { @@ -227,8 +247,8 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain throw new Error(`Missing or invalid MultisigProver[${chainId}].serviceName in axelar info`); } - if (!isNumber(workerSetDiffThreshold)) { - throw new Error(`Missing or invalid MultisigProver[${chainId}].workerSetDiffThreshold in axelar info`); + if (!isNumber(verifierSetDiffThreshold)) { + throw new Error(`Missing or invalid MultisigProver[${chainId}].verifierSetDiffThreshold in axelar info`); } if (!isString(encoder)) { @@ -247,11 +267,11 @@ const makeMultisigProverInstantiateMsg = (contractConfig, contracts, { id: chain multisig_address: multisigAddress, service_registry_address: serviceRegistryAddress, voting_verifier_address: verifierAddress, - domain_separator: domainSeparator, + domain_separator: [...arrayify(separator)], signing_threshold: signingThreshold, service_name: serviceName, chain_name: chainId, - worker_set_diff_threshold: workerSetDiffThreshold, + verifier_set_diff_threshold: verifierSetDiffThreshold, encoder, key_type: keyType, }; @@ -341,7 +361,7 @@ const makeInstantiateMsg = (contractName, chainName, config) => { throw new Error('MultisigProver requires chainNames option'); } - return makeMultisigProverInstantiateMsg(contractConfig, contracts, chainConfig); + return makeMultisigProverInstantiateMsg(config, chainName); } } diff --git a/cosmwasm/utils.js b/cosmwasm/utils.js index adf37c55..1eb1ca09 100644 --- a/cosmwasm/utils.js +++ b/cosmwasm/utils.js @@ -1,5 +1,10 @@ 'use strict'; +const { ethers } = require('hardhat'); +const { + utils: { keccak256 }, +} = ethers; + const { readFileSync } = require('fs'); const { calculateFee, GasPrice } = require('@cosmjs/stargate'); const { instantiate2Address } = require('@cosmjs/cosmwasm-stargate'); @@ -22,6 +27,8 @@ const isValidCosmosAddress = (str) => { const fromHex = (str) => new Uint8Array(Buffer.from(str.replace('0x', ''), 'hex')); +const calculateDomainSeparator = (chain, router, network) => keccak256(Buffer.from(`${chain}${router}${network}`)); + const uploadContract = async (client, wallet, config, options) => { const { artifactPath, contractName, instantiate2, salt, aarch64, chainNames } = options; return wallet @@ -78,6 +85,7 @@ const instantiateContract = (client, wallet, initMsg, config, { contractName, sa module.exports = { governanceAddress, + calculateDomainSeparator, uploadContract, instantiateContract, isValidCosmosAddress, diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index 0053cc34..36cba929 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -29,6 +29,7 @@ const { isKeccak256Hash, getContractConfig, } = require('./utils'); +const { calculateDomainSeparator } = require('../cosmwasm/utils'); const { addExtendedOptions } = require('./cli-utils'); const { storeSignedTx, signTransaction, getWallet } = require('./sign-utils.js'); @@ -75,7 +76,20 @@ async function getDomainSeparator(config, chain, options) { return options.domainSeparator; } - return hexlify((await getContractConfig(config, chain.name)).domain_separator); + const { + axelar: { contracts, chainId, axelarId }, + } = config; + const { + Router: { address: routerAddress }, + } = contracts; + const domainSeparator = hexlify((await getContractConfig(config, chain.name)).domain_separator); + const expectedDomainSeparator = calculateDomainSeparator(axelarId, routerAddress, chainId); + + if (domainSeparator !== expectedDomainSeparator) { + throw new Error(`unexpected domain separator (want ${expectedDomainSeparator}, got ${domainSeparator})`); + } + + return domainSeparator; } async function getSetupParams(config, chain, operator, options) { diff --git a/evm/utils.js b/evm/utils.js index bcd1fe0e..ba2e4b83 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -670,8 +670,8 @@ const getContractConfig = async (config, chain) => { const getAmplifierKeyAddresses = async (config, chain) => { const client = await CosmWasmClient.connect(config.axelar.rpc); - const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_worker_set'); - const signers = Object.values(workerSet.signers); + const verifierSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_verifier_set'); + const signers = Object.values(verifierSet.signers); const weightedAddresses = signers .map((signer) => ({ @@ -680,7 +680,7 @@ const getAmplifierKeyAddresses = async (config, chain) => { })) .sort((a, b) => a.address.localeCompare(b.address)); - return { addresses: weightedAddresses, threshold: workerSet.threshold, created_at: workerSet.created_at }; + return { addresses: weightedAddresses, threshold: verifierSet.threshold, created_at: verifierSet.created_at }; }; function sleep(ms) { From 9136b770eacea930ac199c61e06fc683923bf5b7 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Wed, 29 May 2024 16:32:16 +0530 Subject: [PATCH 62/85] chore: renove deperecated goerli chains (#243) --- axelar-chains-config/info/stagenet.json | 541 ------------------------ 1 file changed, 541 deletions(-) diff --git a/axelar-chains-config/info/stagenet.json b/axelar-chains-config/info/stagenet.json index 5df00bd0..6f9c4cfd 100644 --- a/axelar-chains-config/info/stagenet.json +++ b/axelar-chains-config/info/stagenet.json @@ -1,96 +1,5 @@ { "chains": { - "ethereum": { - "name": "Ethereum", - "id": "ethereum-2", - "axelarId": "ethereum-2", - "chainId": 5, - "rpc": "https://goerli.infura.io/v3/a4812158fbab4a2aaa849e6f4a6dc605", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x5703cdd5d9808d811ab9e516c6298a18ff926b2dc03abeba391e662f737df203", - "authModule": "0xa30225bE0D505c67028B49c7175a37ff4883980f", - "tokenDeployer": "0xD65b4CEde4733F08939719e228F76d13BC99cBBa", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x385a111F8da2b4F2C6b4eB44cE71F405dB059d74", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "0xd637fAACEA8D45A44B3C900FE85C4A09A2E50A4b", - "implementation": "0xCeF61b4592205C91bAC7bA9eEE5DFB495B34F25C", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "wrappedSymbol": "WETH", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", - "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", - "deploymentMethod": "create", - "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", - "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "url": "https://goerli.etherscan.io", - "api": "https://api-goerli.etherscan.io/api" - }, - "finality": "finalized", - "approxFinalityWaitTime": 40, - "onchainGasEstimate": { - "blobBaseFee": 50187563959 - } - }, "avalanche": { "name": "Avalanche", "id": "Avalanche", @@ -259,90 +168,6 @@ "finality": "1", "approxFinalityWaitTime": 1 }, - "polygon": { - "name": "Polygon", - "id": "Polygon", - "axelarId": "Polygon", - "chainId": 80001, - "rpc": "https://polygon-mumbai.g.alchemy.com/v2/Ksd4J1QVWaOJAJJNbr_nzTcJBJU-6uP3", - "tokenSymbol": "MATIC", - "contracts": { - "AxelarGateway": { - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x5703cdd5d9808d811ab9e516c6298a18ff926b2dc03abeba391e662f737df203", - "authModule": "0xa30225bE0D505c67028B49c7175a37ff4883980f", - "tokenDeployer": "0xD65b4CEde4733F08939719e228F76d13BC99cBBa", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x385a111F8da2b4F2C6b4eB44cE71F405dB059d74", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "0xd637fAACEA8D45A44B3C900FE85C4A09A2E50A4b", - "implementation": "0xCeF61b4592205C91bAC7bA9eEE5DFB495B34F25C", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "wrappedSymbol": "WMATIC", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "url": "https://mumbai.polygonscan.com", - "api": "https://api-testnet.polygonscan.com/api" - }, - "finality": "finalized", - "approxFinalityWaitTime": 5 - }, "moonbeam": { "name": "Moonbeam", "id": "Moonbeam", @@ -511,93 +336,6 @@ "finality": "finalized", "approxFinalityWaitTime": 1 }, - "arbitrum": { - "name": "Arbitrum", - "id": "arbitrum", - "axelarId": "arbitrum", - "chainId": 421613, - "rpc": "https://goerli-rollup.arbitrum.io/rpc", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x5703cdd5d9808d811ab9e516c6298a18ff926b2dc03abeba391e662f737df203", - "authModule": "0xa30225bE0D505c67028B49c7175a37ff4883980f", - "tokenDeployer": "0xD65b4CEde4733F08939719e228F76d13BC99cBBa", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x385a111F8da2b4F2C6b4eB44cE71F405dB059d74", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "", - "implementation": "", - "deployer": "", - "wrappedSymbol": "", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "gasOptions": { - "gasLimit": 20000000 - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "url": "https://goerli.arbiscan.io", - "api": "https://api-goerli.arbiscan.io/api" - }, - "finality": "finalized", - "approxFinalityWaitTime": 25 - }, "kava": { "name": "Kava", "id": "kava", @@ -682,285 +420,6 @@ "finality": "finalized", "approxFinalityWaitTime": 1 }, - "optimism": { - "name": "Optimism", - "id": "optimism", - "axelarId": "optimism", - "chainId": 420, - "rpc": "https://optimism-goerli.public.blastapi.io", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x3eb48e5f48808ef13805b38cffaa69b898238f02ad768e5d1ee5bc73be6bb579", - "authModule": "0xD65b4CEde4733F08939719e228F76d13BC99cBBa", - "tokenDeployer": "0x68F66b5Ea49B43E4d29BDED1051B90a28EADC67d", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x7199983dFa2F395dd7edE9FCC97FfD5fea09E57d", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "", - "implementation": "", - "deployer": "", - "wrappedSymbol": "", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "url": "https://goerli-optimism.etherscan.io", - "api": "https://api-goerli-optimism.etherscan.io/api" - }, - "gasOptions": { - "gasLimit": 5000000 - }, - "onchainGasEstimate": { - "l1ChainName": "ethereum", - "gasEstimationType": 1 - }, - "finality": "finalized", - "approxFinalityWaitTime": 25 - }, - "base": { - "name": "Base", - "id": "base", - "axelarId": "base", - "chainId": 84531, - "rpc": "https://goerli.base.org", - "tokenSymbol": "ETH", - "contracts": { - "AxelarGateway": { - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x7fb0f83cf34549753919f6f16ed3e895fbe26eda1bfded31247048255b5d4331", - "authModule": "0x2F4d0bEecEE4559026A8093EDD0e16377202DBe8", - "tokenDeployer": "0xB0288E332552f87Ef51EEE5F4060D1A98e99548B", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x7199983dFa2F395dd7edE9FCC97FfD5fea09E57d", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "implementation": "", - "deployer": "", - "wrappedSymbol": "", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e" - }, - "Create3Deployer": { - "salt": "Create3Deployer", - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "salt": "Operators" - }, - "InterchainGovernance": { - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "minimumTimeDelay": 300, - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - } - }, - "explorer": { - "url": "https://goerli.basescan.org", - "api": "https://api-goerli.basescan.org/api" - }, - "gasOptions": { - "gasLimit": 5000000 - }, - "onchainGasEstimate": { - "l1ChainName": "ethereum", - "gasEstimationType": 1 - }, - "finality": "finalized", - "approxFinalityWaitTime": 30 - }, - "immutable-devnet": { - "name": "immutable-devnet", - "id": "immutable-devnet", - "axelarId": "immutable-devnet", - "chainId": 15003, - "rpc": "", - "tokenSymbol": "IMX", - "gasOptions": { - "gasLimit": 8000000, - "maxPriorityFeePerGas": 150000000000, - "maxFeePerGas": 160000000000 - }, - "contracts": { - "AxelarGateway": { - "startingKeyIDs": [ - "evm-immutable-devnet-genesis" - ], - "authModule": "0xe0Ad88660B5B09fE9FF8bA6f1dba1A826b1C7583", - "tokenDeployer": "0x42dBF20686794C1a82A95A629373ed2E8CFb5fEb", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0x6aF9C075d8C11b9A2CD66bbA801481b3c7A96488", - "implementation": "0x21BB37D5e02Ef479E34f6806C36a506c63741cc1", - "implementationCodehash": "0x25cc2857feace37fdf26f3021ac4af473923d6741611bacf7430f7e72ef99c65", - "deploymentMethod": "create3", - "salt": "AxelarGateway v6.2" - }, - "AxelarGasService": { - "collector": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "salt": "AxelarGasService", - "address": "0x47E840B35e0eca3E7C0577835DD78d95574873e7", - "implementation": "0x102A4324EA951BDd0105798C1fe31f8382EE1309", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd" - }, - "AxelarDepositService": { - "salt": "AxelarDepositService", - "address": "", - "implementation": "", - "deployer": "", - "wrappedSymbol": "", - "refundIssuer": "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - }, - "ConstAddressDeployer": { - "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", - "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", - "deploymentMethod": "create", - "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", - "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" - }, - "Create3Deployer": { - "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", - "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "deploymentMethod": "create2", - "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", - "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", - "salt": "Create3Deployer" - }, - "Operators": { - "owner": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "address": "0xB77A61a241a756E4817c845BEDE7e213a319b1DD", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create2", - "codehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", - "predeployCodehash": "0xc561dc32ef670c929db9d7fbf6b5f6c074a62a30602481ba3b88912ca6d79feb", - "salt": "Operators" - }, - "Multisig": { - "threshold": 2, - "signers": [ - "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "0xA24156B88D56696a7beE61A38deB5D8aaD8Ceb55", - "0x2517bA7a3E2cef54c1CD8618e7B0B661A7623817" - ], - "address": "0x418FCD3890Ca73f5852eA727505f56396A644873", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig v5.5" - }, - "InterchainGovernance": { - "minimumTimeDelay": 300, - "governanceChain": "Axelarnet", - "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "address": "0xf6c4679c0FdA9b4e49fCcfedCEE03a730d35E64D", - "deployer": "0x9D97cf3AC20b73c81d8A5233d9FBe09618d4F8bd", - "deploymentMethod": "create3", - "codehash": "0xa8c5d3eab2aefc62e03bcf3c5e1db27cbce0e24d3f87d8dfbbb54676bfbf937c", - "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", - "salt": "InterchainGovernance v5.5" - } - }, - "explorer": { - "url": "", - "api": "" - }, - "finality": "1", - "approxFinalityWaitTime": 1 - }, "ethereum-sepolia": { "name": "Ethereum-Sepolia", "id": "ethereum-sepolia", From aef9eda8e600489f9910d74bb6ce40806a35d82f Mon Sep 17 00:00:00 2001 From: re1ro Date: Thu, 30 May 2024 14:46:27 -0400 Subject: [PATCH 63/85] feat(GasService): using internal TX relay API (#242) * feat(GasService): using internal TX relay API * refactor(GasService): reusing relaying logic * Update evm/gas-service.js Co-authored-by: Milap Sheth * Update evm/utils.js Co-authored-by: Milap Sheth * refactor(GasService): relaying logic * fix(GasService): relay flag for operators script --------- Co-authored-by: Milap Sheth --- evm/gas-service.js | 31 ++++++++++++------------------- evm/operators.js | 30 ++++++++++++++---------------- evm/utils.js | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 35 deletions(-) diff --git a/evm/gas-service.js b/evm/gas-service.js index 6eef38d7..e3103012 100644 --- a/evm/gas-service.js +++ b/evm/gas-service.js @@ -16,12 +16,12 @@ const { prompt, getContractJSON, getGasOptions, - wasEventEmitted, isValidAddress, validateParameters, httpPost, toBigNumberString, timeout, + relayTransaction, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); @@ -304,25 +304,16 @@ async function processCommand(config, chain, options) { } try { - const tx = await timeout( - gasService.updateGasInfo(chainsToUpdate, gasInfoUpdates, gasOptions), - chain.timeout || 60000, - new Error(`Timeout updating gas info for ${chain.name}`), + await relayTransaction( + options, + chain, + gasService, + 'updateGasInfo', + [chainsToUpdate, gasInfoUpdates], + 0, + gasOptions, + 'GasInfoUpdated', ); - - printInfo('TX', tx.hash); - - const receipt = await timeout( - tx.wait(chain.confirmations), - chain.timeout || 60000, - new Error(`Timeout updating gas info for ${chain.name}`), - ); - - const eventEmitted = wasEventEmitted(receipt, gasService, 'GasInfoUpdated'); - - if (!eventEmitted) { - printWarn('Event not emitted in receipt.'); - } } catch (error) { for (let i = 0; i < chainsToUpdate.length; i++) { addFailedChainUpdate(chain.name, chainsToUpdate[i]); @@ -368,6 +359,7 @@ if (require.main === module) { // options for updateGasInfo program.addOption(new Option('--chains ', 'Chain names')); + program.addOption(new Option('--relayerAPI ', 'Relay the tx through an external relayer API').env('RELAYER_API')); program.action((options) => { main(options); @@ -379,3 +371,4 @@ if (require.main === module) { exports.getGasUpdates = getGasUpdates; exports.addFailedChainUpdate = addFailedChainUpdate; exports.printFailedChainUpdates = printFailedChainUpdates; +exports.relayTransaction = relayTransaction; diff --git a/evm/operators.js b/evm/operators.js index fc2a8838..a7c32e34 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -2,7 +2,6 @@ const { ethers } = require('hardhat'); const { - Wallet, getDefaultProvider, utils: { isAddress, Interface }, Contract, @@ -23,10 +22,10 @@ const { validateParameters, getContractJSON, printWarn, - timeout, } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); -const { getGasUpdates, printFailedChainUpdates, addFailedChainUpdate } = require('./gas-service'); +const { getGasUpdates, printFailedChainUpdates, addFailedChainUpdate, relayTransaction } = require('./gas-service'); +const { getWallet } = require('./sign-utils'); async function processCommand(config, chain, options) { const { @@ -62,8 +61,8 @@ async function processCommand(config, chain, options) { const rpc = chain.rpc; const provider = getDefaultProvider(rpc); - const wallet = new Wallet(privateKey, provider); - await printWalletInfo(wallet); + const wallet = await getWallet(privateKey, provider, options); + await printWalletInfo(wallet, options); printInfo('Contract name', contractName); @@ -268,17 +267,14 @@ async function processCommand(config, chain, options) { const updateGasInfoCalldata = gasServiceInterface.encodeFunctionData('updateGasInfo', [chainsToUpdate, gasInfoUpdates]); try { - const tx = await timeout( - operatorsContract.executeContract(target, updateGasInfoCalldata, 0, gasOptions), - chain.timeout || 60000, - new Error(`Timeout updating gas info for ${chain.name}`), - ); - printInfo('TX', tx.hash); - - await timeout( - tx.wait(chain.confirmations), - chain.timeout || 60000, - new Error(`Timeout updating gas info for ${chain.name}`), + await relayTransaction( + options, + chain, + operatorsContract, + 'executeContract', + [target, updateGasInfoCalldata, 0], + 0, + gasOptions, ); } catch (error) { for (let i = 0; i < chainsToUpdate.length; i++) { @@ -321,10 +317,12 @@ if (require.main === module) { 'updateGasInfo', ]), ); + program.addOption(new Option('--offline', 'run script in offline mode')); program.addOption(new Option('--args ', 'operator action arguments')); // options for updateGasInfo program.addOption(new Option('--chains ', 'Chain names')); + program.addOption(new Option('--relayerAPI ', 'Relay the tx through an external relayer API').env('RELAYER_API')); program.action((options) => { main(options); diff --git a/evm/utils.js b/evm/utils.js index ba2e4b83..6d4cce35 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1196,6 +1196,40 @@ function timeout(prom, time, exception) { ); } +async function relayTransaction(options, chain, contract, method, params, nativeValue = 0, gasOptions = {}, expectedEvent = null) { + if (options.relayerAPI) { + const result = await httpPost(options.relayerAPI, { + chain: chain.axelarId, + to: contract.address, + call_data: contract.interface.encodeFunctionData(method, params), + value: nativeValue, + }); + + printInfo('Relay ID', result.relay_id); + return; + } + + await timeout( + (async () => { + const tx = await contract[method](...params, gasOptions); + printInfo('Tx hash', tx.hash); + + const receipt = await tx.wait(chain.confirmations); + + if (expectedEvent) { + const eventEmitted = wasEventEmitted(receipt, contract, expectedEvent); + + if (!eventEmitted) { + printWarn('Event not emitted in receipt.'); + } + } + })(), + + chain.timeout || 60000, + new Error(`Timeout updating gas info for ${chain.name}`), + ); +} + module.exports = { deployCreate, deployCreate2, @@ -1258,4 +1292,5 @@ module.exports = { timeout, getAmplifierKeyAddresses, getContractConfig, + relayTransaction, }; From 6d2ef9490bcd4857371aaf587b99c9bc7925e6bf Mon Sep 17 00:00:00 2001 From: Foivos Date: Fri, 31 May 2024 11:23:03 +0300 Subject: [PATCH 64/85] feat: initial sui deployment scripts (#240) * added a script to publish the gateway * added a publish-test script * added dependancy * refactor script * refactor script * add faucet script * rename script * fix faucet script * prettier and lint * contract address * update sui dep * fix sign utils * fix errors and add README * add readme * temp * deploy gateway now works * test deployment works now too * lint * update package.json * fix scripts * import fix * prettier * fix pubkey in readme * improve utils * lint --------- Co-authored-by: Milap Sheth --- axelar-chains-config/info/testnet.json | 12 + package-lock.json | 799 ++++++++++++++++++++++--- package.json | 1 + sui/README.md | 61 ++ sui/cli-utils.js | 46 ++ sui/deploy-gateway.js | 153 +++++ sui/deploy-test.js | 89 +++ sui/faucet.js | 40 ++ sui/generate-keypair.js | 42 ++ sui/sign-utils.js | 90 +++ sui/utils.js | 50 ++ 11 files changed, 1291 insertions(+), 92 deletions(-) create mode 100644 sui/README.md create mode 100644 sui/cli-utils.js create mode 100644 sui/deploy-gateway.js create mode 100644 sui/deploy-test.js create mode 100644 sui/faucet.js create mode 100644 sui/generate-keypair.js create mode 100644 sui/sign-utils.js create mode 100644 sui/utils.js diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 5aa07ad1..461c143e 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2027,6 +2027,18 @@ "tokenSymbol": "XLM", "contracts": {} }, + "sui": { + "name": "Sui", + "axelarId": "sui", + "networkType": "testnet", + "rpc": "https://fullnode.testnet.sui.io:443", + "tokenSymbol": "SUI", + "explorer": { + "name": "Suiscan", + "url": "https://suiscan.xyz" + }, + "contracts": {} + }, "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", diff --git a/package-lock.json b/package-lock.json index 8dd0cf85..ee4221a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", + "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git#main", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", @@ -39,6 +40,32 @@ "node": ">=18" } }, + "node_modules/@0no-co/graphql.web": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz", + "integrity": "sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ==", + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, + "node_modules/@0no-co/graphqlsp": { + "version": "1.12.5", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.5.tgz", + "integrity": "sha512-YS9s8sf3XLaVdBt33u1mbUdfUSLiarQW1SFd3ITh2CLWz1nVnVTN0oCrpepuFHUJ7rt+b6Gk14sgjP4ONdeZfQ==", + "dependencies": { + "@gql.tada/internal": "^1.0.0", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", + "typescript": "^5.0.0" + } + }, "node_modules/@0xpolygonhermez/zkevm-commonjs": { "version": "1.0.0", "resolved": "git+ssh://git@github.com/0xpolygonhermez/zkevm-commonjs.git#34f72fe9f7a4c3c45965742476a87148c9e05c0f", @@ -64,6 +91,29 @@ "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@aws-crypto/sha256-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", @@ -139,6 +189,50 @@ "node": ">=18" } }, + "node_modules/@axelar-network/axelar-cgp-sui": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#39ffd8becaffc0daf53ad6dbbdf20b6811fcb88f", + "dependencies": { + "@cosmjs/cosmwasm-stargate": "^0.32.2", + "@mysten/sui.js": "^0.54.1", + "child_process": "^1.0.2", + "dotenv": "^16.3.1", + "ethers": "^5.0.0", + "fs": "^0.0.1-security", + "secp256k1": "^5.0.0", + "tmp": "^0.2.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/secp256k1": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } + }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", @@ -178,6 +272,17 @@ "node": ">=16" } }, + "node_modules/@babel/parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@chainsafe/as-sha256": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", @@ -214,41 +319,41 @@ } }, "node_modules/@cosmjs/amino": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.1.tgz", - "integrity": "sha512-5l2xQ2XuAhV/B3kTIMPBcVZ/OQ+9Yyddzw/lIVs4qE5e/oBI0PVNWXw1oyR0wgfGHrMUxgKjsoOOqE2IbXVyCw==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.3.tgz", + "integrity": "sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==", "dependencies": { - "@cosmjs/crypto": "^0.32.1", - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/utils": "^0.32.1" + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3" } }, "node_modules/@cosmjs/cosmwasm-stargate": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.1.tgz", - "integrity": "sha512-OWSg63RBoSnqAkzmGuKrGGibjMd/aX3BkinZ8Zg8ngMIiYftEkrlsIXhaZ5xPcAWTDWc6PK8Qzvfn5yaA24rTA==", - "dependencies": { - "@cosmjs/amino": "^0.32.1", - "@cosmjs/crypto": "^0.32.1", - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/proto-signing": "^0.32.1", - "@cosmjs/stargate": "^0.32.1", - "@cosmjs/tendermint-rpc": "^0.32.1", - "@cosmjs/utils": "^0.32.1", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.3.tgz", + "integrity": "sha512-pqkt+QsLIPNMTRh9m+igJgIpzXXgn1BxmxfAb9zlC23kvsuzY/12un9M7iAdim1NwKXDFeYw46xC2YkprwQp+g==", + "dependencies": { + "@cosmjs/amino": "^0.32.3", + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/proto-signing": "^0.32.3", + "@cosmjs/stargate": "^0.32.3", + "@cosmjs/tendermint-rpc": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "cosmjs-types": "^0.9.0", "pako": "^2.0.2" } }, "node_modules/@cosmjs/crypto": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.1.tgz", - "integrity": "sha512-AsKucEg5o8evU0wXF/lDwX+ZSwCKF4bbc57nFzraHywlp3sNu4dfPPURoMrT0r7kT7wQZAy4Pdnvmm9nnCCm/Q==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.3.tgz", + "integrity": "sha512-niQOWJHUtlJm2GG4F00yGT7sGPKxfUwz+2qQ30uO/E3p58gOusTcH2qjiJNVxb8vScYJhFYFqpm/OA/mVqoUGQ==", "dependencies": { - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/utils": "^0.32.1", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "@noble/hashes": "^1", "bn.js": "^5.2.0", "elliptic": "^6.5.4", @@ -256,9 +361,9 @@ } }, "node_modules/@cosmjs/encoding": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.1.tgz", - "integrity": "sha512-x60Lfds+Eq42rVV29NaoIAson3kBhATBI3zPp7X3GJTryBc5HFHQ6L/976tE1WB2DrvkfUdWS3ayCMVOY/qm1g==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.3.tgz", + "integrity": "sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==", "dependencies": { "base64-js": "^1.3.0", "bech32": "^1.1.4", @@ -266,92 +371,92 @@ } }, "node_modules/@cosmjs/json-rpc": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.1.tgz", - "integrity": "sha512-Hsj3Sg+m/JF8qfISp/G4TXQ0FAO01mzDKtNcgKufIHCrvJNDiE69xGyGgSm/qKwsXLBmzRTSxHWK0+yZef3LNQ==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.3.tgz", + "integrity": "sha512-JwFRWZa+Y95KrAG8CuEbPVOSnXO2uMSEBcaAB/FBU3Mo4jQnDoUjXvt3vwtFWxfAytrWCn1I4YDFaOAinnEG/Q==", "dependencies": { - "@cosmjs/stream": "^0.32.1", + "@cosmjs/stream": "^0.32.3", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/math": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.1.tgz", - "integrity": "sha512-sqJgDjPh49rxe06apzwKYLxAw4LLFKmEd4yQtHqH16BxVVUrvK5UH9TEBpUrRErdjqENowekecDCDBZspGXHNA==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.3.tgz", + "integrity": "sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg==", "dependencies": { "bn.js": "^5.2.0" } }, "node_modules/@cosmjs/proto-signing": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.1.tgz", - "integrity": "sha512-IHJMXQ8XnfzR5K1hWb8VV/jEfJof6BL2mgGIA7X4hSPegwoVfb9hnFKPEPgFjGCTTvGZ8SfnCdXxpsOjianVIA==", - "dependencies": { - "@cosmjs/amino": "^0.32.1", - "@cosmjs/crypto": "^0.32.1", - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/utils": "^0.32.1", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz", + "integrity": "sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==", + "dependencies": { + "@cosmjs/amino": "^0.32.3", + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "cosmjs-types": "^0.9.0" } }, "node_modules/@cosmjs/socket": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.1.tgz", - "integrity": "sha512-thPCLCmnCuZvrsDW4YmsADI/MliOXWuMnflbzX+3OhoTuEav2I4/1aOXY0jdy0bbqL0l1opx+JfmwdWptMgKzg==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.3.tgz", + "integrity": "sha512-F2WwNmaUPdZ4SsH6Uyreq3wQk7jpaEkb3wfOP951f5Jt6HCW/PxbxhKzHkAAf6+Sqks6SPhkbWoE8XaZpjL2KA==", "dependencies": { - "@cosmjs/stream": "^0.32.1", + "@cosmjs/stream": "^0.32.3", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/stargate": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.1.tgz", - "integrity": "sha512-S0E1qKQ2CMJU79G8bQTquTyrbU03gFsvCkbo3RvK8v2OltVCByjFNh+0nGN5do+uDOzwwmDvnNLhR+SaIyNQoQ==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.3.tgz", + "integrity": "sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w==", "dependencies": { "@confio/ics23": "^0.6.8", - "@cosmjs/amino": "^0.32.1", - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/proto-signing": "^0.32.1", - "@cosmjs/stream": "^0.32.1", - "@cosmjs/tendermint-rpc": "^0.32.1", - "@cosmjs/utils": "^0.32.1", + "@cosmjs/amino": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/proto-signing": "^0.32.3", + "@cosmjs/stream": "^0.32.3", + "@cosmjs/tendermint-rpc": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "cosmjs-types": "^0.9.0", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/stream": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.1.tgz", - "integrity": "sha512-6RwHaGxWbIG0y++aCYP/doa4ex/Up8Q8G+ehwDzAq3aKl3zbDe9L0FmycclnMuwPm/baPIkEZ6+IVmJoNLX79Q==", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.3.tgz", + "integrity": "sha512-J2zVWDojkynYifAUcRmVczzmp6STEpyiAARq0rSsviqjreGIfspfuws/8rmkPa6qQBZvpQOBQCm2HyZZwYplIw==", "dependencies": { "xstream": "^11.14.0" } }, "node_modules/@cosmjs/tendermint-rpc": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.1.tgz", - "integrity": "sha512-4uGSxB2JejWhwBUgxca4GqcK/BGnCFMIP7ptwEledrC3AY/shPeIYcPXWEBwO7sfwCta8DhAOCLrc9zhVC+VAQ==", - "dependencies": { - "@cosmjs/crypto": "^0.32.1", - "@cosmjs/encoding": "^0.32.1", - "@cosmjs/json-rpc": "^0.32.1", - "@cosmjs/math": "^0.32.1", - "@cosmjs/socket": "^0.32.1", - "@cosmjs/stream": "^0.32.1", - "@cosmjs/utils": "^0.32.1", + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.3.tgz", + "integrity": "sha512-xeprW+VR9xKGstqZg0H/KBZoUp8/FfFyS9ljIUTLM/UINjP2MhiwncANPS2KScfJVepGufUKk0/phHUeIBSEkw==", + "dependencies": { + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/json-rpc": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/socket": "^0.32.3", + "@cosmjs/stream": "^0.32.3", + "@cosmjs/utils": "^0.32.3", "axios": "^1.6.0", "readonly-date": "^1.0.0", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/utils": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.1.tgz", - "integrity": "sha512-PV9pa0cVPFCNgfQKEOc6RcNFHr5wMQLcDqWoo/ekIoj1AfzAaqnojdnL80u1C9Qf+vOfRGIXubqiU7Tl7QZuig==" + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.3.tgz", + "integrity": "sha512-WCZK4yksj2hBDz4w7xFZQTRZQ/RJhBX26uFHmmQFIcNUUVAihrLO+RerqJgk0dZqC42wstM9pEUQGtPmLcIYvg==" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -1232,6 +1337,43 @@ "node": ">=14" } }, + "node_modules/@gql.tada/cli-utils": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.9.tgz", + "integrity": "sha512-oRb7SG/+csx9CiypSJTI21KaLfulOUnhX1vxg4FXi2snub9XShkGR2XnnlJVTAOZXY9Vcxti1NutAElxdDkycA==", + "dependencies": { + "@0no-co/graphqlsp": "^1.12.1", + "@gql.tada/internal": "1.0.0", + "@vue/compiler-dom": "^3.4.23", + "@vue/language-core": "^2.0.17", + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", + "svelte2tsx": "^0.7.6" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@gql.tada/internal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.0.tgz", + "integrity": "sha512-B55aIYyZn5ewdgMqoJciPAwF5DKYX6HBabTU+ap/dpNH3EgJrLomc8Y8w+MCxCyOx+dXL9OduT6eWnVr7J7Eyg==", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1265,11 +1407,43 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "peer": true, "engines": { "node": ">=6.0.0" @@ -1279,7 +1453,6 @@ "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, "peer": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1443,12 +1616,58 @@ "rlp": "^2.2.3" } }, + "node_modules/@mysten/bcs": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.11.1.tgz", + "integrity": "sha512-xP85isNSYUCHd3O/g+TmZYmg4wK6cU8q/n/MebkIGP4CYVJZz2wU/G24xIZ3wI+0iTop4dfgA5kYrg/DQKCUzA==", + "dependencies": { + "bs58": "^5.0.0" + } + }, + "node_modules/@mysten/bcs/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/@mysten/bcs/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/@mysten/sui.js": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.54.1.tgz", + "integrity": "sha512-TSmGIX7U9O/uS9EKIQdv7/S69KTbBhMJVelXCafJE6IJw8iB9cN9uLu0+uklkBSDrbRmLSEY70jMr3uRFjReIg==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0", + "@mysten/bcs": "0.11.1", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "@scure/bip32": "^1.3.1", + "@scure/bip39": "^1.2.1", + "@suchipi/femver": "^1.0.0", + "bech32": "^2.0.0", + "gql.tada": "^1.7.0", + "graphql": "^16.8.1", + "superstruct": "^1.0.3", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@mysten/sui.js/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, "node_modules/@noble/curves": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", - "dev": true, - "peer": true, "dependencies": { "@noble/hashes": "1.3.1" }, @@ -1460,8 +1679,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "dev": true, - "peer": true, "engines": { "node": ">= 16" }, @@ -2299,7 +2516,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", - "dev": true, "funding": { "url": "https://paulmillr.com/funding/" } @@ -2308,8 +2524,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", - "dev": true, - "peer": true, "dependencies": { "@noble/curves": "~1.1.0", "@noble/hashes": "~1.3.1", @@ -2323,8 +2537,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "dev": true, - "peer": true, "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -2498,6 +2710,11 @@ "urijs": "^1.19.1" } }, + "node_modules/@suchipi/femver": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@suchipi/femver/-/femver-1.0.0.tgz", + "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==" + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -2618,6 +2835,12 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "peer": true + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -2751,6 +2974,92 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@volar/language-core": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.5.tgz", + "integrity": "sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==", + "dependencies": { + "@volar/source-map": "2.2.5" + } + }, + "node_modules/@volar/source-map": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.5.tgz", + "integrity": "sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==", + "dependencies": { + "muggle-string": "^0.4.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/language-core": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", + "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", + "dependencies": { + "@volar/language-core": "~2.2.4", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -2836,7 +3145,6 @@ "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3084,6 +3392,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-back": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", @@ -3323,11 +3640,19 @@ "node": ">= 6" } }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { "version": "3.0.9", @@ -3785,6 +4110,11 @@ "node": "*" } }, + "node_modules/child_process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", + "integrity": "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==" + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3934,6 +4264,28 @@ "node": ">=8" } }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4118,6 +4470,11 @@ "node": ">=16" } }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4293,6 +4650,19 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/d": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", @@ -4307,6 +4677,11 @@ "node": ">=0.12" } }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -4357,6 +4732,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" + }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -4491,6 +4871,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", @@ -4551,7 +4940,6 @@ "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, "engines": { "node": ">=12" }, @@ -4620,6 +5008,17 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -5325,6 +5724,11 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5867,6 +6271,11 @@ "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", "dev": true }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6252,6 +6661,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gql.tada": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.5.tgz", + "integrity": "sha512-GepPTee+FWSVVZQ7GiJHzsGNo7gOb59kcn4mUPYLlkbpeJfOUwpuoB05ZNaXG0W4qZVPd1I7R2UgMHBjY1lGlQ==", + "dependencies": { + "@0no-co/graphql.web": "^1.0.5", + "@gql.tada/cli-utils": "1.3.9", + "@gql.tada/internal": "1.0.0" + }, + "bin": { + "gql-tada": "bin/cli.js", + "gql.tada": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -6264,6 +6690,14 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -6725,7 +7159,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } @@ -7207,6 +7640,15 @@ "node": ">=8" } }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "peer": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -7668,6 +8110,12 @@ "libsodium-sumo": "^0.7.13" } }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "peer": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7749,6 +8197,19 @@ "get-func-name": "^2.0.1" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -7768,6 +8229,15 @@ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -7800,6 +8270,12 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "peer": true + }, "node_modules/memdown": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", @@ -8149,6 +8625,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + }, "node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", @@ -8193,6 +8674,20 @@ "dev": true, "peer": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-case/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/node-abi": { "version": "3.51.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", @@ -8560,6 +9055,20 @@ "dev": true, "peer": true }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -8569,6 +9078,11 @@ "util": "^0.10.3" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8636,6 +9150,26 @@ "node": ">=0.12" } }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/pg": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", @@ -10002,6 +10536,14 @@ "node": ">=0.8.0" } }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -10209,6 +10751,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superstruct": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", + "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10233,6 +10783,63 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte": { + "version": "4.2.17", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.17.tgz", + "integrity": "sha512-N7m1YnoXtRf5wya5Gyx3TWuTddI4nAyayyIWFojiWV5IayDYNV5i2mRp/7qNGol4DtxEYxljmrbgp1HM6hUbmQ==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/svelte2tsx": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.9.tgz", + "integrity": "sha512-Rm+0LAwg9wT4H2IsR8EaM9EWErTzi9LmuZKxkH5b1ua94XjQmwHstBP4VabLgA9AE6XmwBg+xK7Cjzwfm6ustQ==", + "dependencies": { + "dedent-js": "^1.0.1", + "pascal-case": "^3.1.1" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0" + } + }, "node_modules/symbol-observable": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-2.0.3.tgz", @@ -10823,7 +11430,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, "peer": true, "bin": { "tsc": "bin/tsc", @@ -11003,6 +11609,15 @@ "dev": true, "peer": true }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, "node_modules/wasmbuilder": { "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", diff --git a/package.json b/package.json index 73628829..0f9e65fa 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "homepage": "https://github.com/axelarnetwork/axelar-contract-deployments#readme", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", + "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git#main", "@axelar-network/axelar-cgp-solidity": "6.3.1", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", diff --git a/sui/README.md b/sui/README.md new file mode 100644 index 00000000..6991dea5 --- /dev/null +++ b/sui/README.md @@ -0,0 +1,61 @@ +# Sui deployment scripts + +## Prerequisites + +Install Sui CLI: `brew install sui` + +A Sui keypair can be created as follows. + +1. Using Sui CLI: + +```bash +sui client new-address secp256k1 wallet + +# Export private key in bech32 format +sui keytool export --key-identity wallet +``` + +2. Using the script + +```bash +node sui/generate-keypair.js +``` + +Set `PRIVATE_KEY=[suiprivkey...]` in your `.env` file. Other private key types are supported via `--privateKeyType` and `--signatureScheme` flags. + +If you want to run against a local Sui network, then create a `local.json` config containing: + +```bash +{ + "sui": { + "name": "Sui", + "axelarId": "sui", + "networkType": "localnet", + "tokenSymbol": "SUI", + "rpc": "[local rpc]", + "contracts": {} + } +} +``` + +Use the `-e local` (or `ENV=local` in the `.env` config) flag with scripts to run against the local network. + +## Scripts + +1. Faucet: To get test SUI coins to your address. + +```bash +node sui/faucet.js +``` + +2. Deploy the gateway: + +```bash +node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": ""}' +``` + +3. Deploy the test GMP package: + +```bash +node sui/deploy-test.js +``` diff --git a/sui/cli-utils.js b/sui/cli-utils.js new file mode 100644 index 00000000..ad647e77 --- /dev/null +++ b/sui/cli-utils.js @@ -0,0 +1,46 @@ +'use strict'; + +require('dotenv').config(); + +const { Option } = require('commander'); + +const addBaseOptions = (program, options = {}) => { + program.addOption( + new Option('-e, --env ', 'environment') + .choices(['local', 'devnet', 'devnet-amplifier', 'devnet-verifiers', 'stagenet', 'testnet', 'mainnet']) + .default('testnet') + .makeOptionMandatory(true) + .env('ENV'), + ); + program.addOption(new Option('-y, --yes', 'skip deployment prompt confirmation').env('YES')); + program.addOption(new Option('--gasOptions ', 'gas options cli override')); + + if (!options.ignorePrivateKey) { + program.addOption(new Option('-p, --privateKey ', 'private key').makeOptionMandatory(true).env('PRIVATE_KEY')); + + program.addOption( + new Option('--privateKeyType ', 'private key type') + .makeOptionMandatory(true) + .choices(['bech32', 'mnemonic', 'hex']) + .default('bech32') + .env('PRIVATE_KEY_TYPE'), + ); + + program.addOption( + new Option('--signatureScheme ', 'signature scheme to use') + .choices(['secp256k1', 'ed25519', 'secp256r1']) + .default('secp256k1') + .env('SIGNATURE_SCHEME'), + ); + } + + if (options.address) { + program.addOption(new Option('--address
', 'override contract address')); + } + + return program; +}; + +module.exports = { + addBaseOptions, +}; diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js new file mode 100644 index 00000000..53a82517 --- /dev/null +++ b/sui/deploy-gateway.js @@ -0,0 +1,153 @@ +const { saveConfig, prompt, printInfo } = require('../evm/utils'); +const { Command, Option } = require('commander'); +const { publishPackage, updateMoveToml } = require('@axelar-network/axelar-cgp-sui/scripts/publish-package'); +const { TransactionBlock } = require('@mysten/sui.js/transactions'); +const { bcs } = require('@mysten/sui.js/bcs'); +const { ethers } = require('hardhat'); +const { + utils: { arrayify, hexlify }, + constants: { HashZero }, +} = ethers; + +const { addBaseOptions } = require('./cli-utils'); +const { getWallet, printWalletInfo } = require('./sign-utils'); +const { getAmplifierSigners, loadSuiConfig } = require('./utils'); + +async function getSigners(config, chain, options) { + if (options.signers) { + printInfo('Using provided signers', options.signers); + + const signers = JSON.parse(options.signers); + return { + signers: signers.signers.map(({ pubkey, weight }) => { + return { pubkey: arrayify(pubkey), weight }; + }), + threshold: signers.threshold, + nonce: signers.nonce || HashZero, + }; + } + + return getAmplifierSigners(config, chain); +} + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + + await printWalletInfo(keypair, client, chain, options); + + if (!chain.contracts.axelar_gateway) { + chain.contracts.axelar_gateway = {}; + } + + const contractConfig = chain.contracts.axelar_gateway; + const { minimumRotationDelay, domainSeparator } = options; + const signers = await getSigners(config, chain, options); + const operator = options.operator || keypair.toSuiAddress(); + + if (prompt(`Proceed with deployment on ${chain.name}?`, options.yes)) { + return; + } + + const published = await publishPackage('axelar_gateway', client, keypair); + const packageId = published.packageId; + + updateMoveToml('axelar_gateway', packageId); + + const creatorCap = published.publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); + const relayerDiscovery = published.publishTxn.objectChanges.find( + (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, + ); + + const signerStruct = bcs.struct('WeightedSigner', { + pubkey: bcs.vector(bcs.u8()), + weight: bcs.u128(), + }); + const bytes32Struct = bcs.fixedArray(32, bcs.u8()).transform({ + input: (id) => arrayify(id), + output: (id) => hexlify(id), + }); + + const signersStruct = bcs.struct('WeightedSigners', { + signers: bcs.vector(signerStruct), + threshold: bcs.u128(), + nonce: bytes32Struct, + }); + + const encodedSigners = signersStruct + .serialize({ + ...signers, + nonce: bytes32Struct.serialize(signers.nonce).toBytes(), + }) + .toBytes(); + + const tx = new TransactionBlock(); + + const separator = tx.moveCall({ + target: `${packageId}::bytes32::new`, + arguments: [tx.pure(arrayify(domainSeparator))], + }); + + tx.moveCall({ + target: `${packageId}::gateway::setup`, + arguments: [ + tx.object(creatorCap.objectId), + tx.pure.address(operator), + separator, + tx.pure(minimumRotationDelay), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), + tx.object('0x6'), + ], + }); + const result = await client.signAndExecuteTransactionBlock({ + transactionBlock: tx, + signer: keypair, + options: { + showEffects: true, + showObjectChanges: true, + showContent: true, + }, + }); + + const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); + + contractConfig.address = packageId; + contractConfig.objects = { + gateway: gateway.objectId, + relayerDiscovery: relayerDiscovery.objectId, + }; + contractConfig.domainSeparator = domainSeparator; + contractConfig.operator = operator; + contractConfig.minimumRotationDelay = minimumRotationDelay; + + printInfo('Gateway deployed', JSON.stringify(contractConfig, null, 2)); +} + +async function mainProcessor(options, processor) { + const config = loadSuiConfig(options.env); + + await processor(config, config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('deploy-gateway').description('Deploys/publishes the Sui gateway'); + + addBaseOptions(program); + + program.addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')); + program.addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')); + program.addOption( + new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default( + 24 * 60 * 60 * 1000, + ), + ); // 1 day (in ms) + program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} diff --git a/sui/deploy-test.js b/sui/deploy-test.js new file mode 100644 index 00000000..63e50d27 --- /dev/null +++ b/sui/deploy-test.js @@ -0,0 +1,89 @@ +const { saveConfig, prompt, printInfo } = require('../evm/utils'); +const { Command, Option } = require('commander'); +const { publishPackage, updateMoveToml } = require('@axelar-network/axelar-cgp-sui/scripts/publish-package'); +const { TransactionBlock } = require('@mysten/sui.js/transactions'); +const { ethers } = require('hardhat'); +const { + constants: { HashZero }, +} = ethers; +const { loadSuiConfig } = require('./utils'); + +const { addBaseOptions } = require('./cli-utils'); +const { getWallet, printWalletInfo } = require('./sign-utils'); + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + + await printWalletInfo(keypair, client, chain, options); + + if (!chain.contracts.test) { + chain.contracts.test = {}; + } + + const relayerDiscovery = config.sui.contracts.axelar_gateway?.objects?.relayerDiscovery; + + if (!relayerDiscovery) { + throw new Error('Relayer discovery object not found'); + } + + if (prompt(`Proceed with deployment on ${chain.name}?`, options.yes)) { + return; + } + + const published = await publishPackage('test', client, keypair); + updateMoveToml('test', published.packageId); + + const singleton = published.publishTxn.objectChanges.find((change) => change.objectType === `${published.packageId}::test::Singleton`); + + const tx = new TransactionBlock(); + + tx.moveCall({ + target: `${published.packageId}::test::register_transaction`, + arguments: [tx.object(relayerDiscovery), tx.object(singleton.objectId)], + }); + + await client.signAndExecuteTransactionBlock({ + transactionBlock: tx, + signer: keypair, + options: { + showEffects: true, + showObjectChanges: true, + showContent: true, + }, + }); + + chain.contracts.test.address = published.packageId; + chain.contracts.test.objects = { singleton: singleton.objectId }; + + printInfo('Test package deployed', JSON.stringify(chain.contracts.test, null, 2)); +} + +async function mainProcessor(options, processor) { + const config = loadSuiConfig(options.env); + + await processor(config, config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('deploy-gateway').description('Deploys/publishes the Sui gateway'); + + addBaseOptions(program); + + program.addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')); + program.addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)')); + program.addOption( + new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default( + 24 * 60 * 60 * 1000, + ), + ); // 1 day (in ms) + program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} diff --git a/sui/faucet.js b/sui/faucet.js new file mode 100644 index 00000000..48dc4ae6 --- /dev/null +++ b/sui/faucet.js @@ -0,0 +1,40 @@ +'use strict'; + +const { addBaseOptions } = require('./cli-utils'); +const { requestSuiFromFaucetV0, getFaucetHost } = require('@mysten/sui.js/faucet'); +const { getWallet, printWalletInfo } = require('./sign-utils'); +const { Command } = require('commander'); +const { saveConfig, loadConfig, printInfo } = require('../evm/utils'); + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + + await printWalletInfo(keypair, client, chain, options); + + await requestSuiFromFaucetV0({ + host: getFaucetHost(chain.networkType), + recipient: keypair.toSuiAddress(), + }); + + printInfo('Funds requested'); +} + +async function mainProcessor(options, processor) { + const config = loadConfig(options.env); + await processor(config, config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('faucet').description('Query the faucet for funds.'); + + addBaseOptions(program); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} diff --git a/sui/generate-keypair.js b/sui/generate-keypair.js new file mode 100644 index 00000000..d9ae11ff --- /dev/null +++ b/sui/generate-keypair.js @@ -0,0 +1,42 @@ +'use strict'; + +const { addBaseOptions } = require('./cli-utils'); +const { generateKeypair } = require('./sign-utils'); +const { Command, Option } = require('commander'); +const { saveConfig, loadConfig, printInfo } = require('../evm/utils'); + +const { ethers } = require('hardhat'); +const { hexlify } = ethers.utils; + +async function processCommand(config, chain, options) { + const keypair = await generateKeypair(options); + + printInfo('Keypair generated'); + printInfo('Public key', hexlify(keypair.getPublicKey().toRawBytes())); + printInfo('Address', keypair.toSuiAddress()); + printInfo('Private key', keypair.getSecretKey()); +} + +async function mainProcessor(options, processor) { + const config = loadConfig(options.env); + await processor(config, config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('generate-key').description('Generate keypair.'); + + addBaseOptions(program, { ignorePrivateKey: true }); + + program.addOption( + new Option('--signatureScheme ', 'sig scheme').choices(['ed25519', 'secp256k1', 'secp256r1']).default('ed25519'), + ); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} diff --git a/sui/sign-utils.js b/sui/sign-utils.js new file mode 100644 index 00000000..975c88da --- /dev/null +++ b/sui/sign-utils.js @@ -0,0 +1,90 @@ +'use strict'; + +const { decodeSuiPrivateKey } = require('@mysten/sui.js/cryptography'); +const { Ed25519Keypair } = require('@mysten/sui.js/keypairs/ed25519'); +const { Secp256k1Keypair } = require('@mysten/sui.js/keypairs/secp256k1'); +const { Secp256r1Keypair } = require('@mysten/sui.js/keypairs/secp256r1'); +const { printInfo } = require('../evm/utils'); +const { SuiClient, getFullnodeUrl } = require('@mysten/sui.js/client'); + +function getWallet(chain, options) { + let keypair; + let scheme; + + switch (options.signatureScheme) { + case 'ed25519': { + scheme = Ed25519Keypair; + break; + } + + case 'secp256k1': { + scheme = Secp256k1Keypair; + break; + } + + case 'secp256r1': { + scheme = Secp256r1Keypair; + break; + } + + default: { + throw new Error(`Unsupported signature scheme: ${options.signatureScheme}`); + } + } + + switch (options.privateKeyType) { + case 'bech32': { + const decodedKey = decodeSuiPrivateKey(options.privateKey); + const secretKey = decodedKey.secretKey; + keypair = scheme.fromSecretKey(secretKey); + break; + } + + case 'mnemonic': { + keypair = scheme.deriveKeypair(options.privateKey); + break; + } + + case 'hex': { + const privKey = Buffer.from(options.privateKey, 'hex'); + keypair = scheme.fromSecretKey(privKey); + break; + } + + default: { + throw new Error(`Unsupported key type: ${options.privateKeyType}`); + } + } + + const client = new SuiClient({ url: getFullnodeUrl(chain.networkType) }); + + return [keypair, client]; +} + +async function printWalletInfo(keypair, client, chain, options) { + printInfo('Wallet address', keypair.toSuiAddress()); + + const coins = await client.getBalance({ owner: keypair.toSuiAddress() }); + printInfo('Wallet balance', `${coins.totalBalance / 1e9} ${chain.tokenSymbol || coins.coinType}`); +} + +async function generateKeypair(options) { + switch (options.signatureScheme) { + case 'ed25519': + return Ed25519Keypair.generate(); + case 'secp256k1': + return Secp256k1Keypair.generate(); + case 'secp256r1': + return Secp256r1Keypair.generate(); + + default: { + throw new Error(`Unsupported scheme: ${options.signatureScheme}`); + } + } +} + +module.exports = { + getWallet, + printWalletInfo, + generateKeypair, +}; diff --git a/sui/utils.js b/sui/utils.js new file mode 100644 index 00000000..5b62fe0a --- /dev/null +++ b/sui/utils.js @@ -0,0 +1,50 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { loadConfig } = require('../evm/utils'); +const { + BigNumber, + utils: { arrayify }, +} = ethers; +const { CosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); + +const getAmplifierSigners = async (config, chain) => { + const client = await CosmWasmClient.connect(config.axelar.rpc); + const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_worker_set'); + const signers = Object.values(workerSet.signers); + + const weightedSigners = signers + .map((signer) => ({ + pubkey: arrayify(`0x${signer.pub_key.ecdsa}`), + weight: Number(signer.weight), + })) + .sort((a, b) => a.pubkey.localeCompare(b.pubkey)); + + return { + signers: weightedSigners, + threshold: Number(workerSet.threshold), + nonce: ethers.utils.hexZeroPad(BigNumber.from(workerSet.created_at).toHexString(), 32), + }; +}; + +const loadSuiConfig = (env) => { + const config = loadConfig(env); + const suiEnv = env === 'local' ? 'localnet' : env; + + if (!config.sui) { + config.sui = { + networkType: suiEnv, + name: 'Sui', + contracts: { + axelar_gateway: {}, + }, + }; + } + + return config; +}; + +module.exports = { + getAmplifierSigners, + loadSuiConfig, +}; From 1c648389c535ac47642f63bd28bdd220cb0d3506 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Fri, 31 May 2024 04:43:38 -0400 Subject: [PATCH 65/85] fix(sui): improve sui gateway deployment params (#248) --- sui/README.md | 20 ++++++++++++++++++-- sui/deploy-gateway.js | 21 +++++++++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/sui/README.md b/sui/README.md index 6991dea5..bf6fb609 100644 --- a/sui/README.md +++ b/sui/README.md @@ -48,10 +48,26 @@ Use the `-e local` (or `ENV=local` in the `.env` config) flag with scripts to ru node sui/faucet.js ``` -2. Deploy the gateway: +2. Deploy the gateway package: + +- By querying the signer set from the Amplifier contract (this only works if Amplifier contracts have been setup): + +```bash +node sui/deploy-gateway.js +``` + +Use `--help` flag to see other setup params that can be overridden. + +- For testing convenience, you can use the secp256k1 wallet as the signer set for the gateway. + +```bash +node sui/deploy-gateway.js --signers wallet +``` + +- You can also provide a JSON object with a full signer set: ```bash -node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": ""}' +node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' ``` 3. Deploy the test GMP package: diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index 53a82517..02c61739 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -13,8 +13,21 @@ const { addBaseOptions } = require('./cli-utils'); const { getWallet, printWalletInfo } = require('./sign-utils'); const { getAmplifierSigners, loadSuiConfig } = require('./utils'); -async function getSigners(config, chain, options) { - if (options.signers) { +async function getSigners(keypair, config, chain, options) { + if (options.signers === 'wallet') { + const pubkey = keypair.getPublicKey().toRawBytes(); + printInfo('Using wallet pubkey as the signer for the gateway', hexlify(pubkey)); + + if (keypair.getKeyScheme() !== 'Secp256k1') { + throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); + } + + return { + signers: [{ pubkey, weight: 1 }], + threshold: 1, + nonce: HashZero, + }; + } else if (options.signers) { printInfo('Using provided signers', options.signers); const signers = JSON.parse(options.signers); @@ -23,7 +36,7 @@ async function getSigners(config, chain, options) { return { pubkey: arrayify(pubkey), weight }; }), threshold: signers.threshold, - nonce: signers.nonce || HashZero, + nonce: arrayify(signers.nonce) || HashZero, }; } @@ -41,7 +54,7 @@ async function processCommand(config, chain, options) { const contractConfig = chain.contracts.axelar_gateway; const { minimumRotationDelay, domainSeparator } = options; - const signers = await getSigners(config, chain, options); + const signers = await getSigners(keypair, config, chain, options); const operator = options.operator || keypair.toSuiAddress(); if (prompt(`Proceed with deployment on ${chain.name}?`, options.yes)) { From 715ccf935eae8fc76b56e351231429ac85479ff4 Mon Sep 17 00:00:00 2001 From: npty <78221556+npty@users.noreply.github.com> Date: Fri, 31 May 2024 16:46:21 +0700 Subject: [PATCH 66/85] chore: improve sui readme (#247) * chore: fix local.json path * chore: add the default sui rpc node * chore: add troubleshooting step --- sui/README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sui/README.md b/sui/README.md index bf6fb609..1885f93b 100644 --- a/sui/README.md +++ b/sui/README.md @@ -21,9 +21,9 @@ sui keytool export --key-identity wallet node sui/generate-keypair.js ``` -Set `PRIVATE_KEY=[suiprivkey...]` in your `.env` file. Other private key types are supported via `--privateKeyType` and `--signatureScheme` flags. +Set `PRIVATE_KEY="suiprivkey..."` in your `.env` file. Other private key types are supported via `--privateKeyType` and `--signatureScheme` flags. -If you want to run against a local Sui network, then create a `local.json` config containing: +If you want to run against a local Sui network, then create a `axelar-chains-config/info/local.json` config containing: ```bash { @@ -32,7 +32,7 @@ If you want to run against a local Sui network, then create a `local.json` confi "axelarId": "sui", "networkType": "localnet", "tokenSymbol": "SUI", - "rpc": "[local rpc]", + "rpc": "http://127.0.0.1:9000", "contracts": {} } } @@ -75,3 +75,9 @@ node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x0201 ```bash node sui/deploy-test.js ``` + +## Troubleshooting + +1. Move build error during the deployment step + +Delete the `node_modules` folder and `package-lock.json` file and then run `npm install` again. From 791117de0d05a1b41cd176851e2e11ae4be91005 Mon Sep 17 00:00:00 2001 From: re1ro Date: Fri, 31 May 2024 17:59:53 -0400 Subject: [PATCH 67/85] ci(GasService): remove gas info updates (#249) * ci(GasService): remove gas info updates * ci(GasService): remove only cron from gas info updates --- .github/workflows/update-gas-info.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/update-gas-info.yaml b/.github/workflows/update-gas-info.yaml index 3ceaa167..14317cbc 100644 --- a/.github/workflows/update-gas-info.yaml +++ b/.github/workflows/update-gas-info.yaml @@ -13,9 +13,6 @@ on: - mainnet - stagenet - schedule: - - cron: '0 */12 * * *' - jobs: update-gas: name: 'Update Gas Info' From 151537c2b634d9b5c3690ed57902070fb24ceff5 Mon Sep 17 00:00:00 2001 From: Ilya Lukyanov Date: Sat, 1 Jun 2024 13:18:31 +1200 Subject: [PATCH 68/85] fix(GasService): request and response of relay API (#246) * fix(GasService): request and response of relay API * support ignoreError flag * Update evm/utils.js Co-authored-by: Milap Sheth --------- Co-authored-by: Milap Sheth --- evm/operators.js | 1 + evm/utils.js | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/evm/operators.js b/evm/operators.js index a7c32e34..da6f320d 100644 --- a/evm/operators.js +++ b/evm/operators.js @@ -323,6 +323,7 @@ if (require.main === module) { // options for updateGasInfo program.addOption(new Option('--chains ', 'Chain names')); program.addOption(new Option('--relayerAPI ', 'Relay the tx through an external relayer API').env('RELAYER_API')); + program.addOption(new Option('--ignoreError', 'Ignore errors and proceed to next chain')); program.action((options) => { main(options); diff --git a/evm/utils.js b/evm/utils.js index 6d4cce35..d41b63ed 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1201,11 +1201,16 @@ async function relayTransaction(options, chain, contract, method, params, native const result = await httpPost(options.relayerAPI, { chain: chain.axelarId, to: contract.address, - call_data: contract.interface.encodeFunctionData(method, params), - value: nativeValue, + calldata: contract.interface.encodeFunctionData(method, params), + value: nativeValue.toString(), }); - printInfo('Relay ID', result.relay_id); + if (!result.error) { + printInfo('Relay ID', result.relayId); + } else { + throw new Error(`Relay Error: ${result.error}`); + } + return; } From 9c1a930b96551360e229cb5767c37a5c9060173e Mon Sep 17 00:00:00 2001 From: eguajardo Date: Fri, 31 May 2024 21:16:44 -0600 Subject: [PATCH 69/85] feat(amplifier): update devnet-amplifier.json and devnet-verifiers.json to match migration to v4 (#245) * update geteways * updated codeIds * remove outdated info * use testnet contract factories --------- Co-authored-by: Milap Sheth --- .../info/devnet-amplifier.json | 234 ++++++------------ .../info/devnet-verifiers.json | 80 +++--- 2 files changed, 130 insertions(+), 184 deletions(-) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index 378dbd48..f15365db 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -13,19 +13,19 @@ }, "contracts": { "AxelarGateway": { + "address": "0x146cbBBD1D03DA0619baa96Ed1d145A549959499", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "implementation": "0x25C97DC353fF1dBBD04d8096AC6C87B5244D856d", + "implementationCodehash": "0xfd4a15c7e849df6fd0feb9a9bfd642a6c4311f53295101b0d3e1207dc206521c", + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x598ba04d225cec385d1ce3cf3c9a076af803aa5c614bc0e0d176f04ac8d28f55", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "startingKeyIDs": [ - null - ], - "address": "0xeA3D3979ffa953FB209FcF6D13EA49AFC0A05604", - "implementation": "0xfF99ED85b998bD7e2DD973cEFCb738c0C8F560EA", - "implementationCodehash": "0x57eb84f26ff5fab154371ae86f74219e19497e6c2c70ba1dc4116a8dc85c4eaf", - "authModule": "0x8d0Fbce6554ef89BBB2b200389C5e7B0Ef8Aa54b", - "tokenDeployer": "0xBf428fb6B2831EC30d7c098A3c3dC4d6972686d9", - "deploymentMethod": "create" + } }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -38,35 +38,16 @@ "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, - "Multisig": { - "signers": [ - "0x7974A6e10B93e3508affB174c4F047f9965A4F85", - "0x987DA658eee3cABd227DA3280d722AB9b36F7323", - "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", - "0xE50E91E947ad52273C6032eb8540d439624dEd8F", - "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", - "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", - "0x0782681B18b5B62670161F60f86b0BA9545abb1A", - "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" - ], - "threshold": 4, - "address": "0x8b04c2d794Fe7c00328B3Cca2693dF2ed0084Aa2", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig" - }, "ConstAddressDeployer": { - "address": "0x93C65E1f545c8abb1f9Bad30e5fbdB2d1396EaFb", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0x7c79fcd2237f58Eeed5Bdf7c26C5726d86C895f0", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -84,7 +65,7 @@ "id": "fantom", "axelarId": "fantom", "chainId": 4002, - "rpc": "https://fantom.api.onfinality.io/public", + "rpc": "https://rpc.testnet.fantom.network", "tokenSymbol": "ETH", "confirmations": 1, "gasOptions": { @@ -92,19 +73,19 @@ }, "contracts": { "AxelarGateway": { + "address": "0xFe34259F1EEc1Ea702A175bC5C2a4a29df6cfb43", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "implementation": "0x37e6F01C4BA68BA121dA57CfB0d54B822006010d", + "implementationCodehash": "0x6b7c920082c38c45886db0d7e1826ee424079993209d249b1ec714622f01e23f", + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x9799ef60ed6cac8cd489e8932dcac928ed47c499a9cda8d128dcf1e934a196b4", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "startingKeyIDs": [ - null - ], - "address": "0xBC647142c98b6a886a3581cccb0d9E6148Ed76B9", - "implementation": "0xb6EaD9BBB2c8581128F01b57719Ec130a36922aB", - "implementationCodehash": "0x3c3d115c7f9dbc903af3a1dd327af83842396dfe797f50e7acc38e1b02a82c3d", - "authModule": "0x40fEA06609ce54A1F0Ca829c980D3633f73b1869", - "tokenDeployer": "0xC0be3306fE72D59f8B56Ad587a3751e0be406D8C", - "deploymentMethod": "create" + } }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -117,35 +98,16 @@ "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, - "Multisig": { - "signers": [ - "0x7974A6e10B93e3508affB174c4F047f9965A4F85", - "0x987DA658eee3cABd227DA3280d722AB9b36F7323", - "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", - "0xE50E91E947ad52273C6032eb8540d439624dEd8F", - "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", - "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", - "0x0782681B18b5B62670161F60f86b0BA9545abb1A", - "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" - ], - "threshold": 4, - "address": "0xDF3f7D718A7Be68C34f5c566BE47cB419157BFb9", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig" - }, "ConstAddressDeployer": { - "address": "0xeCEB890FAf55ff7314DA6717F9a5Cf5EAB479FD5", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0x27682c1b1F5A8dEAdd052331D1E977c711D0b862", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -171,19 +133,21 @@ }, "contracts": { "AxelarGateway": { - "gasOptions": { - "gasLimit": 5000000 - }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "startingKeyIDs": [ - null - ], - "address": "0xADb2C397B2496fB2Ef9d3BFAad322c888A3E182d", - "implementation": "0x3f7235dFD12Ef2fCa128078937C7503421EAbC7E", - "implementationCodehash": "0x80b4ebdab0c0d249caed3f39e5ce7dc0d28b0d63c30e705fa8ab8029c103025a", + "address": "0xeE9E463Fd8bE9AF266e1B143C27F7D42648f4006", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "implementation": "0x957E7eC2da3Cd93Fd49E1ac7DF0499a3EC9814a1", + "implementationCodehash": "0x325acd254c3c32b5da3a8f4379dfe6a3dccef30f6697bbc53e2cbef3fd5bd3c1", "authModule": "0x3bBF2f935177dc06356dCbD83365788C0F21a865", "tokenDeployer": "0x17310d0967626063af4C81cc7d0A9C631d9546c0", - "deploymentMethod": "create" + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x5034999c74b28c4db74dca67073b78629cc0ff7bf005f2f79cd8caf7d9588406", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-amplifier", + "gasOptions": { + "gasLimit": 5000000 + } }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -196,35 +160,16 @@ "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, - "Multisig": { - "signers": [ - "0x7974A6e10B93e3508affB174c4F047f9965A4F85", - "0x987DA658eee3cABd227DA3280d722AB9b36F7323", - "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", - "0xE50E91E947ad52273C6032eb8540d439624dEd8F", - "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", - "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", - "0x0782681B18b5B62670161F60f86b0BA9545abb1A", - "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" - ], - "threshold": 4, - "address": "0x0cE4E66DB54d5Aeb2fC2e5605b53590009e2F525", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig" - }, "ConstAddressDeployer": { - "address": "0xF5668BbEFBca143f7B31A74708C5E11fe00Fd039", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0xb2cdFD9286018e592aBc1637cB0bb4fE5BFd4Cf6", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -250,19 +195,19 @@ }, "contracts": { "AxelarGateway": { + "address": "0x4a6991003d59c55710FD4D9ecE71e93883961510", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "implementation": "0xC7547fb5bc2Fde4Aec37De85DecA111FF3E0169b", + "implementationCodehash": "0x88ada364cc70966a39887ae006d790a7af331377a0f073472f4efdf2cc60e717", + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x6d61fa7631ca30c4a3c6e731891c867f9eddf00e909ef07a76e0790994dcd592", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "startingKeyIDs": [ - null - ], - "address": "0x774299C3C101a5934B31264DC695a7D472Cf0B6B", - "implementation": "0xF093D641d5D3c79b45F351C9d1C4062Bb474Ae70", - "implementationCodehash": "0xe27d102637cb5caf15ff440e968f8bf622eb550f4c0b00480a2cb39c418007b1", - "authModule": "0xFB427588ea4107A59bC6dEb2Fa342d5519800f26", - "tokenDeployer": "0xEe0c0Cb87ee21e5f3CC5ed23cbF374F913369Ab7", - "deploymentMethod": "create" + } }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -275,35 +220,16 @@ "predeployCodehash": "0xe2de43b29f2387b6f3575a1b50d566908fc00e03a8d88ad6be74b674a70874d2", "salt": "InterchainGovernance" }, - "Multisig": { - "signers": [ - "0x7974A6e10B93e3508affB174c4F047f9965A4F85", - "0x987DA658eee3cABd227DA3280d722AB9b36F7323", - "0xD87974f74521fd7C2EaB6f947ada42Fe67B643C9", - "0xE50E91E947ad52273C6032eb8540d439624dEd8F", - "0x0722387C9c9a6C0Fe87e8F4991C500bB5cEB3136", - "0x19Fe27B335c2c0a75A46888c1dfC0516C7980396", - "0x0782681B18b5B62670161F60f86b0BA9545abb1A", - "0x1Eb42D9FEa9d836A1aa5e3b9CfcDC028717bCdE0" - ], - "threshold": 4, - "address": "0x78F3EF3cD7C680C90A5104237B46474b078f530a", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", - "deploymentMethod": "create3", - "codehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "predeployCodehash": "0x912095d5076ee40a9dd49c0f9d61d61334c47a78c7512852791652baef26c296", - "salt": "Multisig" - }, "ConstAddressDeployer": { - "address": "0xd55525A1De3270C28F021b7d7843F826a0fdd21B", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0xC72A500AF130367B7F31eC885C3Cf2Fae41938cD", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -321,24 +247,24 @@ "contracts": { "ServiceRegistry": { "governanceAccount": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", - "codeId": 117, + "codeId": 223, "address": "axelar1c9fkszt5lq34vvvlat3fxj6yv7ejtqapz04e97vtc9m5z9cwnamq8zjlhz" }, "Router": { "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", - "codeId": 115, + "codeId": 222, "address": "axelar14jjdxqhuxk803e9pq64w4fgf385y86xxhkpzswe9crmu6vxycezst0zq8y" }, "Multisig": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "blockExpiry": 10, - "codeId": 120, + "codeId": 218, "address": "axelar19jxy26z0qnnspa45y5nru0l5rmy9d637z5km2ndjxthfxf5qaswst9290r" }, "Coordinator": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", - "codeId": 119, + "codeId": 216, "address": "axelar1m2498n4h2tskcsmssjnzswl5e6eflmqnh487ds47yxyu6y5h4zuqr9zk4g" }, "Rewards": { @@ -352,12 +278,12 @@ "10" ] }, - "codeId": 118, + "codeId": 221, "address": "axelar1vaj9sfzc3z0gpel90wu4ljutncutv0wuhvvwfsh30rqxq422z89qnd989l" }, "NexusGateway": { "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", - "codeId": 116, + "codeId": 220, "address": "axelar1jjjr3tqs0nzjv3y9fg4xvzkww50jq06a9qp77r8kzmqyla97556sxx7702" }, "VotingVerifier": { @@ -374,7 +300,7 @@ "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1ty7mx0cllgz8xuvhn2j7e3qy8999ssgmjtktyqetl335em0g88lq6rjhl2" }, - "codeId": 121, + "codeId": 224, "fantom": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", @@ -419,7 +345,7 @@ "avalanche": { "address": "axelar16hdkkxjyapw5zyf2wxs42854278tpwgqkz87kst8wamvr4pcy4pqrpn96s" }, - "codeId": 122, + "codeId": 217, "fantom": { "address": "axelar1pvcj8m7gp30tl26kt7n2ncg9g7xnt86wlqatlvwehh8s2ve2anmq6ea96w" }, @@ -445,7 +371,7 @@ "keyType": "ecdsa", "address": "axelar1g6520uhs8u37el40wqngf60z06mjgk6z7nezytd2mxrmh7yesnmsyc0zjw" }, - "codeId": 123, + "codeId": 219, "fantom": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index 80dc6823..bb1a0621 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -16,16 +16,21 @@ "gasOptions": { "gasLimit": 5000000 }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", "startingKeyIDs": [ null ], - "address": "0x3bcBd03B123d817f98bccBf45B38631739496E94", - "implementation": "0x0cAF30063a94382bd55AAbc834bB23129D030012", - "implementationCodehash": "0xf39269736d1c878058c823265bbbafe6cb28827ae30b3230a49bc12b14a11439", + "address": "0x8a2DB90356402a00dbfFeeF2629F590B4929Df5F", + "implementation": "0x6d7963f2d9434ecC04ff75AADD95a139EFa25232", + "implementationCodehash": "0xd1bce68cd5cf6762f20829ac314d9652a95642f988296fc62ba66af84bfd558f", "authModule": "0x7fF4F27f1C476e24c555556C5D47bd7D29151e5d", "tokenDeployer": "0xDa41938e8bbE78517a15e3A6ab897fABb23f3d35", - "deploymentMethod": "create" + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x333e4afab949ca00f9b5daa5a021f942b614c91cb5ced70ded38cd89da2b55ef", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-verifiers" }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -84,7 +89,7 @@ "id": "fantom", "axelarId": "fantom", "chainId": 4002, - "rpc": "https://fantom.api.onfinality.io/public", + "rpc": "https://rpc.testnet.fantom.network", "tokenSymbol": "ETH", "confirmations": 1, "gasOptions": { @@ -95,16 +100,21 @@ "gasOptions": { "gasLimit": 5000000 }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", "startingKeyIDs": [ null ], - "address": "0xE5Cd4e66082352b293Ae8e8B0Ef256b26B6A9658", - "implementation": "0x90135db9eCE092818948c50cF5b266ef64D49e85", - "implementationCodehash": "0x1408bf6cf8720e377efdc26389859c8d0bf7e5d546e680fd58044c8365b1c15a", + "address": "0x7970e55CabBee82cA951EdE2B288665f080823b6", + "implementation": "0x77e04bBdE02a37F7d626Df532d225D0C7198c8B5", + "implementationCodehash": "0xf5b21542bff700ece279b93c934ce7831363a0749fbb2126cd0c2bf5ea10d542", "authModule": "0xDe3dE140a4b1621B6b04673c5CC4178daad01256", "tokenDeployer": "0xB0d15dBCa48449999c53AC330F84fdEB0Df974bB", - "deploymentMethod": "create" + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x5c23b70b5d42a8e1368b5837e80a18c7e19c0e7d60b43c1e91d01225fd786344", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-verifiers" }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -174,16 +184,21 @@ "gasOptions": { "gasLimit": 5000000 }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", "startingKeyIDs": [ null ], - "address": "0xFef54D5C6648aB29C2B0D13CA6fadc46B811fD6D", - "implementation": "0xe8b3DeDa0804387f2A1F41Ed910cc5bF0412A84C", - "implementationCodehash": "0xae93179b77858c665289631ac7bb55f00eefe0915bde2b67fb3e86fc32839fbb", + "address": "0x2A8465a312ebBa54D774972f01D64574a5acFC63", + "implementation": "0xEc37bb3AeC26639F3510414fF30A000f2f4F7922", + "implementationCodehash": "0x71118f24d4e1a15a18879f340c8e583e8314dcd3de920e43b02a2cff0fdf30e7", "authModule": "0x2c24A8E6Dfb973d9C5D9309519C62065e6a75651", "tokenDeployer": "0xF2eF04A73Ef579de638b5658072BEB676530C5F2", - "deploymentMethod": "create" + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0x8c7bcafb223d3c1d45e52d64b1c8d262601cb5e263714b2b5024c4bdfb917158", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-verifiers" }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -253,16 +268,21 @@ "gasOptions": { "gasLimit": 5000000 }, - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "deployer": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", "startingKeyIDs": [ null ], - "address": "0x4e6d2B261a28066db189D02cDCfaF092d8e5003a", - "implementation": "0x8A109C9d0Af3d8755b7d3ca4E38f4a0f2F811363", - "implementationCodehash": "0xd5955d12167011f693b3c36705be2dc0d20a57dc7465671badebf06b3bf4b736", + "address": "0x88E1790FF0F03F5e35fcE8Fbe31b9df9CB850718", + "implementation": "0x30c5F5df4465cf98096557F3E8ce1411723BD663", + "implementationCodehash": "0xfa7687cdbc2be6ed9bb328af1b8336ace04132b717a63144e4942f0ff5193cec", "authModule": "0x626DE43fc27396deE25f81343d7f20863179F5dE", "tokenDeployer": "0x032ee8934e4f50CBc58f5F84FA487dfD46401618", - "deploymentMethod": "create" + "deploymentMethod": "create3", + "operator": "0xba76c6980428A0b10CFC5d8ccb61949677A61233", + "previousSignersRetention": 15, + "domainSeparator": "0xca4397f116cb317164af5decdf823ef51285f6b02c245310391489e0d97216fd", + "minimumRotationDelay": 300, + "salt": "AxelarAmplifierGateway devnet-verifiers" }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -321,24 +341,24 @@ "contracts": { "ServiceRegistry": { "governanceAccount": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", - "codeId": 11, + "codeId": 28, "address": "axelar1qk00h5atutpsv900x202pxx42npjr9thg58dnqpa72f2p7m2luas9x8txw" }, "Router": { "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", - "codeId": 9, + "codeId": 27, "address": "axelar1q3g7fdqfpftqfpuakwn7x037k80wv35jj9ged7v5e798pds7hnasgj6azz" }, "Multisig": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "blockExpiry": 10, - "codeId": 14, + "codeId": 23, "address": "axelar15nczwuqh0zcu6syeqsc4td6dphql7n2p7cgkl9raz97z5s3zdjrsc8we9y" }, "Coordinator": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", - "codeId": 13, + "codeId": 21, "address": "axelar12wrtrzqt7atsen2wsl9k5hu82jsj6739h7pck20gtdd24mqyxv6q43lyh7" }, "Rewards": { @@ -352,12 +372,12 @@ "10" ] }, - "codeId": 12, + "codeId": 26, "address": "axelar1guczj53xxl4347adagh23eelyhnxvugw2nqq0q0dr6kws7q35jyqqnan33" }, "NexusGateway": { "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", - "codeId": 10, + "codeId": 25, "address": "axelar1e77ukfqk3yjjpscurp0la3ae3ssafw5zmvxfqsvljh0duectfcnqzxc86l" }, "VotingVerifier": { @@ -374,7 +394,7 @@ "msgIdFormat": "hex_tx_hash_and_event_index", "address": "axelar1elaymnd2epmfr498h2x9p2nezc4eklv95uv92u9csfs8wl75w7yqdc0h67" }, - "codeId": 18, + "codeId": 29, "fantom": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", @@ -419,7 +439,7 @@ "avalanche": { "address": "axelar1vnfn0e4vnn58ydpm05wqcc9zp8t5ztwd5rw5f895lykqaezmuccqujmwl2" }, - "codeId": 19, + "codeId": 22, "fantom": { "address": "axelar12xk7d7lksh6z94vvt4qqur765trqdcn7w86mfak62qjz63zvmhvstaswtt" }, @@ -445,7 +465,7 @@ "keyType": "ecdsa", "address": "axelar1qt0gkcrvcpv765k8ec4tl2svvg6hd3e3td8pvg2fsncrt3dzjefswsq3w2" }, - "codeId": 20, + "codeId": 24, "fantom": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "adminAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", From 177def3e2a24ffe0281dea57ad090237eee6d0a1 Mon Sep 17 00:00:00 2001 From: Blockchain Guy Date: Sat, 1 Jun 2024 09:13:01 +0530 Subject: [PATCH 70/85] feat: add script to check for finality of a tx (#244) * feat: add script to check for finality of a tx * fix: option for txHash * refactor: resolve PR comments * refactor: add delay in between finalized block requests * refactor: address PR comments Co-authored-by: Milap Sheth --------- Co-authored-by: Milap Sheth --- evm/check-finality.js | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 evm/check-finality.js diff --git a/evm/check-finality.js b/evm/check-finality.js new file mode 100644 index 00000000..8174199d --- /dev/null +++ b/evm/check-finality.js @@ -0,0 +1,55 @@ +'use strict'; + +const { ethers } = require('hardhat'); +const { + providers: { JsonRpcProvider }, +} = ethers; +const { Command, Option } = require('commander'); +const { printInfo, mainProcessor, isKeccak256Hash, sleep } = require('./utils'); +const { addBaseOptions } = require('./cli-utils'); + +async function processCommand(_config, chain, options) { + const txHash = options.txHash; + + if (!isKeccak256Hash(txHash)) { + throw new Error(`Invalid tx format: ${txHash}`); + } + + const rpc = chain.rpc; + const provider = new JsonRpcProvider(rpc); + const tx = await provider.getTransaction(txHash); + const txBlock = tx.blockNumber; + + while (true) { + const finalizedBlock = await provider.getBlock('finalized'); + + if (finalizedBlock.number >= txBlock) { + printInfo('Latest finalized block', finalizedBlock.number); + printInfo('Block for tx', txBlock); + printInfo('Timestamp for finalized block', Date.now()); + break; + } + + await sleep(1000); + } +} + +async function main(options) { + await mainProcessor(options, processCommand); +} + +if (require.main === module) { + const program = new Command(); + + program.name('check-finality').description('Script to check when is finality achieved for a tx'); + + addBaseOptions(program); + + program.addOption(new Option('-t, --txHash ', 'tx hash to check for finality').makeOptionMandatory(true)); + + program.action((options) => { + main(options); + }); + + program.parse(); +} From 694225bc5ce3a7ac588263b8be4a7ff03931c45d Mon Sep 17 00:00:00 2001 From: eguajardo Date: Mon, 3 Jun 2024 14:35:14 -0600 Subject: [PATCH 71/85] fix(amplifier): salt derivation and chain.axelarId (#252) * update config fetching to use axelarId * add default salt derivation * removed chain id from salt derivation --- evm/deploy-amplifier-gateway.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index 36cba929..08178aee 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -82,7 +82,7 @@ async function getDomainSeparator(config, chain, options) { const { Router: { address: routerAddress }, } = contracts; - const domainSeparator = hexlify((await getContractConfig(config, chain.name)).domain_separator); + const domainSeparator = hexlify((await getContractConfig(config, chain.axelarId)).domain_separator); const expectedDomainSeparator = calculateDomainSeparator(axelarId, routerAddress, chainId); if (domainSeparator !== expectedDomainSeparator) { @@ -184,7 +184,7 @@ async function deploy(config, chain, options) { contractConfig.deployer = wallet.address; const domainSeparator = await getDomainSeparator(config, chain, options); const minimumRotationDelay = Number(options.minimumRotationDelay); - const salt = options.salt || ''; + const salt = options.salt || 'AxelarAmplifierGateway'; printInfo(`Deploying gateway implementation contract`); printInfo('Gateway Implementation args', `${options.previousSignersRetention}, ${domainSeparator}, ${minimumRotationDelay}`); From bdec3075ff3a9bce1534c3420eff0e1bea1b9182 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Mon, 3 Jun 2024 22:02:08 +0100 Subject: [PATCH 72/85] chore(info): add `chainId` field to chain config files (#251) --- axelar-chains-config/info/devnet-amplifier.json | 1 + axelar-chains-config/info/devnet-verifiers.json | 1 + axelar-chains-config/info/mainnet.json | 1 + axelar-chains-config/info/stagenet.json | 1 + axelar-chains-config/info/testnet.json | 1 + 5 files changed, 5 insertions(+) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index f15365db..83fc408b 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -418,6 +418,7 @@ }, "id": "Axelarnet", "axelarId": "Axelarnet", + "chainId": "devnet-amplifier", "rpc": "http://devnet-amplifier.axelar.dev:26657", "lcd": "http://devnet-amplifier.axelar.dev:1317", "grpc": "devnet-amplifier.axelar.dev:9090", diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index bb1a0621..1309f382 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -512,6 +512,7 @@ }, "id": "Axelarnet", "axelarId": "Axelarnet", + "chainId": "devnet-verifiers", "rpc": "http://devnet-verifiers.axelar.dev:26657", "lcd": "http://devnet-verifiers.axelar.dev:1317", "grpc": "devnet-verifiers.axelar.dev:9090", diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 6275c53b..54b32aab 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -2312,6 +2312,7 @@ "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", + "chainId": "axelar-dojo-1", "rpc": "https://rpc-axelar.imperator.co:443", "lcd": "https://lcd-axelar.imperator.co:443", "grpc": "grpc-axelar.imperator.co:2062", diff --git a/axelar-chains-config/info/stagenet.json b/axelar-chains-config/info/stagenet.json index 6f9c4cfd..e0555542 100644 --- a/axelar-chains-config/info/stagenet.json +++ b/axelar-chains-config/info/stagenet.json @@ -633,6 +633,7 @@ "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", + "chainId": "axelar-stagenet-1", "rpc": "", "lcd": "", "grpc": "", diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 461c143e..2ca66dce 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2042,6 +2042,7 @@ "axelar": { "id": "Axelarnet", "axelarId": "Axelarnet", + "chainId": "axelar-testnet-lisbon-3", "rpc": "https://rpc-axelar-testnet.imperator.co:443", "lcd": "https://lcd-axelar-testnet.imperator.co:443", "grpc": "grpc-axelar-testnet.imperator.co:2062", From 8c297d3a5cf2132d7b0b1f071e67dda4d55fd624 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Mon, 3 Jun 2024 23:05:09 +0100 Subject: [PATCH 73/85] fix(evm): domain separator calculation (#250) --- cosmwasm/deploy-contract.js | 20 +- evm/deploy-amplifier-gateway.js | 20 +- package-lock.json | 2045 ++++++++++++++++--------------- 3 files changed, 1111 insertions(+), 974 deletions(-) diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index a538fcae..68f0ea25 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -169,7 +169,7 @@ const makeGatewayInstantiateMsg = ({ Router: { address: routerAddress }, VotingV const makeMultisigProverInstantiateMsg = (config, chainName) => { const { - axelar: { contracts, chainId: axelarChainId, axelarId }, + axelar: { contracts, chainId: axelarChainId }, chains: { [chainName]: chainConfig }, } = config; @@ -201,7 +201,19 @@ const makeMultisigProverInstantiateMsg = (config, chainName) => { }, } = contractConfig; - const separator = domainSeparator || calculateDomainSeparator(axelarId, routerAddress, axelarChainId); + if (!isString(chainId)) { + throw new Error(`Missing or invalid axelar ID for chain ${chainName}`); + } + + if (!validateAddress(routerAddress)) { + throw new Error('Missing or invalid Router.address in axelar info'); + } + + if (!isString(axelarChainId)) { + throw new Error(`Missing or invalid chain ID`); + } + + const separator = domainSeparator || calculateDomainSeparator(chainId, routerAddress, axelarChainId); if (!validateAddress(adminAddress)) { throw new Error(`Missing or invalid MultisigProver[${chainId}].adminAddress in axelar info`); @@ -215,10 +227,6 @@ const makeMultisigProverInstantiateMsg = (config, chainName) => { throw new Error(`Missing or invalid Gateway[${chainId}].address in axelar info`); } - if (!validateAddress(routerAddress)) { - throw new Error('Missing or invalid Router.address in axelar info'); - } - if (!validateAddress(coordinatorAddress)) { throw new Error('Missing or invalid Coordinator.address in axelar info'); } diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index 08178aee..d889a922 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -28,8 +28,9 @@ const { isValidAddress, isKeccak256Hash, getContractConfig, + isString, } = require('./utils'); -const { calculateDomainSeparator } = require('../cosmwasm/utils'); +const { calculateDomainSeparator, isValidCosmosAddress } = require('../cosmwasm/utils'); const { addExtendedOptions } = require('./cli-utils'); const { storeSignedTx, signTransaction, getWallet } = require('./sign-utils.js'); @@ -77,13 +78,26 @@ async function getDomainSeparator(config, chain, options) { } const { - axelar: { contracts, chainId, axelarId }, + axelar: { contracts, chainId }, } = config; const { Router: { address: routerAddress }, } = contracts; + + if (!isString(chain.axelarId)) { + throw new Error(`missing or invalid axelar ID for chain ${chain.name}`); + } + + if (!isString(routerAddress) || !isValidCosmosAddress(routerAddress)) { + throw new Error(`missing or invalid router address`); + } + + if (!isString(chainId)) { + throw new Error(`missing or invalid chain ID`); + } + const domainSeparator = hexlify((await getContractConfig(config, chain.axelarId)).domain_separator); - const expectedDomainSeparator = calculateDomainSeparator(axelarId, routerAddress, chainId); + const expectedDomainSeparator = calculateDomainSeparator(chain.axelarId, routerAddress, chainId); if (domainSeparator !== expectedDomainSeparator) { throw new Error(`unexpected domain separator (want ${expectedDomainSeparator}, got ${domainSeparator})`); diff --git a/package-lock.json b/package-lock.json index ee4221a1..96aae04a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,7 +69,6 @@ "node_modules/@0xpolygonhermez/zkevm-commonjs": { "version": "1.0.0", "resolved": "git+ssh://git@github.com/0xpolygonhermez/zkevm-commonjs.git#34f72fe9f7a4c3c45965742476a87148c9e05c0f", - "license": "pending", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", @@ -82,15 +81,6 @@ "pg": "^8.7.1" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -104,16 +94,6 @@ "node": ">=6.0.0" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@aws-crypto/sha256-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz", @@ -137,16 +117,16 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.489.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.489.0.tgz", - "integrity": "sha512-kcDtLfKog/p0tC4gAeqJqWxAiEzfe2LRPnKamvSG2Mjbthx4R/alE2dxyIq/wW+nvRv0fqR3OD5kD1+eVfdr/w==", + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", + "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", "dev": true, "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/types/node_modules/tslib": { @@ -191,12 +171,11 @@ }, "node_modules/@axelar-network/axelar-cgp-sui": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#39ffd8becaffc0daf53ad6dbbdf20b6811fcb88f", + "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#d7f7463a2d849fb0fe87175922a26cb638e35292", "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui.js": "^0.54.1", "child_process": "^1.0.2", - "dotenv": "^16.3.1", "ethers": "^5.0.0", "fs": "^0.0.1-security", "secp256k1": "^5.0.0", @@ -206,33 +185,6 @@ "node": ">=18" } }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "engines": { - "node": ">=14.14" - } - }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", @@ -471,6 +423,17 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -487,9 +450,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -611,10 +574,23 @@ "node": ">=14" } }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "dev": true, "peer": true, "engines": { @@ -624,17 +600,46 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", - "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", "dev": true, "peer": true, "dependencies": { - "@noble/curves": "1.1.0", - "@noble/hashes": "1.3.1", - "@scure/bip32": "1.3.1", - "@scure/bip39": "1.2.1" + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" } }, "node_modules/@ethersproject/abi": { @@ -1163,6 +1168,25 @@ "hash.js": "1.1.7" } }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/@ethersproject/solidity": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", @@ -1329,9 +1353,9 @@ } }, "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, "engines": { "node": ">=14" @@ -1402,9 +1426,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -1421,20 +1445,10 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "peer": true, "engines": { "node": ">=6.0.0" @@ -1456,14 +1470,13 @@ "peer": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "peer": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@ledgerhq/cryptoassets": { @@ -1475,20 +1488,20 @@ } }, "node_modules/@ledgerhq/devices": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.0.8.tgz", - "integrity": "sha512-0j7E8DY2jeSSATc8IJk+tXDZ9u+Z7tXxB8I4TzXrfV/8A5exMh/K1IwX6Jt1zlw1wre4CT9MV4mzUs3M/TE7lg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.3.0.tgz", + "integrity": "sha512-h5Scr+yIae8yjPOViCHLdMjpqn4oC2Whrsq8LinRxe48LEGMdPqSV1yY7+3Ch827wtzNpMv+/ilKnd8rY+rTlg==", "dependencies": { - "@ledgerhq/errors": "^6.15.0", - "@ledgerhq/logs": "^6.11.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1", "semver": "^7.3.5" } }, "node_modules/@ledgerhq/errors": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.15.0.tgz", - "integrity": "sha512-6xaw5/mgoht62TnL3rXsaQYEFwpnXyNDk1AOSJksIjFHx9bHUnkyVmrnGQDj0JLzi+E7bHEgTrpCs8wpeDh9jA==" + "version": "6.16.4", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.4.tgz", + "integrity": "sha512-M57yFaLYSN+fZCX0E0zUqOmrV6eipK+s5RhijHoUNlHUqrsvUz7iRQgpd5gRgHB5VkIjav7KdaZjKiWGcHovaQ==" }, "node_modules/@ledgerhq/hw-app-eth": { "version": "6.32.2", @@ -1516,59 +1529,59 @@ } }, "node_modules/@ledgerhq/hw-transport": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.29.0.tgz", - "integrity": "sha512-WQfzxt3EnnbOmzZVYiCgSmNsqafBOFQn40awvUPY2IZviJRs23/1ANPHAo76bzPV88+Qk0+1wZlcnIanGN6fFA==", + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.6.tgz", + "integrity": "sha512-fT0Z4IywiuJuZrZE/+W0blkV5UCotDPFTYKLkKCLzYzuE6javva7D/ajRaIeR+hZ4kTmKF4EqnsmDCXwElez+w==", "dependencies": { - "@ledgerhq/devices": "^8.0.8", - "@ledgerhq/errors": "^6.15.0", - "@ledgerhq/logs": "^6.11.0", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/logs": "^6.12.0", "events": "^3.3.0" } }, "node_modules/@ledgerhq/hw-transport-mocker": { - "version": "6.27.20", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.27.20.tgz", - "integrity": "sha512-o5nGuMLs/akXUvgD1f2u1DqhiC7Ii8x3fCmdE5KExCMo3dVWYkeeV3LTUzx+bp+daJFeYNKOa9+Z7XpqIuEJtA==", + "version": "6.28.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.28.6.tgz", + "integrity": "sha512-JDO2kqMOTRCQWNZr1KVlyX1AqE6WBzHjJDS3FnSI8Z/Bj2KSc2/1H/4lW6+Ap64yLtlmOW3GchdafFmLgYAgqw==", "dependencies": { - "@ledgerhq/hw-transport": "^6.29.0", - "@ledgerhq/logs": "^6.11.0", + "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1" } }, "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.27.21", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.27.21.tgz", - "integrity": "sha512-8G3Owpa2ex+TkGQSMkKoAbMEGZ7a23g0wZUvVzalQphMqbayebMhuXxue8iPp7F9pulm7uyLxgMYptYyw5i4yQ==", + "version": "6.28.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.28.6.tgz", + "integrity": "sha512-USSTOO0zv9XtguWismP7/StnNS/s7Rz0JOGGaBhKe3Bzl7d5XPncUlmOvoNFzzY/QdasEoFs2QId1+ibJG71Vw==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/hw-transport": "^6.28.8", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.27.19", - "@ledgerhq/logs": "^6.10.1", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/hw-transport-node-hid-noevents": "^6.29.6", + "@ledgerhq/logs": "^6.12.0", "lodash": "^4.17.21", "node-hid": "^2.1.2", "usb": "2.9.0" } }, "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.27.19", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.27.19.tgz", - "integrity": "sha512-zOIB1fBiQH9ZYFzoEpNY4n1lE7bGPgRT+k85fKuLM7cxxm5Sy+TgrdxImvBz0IQUS8EvrtZCm+dVWkb2sH/6OA==", + "version": "6.29.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz", + "integrity": "sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/hw-transport": "^6.28.8", - "@ledgerhq/logs": "^6.10.1", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/logs": "^6.12.0", "node-hid": "^2.1.2" } }, "node_modules/@ledgerhq/logs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.11.0.tgz", - "integrity": "sha512-HHK9y4GGe4X7CXbRUCh7z8Mp+WggpJn1dmUjmuk1rNugESF6o8nAOnXA+BxwtRRNV3CgNJR3Wxdos4J9qV0Zsg==" + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.12.0.tgz", + "integrity": "sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA==" }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", @@ -1624,19 +1637,6 @@ "bs58": "^5.0.0" } }, - "node_modules/@mysten/bcs/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@mysten/bcs/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, "node_modules/@mysten/sui.js": { "version": "0.54.1", "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.54.1.tgz", @@ -1665,31 +1665,20 @@ "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" }, "node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", + "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", "dependencies": { - "@noble/hashes": "1.3.1" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { "node": ">= 16" }, @@ -1969,9 +1958,9 @@ } }, "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz", - "integrity": "sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz", + "integrity": "sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==", "dev": true, "peer": true, "dependencies": { @@ -2201,9 +2190,10 @@ } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", - "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", "dev": true, "peer": true, "dependencies": { @@ -2346,9 +2336,9 @@ } }, "node_modules/@openzeppelin/defender-base-client": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz", - "integrity": "sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw==", + "version": "1.54.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-base-client/-/defender-base-client-1.54.6.tgz", + "integrity": "sha512-PTef+rMxkM5VQ7sLwLKSjp2DBakYQd661ZJiSRywx+q/nIpm3B/HYGcz5wPZCA5O/QcEP6TatXXDoeMwimbcnw==", "dev": true, "dependencies": { "amazon-cognito-identity-js": "^6.0.1", @@ -2359,12 +2349,12 @@ } }, "node_modules/@openzeppelin/defender-relay-client": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/defender-relay-client/-/defender-relay-client-1.54.1.tgz", - "integrity": "sha512-v8VK0OEPfeK81EfzfQA8ieWrXPXY38EA3fXcOrBBFkFTDMJib2zno7Ust9gnyjItvd1o5MyCY1VdxEtamAwyHw==", + "version": "1.54.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/defender-relay-client/-/defender-relay-client-1.54.6.tgz", + "integrity": "sha512-eLmR8RPqkwo8TIFVLdyi0GhHZAF+5pDHR1iI2uP4YVyknUl6s5yIz+OsGCX539WA2HgJtp6ct2ufBaEQ4tIaCA==", "dev": true, "dependencies": { - "@openzeppelin/defender-base-client": "1.54.1", + "@openzeppelin/defender-base-client": "1.54.6", "amazon-cognito-identity-js": "^6.0.1", "axios": "^1.4.0", "lodash": "^4.17.19", @@ -2415,7 +2405,6 @@ "name": "@0xpolygonhermez/zkevm-commonjs", "version": "0.5.0.1", "resolved": "git+ssh://git@github.com/hermeznetwork/zkevm-commonjs.git#3ee798329f567fa19b7c4f1ffbcf3d91cf5bf273", - "license": "pending", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", @@ -2513,33 +2502,33 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@scure/base": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", - "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", + "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", - "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dependencies": { - "@noble/curves": "~1.1.0", - "@noble/hashes": "~1.3.1", - "@scure/base": "~1.1.0" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", - "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2648,15 +2637,15 @@ } }, "node_modules/@smithy/types": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", - "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", + "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", "dev": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/types/node_modules/tslib": { @@ -2681,9 +2670,9 @@ "integrity": "sha512-3gnPjAz78htgqsNEDkEsKHKosV2BF2iZkoHCNxpmZwUxiPsw+2VaXMed8RRMe0rGk3d5GZe7RrSba8zV80J3Ag==" }, "node_modules/@stellar/stellar-base": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-11.1.0.tgz", - "integrity": "sha512-nMg7QSpFqCZFq3Je/lG12+DY18y01QHRNyCxvjM8i4myS9tPRMDq7zqGcd215BGbCJxenckiOW45YJjQjzdcMQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-11.0.1.tgz", + "integrity": "sha512-VQh+1KEtFjegD6spx08+lENt8tQOkQQQZoLtqExjpRXyWlqDhEe+bXMlBTYKDc5MIynHyD42RPEib27UG17trA==", "dependencies": { "@stellar/js-xdr": "^3.1.1", "base32.js": "^0.1.0", @@ -2693,7 +2682,7 @@ "tweetnacl": "^1.0.3" }, "optionalDependencies": { - "sodium-native": "^4.1.1" + "sodium-native": "^4.0.10" } }, "node_modules/@stellar/stellar-sdk": { @@ -2716,9 +2705,9 @@ "integrity": "sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==" }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "peer": true }, @@ -2796,29 +2785,29 @@ } }, "node_modules/@types/abstract-leveldown": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.4.tgz", - "integrity": "sha512-ygy0hYyHdKnAtvCGUFEFvr3YV7Y6Q4akyRkZpM3RSUMYGSr35ZGRCT9Div+la4DpRUiwYUhJ6l75JBz6EORmpg==" + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", + "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==" }, "node_modules/@types/bn.js": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.4.tgz", - "integrity": "sha512-ZtBd9L8hVtoBpPMSWfbwjC4dhQtJdlPS+e1A0Rydb7vg7bDcUwiRklPx24sMYtXcmAMST/k0Wze7JLbNU/5SkA==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/chai": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", - "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", "dev": true, "peer": true }, "node_modules/@types/chai-as-promised": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.7.tgz", - "integrity": "sha512-APucaP5rlmTRYKtRA6FE5QPP87x76ejw5t5guRJ4y5OgMnwtsvigw7HHhKZlx2MGXLeZd6R/GNZR/IqDHcbtQw==", + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, "peer": true, "dependencies": { @@ -2869,9 +2858,9 @@ "dev": true }, "node_modules/@types/level-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.1.tgz", - "integrity": "sha512-eFJZWaOUhgjSqgEsPKJZrqXS9aEDUQh/5F9saFhhkR5uEVKlYb4GSG8XyoVC7APklcQKPGDVenTointTZBGIQg==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.2.tgz", + "integrity": "sha512-gyZHbcQ2X5hNXf/9KS2qGEmgDe9EN2WDM3rJ5Ele467C0nA1sLhtmv1bZiPMDYfAYCfPWft0uQIaTvXbASSTRA==" }, "node_modules/@types/levelup": { "version": "4.3.3", @@ -2902,24 +2891,24 @@ "peer": true }, "node_modules/@types/mocha": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.3.tgz", - "integrity": "sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true, "peer": true }, "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dependencies": { "@types/node": "*" } @@ -2932,9 +2921,9 @@ "peer": true }, "node_modules/@types/qs": { - "version": "6.9.9", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", - "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true, "peer": true }, @@ -2955,17 +2944,17 @@ "dev": true }, "node_modules/@types/secp256k1": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.5.tgz", - "integrity": "sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/w3c-web-usb": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.9.tgz", - "integrity": "sha512-6EIpb9g9k/SGu59mQ6RW3tedmabtE+N3iGRa98+1CCFuhGt565wLEYKXoEVKTuNrCr2SrgfvBMN5db6hggkzKQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", + "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==", "dev": true }, "node_modules/@ungap/structured-clone": { @@ -3142,9 +3131,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -3162,9 +3151,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "peer": true, "engines": { @@ -3227,9 +3216,9 @@ } }, "node_modules/amazon-cognito-identity-js": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.7.tgz", - "integrity": "sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ==", + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz", + "integrity": "sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==", "dev": true, "dependencies": { "@aws-crypto/sha256-js": "1.2.2", @@ -3276,29 +3265,6 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -3412,28 +3378,32 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -3464,16 +3434,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3519,17 +3490,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -3606,10 +3578,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3618,28 +3593,15 @@ } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/axobject-query": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", @@ -3655,12 +3617,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, "node_modules/base32.js": { "version": "0.1.0", @@ -3712,12 +3671,15 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bindings": { @@ -3796,33 +3758,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -3830,12 +3769,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -3883,11 +3822,11 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "dependencies": { - "base-x": "^3.0.2" + "base-x": "^4.0.0" } }, "node_modules/bs58check": { @@ -3900,6 +3839,22 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/bs58check/node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58check/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -3929,14 +3884,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "engines": { - "node": ">=4" - } - }, "node_modules/buffer-xor": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", @@ -3969,14 +3916,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4042,9 +3994,9 @@ } }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -4060,16 +4012,16 @@ } }, "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, "peer": true, "dependencies": { "check-error": "^1.0.2" }, "peerDependencies": { - "chai": ">= 2.1.2 < 5" + "chai": ">= 2.1.2 < 6" } }, "node_modules/chalk": { @@ -4116,16 +4068,10 @@ "integrity": "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==" }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4138,6 +4084,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -4230,38 +4179,62 @@ "colors": "^1.1.2" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "node_modules/code-red": { @@ -4547,9 +4520,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.33.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.33.2.tgz", - "integrity": "sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -4677,6 +4650,57 @@ "node": ">=0.12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -4690,9 +4714,9 @@ "peer": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -4826,16 +4850,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -4881,9 +4908,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, "engines": { "node": ">=8" @@ -4937,20 +4964,21 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5040,50 +5068,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5092,15 +5127,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -5183,9 +5249,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -5410,9 +5476,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -5455,9 +5521,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -5476,7 +5542,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -5830,13 +5896,13 @@ } }, "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", + "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", "dev": true, "peer": true, "dependencies": { - "js-sha3": "^0.8.0" + "@noble/hashes": "^1.4.0" } }, "node_modules/ethereum-cryptography": { @@ -5861,6 +5927,20 @@ "setimmediate": "^1.0.5" } }, + "node_modules/ethereum-cryptography/node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", @@ -6074,9 +6154,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "peer": true, "dependencies": { @@ -6116,22 +6196,22 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/ffjavascript": { - "version": "0.2.62", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.62.tgz", - "integrity": "sha512-uJ7MTrdzhX/3f+hxn0XhdXbJCqYZJSBB6y2/ui4t21vKYVjyTMlU80pPXu40ir6qpqbrdzUeKdlOdJ0aFG9UNA==", + "version": "0.2.63", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.63.tgz", + "integrity": "sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A==", "dependencies": { "wasmbuilder": "0.0.16", "wasmcurves": "0.2.2", - "web-worker": "^1.2.0" + "web-worker": "1.2.0" } }, "node_modules/file-entry-cache": { @@ -6153,9 +6233,9 @@ "dev": true }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -6203,9 +6283,9 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { "flatted": "^3.2.9", @@ -6213,13 +6293,13 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/follow-redirects": { @@ -6251,18 +6331,16 @@ } }, "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "peer": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/fp-ts": { @@ -6283,9 +6361,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -6382,15 +6460,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6415,13 +6497,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -6532,6 +6615,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -6617,11 +6701,12 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6803,9 +6888,9 @@ } }, "node_modules/hardhat-gas-reporter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", - "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", "dev": true, "peer": true, "dependencies": { @@ -7075,20 +7160,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -7108,12 +7193,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7145,9 +7230,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -7281,9 +7366,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -7295,9 +7380,9 @@ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", "dev": true }, "node_modules/import-fresh": { @@ -7338,6 +7423,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -7356,12 +7442,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -7414,14 +7500,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7514,6 +7602,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -7539,13 +7642,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-generator-function": { @@ -7587,9 +7689,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -7666,12 +7768,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7708,12 +7813,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -8400,13 +8505,13 @@ "peer": true }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "peer": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8521,9 +8626,9 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -8533,13 +8638,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -8554,10 +8658,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-colors": { @@ -8578,6 +8678,88 @@ "balanced-match": "^1.0.0" } }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -8630,18 +8812,6 @@ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -8689,9 +8859,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/node-abi": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", - "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", + "version": "3.63.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz", + "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -8736,9 +8906,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -8746,9 +8916,9 @@ } }, "node_modules/node-hid": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.2.tgz", - "integrity": "sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.2.0.tgz", + "integrity": "sha512-vj48zh9j555DZzUhMc8tk/qw6xPFrDyPBH1ST1Z/hWaA/juBJw7IuSxPeOgpzNFNU36mGYj+THioRMt1xOdm/g==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8851,13 +9021,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -8869,14 +9039,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8886,26 +9057,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -8940,17 +9113,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -9026,11 +9199,6 @@ "node": ">=4" } }, - "node_modules/packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, "node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", @@ -9171,15 +9339,13 @@ } }, "node_modules/pg": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", - "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", - "dependencies": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.6.2", - "pg-pool": "^3.6.1", - "pg-protocol": "^1.6.0", + "version": "8.11.5", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.5.tgz", + "integrity": "sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -9205,9 +9371,9 @@ "optional": true }, "node_modules/pg-connection-string": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", - "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" }, "node_modules/pg-int8": { "version": "1.0.1", @@ -9218,17 +9384,17 @@ } }, "node_modules/pg-pool": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", - "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", - "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" }, "node_modules/pg-types": { "version": "2.2.0", @@ -9275,6 +9441,15 @@ "node": ">=6" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -9311,9 +9486,9 @@ } }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dev": true, "dependencies": { "detect-libc": "^2.0.0", @@ -9440,13 +9615,13 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "dev": true, "peer": true, "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -9604,14 +9779,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -9735,6 +9911,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -9831,13 +10008,13 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -9868,15 +10045,18 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9934,6 +10114,7 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "peer": true, "dependencies": { @@ -10024,19 +10205,24 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", "hasInstallScript": true, "dependencies": { "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", + "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" } }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, "node_modules/semaphore-async-await": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", @@ -10046,12 +10232,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -10059,22 +10242,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -10085,29 +10252,32 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10190,14 +10360,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10276,16 +10450,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/sodium-native": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-4.1.1.tgz", @@ -10351,6 +10515,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -10368,10 +10533,22 @@ "semver": "bin/semver" } }, + "node_modules/solc/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/solidity-coverage": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.11.tgz", - "integrity": "sha512-yy0Yk+olovBbXn0Me8BWULmmv7A69ZKkP5aTOJGOO8u61Tu2zS989erfjtFlUjDnfWtxRAVkd8BsQD704yLWHw==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", + "integrity": "sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==", "dev": true, "peer": true, "dependencies": { @@ -10385,7 +10562,7 @@ "global-modules": "^2.0.0", "globby": "^10.0.1", "jsonschema": "^1.2.4", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "mocha": "^10.2.0", "node-emoji": "^1.10.0", "pify": "^4.0.1", @@ -10624,51 +10801,29 @@ "peer": true }, "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "peer": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "peer": true, "dependencies": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10678,28 +10833,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10808,16 +10966,6 @@ "node": ">=16" } }, - "node_modules/svelte/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/svelte/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -10874,9 +11022,9 @@ } }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "peer": true, "dependencies": { @@ -10927,32 +11075,22 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", "dev": true, "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -10960,21 +11098,6 @@ "dev": true, "peer": true }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -11039,16 +11162,27 @@ "dev": true, "peer": true }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dev": true, + "peer": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=0.6.0" + "node": ">= 0.12" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" } }, "node_modules/to-regex-range": { @@ -11110,9 +11244,9 @@ } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "peer": true, "dependencies": { @@ -11164,9 +11298,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -11211,9 +11345,9 @@ "dev": true }, "node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", "dev": true, "peer": true }, @@ -11294,6 +11428,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "peer": true, "dependencies": { @@ -11345,29 +11480,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -11377,16 +11513,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -11396,14 +11533,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11427,9 +11570,9 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -11502,9 +11645,9 @@ "dev": true }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -11830,10 +11973,23 @@ "node": ">=8.0.0" } }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "dev": true, "peer": true, "engines": { @@ -11843,17 +11999,46 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", - "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", "dev": true, "peer": true, "dependencies": { - "@noble/curves": "1.1.0", - "@noble/hashes": "1.3.1", - "@scure/bip32": "1.3.1", - "@scure/bip39": "1.2.1" + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" } }, "node_modules/webidl-conversions": { @@ -11863,15 +12048,15 @@ "dev": true }, "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "dev": true, "peer": true, "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", - "es5-ext": "^0.10.50", + "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" @@ -11939,16 +12124,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11969,35 +12154,11 @@ "node": ">=8" } }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12056,29 +12217,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -12188,29 +12326,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", From a821d074d375ab601634ea37c4c735c8ddb593b8 Mon Sep 17 00:00:00 2001 From: eguajardo Date: Mon, 3 Jun 2024 21:02:39 -0600 Subject: [PATCH 74/85] feat(amplifier): update voting verifier source gateway address and rename workers (#253) --- axelar-chains-config/info/devnet-amplifier.json | 16 ++++++++-------- axelar-chains-config/info/devnet-verifiers.json | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index 83fc408b..5b460d7e 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -290,7 +290,7 @@ "avalanche": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0xeA3D3979ffa953FB209FcF6D13EA49AFC0A05604", + "sourceGatewayAddress": "0x146cbBBD1D03DA0619baa96Ed1d145A549959499", "votingThreshold": [ "6", "10" @@ -304,7 +304,7 @@ "fantom": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0xBC647142c98b6a886a3581cccb0d9E6148Ed76B9", + "sourceGatewayAddress": "0xFe34259F1EEc1Ea702A175bC5C2a4a29df6cfb43", "votingThreshold": [ "6", "10" @@ -317,7 +317,7 @@ "ethereum-sepolia": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0xADb2C397B2496fB2Ef9d3BFAad322c888A3E182d", + "sourceGatewayAddress": "0xeE9E463Fd8bE9AF266e1B143C27F7D42648f4006", "votingThreshold": [ "6", "10" @@ -330,7 +330,7 @@ "op-sepolia": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "0x774299C3C101a5934B31264DC695a7D472Cf0B6B", + "sourceGatewayAddress": "0x4a6991003d59c55710FD4D9ecE71e93883961510", "votingThreshold": [ "6", "10" @@ -366,7 +366,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar1g6520uhs8u37el40wqngf60z06mjgk6z7nezytd2mxrmh7yesnmsyc0zjw" @@ -381,7 +381,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar17fa8wruwmk2y0h32wrg5rxwespvcvz5zc2hjnczz58tnmg8enh0sunsshp" @@ -395,7 +395,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar1274ntw3prlrzzys4m0mc5xxhzu09x0r3d37886xdz65w59ey7mgs6v0j5z" @@ -409,7 +409,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar1xdmwwl44tcdpljupjkafqpznrny4t60xgyyqw7hgnvztjtvlgurqx9k960" diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index 1309f382..4cf491ea 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -384,7 +384,7 @@ "avalanche": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0x3bcBd03B123d817f98bccBf45B38631739496E94", + "sourceGatewayAddress": "0x8a2DB90356402a00dbfFeeF2629F590B4929Df5F", "votingThreshold": [ "6", "10" @@ -398,7 +398,7 @@ "fantom": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0xE5Cd4e66082352b293Ae8e8B0Ef256b26B6A9658", + "sourceGatewayAddress": "0x7970e55CabBee82cA951EdE2B288665f080823b6", "votingThreshold": [ "6", "10" @@ -411,7 +411,7 @@ "ethereum-sepolia": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0xFef54D5C6648aB29C2B0D13CA6fadc46B811fD6D", + "sourceGatewayAddress": "0x2A8465a312ebBa54D774972f01D64574a5acFC63", "votingThreshold": [ "6", "10" @@ -424,7 +424,7 @@ "op-sepolia": { "governanceAddress": "axelar19vvhwq57656hqfczhxw3r874l29jtd3uns4fsu", "serviceName": "validators", - "sourceGatewayAddress": "0x4e6d2B261a28066db189D02cDCfaF092d8e5003a", + "sourceGatewayAddress": "0x88E1790FF0F03F5e35fcE8Fbe31b9df9CB850718", "votingThreshold": [ "6", "10" @@ -460,7 +460,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar1qt0gkcrvcpv765k8ec4tl2svvg6hd3e3td8pvg2fsncrt3dzjefswsq3w2" @@ -475,7 +475,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar17q90gwd9279une6fagsxqrak87fmc3gtusv9dglwc0ezcxufrtdshr7pxt" @@ -489,7 +489,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar1xz4cya4qm2ws6nzperhvc40wdjcq4872fl6d3j2s4cytyx8j80eqenv87g" @@ -503,7 +503,7 @@ "10" ], "serviceName": "validators", - "workerSetDiffThreshold": 1, + "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", "address": "axelar17aatfk5ktm834djmyk3dsgr48mja54e8hjzcs4c8vyunlpacc7qscftcs7" From 0716e7592471855acbc58476170c6ecaa11927de Mon Sep 17 00:00:00 2001 From: eguajardo Date: Tue, 4 Jun 2024 11:22:51 -0600 Subject: [PATCH 75/85] add domain separator storage (#257) --- axelar-chains-config/info/devnet-amplifier.json | 4 ++++ axelar-chains-config/info/devnet-verifiers.json | 4 ++++ cosmwasm/deploy-contract.js | 1 + 3 files changed, 9 insertions(+) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index 5b460d7e..d6a0b5b2 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -369,6 +369,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x598ba04d225cec385d1ce3cf3c9a076af803aa5c614bc0e0d176f04ac8d28f55", "address": "axelar1g6520uhs8u37el40wqngf60z06mjgk6z7nezytd2mxrmh7yesnmsyc0zjw" }, "codeId": 219, @@ -384,6 +385,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x9799ef60ed6cac8cd489e8932dcac928ed47c499a9cda8d128dcf1e934a196b4", "address": "axelar17fa8wruwmk2y0h32wrg5rxwespvcvz5zc2hjnczz58tnmg8enh0sunsshp" }, "ethereum-sepolia": { @@ -398,6 +400,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x5034999c74b28c4db74dca67073b78629cc0ff7bf005f2f79cd8caf7d9588406", "address": "axelar1274ntw3prlrzzys4m0mc5xxhzu09x0r3d37886xdz65w59ey7mgs6v0j5z" }, "op-sepolia": { @@ -412,6 +415,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x6d61fa7631ca30c4a3c6e731891c867f9eddf00e909ef07a76e0790994dcd592", "address": "axelar1xdmwwl44tcdpljupjkafqpznrny4t60xgyyqw7hgnvztjtvlgurqx9k960" } } diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index 4cf491ea..bf90aed9 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -463,6 +463,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x333e4afab949ca00f9b5daa5a021f942b614c91cb5ced70ded38cd89da2b55ef", "address": "axelar1qt0gkcrvcpv765k8ec4tl2svvg6hd3e3td8pvg2fsncrt3dzjefswsq3w2" }, "codeId": 24, @@ -478,6 +479,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x5c23b70b5d42a8e1368b5837e80a18c7e19c0e7d60b43c1e91d01225fd786344", "address": "axelar17q90gwd9279une6fagsxqrak87fmc3gtusv9dglwc0ezcxufrtdshr7pxt" }, "ethereum-sepolia": { @@ -492,6 +494,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0x8c7bcafb223d3c1d45e52d64b1c8d262601cb5e263714b2b5024c4bdfb917158", "address": "axelar1xz4cya4qm2ws6nzperhvc40wdjcq4872fl6d3j2s4cytyx8j80eqenv87g" }, "op-sepolia": { @@ -506,6 +509,7 @@ "verifierSetDiffThreshold": 1, "encoder": "abi", "keyType": "ecdsa", + "domainSeparator": "0xca4397f116cb317164af5decdf823ef51285f6b02c245310391489e0d97216fd", "address": "axelar17aatfk5ktm834djmyk3dsgr48mja54e8hjzcs4c8vyunlpacc7qscftcs7" } } diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index 68f0ea25..1c928948 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -214,6 +214,7 @@ const makeMultisigProverInstantiateMsg = (config, chainName) => { } const separator = domainSeparator || calculateDomainSeparator(chainId, routerAddress, axelarChainId); + contractConfig[chainId].domainSeparator = separator; if (!validateAddress(adminAddress)) { throw new Error(`Missing or invalid MultisigProver[${chainId}].adminAddress in axelar info`); From 8c4067b76738c2ac7daaab865246ede55575006b Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:27:08 +0100 Subject: [PATCH 76/85] update create2/create3 contracts in devnet-verifiers (#258) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: João Sousa --- .../info/devnet-verifiers.json | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index bf90aed9..6e4a7933 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -63,15 +63,15 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xE53fBC049371843ae49800308563E22f2a95f364", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0x9ee090d9121B2d687bAa33e393104C254Fe24b54", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -147,15 +147,15 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x93f661521971AB41a003b76EcE98Fe52FD50EB25", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0xe573f3Fc5C9Ce5D145732b13e02B5e1F44eCe108", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -231,15 +231,15 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0x0d3cB37dc4589bBA912BE2fe0AAFc70358675efB", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0xF5e96a85EA4f40d2A388f55d22aCf31F78487aEA", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", @@ -315,15 +315,15 @@ "salt": "Multisig" }, "ConstAddressDeployer": { - "address": "0xBFd7DC5C977E81F16760A6C57cD443C334C18d30", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x98B2920D53612483F91F12Ed7754E51b4A77919e", + "deployer": "0xE86375704CDb8491a5Ed82D90DceCE02Ee0ac25F", "deploymentMethod": "create", - "codehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9", - "predeployCodehash": "0x4b600dff103878d67d7c18acc899e208dda034de5a557b51186739e6e1cffff9" + "codehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe", + "predeployCodehash": "0x8fda47a596dfba923270da84e0c32a2d0312f1c03389f83e16f2b5a35ed37fbe" }, "Create3Deployer": { - "address": "0x597B811dE2fb8EDc47Ef1D3Db101bC7a137EfC6c", - "deployer": "0xC5C73C3032e0577662000887D60d279B5Cc1C1AB", + "address": "0x6513Aedb4D1593BA12e50644401D976aebDc90d8", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "deploymentMethod": "create2", "codehash": "0xf0ad66defbe082df243d4d274e626f557f97579c5c9e19f33d8093d6160808b7", "predeployCodehash": "0x73fc31262c4bad113c79439fd231281201c7c7d45b50328bd86bccf37684bf92", From e04b85df0f1dc59cd8c3b5564e5c596fd5aa431e Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Wed, 5 Jun 2024 01:30:04 +0100 Subject: [PATCH 77/85] fix(sui): use rpc field when defined (#259) --- sui/faucet.js | 3 ++- sui/sign-utils.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sui/faucet.js b/sui/faucet.js index 48dc4ae6..b1da4ed3 100644 --- a/sui/faucet.js +++ b/sui/faucet.js @@ -8,11 +8,12 @@ const { saveConfig, loadConfig, printInfo } = require('../evm/utils'); async function processCommand(config, chain, options) { const [keypair, client] = getWallet(chain, options); + const host = chain.rpc || getFaucetHost(chain.networkType); await printWalletInfo(keypair, client, chain, options); await requestSuiFromFaucetV0({ - host: getFaucetHost(chain.networkType), + host, recipient: keypair.toSuiAddress(), }); diff --git a/sui/sign-utils.js b/sui/sign-utils.js index 975c88da..25832ba1 100644 --- a/sui/sign-utils.js +++ b/sui/sign-utils.js @@ -56,7 +56,8 @@ function getWallet(chain, options) { } } - const client = new SuiClient({ url: getFullnodeUrl(chain.networkType) }); + const url = chain.rpc || getFullnodeUrl(chain.networkType); + const client = new SuiClient({ url }); return [keypair, client]; } From 4a02624602b9a60401a158a6935b153825cdc929 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Tue, 4 Jun 2024 23:14:33 -0400 Subject: [PATCH 78/85] feat(evm): upgrade mainnet gas service to v6.3.1 (#254) * feat(evm): upgrade mainnet gas service to v6.3.1 * change timeout --- axelar-chains-config/info/mainnet.json | 46 ++++++++++++++------------ axelar-chains-config/info/testnet.json | 2 +- evm/deploy-upgradable.js | 4 +-- evm/utils.js | 2 +- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 54b32aab..11f157a1 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -24,7 +24,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -153,7 +153,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -275,7 +275,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -368,7 +368,7 @@ }, "gasOptions": { "gasLimit": 8000000, - "gasPriceAdjustment": 1.4 + "gasPriceAdjustment": 1.8 }, "staticGasOptions": { "gasLimit": 3000000, @@ -401,7 +401,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -526,7 +526,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -649,7 +649,7 @@ "AxelarGasService": { "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC" }, @@ -776,7 +776,7 @@ "salt": "AxelarGasService", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -901,7 +901,7 @@ "salt": "AxelarGasService", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1023,7 +1023,7 @@ "salt": "AxelarGasService", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1145,7 +1145,7 @@ "salt": "AxelarGasService", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1244,7 +1244,8 @@ "maxFeePerGas": 1000000000 }, "finality": "120", - "approxFinalityWaitTime": 60 + "approxFinalityWaitTime": 60, + "txTimeout": 180000 }, "optimism": { "name": "Optimism", @@ -1271,7 +1272,7 @@ "salt": "AxelarGasService", "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1401,7 +1402,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1527,7 +1528,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1654,7 +1655,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1750,6 +1751,9 @@ "gasLimit": 3000000, "gasPrice": 25000000000 }, + "gasOptions": { + "gasPriceAdjustment": 1.8 + }, "finality": "9000", "approxFinalityWaitTime": 60 }, @@ -1778,7 +1782,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "AxelarDepositService": { @@ -1914,7 +1918,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x4Fe2d119873790cc9e15F6cC53cae1C2eb2039dC", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "InterchainGovernance": { @@ -1997,7 +2001,7 @@ "collector": "0xfEF5c90d84a1C93804496f5e7fbf98ec0C85243C", "salt": "AxelarGasService", "address": "0x24C2b56128fF8E7bFaD578ABefB0fc7Dfa9ba358", - "implementation": "0x42E0fBA4785D23643B9F596774b3b6CAc0d40640", + "implementation": "0x5aE753f0A558617133bd1ccd98374E222e015763", "deployer": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" }, "InterchainTokenService": { @@ -2099,7 +2103,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0x42E0fBA4785D23643B9F596774b3b6CAc0d40640", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "Multisig": { @@ -2258,7 +2262,7 @@ "collector": "0x7DdB2d76b80B0AA19bDEa48EB1301182F4CeefbC", "salt": "AxelarGasService", "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", - "implementation": "0xE622B1D44F5061DB10ABa2594F1A8eb2DC1fC1d4", + "implementation": "0xcb5C784DCf8FF342625DbC53B356ed0Cbb0EBB9b", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "InterchainTokenService": { diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 2ca66dce..63ea1f9c 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -902,7 +902,7 @@ "eip1559": true, "finality": "120", "approxFinalityWaitTime": 60, - "timeout": 180000 + "txTimeout": 180000 }, "scroll": { "name": "Scroll", diff --git a/evm/deploy-upgradable.js b/evm/deploy-upgradable.js index 24707d62..dfc9801d 100644 --- a/evm/deploy-upgradable.js +++ b/evm/deploy-upgradable.js @@ -12,7 +12,7 @@ const IUpgradable = require('@axelar-network/axelar-gmp-sdk-solidity/interfaces/ const { Command, Option } = require('commander'); const { deployUpgradable, deployCreate2Upgradable, deployCreate3Upgradable, upgradeUpgradable } = require('./upgradable'); -const { printInfo, printError, printWalletInfo, getDeployedAddress, prompt, getGasOptions, mainProcessor, printLog } = require('./utils'); +const { printInfo, printError, printWalletInfo, getDeployedAddress, prompt, getGasOptions, mainProcessor } = require('./utils'); const { addExtendedOptions } = require('./cli-utils'); function getProxy(wallet, proxyAddress) { @@ -24,8 +24,6 @@ async function getImplementationArgs(contractName, config, options) { try { args = options.args ? JSON.parse(options.args) : {}; - console.log('Parsed args:\n'); - printLog(args); } catch (error) { console.error('Error parsing args:\n', error.message); } diff --git a/evm/utils.js b/evm/utils.js index d41b63ed..1614db74 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -1230,7 +1230,7 @@ async function relayTransaction(options, chain, contract, method, params, native } })(), - chain.timeout || 60000, + chain.txTimeout || 60000, new Error(`Timeout updating gas info for ${chain.name}`), ); } From ddeef52d36cabfb12e5646aae33e1b8fd9cecd4e Mon Sep 17 00:00:00 2001 From: re1ro Date: Wed, 5 Jun 2024 01:08:26 -0400 Subject: [PATCH 79/85] config(mainnet): onchainGasEstimate for L2s (#260) Co-authored-by: Milap Sheth --- axelar-chains-config/info/mainnet.json | 44 ++++++++++++++++++++------ axelar-chains-config/info/testnet.json | 2 +- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index 11f157a1..61e890e9 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -867,6 +867,10 @@ "api": "https://api.arbiscan.io/api" }, "gasOptions": {}, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 3 + }, "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 2000000000 @@ -1365,17 +1369,18 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 1, + "l1FeeScalar": 1368 + }, "confirmations": 3, "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 10000000000 }, "finality": "finalized", - "approxFinalityWaitTime": 25, - "onchainGasEstimate": { - "l1ChainName": "ethereum", - "gasEstimationType": 1 - } + "approxFinalityWaitTime": 25 }, "linea": { "name": "Linea", @@ -1623,12 +1628,13 @@ "gasLimit": 3000000, "gasPrice": 10000000000 }, - "finality": "finalized", - "approxFinalityWaitTime": 30, "onchainGasEstimate": { "l1ChainName": "ethereum", - "gasEstimationType": 1 - } + "gasEstimationType": 1, + "l1FeeScalar": 1101 + }, + "finality": "finalized", + "approxFinalityWaitTime": 30 }, "mantle": { "name": "Mantle", @@ -1741,6 +1747,11 @@ } }, "confirmations": 2, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 2, + "l1FeeScalar": 10000 + }, "explorer": { "name": "Mantle Explorer", "url": "https://mantlescan.xyz", @@ -1870,6 +1881,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 4, + "l1FeeScalar": 1050000000 + }, "staticGasOptions": { "gasLimit": 3000000, "gasPrice": 25000000000 @@ -2080,6 +2096,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 2, + "l1FeeScalar": 50000 + }, "explorer": { "name": "Fraxscan", "url": "https://fraxscan.com", @@ -2288,6 +2309,11 @@ "gasOptions": { "gasLimit": 8000000 }, + "onchainGasEstimate": { + "l1ChainName": "ethereum", + "gasEstimationType": 2, + "l1FeeScalar": 684000 + }, "confirmations": 2, "explorer": { "name": "Blastscan", diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index 63ea1f9c..91c416ad 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -1664,7 +1664,7 @@ "onchainGasEstimate": { "l1ChainName": "ethereum", "gasEstimationType": 2, - "l1FeeScalar": 684000 + "l1FeeScalar": 7600 }, "confirmations": 2, "explorer": { From 89e0e8b7b72233e38e01a8a90c9f5a4c0d5cbaee Mon Sep 17 00:00:00 2001 From: Foivos Date: Fri, 7 Jun 2024 01:23:07 +0300 Subject: [PATCH 80/85] feat: adding a script to rotate signers (#262) * added a script to rotate signers but it doesn't work yet. * prettier * support other private key types * fix keypair script * fix dep * fix nonce * fix rotate signers * prettier * prettier * add more helpers and update readme --------- Co-authored-by: Milap Sheth --- package-lock.json | 32 +++---- package.json | 2 +- sui/README.md | 18 +++- sui/deploy-gateway.js | 15 ++-- sui/generate-keypair.js | 7 +- sui/rotate-signers.js | 189 ++++++++++++++++++++++++++++++++++++++++ sui/sign-utils.js | 5 ++ 7 files changed, 240 insertions(+), 28 deletions(-) create mode 100644 sui/rotate-signers.js diff --git a/package-lock.json b/package-lock.json index 96aae04a..f38577e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -171,7 +171,7 @@ }, "node_modules/@axelar-network/axelar-cgp-sui": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#d7f7463a2d849fb0fe87175922a26cb638e35292", + "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#e33738f439d2108b44fca7891f5a4b69ce37e8a5", "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui.js": "^0.54.1", @@ -225,9 +225,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -8311,9 +8311,9 @@ } }, "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/lru_map": { "version": "0.3.3", @@ -8854,9 +8854,9 @@ } }, "node_modules/no-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/node-abi": { "version": "3.63.0", @@ -9233,9 +9233,9 @@ } }, "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/path": { "version": "0.12.7", @@ -10942,9 +10942,9 @@ } }, "node_modules/svelte": { - "version": "4.2.17", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.17.tgz", - "integrity": "sha512-N7m1YnoXtRf5wya5Gyx3TWuTddI4nAyayyIWFojiWV5IayDYNV5i2mRp/7qNGol4DtxEYxljmrbgp1HM6hUbmQ==", + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.18.tgz", + "integrity": "sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==", "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.1", diff --git a/package.json b/package.json index 0f9e65fa..cb455542 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,8 @@ "homepage": "https://github.com/axelarnetwork/axelar-contract-deployments#readme", "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", - "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git#main", "@axelar-network/axelar-cgp-solidity": "6.3.1", + "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git#main", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", diff --git a/sui/README.md b/sui/README.md index 1885f93b..200a211e 100644 --- a/sui/README.md +++ b/sui/README.md @@ -61,7 +61,7 @@ Use `--help` flag to see other setup params that can be overridden. - For testing convenience, you can use the secp256k1 wallet as the signer set for the gateway. ```bash -node sui/deploy-gateway.js --signers wallet +node sui/deploy-gateway.js --signers wallet --nonce test ``` - You can also provide a JSON object with a full signer set: @@ -76,6 +76,22 @@ node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x0201 node sui/deploy-test.js ``` +4. To rotate the gateway signers: + +If gateway was deployed with the wallet as the verifier, and you want to rotate to the Amplifier verifiers, do + +```bash +node sui/rotate-signers.js --proof wallet +``` + +If you want to rotate to the wallet again but with a new nonce, do + +```bash +node sui/rotate-signers.js --signers wallet --proof wallet --currentNonce test --newNonce test2 +``` + +Use the same nonce for `--currentNonce` as the `--nonce` when deploying the gateway. + ## Troubleshooting 1. Move build error during the deployment step diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index 02c61739..c0e3284c 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -5,7 +5,7 @@ const { TransactionBlock } = require('@mysten/sui.js/transactions'); const { bcs } = require('@mysten/sui.js/bcs'); const { ethers } = require('hardhat'); const { - utils: { arrayify, hexlify }, + utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, constants: { HashZero }, } = ethers; @@ -25,7 +25,7 @@ async function getSigners(keypair, config, chain, options) { return { signers: [{ pubkey, weight: 1 }], threshold: 1, - nonce: HashZero, + nonce: options.nonce ? keccak256(toUtf8Bytes(options.nonce)) : HashZero, }; } else if (options.signers) { printInfo('Using provided signers', options.signers); @@ -151,12 +151,9 @@ if (require.main === module) { program.addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')); program.addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')); - program.addOption( - new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default( - 24 * 60 * 60 * 1000, - ), - ); // 1 day (in ms) + program.addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)); program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); + program.addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')); program.action((options) => { mainProcessor(options, processCommand); @@ -164,3 +161,7 @@ if (require.main === module) { program.parse(); } + +module.exports = { + getSigners, +}; diff --git a/sui/generate-keypair.js b/sui/generate-keypair.js index d9ae11ff..8d091570 100644 --- a/sui/generate-keypair.js +++ b/sui/generate-keypair.js @@ -1,7 +1,7 @@ 'use strict'; const { addBaseOptions } = require('./cli-utils'); -const { generateKeypair } = require('./sign-utils'); +const { generateKeypair, getRawPrivateKey } = require('./sign-utils'); const { Command, Option } = require('commander'); const { saveConfig, loadConfig, printInfo } = require('../evm/utils'); @@ -12,9 +12,10 @@ async function processCommand(config, chain, options) { const keypair = await generateKeypair(options); printInfo('Keypair generated'); + printInfo('Private key', keypair.getSecretKey()); + printInfo('Private key hex', hexlify(getRawPrivateKey(keypair))); printInfo('Public key', hexlify(keypair.getPublicKey().toRawBytes())); printInfo('Address', keypair.toSuiAddress()); - printInfo('Private key', keypair.getSecretKey()); } async function mainProcessor(options, processor) { @@ -26,7 +27,7 @@ async function mainProcessor(options, processor) { if (require.main === module) { const program = new Command(); - program.name('generate-key').description('Generate keypair.'); + program.name('generate-keypair').description('Generate keypair.'); addBaseOptions(program, { ignorePrivateKey: true }); diff --git a/sui/rotate-signers.js b/sui/rotate-signers.js new file mode 100644 index 00000000..0df7dd44 --- /dev/null +++ b/sui/rotate-signers.js @@ -0,0 +1,189 @@ +const { saveConfig, printInfo } = require('../evm/utils'); +const { Command, Option } = require('commander'); +const { TransactionBlock } = require('@mysten/sui.js/transactions'); +const { bcs } = require('@mysten/sui.js/bcs'); +const { ethers } = require('hardhat'); +const { + utils: { arrayify, hexlify, keccak256, toUtf8Bytes }, + constants: { HashZero }, +} = ethers; + +const { addBaseOptions } = require('./cli-utils'); +const { getWallet, printWalletInfo, getRawPrivateKey } = require('./sign-utils'); +const { loadSuiConfig } = require('./utils'); +const { getSigners } = require('./deploy-gateway'); +const secp256k1 = require('secp256k1'); + +const COMMAND_TYPE_ROTATE_SIGNERS = 1; + +function hashMessage(data) { + const toHash = new Uint8Array(data.length + 1); + toHash[0] = COMMAND_TYPE_ROTATE_SIGNERS; + toHash.set(data, 1); + + return keccak256(toHash); +} + +function getProofSigners(keypair, options) { + if (options.proof === 'wallet') { + console.log('Using wallet to provide proof'); + + if (keypair.getKeyScheme() !== 'Secp256k1') { + throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); + } + + return { + signers: [{ pubkey: keypair.getPublicKey().toRawBytes(), weight: 1 }], + threshold: 1, + nonce: options.currentNonce ? keccak256(toUtf8Bytes(options.currentNonce)) : HashZero, + }; + } else if (options.proof) { + printInfo('Using provided proof', options.proof); + + const proof = JSON.parse(options.proof); + return { + signers: proof.signers.signers.map(({ pubkey, weight }) => { + return { pubkey: arrayify(pubkey), weight }; + }), + threshold: proof.signers.threshold, + nonce: arrayify(proof.signers.nonce) || HashZero, + }; + } + + throw new Error('Proof not found'); +} + +function getSignatures(keypair, options, messageToSign) { + if (options.proof === 'wallet') { + if (keypair.getKeyScheme() !== 'Secp256k1') { + throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); + } + + const { signature, recid } = secp256k1.ecdsaSign(arrayify(keccak256(messageToSign)), getRawPrivateKey(keypair)); + + return [new Uint8Array([...signature, recid])]; + } else if (options.proof) { + const proof = JSON.parse(options.proof); + return proof.signatures.map((signatrue) => arrayify(signatrue)); + } + + throw new Error('Proof not found'); +} + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + + await printWalletInfo(keypair, client, chain, options); + + if (!chain.contracts.axelar_gateway) { + throw new Error('Axelar Gateway package not found.'); + } + + const contractConfig = chain.contracts.axelar_gateway; + const packageId = contractConfig.address; + const signers = await getSigners(keypair, config, chain, options); + + const signerStruct = bcs.struct('WeightedSigner', { + pubkey: bcs.vector(bcs.u8()), + weight: bcs.u128(), + }); + const bytes32Struct = bcs.fixedArray(32, bcs.u8()).transform({ + input: (id) => arrayify(id), + output: (id) => hexlify(id), + }); + + const signersStruct = bcs.struct('WeightedSigners', { + signers: bcs.vector(signerStruct), + threshold: bcs.u128(), + nonce: bytes32Struct, + }); + const newNonce = options.newNonce ? keccak256(toUtf8Bytes(options.newNonce)) : signers.nonce; + const encodedSigners = signersStruct + .serialize({ + ...signers, + nonce: bytes32Struct.serialize(newNonce).toBytes(), + }) + .toBytes(); + + const proofSigners = getProofSigners(keypair, options); + + const hashed = arrayify(hashMessage(encodedSigners)); + + const messageToSignStruct = bcs.struct('MessageToSign', { + domain_separator: bytes32Struct, + signers_hash: bytes32Struct, + data_hash: bytes32Struct, + }); + + const message = messageToSignStruct + .serialize({ + domain_separator: contractConfig.domainSeparator, + signers_hash: keccak256(signersStruct.serialize(proofSigners).toBytes()), + data_hash: hashed, + }) + .toBytes(); + + const signatures = getSignatures(keypair, options, message); + + const proofStruct = bcs.struct('Proof', { + signers: signersStruct, + signatures: bcs.vector(bcs.vector(bcs.u8())), + }); + + const encodedProof = proofStruct + .serialize({ + signers: proofSigners, + signatures, + }) + .toBytes(); + + const tx = new TransactionBlock(); + + tx.moveCall({ + target: `${packageId}::gateway::rotate_signers`, + arguments: [ + tx.object(contractConfig.objects.gateway), + tx.object('0x6'), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedProof).toBytes()), + ], + }); + + await client.signAndExecuteTransactionBlock({ + transactionBlock: tx, + signer: keypair, + options: { + showEffects: true, + showObjectChanges: true, + showContent: true, + }, + }); + + printInfo('Signers rotated succesfully'); +} + +async function mainProcessor(options, processor) { + const config = loadSuiConfig(options.env); + + await processor(config, config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('rotate-signers').description('Rotates signers on the gateway contract.'); + + addBaseOptions(program); + + program.addOption(new Option('--signers ', 'JSON with the initial signer set').makeOptionMandatory(true).env('SIGNERS')); + program.addOption(new Option('--proof ', 'JSON of the proof').env('PROOF')); + program.addOption(new Option('--currentNonce ', 'nonce of the existing signers')); + program.addOption(new Option('--newNonce ', 'nonce of the new signers (useful for test rotations)')); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} diff --git a/sui/sign-utils.js b/sui/sign-utils.js index 25832ba1..5fd28a46 100644 --- a/sui/sign-utils.js +++ b/sui/sign-utils.js @@ -84,8 +84,13 @@ async function generateKeypair(options) { } } +function getRawPrivateKey(keypair) { + return decodeSuiPrivateKey(keypair.getSecretKey()).secretKey; +} + module.exports = { getWallet, printWalletInfo, generateKeypair, + getRawPrivateKey, }; From 944d4aea567a0613f1c3132047ab6252794e2fa2 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Fri, 7 Jun 2024 11:59:26 -0400 Subject: [PATCH 81/85] feat(sui)!: add sui gateway call contract (#264) * refactor(sui): rename rotate signers to gateway * feat(sui)!: add sui gateway call contract * add type utils --- sui/README.md | 18 ++-- sui/deploy-gateway.js | 28 +----- sui/deploy-test.js | 12 +-- sui/{rotate-signers.js => gateway.js} | 126 +++++++++++++++----------- sui/sign-utils.js | 13 +++ sui/types-utils.js | 57 ++++++++++++ 6 files changed, 162 insertions(+), 92 deletions(-) rename sui/{rotate-signers.js => gateway.js} (57%) create mode 100644 sui/types-utils.js diff --git a/sui/README.md b/sui/README.md index 200a211e..fc9bef0d 100644 --- a/sui/README.md +++ b/sui/README.md @@ -42,13 +42,13 @@ Use the `-e local` (or `ENV=local` in the `.env` config) flag with scripts to ru ## Scripts -1. Faucet: To get test SUI coins to your address. +To get test SUI coins to your address via a faucet. ```bash node sui/faucet.js ``` -2. Deploy the gateway package: +Deploy the gateway package: - By querying the signer set from the Amplifier contract (this only works if Amplifier contracts have been setup): @@ -70,24 +70,30 @@ node sui/deploy-gateway.js --signers wallet --nonce test node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pubkey": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' ``` -3. Deploy the test GMP package: +Deploy the test GMP package: ```bash node sui/deploy-test.js ``` -4. To rotate the gateway signers: +Call Contract: + +```bash +node sui/gateway.js call-contract ethereum 0xba76c6980428A0b10CFC5d8ccb61949677A61233 0x1234 +``` + +Rotate gateway signers: If gateway was deployed with the wallet as the verifier, and you want to rotate to the Amplifier verifiers, do ```bash -node sui/rotate-signers.js --proof wallet +node sui/gateway.js rotate --proof wallet ``` If you want to rotate to the wallet again but with a new nonce, do ```bash -node sui/rotate-signers.js --signers wallet --proof wallet --currentNonce test --newNonce test2 +node sui/gateway.js rotate --signers wallet --proof wallet --currentNonce test --newNonce test2 ``` Use the same nonce for `--currentNonce` as the `--nonce` when deploying the gateway. diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index c0e3284c..2a4ea04c 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -10,7 +10,8 @@ const { } = ethers; const { addBaseOptions } = require('./cli-utils'); -const { getWallet, printWalletInfo } = require('./sign-utils'); +const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); +const { bytes32Struct, signersStruct } = require('./types-utils'); const { getAmplifierSigners, loadSuiConfig } = require('./utils'); async function getSigners(keypair, config, chain, options) { @@ -71,21 +72,6 @@ async function processCommand(config, chain, options) { (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, ); - const signerStruct = bcs.struct('WeightedSigner', { - pubkey: bcs.vector(bcs.u8()), - weight: bcs.u128(), - }); - const bytes32Struct = bcs.fixedArray(32, bcs.u8()).transform({ - input: (id) => arrayify(id), - output: (id) => hexlify(id), - }); - - const signersStruct = bcs.struct('WeightedSigners', { - signers: bcs.vector(signerStruct), - threshold: bcs.u128(), - nonce: bytes32Struct, - }); - const encodedSigners = signersStruct .serialize({ ...signers, @@ -111,15 +97,7 @@ async function processCommand(config, chain, options) { tx.object('0x6'), ], }); - const result = await client.signAndExecuteTransactionBlock({ - transactionBlock: tx, - signer: keypair, - options: { - showEffects: true, - showObjectChanges: true, - showContent: true, - }, - }); + const result = await broadcast(client, keypair, tx); const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); diff --git a/sui/deploy-test.js b/sui/deploy-test.js index 63e50d27..6a499f00 100644 --- a/sui/deploy-test.js +++ b/sui/deploy-test.js @@ -9,7 +9,7 @@ const { const { loadSuiConfig } = require('./utils'); const { addBaseOptions } = require('./cli-utils'); -const { getWallet, printWalletInfo } = require('./sign-utils'); +const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); async function processCommand(config, chain, options) { const [keypair, client] = getWallet(chain, options); @@ -42,15 +42,7 @@ async function processCommand(config, chain, options) { arguments: [tx.object(relayerDiscovery), tx.object(singleton.objectId)], }); - await client.signAndExecuteTransactionBlock({ - transactionBlock: tx, - signer: keypair, - options: { - showEffects: true, - showObjectChanges: true, - showContent: true, - }, - }); + await broadcast(client, keypair, tx); chain.contracts.test.address = published.packageId; chain.contracts.test.objects = { singleton: singleton.objectId }; diff --git a/sui/rotate-signers.js b/sui/gateway.js similarity index 57% rename from sui/rotate-signers.js rename to sui/gateway.js index 0df7dd44..fc3b1a8b 100644 --- a/sui/rotate-signers.js +++ b/sui/gateway.js @@ -4,12 +4,13 @@ const { TransactionBlock } = require('@mysten/sui.js/transactions'); const { bcs } = require('@mysten/sui.js/bcs'); const { ethers } = require('hardhat'); const { - utils: { arrayify, hexlify, keccak256, toUtf8Bytes }, + utils: { arrayify, keccak256, toUtf8Bytes }, constants: { HashZero }, } = ethers; const { addBaseOptions } = require('./cli-utils'); -const { getWallet, printWalletInfo, getRawPrivateKey } = require('./sign-utils'); +const { getWallet, printWalletInfo, getRawPrivateKey, broadcast } = require('./sign-utils'); +const { bytes32Struct, signersStruct, messageToSignStruct, proofStruct } = require('./types-utils'); const { loadSuiConfig } = require('./utils'); const { getSigners } = require('./deploy-gateway'); const secp256k1 = require('secp256k1'); @@ -70,11 +71,51 @@ function getSignatures(keypair, options, messageToSign) { throw new Error('Proof not found'); } -async function processCommand(config, chain, options) { - const [keypair, client] = getWallet(chain, options); +async function callContract(keypair, client, config, chain, args, options) { + if (!chain.contracts.axelar_gateway) { + throw new Error('Axelar Gateway package not found.'); + } + + const contractConfig = chain.contracts.axelar_gateway; + const packageId = contractConfig.address; + + const [destinationChain, destinationAddress, payload] = args; + + let channel = options.channel; + + const tx = new TransactionBlock(); + + // Create a temporary channel if one wasn't provided + if (!options.channel) { + [channel] = tx.moveCall({ + target: `${packageId}::channel::new`, + arguments: [], + }); + } - await printWalletInfo(keypair, client, chain, options); + tx.moveCall({ + target: `${packageId}::gateway::call_contract`, + arguments: [ + channel, + tx.pure(bcs.string().serialize(destinationChain).toBytes()), + tx.pure(bcs.string().serialize(destinationAddress).toBytes()), + tx.pure(bcs.vector(bcs.u8()).serialize(arrayify(payload)).toBytes()), + ], + }); + + if (!options.channel) { + tx.moveCall({ + target: `${packageId}::channel::destroy`, + arguments: [channel], + }); + } + await broadcast(client, keypair, tx); + + printInfo('Contract called'); +} + +async function rotateSigners(keypair, client, config, chain, args, options) { if (!chain.contracts.axelar_gateway) { throw new Error('Axelar Gateway package not found.'); } @@ -83,20 +124,6 @@ async function processCommand(config, chain, options) { const packageId = contractConfig.address; const signers = await getSigners(keypair, config, chain, options); - const signerStruct = bcs.struct('WeightedSigner', { - pubkey: bcs.vector(bcs.u8()), - weight: bcs.u128(), - }); - const bytes32Struct = bcs.fixedArray(32, bcs.u8()).transform({ - input: (id) => arrayify(id), - output: (id) => hexlify(id), - }); - - const signersStruct = bcs.struct('WeightedSigners', { - signers: bcs.vector(signerStruct), - threshold: bcs.u128(), - nonce: bytes32Struct, - }); const newNonce = options.newNonce ? keccak256(toUtf8Bytes(options.newNonce)) : signers.nonce; const encodedSigners = signersStruct .serialize({ @@ -109,12 +136,6 @@ async function processCommand(config, chain, options) { const hashed = arrayify(hashMessage(encodedSigners)); - const messageToSignStruct = bcs.struct('MessageToSign', { - domain_separator: bytes32Struct, - signers_hash: bytes32Struct, - data_hash: bytes32Struct, - }); - const message = messageToSignStruct .serialize({ domain_separator: contractConfig.domainSeparator, @@ -125,11 +146,6 @@ async function processCommand(config, chain, options) { const signatures = getSignatures(keypair, options, message); - const proofStruct = bcs.struct('Proof', { - signers: signersStruct, - signatures: bcs.vector(bcs.vector(bcs.u8())), - }); - const encodedProof = proofStruct .serialize({ signers: proofSigners, @@ -149,41 +165,49 @@ async function processCommand(config, chain, options) { ], }); - await client.signAndExecuteTransactionBlock({ - transactionBlock: tx, - signer: keypair, - options: { - showEffects: true, - showObjectChanges: true, - showContent: true, - }, - }); + await broadcast(client, keypair, tx); printInfo('Signers rotated succesfully'); } -async function mainProcessor(options, processor) { +async function mainProcessor(processor, args, options) { const config = loadSuiConfig(options.env); - await processor(config, config.sui, options); + const [keypair, client] = getWallet(config.sui, options); + await printWalletInfo(keypair, client, config.sui, options); + + await processor(keypair, client, config, config.sui, args, options); + saveConfig(config, options.env); } if (require.main === module) { const program = new Command(); - program.name('rotate-signers').description('Rotates signers on the gateway contract.'); + program.name('gateway').description('Gateway contract operations.'); + + const rotateSignersCmd = program + .command('rotate') + .description('Rotate signers of the gateway contract') + .addOption(new Option('--signers ', 'JSON with the initial signer set')) + .addOption(new Option('--proof ', 'JSON of the proof')) + .addOption(new Option('--currentNonce ', 'nonce of the existing signers')) + .addOption(new Option('--newNonce ', 'nonce of the new signers (useful for test rotations)')) + .action((options) => { + mainProcessor(rotateSigners, [], options); + }); + + const callContractCmd = program + .command('call-contract ') + .description('Initiate sending a cross-chain message via the gateway') + .addOption(new Option('--channel ', 'Existing channel ID to initiate a cross-chain message over')) + .action((destinationChain, destinationAddress, payload, options) => { + mainProcessor(callContract, [destinationChain, destinationAddress, payload], options); + }); addBaseOptions(program); - - program.addOption(new Option('--signers ', 'JSON with the initial signer set').makeOptionMandatory(true).env('SIGNERS')); - program.addOption(new Option('--proof ', 'JSON of the proof').env('PROOF')); - program.addOption(new Option('--currentNonce ', 'nonce of the existing signers')); - program.addOption(new Option('--newNonce ', 'nonce of the new signers (useful for test rotations)')); - - program.action((options) => { - mainProcessor(options, processCommand); - }); + addBaseOptions(rotateSignersCmd); + addBaseOptions(callContractCmd); program.parse(); } diff --git a/sui/sign-utils.js b/sui/sign-utils.js index 5fd28a46..b8d1d4e6 100644 --- a/sui/sign-utils.js +++ b/sui/sign-utils.js @@ -88,9 +88,22 @@ function getRawPrivateKey(keypair) { return decodeSuiPrivateKey(keypair.getSecretKey()).secretKey; } +async function broadcast(client, keypair, tx) { + return await client.signAndExecuteTransactionBlock({ + transactionBlock: tx, + signer: keypair, + options: { + showEffects: true, + showObjectChanges: true, + showContent: true, + }, + }); +} + module.exports = { getWallet, printWalletInfo, generateKeypair, getRawPrivateKey, + broadcast, }; diff --git a/sui/types-utils.js b/sui/types-utils.js new file mode 100644 index 00000000..8a2d38bb --- /dev/null +++ b/sui/types-utils.js @@ -0,0 +1,57 @@ +'use strict'; + +const { bcs } = require('@mysten/sui.js/bcs'); +const { ethers } = require('hardhat'); +const { + utils: { arrayify, hexlify }, +} = ethers; + +const addressStruct = bcs.bytes(32).transform({ + input: (val) => arrayify(val), + output: (val) => hexlify(val), +}); + +const signerStruct = bcs.struct('WeightedSigner', { + pubkey: bcs.vector(bcs.u8()), + weight: bcs.u128(), +}); + +const bytes32Struct = bcs.fixedArray(32, bcs.u8()).transform({ + input: (id) => arrayify(id), + output: (id) => hexlify(id), +}); + +const signersStruct = bcs.struct('WeightedSigners', { + signers: bcs.vector(signerStruct), + threshold: bcs.u128(), + nonce: bytes32Struct, +}); + +const messageToSignStruct = bcs.struct('MessageToSign', { + domain_separator: bytes32Struct, + signers_hash: bytes32Struct, + data_hash: bytes32Struct, +}); + +const messageStruct = bcs.struct('Message', { + source_chain: bcs.string(), + message_id: bcs.string(), + source_address: bcs.string(), + destination_id: addressStruct, + payload_hash: bytes32Struct, +}); + +const proofStruct = bcs.struct('Proof', { + signers: signersStruct, + signatures: bcs.vector(bcs.vector(bcs.u8())), +}); + +module.exports = { + addressStruct, + signerStruct, + bytes32Struct, + signersStruct, + messageToSignStruct, + messageStruct, + proofStruct, +}; From a35095d7731ac3b08e94d7c65389162e536f3971 Mon Sep 17 00:00:00 2001 From: Milap Sheth Date: Fri, 7 Jun 2024 12:46:59 -0400 Subject: [PATCH 82/85] feat(sui)!: add sui approve message cmd (#266) * refactor(sui): rename rotate signers to gateway * feat(sui)!: add sui gateway call contract * add type utils * feat(sui)!: add sui approve message cmd * update lock file --- package-lock.json | 8 ++-- sui/README.md | 6 +++ sui/gateway.js | 109 +++++++++++++++++++++++++++++++++++----------- 3 files changed, 93 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index f38577e1..99ad06c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,9 +54,9 @@ } }, "node_modules/@0no-co/graphqlsp": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.5.tgz", - "integrity": "sha512-YS9s8sf3XLaVdBt33u1mbUdfUSLiarQW1SFd3ITh2CLWz1nVnVTN0oCrpepuFHUJ7rt+b6Gk14sgjP4ONdeZfQ==", + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.7.tgz", + "integrity": "sha512-jZeTKW8pl/IWTHWZUox5oQk0n+IsLNY+OkmxoZwW+AkZaQOXdzIlZ0OabJGw4+/vutwdZYR+UsoC8Nhi9hRnRw==", "dependencies": { "@gql.tada/internal": "^1.0.0", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" @@ -171,7 +171,7 @@ }, "node_modules/@axelar-network/axelar-cgp-sui": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#e33738f439d2108b44fca7891f5a4b69ce37e8a5", + "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#368b2d4032314e6400b5be3058490dcc79ed0fbb", "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui.js": "^0.54.1", diff --git a/sui/README.md b/sui/README.md index fc9bef0d..ec4d96c0 100644 --- a/sui/README.md +++ b/sui/README.md @@ -82,6 +82,12 @@ Call Contract: node sui/gateway.js call-contract ethereum 0xba76c6980428A0b10CFC5d8ccb61949677A61233 0x1234 ``` +Approve messages: + +```bash +node sui/gateway.js approve ethereum 0x0x32034b47cb29d162d9d803cc405356f4ac0ec07fe847ace431385fe8acf3e6e5-1 0x4F4495243837681061C4743b74B3eEdf548D56A5 0xa84d27bd6c9680e52e93779b8977bbcb73273b88f52a84d8dd8af1c3301341d7 0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad --proof wallet +``` + Rotate gateway signers: If gateway was deployed with the wallet as the verifier, and you want to rotate to the Amplifier verifiers, do diff --git a/sui/gateway.js b/sui/gateway.js index fc3b1a8b..374e6291 100644 --- a/sui/gateway.js +++ b/sui/gateway.js @@ -10,16 +10,17 @@ const { const { addBaseOptions } = require('./cli-utils'); const { getWallet, printWalletInfo, getRawPrivateKey, broadcast } = require('./sign-utils'); -const { bytes32Struct, signersStruct, messageToSignStruct, proofStruct } = require('./types-utils'); +const { bytes32Struct, signersStruct, messageToSignStruct, messageStruct, proofStruct } = require('./types-utils'); const { loadSuiConfig } = require('./utils'); const { getSigners } = require('./deploy-gateway'); const secp256k1 = require('secp256k1'); +const COMMAND_TYPE_APPROVE_MESSAGES = 0; const COMMAND_TYPE_ROTATE_SIGNERS = 1; -function hashMessage(data) { +function hashMessage(commandType, data) { const toHash = new Uint8Array(data.length + 1); - toHash[0] = COMMAND_TYPE_ROTATE_SIGNERS; + toHash[0] = commandType; toHash.set(data, 1); return keccak256(toHash); @@ -27,7 +28,7 @@ function hashMessage(data) { function getProofSigners(keypair, options) { if (options.proof === 'wallet') { - console.log('Using wallet to provide proof'); + printInfo('Using wallet to provide proof'); if (keypair.getKeyScheme() !== 'Secp256k1') { throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); @@ -54,7 +55,7 @@ function getProofSigners(keypair, options) { throw new Error('Proof not found'); } -function getSignatures(keypair, options, messageToSign) { +function getSignatures(keypair, messageToSign, options) { if (options.proof === 'wallet') { if (keypair.getKeyScheme() !== 'Secp256k1') { throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); @@ -65,12 +66,37 @@ function getSignatures(keypair, options, messageToSign) { return [new Uint8Array([...signature, recid])]; } else if (options.proof) { const proof = JSON.parse(options.proof); - return proof.signatures.map((signatrue) => arrayify(signatrue)); + return proof.signatures.map((signature) => arrayify(signature)); } throw new Error('Proof not found'); } +function getProof(keypair, commandType, data, contractConfig, options) { + const signers = getProofSigners(keypair, options); + + const dataHash = arrayify(hashMessage(commandType, data)); + + const message = messageToSignStruct + .serialize({ + domain_separator: contractConfig.domainSeparator, + signers_hash: keccak256(signersStruct.serialize(signers).toBytes()), + data_hash: dataHash, + }) + .toBytes(); + + const signatures = getSignatures(keypair, message, options); + + const encodedProof = proofStruct + .serialize({ + signers, + signatures, + }) + .toBytes(); + + return encodedProof; +} + async function callContract(keypair, client, config, chain, args, options) { if (!chain.contracts.axelar_gateway) { throw new Error('Axelar Gateway package not found.'); @@ -115,6 +141,46 @@ async function callContract(keypair, client, config, chain, args, options) { printInfo('Contract called'); } +async function approveMessages(keypair, client, config, chain, args, options) { + if (!chain.contracts.axelar_gateway) { + throw new Error('Axelar Gateway package not found.'); + } + + const contractConfig = chain.contracts.axelar_gateway; + const packageId = contractConfig.address; + const [sourceChain, messageId, sourceAddress, destinationId, payloadHash] = args; + + const encodedMessages = bcs + .vector(messageStruct) + .serialize([ + { + source_chain: sourceChain, + message_id: messageId, + source_address: sourceAddress, + destination_id: destinationId, + payload_hash: bytes32Struct.serialize(arrayify(payloadHash)).toBytes(), + }, + ]) + .toBytes(); + + const encodedProof = getProof(keypair, COMMAND_TYPE_APPROVE_MESSAGES, encodedMessages, contractConfig, options); + + const tx = new TransactionBlock(); + + tx.moveCall({ + target: `${packageId}::gateway::approve_messages`, + arguments: [ + tx.object(contractConfig.objects.gateway), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedMessages).toBytes()), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedProof).toBytes()), + ], + }); + + await broadcast(client, keypair, tx); + + printInfo('Approved messages'); +} + async function rotateSigners(keypair, client, config, chain, args, options) { if (!chain.contracts.axelar_gateway) { throw new Error('Axelar Gateway package not found.'); @@ -132,26 +198,7 @@ async function rotateSigners(keypair, client, config, chain, args, options) { }) .toBytes(); - const proofSigners = getProofSigners(keypair, options); - - const hashed = arrayify(hashMessage(encodedSigners)); - - const message = messageToSignStruct - .serialize({ - domain_separator: contractConfig.domainSeparator, - signers_hash: keccak256(signersStruct.serialize(proofSigners).toBytes()), - data_hash: hashed, - }) - .toBytes(); - - const signatures = getSignatures(keypair, options, message); - - const encodedProof = proofStruct - .serialize({ - signers: proofSigners, - signatures, - }) - .toBytes(); + const encodedProof = getProof(keypair, COMMAND_TYPE_ROTATE_SIGNERS, encodedSigners, contractConfig, options); const tx = new TransactionBlock(); @@ -197,6 +244,15 @@ if (require.main === module) { mainProcessor(rotateSigners, [], options); }); + const approveMessagesCmd = program + .command('approve ') + .description('Approve messages at the gateway contract') + .addOption(new Option('--proof ', 'JSON of the proof')) + .addOption(new Option('--currentNonce ', 'nonce of the existing signers')) + .action((sourceChain, messageId, sourceAddress, destinationId, payloadHash, options) => { + mainProcessor(approveMessages, [sourceChain, messageId, sourceAddress, destinationId, payloadHash], options); + }); + const callContractCmd = program .command('call-contract ') .description('Initiate sending a cross-chain message via the gateway') @@ -208,6 +264,7 @@ if (require.main === module) { addBaseOptions(program); addBaseOptions(rotateSignersCmd); addBaseOptions(callContractCmd); + addBaseOptions(approveMessagesCmd); program.parse(); } From baf57900893a17363ed433762189268b35939172 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Fri, 7 Jun 2024 22:01:23 +0100 Subject: [PATCH 83/85] fix(sui): amplifier worker set fetching (#268) --- sui/gateway.js | 2 +- sui/utils.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sui/gateway.js b/sui/gateway.js index 374e6291..0078d20e 100644 --- a/sui/gateway.js +++ b/sui/gateway.js @@ -188,7 +188,7 @@ async function rotateSigners(keypair, client, config, chain, args, options) { const contractConfig = chain.contracts.axelar_gateway; const packageId = contractConfig.address; - const signers = await getSigners(keypair, config, chain, options); + const signers = await getSigners(keypair, config, chain.axelarId, options); const newNonce = options.newNonce ? keccak256(toUtf8Bytes(options.newNonce)) : signers.nonce; const encodedSigners = signersStruct diff --git a/sui/utils.js b/sui/utils.js index 5b62fe0a..97991a64 100644 --- a/sui/utils.js +++ b/sui/utils.js @@ -4,13 +4,13 @@ const { ethers } = require('hardhat'); const { loadConfig } = require('../evm/utils'); const { BigNumber, - utils: { arrayify }, + utils: { arrayify, hexlify }, } = ethers; const { CosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const getAmplifierSigners = async (config, chain) => { const client = await CosmWasmClient.connect(config.axelar.rpc); - const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_worker_set'); + const workerSet = await client.queryContractSmart(config.axelar.contracts.MultisigProver[chain].address, 'get_verifier_set'); const signers = Object.values(workerSet.signers); const weightedSigners = signers @@ -18,7 +18,7 @@ const getAmplifierSigners = async (config, chain) => { pubkey: arrayify(`0x${signer.pub_key.ecdsa}`), weight: Number(signer.weight), })) - .sort((a, b) => a.pubkey.localeCompare(b.pubkey)); + .sort((a, b) => hexlify(a.pubkey).localeCompare(hexlify(b.pubkey))); return { signers: weightedSigners, From 1f6f655f8b7cae56c187d9ba779e589c18a3c262 Mon Sep 17 00:00:00 2001 From: jcs47 <11947034+jcs47@users.noreply.github.com> Date: Sat, 8 Jun 2024 00:44:11 +0100 Subject: [PATCH 84/85] fix(sui): faucet host (#269) --- sui/faucet.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sui/faucet.js b/sui/faucet.js index b1da4ed3..48dc4ae6 100644 --- a/sui/faucet.js +++ b/sui/faucet.js @@ -8,12 +8,11 @@ const { saveConfig, loadConfig, printInfo } = require('../evm/utils'); async function processCommand(config, chain, options) { const [keypair, client] = getWallet(chain, options); - const host = chain.rpc || getFaucetHost(chain.networkType); await printWalletInfo(keypair, client, chain, options); await requestSuiFromFaucetV0({ - host, + host: getFaucetHost(chain.networkType), recipient: keypair.toSuiAddress(), }); From 8c61965494740ad6a70d4875af77ecbe52d75e3e Mon Sep 17 00:00:00 2001 From: eguajardo Date: Mon, 10 Jun 2024 10:49:55 -0600 Subject: [PATCH 85/85] feat(amplifier): store setupParams when deploying an external amplifier gateway (#263) * add setup params to devnet-amplifier * update devnet-verifiers.json with setup params * add proxy deployment args to config * update devnet-amplifier.json with proxyDeploymentArgs * add proxy deployment args to devnet-verifiers * fixed implementation address from proxyDeploymentArgs --- .../info/devnet-amplifier.json | 28 ++++++++++++++++--- .../info/devnet-verifiers.json | 28 ++++++++++++++++--- evm/deploy-amplifier-gateway.js | 5 +++- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index d6a0b5b2..5fac88b6 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -25,7 +25,12 @@ "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - } + }, + "proxyDeploymentArgs": [ + "0x25C97DC353fF1dBBD04d8096AC6C87B5244D856d", + "0xd7A0e641Bfbb9AA83aAb9f3e89bf83e128d321c4", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000cb9e1000000000000000000000000000000000000000000000000000000000000000300000000000000000000000051380cbf0777990e197a3e498ffafd26143e35f8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000061373485594010371dfbf3a8f8bd1736bfda7c090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c70aa87b38e6ab3c0df6e56338f96a5c00e653080000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -85,7 +90,12 @@ "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - } + }, + "proxyDeploymentArgs": [ + "0x37e6F01C4BA68BA121dA57CfB0d54B822006010d", + "0x0aa18e321c89bbdfCE9913aa0cA20B977aDc4B48", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000cba59000000000000000000000000000000000000000000000000000000000000000300000000000000000000000051380cbf0777990e197a3e498ffafd26143e35f8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000061373485594010371dfbf3a8f8bd1736bfda7c090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c70aa87b38e6ab3c0df6e56338f96a5c00e653080000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -147,7 +157,12 @@ "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - } + }, + "proxyDeploymentArgs": [ + "0x957E7eC2da3Cd93Fd49E1ac7DF0499a3EC9814a1", + "0x3Cd679Cd00b61a8540Fcc3aE90Bba30DC3eeb6ee", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000cbac7000000000000000000000000000000000000000000000000000000000000000300000000000000000000000051380cbf0777990e197a3e498ffafd26143e35f8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000061373485594010371dfbf3a8f8bd1736bfda7c090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c70aa87b38e6ab3c0df6e56338f96a5c00e653080000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -207,7 +222,12 @@ "salt": "AxelarAmplifierGateway devnet-amplifier", "gasOptions": { "gasLimit": 5000000 - } + }, + "proxyDeploymentArgs": [ + "0xC7547fb5bc2Fde4Aec37De85DecA111FF3E0169b", + "0xE7741c9044F96FDb1fb08405a6199995E94Ef6ba", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000cbb3c000000000000000000000000000000000000000000000000000000000000000300000000000000000000000051380cbf0777990e197a3e498ffafd26143e35f8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000061373485594010371dfbf3a8f8bd1736bfda7c090000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c70aa87b38e6ab3c0df6e56338f96a5c00e653080000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", diff --git a/axelar-chains-config/info/devnet-verifiers.json b/axelar-chains-config/info/devnet-verifiers.json index 6e4a7933..0d54db6d 100644 --- a/axelar-chains-config/info/devnet-verifiers.json +++ b/axelar-chains-config/info/devnet-verifiers.json @@ -30,7 +30,12 @@ "previousSignersRetention": 15, "domainSeparator": "0x333e4afab949ca00f9b5daa5a021f942b614c91cb5ced70ded38cd89da2b55ef", "minimumRotationDelay": 300, - "salt": "AxelarAmplifierGateway devnet-verifiers" + "salt": "AxelarAmplifierGateway devnet-verifiers", + "proxyDeploymentArgs": [ + "0x6d7963f2d9434ecC04ff75AADD95a139EFa25232", + "0x3230E865358d8d1a560192ae8cb3Eae303cBd098", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000ae8a20000000000000000000000000000000000000000000000000000000000000003000000000000000000000000438b7642a57aa47d1a4d290a5e2a046f45c9a6a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000044b994544df974b36fa75ed80dfb17332dc65fcc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f1e9b98362820cc9257635b1e86dbf00d0bd92090000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -114,7 +119,12 @@ "previousSignersRetention": 15, "domainSeparator": "0x5c23b70b5d42a8e1368b5837e80a18c7e19c0e7d60b43c1e91d01225fd786344", "minimumRotationDelay": 300, - "salt": "AxelarAmplifierGateway devnet-verifiers" + "salt": "AxelarAmplifierGateway devnet-verifiers", + "proxyDeploymentArgs": [ + "0x77e04bBdE02a37F7d626Df532d225D0C7198c8B5", + "0x23888e6A0e0FE2D1C337e297D4dE3F2Ac8C721F6", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000ae91a0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000438b7642a57aa47d1a4d290a5e2a046f45c9a6a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000044b994544df974b36fa75ed80dfb17332dc65fcc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f1e9b98362820cc9257635b1e86dbf00d0bd92090000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -198,7 +208,12 @@ "previousSignersRetention": 15, "domainSeparator": "0x8c7bcafb223d3c1d45e52d64b1c8d262601cb5e263714b2b5024c4bdfb917158", "minimumRotationDelay": 300, - "salt": "AxelarAmplifierGateway devnet-verifiers" + "salt": "AxelarAmplifierGateway devnet-verifiers", + "proxyDeploymentArgs": [ + "0xEc37bb3AeC26639F3510414fF30A000f2f4F7922", + "0x01117C0Bb2a764Fc66162C6132F4069576D9226e", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000ae9eb0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000438b7642a57aa47d1a4d290a5e2a046f45c9a6a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000044b994544df974b36fa75ed80dfb17332dc65fcc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f1e9b98362820cc9257635b1e86dbf00d0bd92090000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", @@ -282,7 +297,12 @@ "previousSignersRetention": 15, "domainSeparator": "0xca4397f116cb317164af5decdf823ef51285f6b02c245310391489e0d97216fd", "minimumRotationDelay": 300, - "salt": "AxelarAmplifierGateway devnet-verifiers" + "salt": "AxelarAmplifierGateway devnet-verifiers", + "proxyDeploymentArgs": [ + "0x30c5F5df4465cf98096557F3E8ce1411723BD663", + "0x552CA7dA45EB6CbA0Ad8b5167CceDb37Bd587136", + "0x000000000000000000000000ba76c6980428a0b10cfc5d8ccb61949677a612330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000aed9c0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000438b7642a57aa47d1a4d290a5e2a046f45c9a6a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000044b994544df974b36fa75ed80dfb17332dc65fcc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f1e9b98362820cc9257635b1e86dbf00d0bd92090000000000000000000000000000000000000000000000000000000000000001" + ] }, "InterchainGovernance": { "governanceChain": "Axelarnet", diff --git a/evm/deploy-amplifier-gateway.js b/evm/deploy-amplifier-gateway.js index d889a922..55f72292 100644 --- a/evm/deploy-amplifier-gateway.js +++ b/evm/deploy-amplifier-gateway.js @@ -241,11 +241,14 @@ async function deploy(config, chain, options) { contractConfig.operator = operator; + const proxyDeploymentArgs = [implementation.address, owner, params]; + contractConfig.proxyDeploymentArgs = proxyDeploymentArgs; + const gatewayProxy = await deployContract( options.deployMethod, wallet, AxelarAmplifierGatewayProxy, - [implementation.address, owner, params], + proxyDeploymentArgs, { salt, deployerContract }, gasOptions, {},