diff --git a/.github/workflows/test-evm.yaml b/.github/workflows/test-evm.yaml index 6832bc8d2..60a187398 100644 --- a/.github/workflows/test-evm.yaml +++ b/.github/workflows/test-evm.yaml @@ -118,9 +118,6 @@ jobs: - name: Upgrade ITS using create2 run: node evm/deploy-its.js -m create2 -u -y - - name: InterchainTokenService deploy interchain token on current chain - run: node evm/its.js --action deployInterchainToken --name "test" --symbol "TST" --decimals 18 --minter 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 --destinationChain '' --gasValue 0 --salt "salt" -y - - name: InterchainTokenService set hub run: node evm/its.js --action setTrustedAddress --trustedChain axelar --trustedAddress axelar1xyz -y @@ -131,12 +128,30 @@ jobs: run: node evm/interchainTokenFactory.js --action deployInterchainToken --name "test" --symbol "TST" --decimals 18 --minter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --salt "salt" -y - name: InterchainTokenFactory deploy interchain token to destination chain - run: node evm/interchainTokenFactory.js --action deployRemoteInterchainToken --destinationChain remote --minter 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --salt "salt" -y + run: node evm/interchainTokenFactory.js --action deployRemoteInterchainToken --destinationChain remote --salt "salt" -y + + # Note that tokenAddress is hardcoded since it's derivation must always be the same + - name: InterchainTokenService register token metadata + run: node evm/its.js --action registerTokenMetadata --tokenAddress 0x49c06259B42540a025A73a32eF2Fd183c0FDB1D2 -y + + - name: InterchainTokenFactory register custom token + run: node evm/interchainTokenFactory.js --action registerCustomToken --tokenAddress 0x49c06259B42540a025A73a32eF2Fd183c0FDB1D2 --tokenManagerType 4 --operator 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --salt "salt" -y + + - name: InterchainTokenFactory link token + run: node evm/interchainTokenFactory.js --action linkToken --destinationChain remote --destinationTokenAddress "0x1234" --tokenManagerType 4 --linkParams "0x5678" --salt "salt" -y # Note that tokenId is hardcoded since it's derivation must always be the same - name: InterchainTokenService interchain transfer to destination chain run: node evm/its.js --action interchainTransfer --destinationChain remote --tokenId 0x88a9d17b8f4e6e4aaceb3c8f53d54eedb144276f1dd2b9f2d17de784aa090be7 --destinationAddress 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 --amount 1 --gasValue 0 -y + # Note that tokenId is hardcoded since it's derivation must always be the same + - name: InterchainTokenService set flow limit + run: node evm/its.js --action setFlowLimits --tokenIds 0x88a9d17b8f4e6e4aaceb3c8f53d54eedb144276f1dd2b9f2d17de784aa090be7 --flowLimits 123 -y + + # Note that tokenId is hardcoded since it's derivation must always be the same + - name: InterchainTokenService get flow limit + run: node evm/its.js --action flowLimit --tokenId 0x88a9d17b8f4e6e4aaceb3c8f53d54eedb144276f1dd2b9f2d17de784aa090be7 -y + - name: Add gasOptions to local.json run: | jq '.chains.test += {"gasOptions": {"gasLimit": 8000000}} | .chains.test.contracts.AxelarGateway += {"gasOptions": {"gasLimit": 8000000}}' ./axelar-chains-config/info/local.json > temp.json && mv temp.json ./axelar-chains-config/info/local.json diff --git a/.gitignore b/.gitignore index 1ede66576..c7bc05909 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,6 @@ sui/move # VSCode .vscode .DS_Store + +# Jetbrains +.idea diff --git a/axelar-chains-config/info/devnet-amplifier.json b/axelar-chains-config/info/devnet-amplifier.json index f3a540763..10040a4e3 100644 --- a/axelar-chains-config/info/devnet-amplifier.json +++ b/axelar-chains-config/info/devnet-amplifier.json @@ -623,26 +623,31 @@ "finality": "finalized", "approxFinalityWaitTime": 1 }, - "stellar-test2": { + "stellar-test-2025-q1": { "name": "Stellar", - "axelarId": "stellar-test2", + "axelarId": "stellar-test-2025-q1", "rpc": "https://soroban-testnet.stellar.org", "horizonRpc": "https://horizon-testnet.stellar.org", "networkType": "testnet", "chainType": "stellar", + "decimals": 7, + "finality": "1", + "approxFinalityWaitTime": 1, + "tokenSymbol": "XLM", + "tokenAddress": "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC", "explorer": { "name": "Soroban Nownodes", "url": "https://soroban.nownodes.io/testnet" }, - "tokenSymbol": "XLM", "contracts": { "axelar_gateway": { - "address": "CBGNPCKNCKKKCI5AUOS2K6H4JDLGPFHHXNDNOEZBIA3VO2NBEZQXFAG5", - "deployer": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", + "address": "CBECMRORSIPG4XG4CNZILCH233OXYMLCY4GL3GIO4SURSHTKHDAPEOVM", + "deployer": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "wasmHash": "4143f187c235fe365c547047c06c4fd7fb7b7eff664b9d9b044112d91bfef13c", "initializeArgs": { - "owner": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", - "operator": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", - "domainSeparator": "e33a8ab3341e36bdcc552924ea42c85ef40dc2cfa41259eb166fb254bc3f036a", + "owner": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "operator": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "domainSeparator": "293407cef6cb084c2c7ca31794d4cc95d8c3ea2aced086aebb518a2c37b28dc6", "minimumRotationDelay": "0", "previousSignersRetention": "15", "initialSigners": [ @@ -650,7 +655,7 @@ "nonce": "0000000000000000000000000000000000000000000000000000000000000000", "signers": [ { - "signer": "168983122cd64add01997a5ad115fbcb52fea5ed659a9702b83efbcb3a5e598e", + "signer": "e8898cba5a371e9d9c5622b5b62b25958096b9ab881f1e4bf91d6d29da58fd5e", "weight": "1" } ], @@ -659,26 +664,30 @@ ] } }, - "axelar_gas_service": { - "address": "CDBPOARU5MFSC7ZWXTVPVKDZRHKOPS5RCY2VP2OKOBLCMQM3NKVP6HO7", - "deployer": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", + "axelar_operators": { + "address": "CABRZHKAJVJFX5IZWL7KPA6ZEX6I347W7GBXAUX6WVOGUUBRWCDGOUSI", + "deployer": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "wasmHash": "57704308b10b9970a8c185dba6905ce10b19fec9c03acb2653c0b53f6d10c840", "initializeArgs": { - "gasCollector": "CB2LIDEDPDKUXVFHOQ2PHPEJOJBD7YDN43OB3O6D43IYQX4YCPTK4ODI" + "owner": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM" } }, - "axelar_operators": { - "address": "CB2LIDEDPDKUXVFHOQ2PHPEJOJBD7YDN43OB3O6D43IYQX4YCPTK4ODI", - "deployer": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", + "axelar_gas_service": { + "address": "CD3KZOLEACWMQSDEQFUJI6ZWC7A7CC7AE7ZFVE4X2DBPYAC6L663GCNN", + "deployer": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "wasmHash": "e2da823068ac57db886c25493a8da268057b0f00f4ef9e5747d9e3ea8c2d1687", "initializeArgs": { - "owner": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG" + "owner": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "gasCollector": "CABRZHKAJVJFX5IZWL7KPA6ZEX6I347W7GBXAUX6WVOGUUBRWCDGOUSI" } }, "example": { - "address": "CDURON7OSAAOWLKIQRNIPFZYLTMEWCRQOZIURAIS5JK3D2GU5IUPNSF6", - "deployer": "GALITAYSFTLEVXIBTF5FVUIV7PFVF7VF5VSZVFYCXA7PXSZ2LZMY54VG", + "address": "CCVDQJSFK5GIOHZ4NNSL455NDCG26RTX25O65PF6ZIGEMYHBW5O5UHV5", + "deployer": "GDUITDF2LI3R5HM4KYRLLNRLEWKYBFVZVOEB6HSL7EOW2KO2LD6V4GPM", + "wasmHash": "e65c48be115ac9649793cf90a1f9cda07c05e588429b9173bcb4b9aaea96fd10", "initializeArgs": { - "gatewayAddress": "CBGNPCKNCKKKCI5AUOS2K6H4JDLGPFHHXNDNOEZBIA3VO2NBEZQXFAG5", - "gasServiceAddress": "CDBPOARU5MFSC7ZWXTVPVKDZRHKOPS5RCY2VP2OKOBLCMQM3NKVP6HO7" + "gatewayAddress": "CBECMRORSIPG4XG4CNZILCH233OXYMLCY4GL3GIO4SURSHTKHDAPEOVM", + "gasServiceAddress": "CD3KZOLEACWMQSDEQFUJI6ZWC7A7CC7AE7ZFVE4X2DBPYAC6L663GCNN" } } } @@ -690,6 +699,9 @@ "rpc": "https://sui-testnet-rpc.publicnode.com:443", "tokenSymbol": "SUI", "chainType": "sui", + "finality": "1", + "decimals": 9, + "approxFinalityWaitTime": 1, "explorer": { "name": "Suiscan", "url": "https://suiscan.xyz/testnet" @@ -934,20 +946,20 @@ "codeId": 854, "address": "axelar1ac43p98m4pfv7zxrce3e99gwy5nf2crnwg3mu5rmxs09zvy2py9sxrgm8m" }, - "stellar-test2": { + "stellar-test-2025-q1": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "serviceName": "validators", - "sourceGatewayAddress": "CBGNPCKNCKKKCI5AUOS2K6H4JDLGPFHHXNDNOEZBIA3VO2NBEZQXFAG5", - "msgIdFormat": "hex_tx_hash_and_event_index", - "addressFormat": "stellar", - "address": "axelar1y00kk2j8pjx700hedhn3u7dyduy5q9kr37hgge6zxrl46ny0jr7qj046ey", - "codeId": 854, + "sourceGatewayAddress": "CBECMRORSIPG4XG4CNZILCH233OXYMLCY4GL3GIO4SURSHTKHDAPEOVM", "votingThreshold": [ "6", "10" ], "blockExpiry": 10, - "confirmationHeight": 1 + "confirmationHeight": 1, + "msgIdFormat": "hex_tx_hash_and_event_index", + "addressFormat": "stellar", + "codeId": 854, + "address": "axelar1s3g877l0pk958vzeyrev9vncklrfht7dx2xv9c4u7zmr0y7jzfmq5cxjqm" }, "storeCodeProposalId": "78", "storeCodeProposalCodeHash": "d9412440820a51bc48bf41a77ae39cfb33101ddc6562323845627ea2042bf708" @@ -970,16 +982,16 @@ "address": "axelar10w5sqgun0q3m0vkz29vh55ujug57m0t54cue04aesrg45rqcgf6sjv4wwh", "codeId": 848 }, - "stellar-test2": { - "address": "axelar1yekgav0alr7ptakd9uhlengvcfwals6agjceszxzmj77af825y3qs5asgx", - "codeId": 848 - }, "sui": { "codeId": 848, "address": "axelar152hkx77822ukgynf333snz5y9p3y9c8jgljlqguze4f4km4sfkfsmfl3na" }, "storeCodeProposalId": "64", - "storeCodeProposalCodeHash": "2ba600ee0d162184c9387eaf6fad655f1d75db548f93e379f0565cb2042d856f" + "storeCodeProposalCodeHash": "2ba600ee0d162184c9387eaf6fad655f1d75db548f93e379f0565cb2042d856f", + "stellar-test-2025-q1": { + "codeId": 848, + "address": "axelar1g03zp32gqx6qg3z59csfj4rm56lkpyqkdw9lg4qdgg6uxyupryrqcycxt9" + } }, "MultisigProver": { "avalanche-fuji": { @@ -1062,7 +1074,7 @@ "domainSeparator": "0x8a4b7c0ae3e02feb8a34711648ee44a4c9fc56ac90b41b74619a75e75de13c37", "address": "axelar1lnu9xwpmfzh47876tawjqm5nelevra4v6gmhqchd2tezjwqu2d6stlz4r8" }, - "stellar-test2": { + "stellar-test-2025-q1": { "governanceAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "adminAddress": "axelar1zlr7e5qf3sz7yf890rkh9tcnu87234k6k7ytd9", "signingThreshold": [ @@ -1073,9 +1085,9 @@ "verifierSetDiffThreshold": 0, "encoder": "stellar_xdr", "keyType": "ed25519", - "address": "axelar1s8unjkst9sjc8csa8xu7sspv4maz8frl34ac2ypny0mylllyuz9qej9lfk", "codeId": 855, - "domainSeparator": "0xe33a8ab3341e36bdcc552924ea42c85ef40dc2cfa41259eb166fb254bc3f036a" + "domainSeparator": "0x293407cef6cb084c2c7ca31794d4cc95d8c3ea2aced086aebb518a2c37b28dc6", + "address": "axelar1uuja08qdy790ewq9mz0r6t7c4yp9fqccu9f9zssr4tu4k0l52yeqjhckm3" }, "storeCodeProposalId": "82", "storeCodeProposalCodeHash": "00428ef0483f103a6e1a5853c4b29466a83e5b180cc53a00d1ff9d022bc2f03a" diff --git a/axelar-chains-config/info/mainnet.json b/axelar-chains-config/info/mainnet.json index ed167bace..e9c822c71 100644 --- a/axelar-chains-config/info/mainnet.json +++ b/axelar-chains-config/info/mainnet.json @@ -96,22 +96,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x9ABE4944e01B8524b11821A330469f3369E59998" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" }, "AxelarTransceiver": { @@ -232,22 +233,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x1B66687e842Ec92673D16CfddC4765Ea3C5008cB" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -355,22 +357,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x87DC04B3244C302746020fD705c70B7f53C3eB89" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -482,22 +485,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "proxySalt": "ITS v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0xBCDeF0cD0454D6e583851D37DBc2e0b42f61DccF" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -608,22 +612,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x9ABE4944e01B8524b11821A330469f3369E59998" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -732,22 +737,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x87DC04B3244C302746020fD705c70B7f53C3eB89" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" }, "AxelarTransceiver": { @@ -869,22 +875,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -999,22 +1006,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "proxySalt": "ITS v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1122,22 +1130,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1245,22 +1254,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1373,22 +1383,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1505,22 +1516,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1632,22 +1644,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1761,22 +1774,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -1888,22 +1902,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "salt": "ITS Factory v1.0.0", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2107,22 +2122,23 @@ "salt": "Create3Deployer" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x44dDBDD2c6CC9c5e0F4555620c06b1411F99Dc03", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x2f8102DeA2caaee1Ec5Fe67754F828353C4c180F", - "interchainTokenDeployer": "0xCE014b2DCB26d77d4e8206A7EF5e33985E442d38", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xe61708726841123d1995DAc8f13277307E4D783A", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0xAD50DBfA95FD82dE95e68Fd90c77DD08bbB06E9A" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2234,22 +2250,23 @@ "salt": "Operators" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2342,22 +2359,23 @@ "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" }, "InterchainTokenService": { - "salt": "ITS v1.2.4", + "salt": "ITS v2.0.1", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "proxySalt": "ITS v1.0.0", - "tokenManagerDeployer": "0x121b0e54Cd7ad2BBCb4c4C9275697978EBaF3653", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", "interchainToken": "0x7F9F70Da4af54671a6abAc58e705b5634cac8819", - "interchainTokenDeployer": "0x58667c5f134420Bf6904C7dD01fDDcB4Fea3a760", - "tokenManager": "0x81a0545091864617E7037171FdfcBbdCFE3aeb23", - "tokenHandler": "0x07715674F74c560200c7C95430673180812fCE73", - "implementation": "0x6d59D9360BDAe406614b7E61c53F43a03198A4ef", + "interchainTokenDeployer": "0xC605424cEF54f4Fe7FF7c6EC01a6D622d473E711", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", - "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900" }, "InterchainTokenFactory": { "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", "salt": "ITS Factory v1.0.0", - "implementation": "0xA852412D2d91fE05d790934B6E64C3C351fAB54f", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, @@ -2415,13 +2433,15 @@ ], "initialVerifierSetId": "cfcd6101b38099c6b05d621699c6ecb61673cc845581353d91b3026b649b0547", "address": "0xe432150cce91c13a887f7D836923d5597adD8E31", - "implementation": "0x05823c334150a48ACD5D325fBA16147c21bA3653", - "implementationCodehash": "0x7da68e9180281f2c4c230a5d51c1b8a24dd81df20b3595849d59097bd5f7f7a5", - "deploymentMethod": "create", + "implementation": "0xb87D957935E63dbA9aCd958ee702c17AeCD2a4dA", + "implementationCodehash": "0x44ff4ac1f2d4fb10228a86f2dfe8d39a5301764c2428920561ebdde60fa87a29", + "deploymentMethod": "create2", "previousSignersRetention": 15, "domainSeparator": "0x3c8c7d9e180f608dcf6fc9b1c3ef905ac295b1c4cb2fe8ca2c4fcde1b6e9a8c6", "minimumRotationDelay": 86400, - "connectionType": "amplifier" + "connectionType": "amplifier", + "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "v6.0.4" }, "InterchainGovernance": { "address": "0xB8Cd93C83A974649D76B1c19f311f639e62272BC" @@ -2441,6 +2461,26 @@ "address": "0x2d5d7d31F671F86C782533cc367F14109a082712", "implementation": "0xdC46f07661B673Fc262f61FC5b05B10A58a3b7fE", "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" + }, + "InterchainTokenService": { + "salt": "ITS v2.0.1", + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "proxySalt": "ITS v1.0.0", + "tokenManagerDeployer": "0x3d36C02D7EE86F25565f319E71641CEFeD0eac81", + "interchainToken": "0xF4E61a459343fb9fEA5A479176Afd435404aD39e", + "interchainTokenDeployer": "0x2abe986344f7196E6c4CDF74FA0657f493fFec5a", + "tokenManager": "0xc8e58E2BA863bFb86869227f8264d99de7738933", + "tokenHandler": "0x151198A9770107F01219Dfc5fc18e168DD529055", + "gatewayCaller": "0x3193C87f2FA481976c7Ec40e95f6Deba2d26b900", + "implementation": "0x0F55A4E925F41BB9B88A7D06ec11F14FD7ce6A6B", + "predeployCodehash": "0x08a4a556c4db879b4f24104d13a8baf86915d58b12c81b382dfea2a82d2856cf", + "address": "0xB5FB4BE02232B1bBA4dC8f81dc24C26980dE9e3C" + }, + "InterchainTokenFactory": { + "deployer": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05", + "salt": "ITS Factory v1.0.0", + "implementation": "0x588c70B10E9edA627A2496B09edc69b79E2d72af", + "address": "0x83a93500d23Fbc3e82B410aD07A6a9F7A0670D66" } }, "explorer": { @@ -2454,18 +2494,27 @@ "confirmations": 1, "finality": "finalized", "approxFinalityWaitTime": 1 - } - }, - "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" + "stellar": { + "name": "Stellar", + "axelarId": "stellar", + "rpc": "https://rpc.ankr.com/stellar_soroban", + "horizonRpc": "https://horizon.stellar.org", + "networkType": "mainnet", + "chainType": "stellar", + "decimals": 7, + "finality": "1", + "tokenSymbol": "XLM", + "tokenAddress": "CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA", + "contracts": { + "AxelarGateway": {} + }, + "approxFinalityWaitTime": 1, + "explorer": { + "name": "Soroban Nownodes", + "url": "https://soroban.nownodes.io" + } + } }, "axelar": { "axelarId": "axelar", @@ -2480,8 +2529,8 @@ "contracts": { "ServiceRegistry": { "governanceAccount": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "storeCodeProposalId": "227", - "storeCodeProposalCodeHash": "aa762ada72f295c0890c7beca089b13498b95d04f59262cea4bdf64b07d9edc7", + "storeCodeProposalId": "271", + "storeCodeProposalCodeHash": "fcbd66ffc824fc52383132d7a57617e9bc40dd1521ecad77341726434f801406", "codeId": 4, "lastUploadedCodeId": 4, "address": "axelar1rpj2jjrv3vpugx9ake9kgk3s2kgwt0y60wtkmcgfml5m3et0mrls6nct9m" @@ -2489,9 +2538,9 @@ "Router": { "adminAddress": "axelar1nctnr9x0qexemeld5w7w752rmqdsqqv92dw9am", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "storeCodeProposalId": "234", - "storeCodeProposalCodeHash": "c89ad7b98afcafea866ff9b9064ade1dc865a0b4a257cbd0a80fae433c916eab", - "codeId": 11, + "storeCodeProposalId": "266", + "storeCodeProposalCodeHash": "7368e7507f29ae9236c9c41fc1fbe5456260fb91acf1e2ff07d677bdcbca7e9f", + "codeId": 18, "address": "axelar1d9atnamjjhtc46zmzyc202llqs0rhtxnphs6mkjurekath3mkgtq7hsk93", "executeProposalId": "242" }, @@ -2514,16 +2563,16 @@ "10" ] }, - "storeCodeProposalId": "246", - "storeCodeProposalCodeHash": "58bad05811e78e958da699aad49f39e6f3ad2502db3f494459208bb2d1f02bfa", + "storeCodeProposalId": "268", + "storeCodeProposalCodeHash": "095c1caca4f9b7381519bd8395f3f558202fd4d4ad03f223dd8a2e991c568bd6", "codeId": 5, "lastUploadedCodeId": 5, "address": "axelar1harq5xe68lzl2kx4e5ch4k8840cgqnry567g0fgw7vt2atcuugrqfa7j5z" }, "Coordinator": { "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", - "storeCodeProposalId": "229", - "storeCodeProposalCodeHash": "1c058dec7e9c294f4e7401bd9611d2e811e0cf3a41917c4dd22766ea40b95fa2", + "storeCodeProposalId": "270", + "storeCodeProposalCodeHash": "a57dccb229cfab931b904618af2ebc854699a25a963c231834837d88ee4a0217", "codeId": 6, "address": "axelar1rwy79m8u76q2pm3lrxednlgtqjd8439l7hmctdxvjsv2shsu9meq8ntlvx", "executeProposalId": "245" @@ -2532,8 +2581,8 @@ "adminAddress": "axelar1nctnr9x0qexemeld5w7w752rmqdsqqv92dw9am", "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", "blockExpiry": 10, - "storeCodeProposalId": "230", - "storeCodeProposalCodeHash": "a01cfc3c3a6e5fb22ea5818f2de8a453e0f37b9a54380d76eb4d4ea8d8b6de94", + "storeCodeProposalId": "261", + "storeCodeProposalCodeHash": "765929ba3060cdfa5573ec621cb91b3a77f7d9fbc8d1b953f545876bb5abb05e", "codeId": 7, "address": "axelar14a4ar5jh7ue4wg28jwsspf23r8k68j7g5d6d3fsttrhp42ajn4xq6zayy5", "executeProposalId": "244" @@ -2565,8 +2614,8 @@ "encoder": "abi", "keyType": "ecdsa" }, - "storeCodeProposalId": "235", - "storeCodeProposalCodeHash": "6c4d2f520d62bcd7edd4de772257e74b48a8dfba39f853a9c12ff51ca9ea1e83", + "storeCodeProposalId": "263", + "storeCodeProposalCodeHash": "00428ef0483f103a6e1a5853c4b29466a83e5b180cc53a00d1ff9d022bc2f03a", "codeId": 12 }, "Gateway": { @@ -2574,8 +2623,8 @@ "address": "axelar1w8frw33jn0yx59845wdgk0yru6fxvgr6hlh4xfdtdf08y5jamcnsyu0z6u" }, "hedera": {}, - "storeCodeProposalId": "232", - "storeCodeProposalCodeHash": "eae97caf40ae6b5eea1e145eec27a59e73aa6f9de389fa9ca0cfc9354a3b68ac", + "storeCodeProposalId": "264", + "storeCodeProposalCodeHash": "2ba600ee0d162184c9387eaf6fad655f1d75db548f93e379f0565cb2042d856f", "codeId": 9 }, "VotingVerifier": { @@ -2606,9 +2655,26 @@ "msgIdFormat": "hex_tx_hash_and_event_index", "addressFormat": "eip55" }, - "storeCodeProposalId": "231", - "storeCodeProposalCodeHash": "e256445185284a52fc0ca4163c5ffd02d7f605890fb5882d01d540966957465b", + "storeCodeProposalId": "267", + "storeCodeProposalCodeHash": "d9412440820a51bc48bf41a77ae39cfb33101ddc6562323845627ea2042bf708", "codeId": 8 + }, + "InterchainTokenService": { + "storeCodeProposalId": "262", + "storeCodeProposalCodeHash": "b60d0d227c7a400a0fcc80ed52f0e6688e5da6db676a61ed8b6942823294031d", + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "adminAddress": "axelar1nctnr9x0qexemeld5w7w752rmqdsqqv92dw9am", + "lastUploadedCodeId": 15, + "codeId": 15, + "address": "axelar1aqcj54lzz0rk22gvqgcn8fr5tx4rzwdv5wv5j9dmnacgefvd7wzsy2j2mr" + }, + "AxelarnetGateway": { + "storeCodeProposalId": "269", + "storeCodeProposalCodeHash": "c7286d0f59276b794641bdfbb4f96fafcee3553b67f3397d662a4683968f525b", + "nexus": "axelar17h8uk4ct0mdv9mgkuxszt4gp2htpfr08mge20r", + "lastUploadedCodeId": 22, + "codeId": 22, + "address": "axelar18vsne7lns36uvm8gv2cv5jl2lghts0xm7dvzpqzn70dl56gk9hvsgu9sqg" } } } diff --git a/axelar-chains-config/info/stagenet.json b/axelar-chains-config/info/stagenet.json index 4f8063588..509ccfcfc 100644 --- a/axelar-chains-config/info/stagenet.json +++ b/axelar-chains-config/info/stagenet.json @@ -1677,6 +1677,229 @@ "deployer": "0xBeF25f4733b9d451072416360609e5A4c115293E" } } + }, + "sui": { + "name": "Sui", + "axelarId": "sui", + "networkType": "testnet", + "rpc": "https://sui-testnet-rpc.publicnode.com:443", + "tokenSymbol": "SUI", + "chainType": "sui", + "decimals": 9, + "explorer": { + "name": "Suiscan", + "url": "https://suiscan.xyz/testnet" + }, + "contracts": { + "AxelarGateway": { + "address": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853", + "versions": [ + "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853" + ], + "structs": { + "WeightedSigner": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::weighted_signer::WeightedSigner", + "Bytes32": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::bytes32::Bytes32", + "WeightedSigners": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::weighted_signers::WeightedSigners", + "Signature": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::proof::Signature", + "Proof": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::proof::Proof", + "Message": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::message::Message", + "SignersRotated": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::SignersRotated", + "ChannelCreated": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::ChannelCreated", + "ChannelDestroyed": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::ChannelDestroyed", + "ContractCall": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::ContractCall", + "MessageApproved": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::MessageApproved", + "MessageExecuted": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::events::MessageExecuted", + "AxelarSigners": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::auth::AxelarSigners", + "MessageToSign": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::auth::MessageToSign", + "Channel": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::channel::Channel", + "ApprovedMessage": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::channel::ApprovedMessage", + "OwnerCap": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::owner_cap::OwnerCap", + "MessageTicket": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::message_ticket::MessageTicket", + "MessageStatus": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::message_status::MessageStatus", + "Gateway_v0": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::gateway_v0::Gateway_v0", + "CommandType": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::gateway_v0::CommandType", + "Gateway": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853::gateway::Gateway" + }, + "objects": { + "Gateway": "0xf9e4db9b6a182c08d46c0f14fee39c5893615a91d18e761dfd6bb4bb8163d2a8", + "UpgradeCap": "0xf84441c659c1ca9bec6d5c43662e37268b8553295484e634f6bca3d3d6f7fc0d", + "Gatewayv0": "0x2b6716447cd0716b0a11cc418cd51d257fc4eae6dc1d2dd052083ed704866029", + "OwnerCap": "0xb74cd6aef92429b36fdf4ea8ee72b80ebc1d0af6a82946a7cfd1023b4bd5c1c3" + }, + "domainSeparator": "0x254a1ae90417f8649798698e95a1140808a701c38c8f5723a930b9d0666e54b4", + "operator": "0x8e3d8f44a89f6bf3573ee0d559722bef0f46c215153caca12322e1ed93046c1f", + "minimumRotationDelay": 0 + }, + "Utils": { + "address": "0xaa789bbc9d03a48d29e950ecbc9bc78918e1696e4a76adf7230416f0f49e4838", + "versions": [ + "0xaa789bbc9d03a48d29e950ecbc9bc78918e1696e4a76adf7230416f0f49e4838" + ], + "structs": {}, + "objects": { + "UpgradeCap": "0x386fa0c2c72b84265011d67cbf567b244818c619ec7f47c078e1cb3982b9c8b7" + } + }, + "VersionControl": { + "address": "0x6ee95b0d28a3cdee73818cff21b4be3afd64da603e9c112cac26d301a2ac9c7a", + "versions": [ + "0x6ee95b0d28a3cdee73818cff21b4be3afd64da603e9c112cac26d301a2ac9c7a" + ], + "structs": { + "VersionControl": "0x6ee95b0d28a3cdee73818cff21b4be3afd64da603e9c112cac26d301a2ac9c7a::version_control::VersionControl" + } + }, + "RelayerDiscovery": { + "address": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13", + "versions": [ + "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13" + ], + "structs": { + "Function": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::transaction::Function", + "MoveCall": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::transaction::MoveCall", + "Transaction": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::transaction::Transaction", + "TransactionRegistered": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::events::TransactionRegistered", + "TransactionRemoved": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::events::TransactionRemoved", + "RelayerDiscovery_v0": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::relayer_discovery_v0::RelayerDiscovery_v0", + "OwnerCap": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::owner_cap::OwnerCap", + "RelayerDiscovery": "0x7a9c114a2774ea134973df867ec03300fcf7c69439b5adcaef71ee970d06fd13::discovery::RelayerDiscovery" + }, + "objects": { + "RelayerDiscovery": "0x0b72704384dedc38a1bc0201b6dee2e460f280455b061fcb14e8c02bdb8dc1e9", + "RelayerDiscoveryv0": "0x6d122536d1fa314efe6c84f8e50fcc062d4836df5d0e6a03434d1008bf3c62a5", + "OwnerCap": "0x3d108051e50dd9709db3f43f63abaeebea4ba6b2bd60423082ad0c53bc384241" + } + }, + "GasService": { + "address": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f", + "versions": [ + "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f" + ], + "structs": { + "GasPaid": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::events::GasPaid", + "GasAdded": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::events::GasAdded", + "Refunded": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::events::Refunded", + "GasCollected": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::events::GasCollected", + "GasService_v0": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::gas_service_v0::GasService_v0", + "GasService": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::gas_service::GasService", + "GasCollectorCap": "0x2325fa92ccd9096c1348cdae192b83c34c05809755a393b039447b22da117e9f::gas_service::GasCollectorCap" + }, + "objects": { + "GasCollectorCap": "0x18ac3f4ad585d6beb31d7b3143e4f8a1a0d87b574fbd2178391d2ae375cb50a2", + "GasService": "0xbead8da6776e332c01e74bcb72e97df60566602c9832711ed20669d318947064", + "GasServicev0": "0x8b01cd81c474f3a4538f4268729e2919e8afa92c7261905d10aaf5052fe22d22" + } + }, + "Operators": { + "address": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f", + "versions": [ + "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f" + ], + "structs": { + "OwnerCap": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::OwnerCap", + "OperatorCap": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::OperatorCap", + "Operators": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::Operators", + "Borrow": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::Borrow", + "OperatorAdded": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::OperatorAdded", + "OperatorRemoved": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::OperatorRemoved", + "CapabilityStored": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::CapabilityStored", + "CapabilityRemoved": "0xc072ff6b307e2951e4175688f2e4540e36af7b0f2d5aac0a627f05945ea67a2f::operators::CapabilityRemoved" + }, + "objects": { + "Operators": "0xd2a98d365ae7f3d7926ba7ed8b9d128dc51bff6e64628faeb5cf73e140f40674", + "OwnerCap": "0x2487fabff55113e9832609602b39b59498a7be2def8545dbf665be0d35a0d698" + } + }, + "Abi": { + "address": "0xd1012d24cc97fa922c18a32cf833f3f67563c8e35b7a31842cd9b57b07d278cd", + "versions": [ + "0xd1012d24cc97fa922c18a32cf833f3f67563c8e35b7a31842cd9b57b07d278cd" + ], + "structs": { + "AbiReader": "0xd1012d24cc97fa922c18a32cf833f3f67563c8e35b7a31842cd9b57b07d278cd::abi::AbiReader", + "AbiWriter": "0xd1012d24cc97fa922c18a32cf833f3f67563c8e35b7a31842cd9b57b07d278cd::abi::AbiWriter" + } + }, + "ITS": { + "address": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4", + "versions": [ + "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4" + ], + "structs": { + "FlowLimit": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::flow_limit::FlowLimit", + "CoinManagement": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::coin_management::CoinManagement", + "CoinInfo": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::coin_info::CoinInfo", + "TokenId": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::token_id::TokenId", + "UnregisteredTokenId": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::token_id::UnregisteredTokenId", + "CoinRegistered": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::CoinRegistered", + "InterchainTransfer": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::InterchainTransfer", + "InterchainTokenDeploymentStarted": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::InterchainTokenDeploymentStarted", + "InterchainTransferReceived": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::InterchainTransferReceived", + "UnregisteredCoinReceived": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::UnregisteredCoinReceived", + "TrustedAddressSet": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::TrustedAddressSet", + "TrustedAddressRemoved": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::TrustedAddressRemoved", + "FlowLimitSet": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::events::FlowLimitSet", + "InterchainAddressTracker": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::address_tracker::InterchainAddressTracker", + "CoinData": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::coin_data::CoinData", + "UnregisteredCoinData": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::unregistered_coin_data::UnregisteredCoinData", + "TrustedAddresses": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::trusted_addresses::TrustedAddresses", + "InterchainTransferTicket": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::interchain_transfer_ticket::InterchainTransferTicket", + "ITS_v0": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::its_v0::ITS_v0", + "OwnerCap": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::owner_cap::OwnerCap", + "ITS": "0x20b10f47de796ff8367099064a1e5f2e16ec7ac2c2e58b3b5430b9a432f7a6d4::its::ITS" + }, + "objects": { + "ITS": "0x4b320ef75ed93894aa7963ebd8a8ab5aaa1f450d11a706838b2edd71cac7e503", + "ITSv0": "0x2a6f90f794e3936204eb55624791b0df7b6f88b5c8c81811cbeaade7ed7ec150", + "ChannelId": "0x7441be0bea0482f6b0ce7c2741a37197edec4b76a8bc64f908b61f75c54f3121", + "OwnerCap": "0x376bb3ffe65319435e249f99db87e17ddcce35f7835e63917097cbca94220c12", + "UpgradeCap": "0x1e411d10bd1f98f6a1085b3f2e82fc5539b75af570386703e31a0fed75cb6e35" + } + }, + "Example": { + "address": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51", + "versions": [ + "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51" + ], + "structs": { + "Singleton": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::its::Singleton", + "Executed": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::gmp::Executed", + "ExecutedWithToken": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::its::ExecutedWithToken", + "TOKEN": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::token::TOKEN", + "TOKEN_A": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::token_a::TOKEN_A", + "TOKEN_B": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::token_b::TOKEN_B", + "TOKEN_C": "0x1f604a6c7ea5bfc1d50a8a4b5f18e21aacbfe8d33b14b49043db2147e00e4e51::token_c::TOKEN_C" + }, + "objects": { + "GmpSingleton": "0x440760b4fe0d2c9b96dca08f358d4be1c7c4049ceb2077bc62be891ee54f53bb", + "GmpChannelId": "0x5b0c499f1d350186fcf5b658af7d039ae24fd8dcc5aa3ba2238abb9b216bbca3", + "ItsSingleton": "0x8e45aa05317c1162b74d8a1996471fa7abebeb8bba6647fd82c3026c0143929d", + "ItsChannelId": "0x948d542f4f0d778b857b5249b55cb829d7d5c678e7c1e6a64069c18015beb196" + } + } + }, + "finality": "1", + "approxFinalityWaitTime": 1 + }, + "stellar": { + "name": "Stellar", + "axelarId": "stellar", + "rpc": "https://soroban-testnet.stellar.org", + "horizonRpc": "https://horizon-testnet.stellar.org", + "networkType": "testnet", + "chainType": "stellar", + "decimals": 7, + "finality": "1", + "approxFinalityWaitTime": 1, + "tokenSymbol": "XLM", + "tokenAddress": "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC", + "contracts": { + "AxelarGateway": {} + }, + "explorer": { + "name": "Stellar Expert", + "url": "https://stellar.expert/explorer/testnet" + } } }, "axelar": { @@ -1794,9 +2017,24 @@ "codeId": 21, "address": "axelar1x3xd2z2p3703cdwu98tc27x5j9tgq60lyxdwtnggx05zj3egg0wqsnckd0" }, + "sui": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "adminAddress": "axelar1l7vz4m5g92kvga050vk9ycjynywdlk4zhs07dv", + "signingThreshold": [ + "51", + "100" + ], + "serviceName": "amplifier", + "verifierSetDiffThreshold": 0, + "encoder": "bcs", + "keyType": "ecdsa", + "codeId": 21, + "domainSeparator": "0x254a1ae90417f8649798698e95a1140808a701c38c8f5723a930b9d0666e54b4", + "address": "axelar1ktjfpfrlgmh8s76ltjhhv0xcj0st0d0xrjh5rvm3gr5u66x9xvpsm0juw8" + }, "storeCodeProposalId": "69", "storeCodeProposalCodeHash": "00428ef0483f103a6e1a5853c4b29466a83e5b180cc53a00d1ff9d022bc2f03a", - "lastUploadedCodeId": 9 + "lastUploadedCodeId": 21 }, "Gateway": { "flow": { @@ -1807,9 +2045,13 @@ "codeId": 22, "address": "axelar1zyr567z9v779kcdmf7rq624zk3ea4nq0s948r83h2f5xqzvhxyqs5vq7p7" }, + "sui": { + "codeId": 22, + "address": "axelar1yklflthhfxy5dtd2nzg83n0nxgh3e04w6fn2fd9v0eqselu32lxq0gyv6w" + }, "storeCodeProposalId": "70", "storeCodeProposalCodeHash": "2ba600ee0d162184c9387eaf6fad655f1d75db548f93e379f0565cb2042d856f", - "lastUploadedCodeId": 8 + "lastUploadedCodeId": 22 }, "VotingVerifier": { "flow": { @@ -1842,9 +2084,24 @@ "codeId": 24, "address": "axelar1h8gx392pzlj6ff5lv3kc9jwegu0wwqjrur7ht93frus5czape9ns3j3d0a" }, + "sui": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "serviceName": "amplifier", + "sourceGatewayAddress": "0x0a011637cbd43d101896d12d85cc8701bcb4ec884f556a9a15b1e26c72627853", + "msgIdFormat": "base58_tx_digest_and_event_index", + "addressFormat": "sui", + "votingThreshold": [ + "51", + "100" + ], + "blockExpiry": 10, + "confirmationHeight": 1, + "codeId": 24, + "address": "axelar1x8rqw5l5gzye7d063zupr5zlelfvjxq5z6rr7wy643ufuflhl6xqhgr5wt" + }, "storeCodeProposalId": "72", "storeCodeProposalCodeHash": "d9412440820a51bc48bf41a77ae39cfb33101ddc6562323845627ea2042bf708", - "lastUploadedCodeId": 7 + "lastUploadedCodeId": 24 }, "InterchainTokenService": { "storeCodeProposalId": "65", diff --git a/axelar-chains-config/info/testnet.json b/axelar-chains-config/info/testnet.json index dd4e904c7..f64ca0bf3 100644 --- a/axelar-chains-config/info/testnet.json +++ b/axelar-chains-config/info/testnet.json @@ -2333,31 +2333,163 @@ "owner": "0x6f24A47Fc8AE5441Eb47EFfC3665e70e69Ac3F05" } } + }, + "sui": { + "name": "Sui", + "axelarId": "sui", + "networkType": "testnet", + "rpc": "https://sui-testnet-rpc.publicnode.com:443", + "tokenSymbol": "SUI", + "chainType": "sui", + "finality": "1", + "decimals": 9, + "approxFinalityWaitTime": 1, + "explorer": { + "name": "Suiscan", + "url": "https://suiscan.xyz/testnet" + }, + "contracts": { + "AxelarGateway": { + "address": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4", + "versions": { + "0": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4" + }, + "structs": { + "WeightedSigner": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::weighted_signer::WeightedSigner", + "Bytes32": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::bytes32::Bytes32", + "WeightedSigners": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::weighted_signers::WeightedSigners", + "Signature": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::proof::Signature", + "Proof": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::proof::Proof", + "Message": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::message::Message", + "SignersRotated": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::SignersRotated", + "ChannelCreated": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::ChannelCreated", + "ChannelDestroyed": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::ChannelDestroyed", + "ContractCall": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::ContractCall", + "MessageApproved": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::MessageApproved", + "MessageExecuted": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::events::MessageExecuted", + "AxelarSigners": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::auth::AxelarSigners", + "MessageToSign": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::auth::MessageToSign", + "Channel": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::channel::Channel", + "ApprovedMessage": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::channel::ApprovedMessage", + "OwnerCap": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::owner_cap::OwnerCap", + "MessageTicket": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::message_ticket::MessageTicket", + "MessageStatus": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::message_status::MessageStatus", + "Gateway_v0": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::gateway_v0::Gateway_v0", + "CommandType": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::gateway_v0::CommandType", + "Gateway": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4::gateway::Gateway" + }, + "objects": { + "Gateway": "0x6fc18d39a9d7bf46c438bdb66ac9e90e902abffca15b846b32570538982fb3db", + "UpgradeCap": "0xb550df1b7319a04d4833571c7082b20262c77a6cd2be78b66aa1a668b4ebb6a3", + "Gatewayv0": "0x1bf6a576436c14ea4dd90b35856ab276296a1c774a584aa7678e8905ebf9a6b5", + "OwnerCap": "0x8d417b896f1f05c74f8f52446fb1a61b603d43a93c69cfae052f9501ba0340a0" + }, + "domainSeparator": "0xf221c54a1a478f48c840a24cf2b96f77c9bc369a40570744b8fedd91df001624", + "operator": "0xadc53ffb50d2fc245ddb88223619b837f743fbd420745d97a3c3e14e0beb7940", + "minimumRotationDelay": 0 + }, + "Utils": { + "address": "0x9d817589ae367cc3f3bc9ca40394be79e5853bfca98014f27acfd4da9db78421", + "versions": { + "0": "0x9d817589ae367cc3f3bc9ca40394be79e5853bfca98014f27acfd4da9db78421" + }, + "structs": {}, + "objects": { + "UpgradeCap": "0x16c316ea6204ac12648e1dc02f246ea9f2f9d84df5a6accca4d3d0d2a9a6727f" + } + }, + "VersionControl": { + "address": "0x6e8ebd241a5b89499e0cd104540f8025af111dcd42644bb732dbc170e395ce0c", + "versions": { + "0": "0x6e8ebd241a5b89499e0cd104540f8025af111dcd42644bb732dbc170e395ce0c" + }, + "structs": { + "VersionControl": "0x6e8ebd241a5b89499e0cd104540f8025af111dcd42644bb732dbc170e395ce0c::version_control::VersionControl" + } + }, + "RelayerDiscovery": { + "address": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2", + "versions": { + "0": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2" + }, + "structs": { + "Function": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::transaction::Function", + "MoveCall": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::transaction::MoveCall", + "Transaction": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::transaction::Transaction", + "TransactionRegistered": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::events::TransactionRegistered", + "TransactionRemoved": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::events::TransactionRemoved", + "RelayerDiscovery_v0": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::relayer_discovery_v0::RelayerDiscovery_v0", + "OwnerCap": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::owner_cap::OwnerCap", + "RelayerDiscovery": "0x2f871726329f555bc3fa6eec129f259a8bce3cb3989b39dd75a627a1a0961bc2::discovery::RelayerDiscovery" + }, + "objects": { + "RelayerDiscovery": "0xac080ff19b7d44c9362b83628253a4b55747779096034a72ca62ce89a188305e", + "RelayerDiscoveryv0": "0xea25ef8da775be554c37f5b16dc15fdb0bd98cfb10225a8727cb4ac456334d95", + "OwnerCap": "0xeaf88fa70a30c44396b3d0620d706de25f1b4940651309577b117ac5b75ea62b" + } + }, + "GasService": { + "address": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75", + "versions": { + "0": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75" + }, + "structs": { + "GasPaid": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::events::GasPaid", + "GasAdded": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::events::GasAdded", + "Refunded": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::events::Refunded", + "GasCollected": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::events::GasCollected", + "GasService_v0": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::gas_service_v0::GasService_v0", + "GasService": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::gas_service::GasService", + "GasCollectorCap": "0x3e7044fe789a4f466964e520e4793b467fcdca2d62bef43213d51d0756fc5a75::gas_service::GasCollectorCap" + }, + "objects": { + "GasCollectorCap": "0x7f77c42534a90af5db0ee95a864c9d99c4091a209f527232ad44e2b614ec8c99", + "GasService": "0x4232c20cc845f024ff4e99f7395d6b0e5a3b884cc655b327935239dc553f840e", + "GasServicev0": "0x384984fd4de9c1d2521a4f055f173195e783ca88547e7b2f346dc829ab9658ce" + } + }, + "Operators": { + "address": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7", + "versions": { + "0": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7" + }, + "structs": { + "OwnerCap": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::OwnerCap", + "OperatorCap": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::OperatorCap", + "Operators": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::Operators", + "Borrow": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::Borrow", + "OperatorAdded": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::OperatorAdded", + "OperatorRemoved": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::OperatorRemoved", + "CapabilityStored": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::CapabilityStored", + "CapabilityRemoved": "0xbf6b0b743c01709fc636f41d74dd1db15b140bb6bb7ff4897dcf381cbec58db7::operators::CapabilityRemoved" + }, + "objects": { + "Operators": "0xa2e20bc8985680ac4b13f2d866d4a96fb749097b8c92e133fbdfd3b7755b2c18", + "OwnerCap": "0xa3b2b74c6aff5f05ddf9175d3138285209219b84b359b917ea273b05d2b6bb56" + } + } + } } }, "stellar": { + "name": "Stellar", "axelarId": "stellar", "rpc": "https://soroban-testnet.stellar.org", "horizonRpc": "https://horizon-testnet.stellar.org", "networkType": "testnet", + "chainType": "stellar", + "decimals": 7, + "finality": "1", + "approxFinalityWaitTime": 1, + "tokenSymbol": "XLM", + "tokenAddress": "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC", + "contracts": { + "AxelarGateway": {} + }, "explorer": { "name": "Stellar Expert", "url": "https://stellar.expert/explorer/testnet" - }, - "tokenSymbol": "XLM" - }, - "sui": { - "name": "Sui", - "axelarId": "sui", - "networkType": "testnet", - "rpc": "https://fullnode.testnet.sui.io:443", - "tokenSymbol": "SUI", - "chainType": "sui", - "explorer": { - "name": "Suiscan", - "url": "https://suiscan.xyz" - }, - "contracts": {} + } }, "axelar": { "contracts": { @@ -2459,6 +2591,21 @@ "codeId": 18, "address": "axelar1kleasry5ed73a8u4q6tdeu80hquy4nplfnrntx3n6agm2tcx40fssjk7gj" }, + "sui": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "adminAddress": "axelar17qafmnc4hrfa96cq37wg5l68sxh354pj6eky35", + "signingThreshold": [ + "51", + "100" + ], + "serviceName": "amplifier", + "verifierSetDiffThreshold": 0, + "encoder": "bcs", + "keyType": "ecdsa", + "codeId": 18, + "domainSeparator": "0xf221c54a1a478f48c840a24cf2b96f77c9bc369a40570744b8fedd91df001624", + "address": "axelar1v8jrupu2rqpskwgtr69max0ajul92q8z5mdxd505m2hu3xc5jzcqm8zyc6" + }, "storeCodeProposalId": "175", "storeCodeProposalCodeHash": "00428ef0483f103a6e1a5853c4b29466a83e5b180cc53a00d1ff9d022bc2f03a", "lastUploadedCodeId": 18 @@ -2472,6 +2619,10 @@ "codeId": 24, "address": "axelar1xgr3j2wuc9ut7yjz4nr677scmzd4z6lh3srnpmdh0nyqzcfka3rqe2nsmq" }, + "sui": { + "codeId": 24, + "address": "axelar1svl69e32m240xgjluezrvpudjn92usrn3dqzfm2tzn3zqkn76d6qfse593" + }, "storeCodeProposalId": "181", "storeCodeProposalCodeHash": "2ba600ee0d162184c9387eaf6fad655f1d75db548f93e379f0565cb2042d856f", "lastUploadedCodeId": 24 @@ -2507,6 +2658,21 @@ "codeId": 26, "address": "axelar1ce9rcvw8htpwukc048z9kqmyk5zz52d5a7zqn9xlq2pg0mxul9mqxlx2cq" }, + "sui": { + "governanceAddress": "axelar10d07y265gmmuvt4z0w9aw880jnsr700j7v9daj", + "serviceName": "amplifier", + "sourceGatewayAddress": "0x6ddfcdd14a1019d13485a724db892fa0defe580f19c991eaabd690140abb21e4", + "votingThreshold": [ + "51", + "100" + ], + "blockExpiry": 10, + "confirmationHeight": 100000, + "msgIdFormat": "base58_tx_digest_and_event_index", + "addressFormat": "sui", + "codeId": 26, + "address": "axelar1sykyha8kzf35kc5hplqk76kdufntjn6w45ntwlevwxp74dqr3rvsq7fazh" + }, "storeCodeProposalId": "183", "storeCodeProposalCodeHash": "d9412440820a51bc48bf41a77ae39cfb33101ddc6562323845627ea2042bf708", "lastUploadedCodeId": 26 diff --git a/axelar-chains-config/tests/schema/index.js b/axelar-chains-config/tests/schema/index.js index 7ddbe39cd..28b90d686 100644 --- a/axelar-chains-config/tests/schema/index.js +++ b/axelar-chains-config/tests/schema/index.js @@ -79,7 +79,7 @@ export const chainValueSchema = { approxFinalityWaitTime: { type: 'number' }, timeout: { type: 'number' }, }, - required: ['name', 'axelarId', 'rpc', 'tokenSymbol', 'contracts', 'explorer', 'chainType'], + required: ['name', 'axelarId', 'rpc', 'tokenSymbol', 'contracts', 'explorer', 'chainType', 'finality', 'approxFinalityWaitTime'], }; export const chainsSchema = { diff --git a/cosmwasm/README.md b/cosmwasm/README.md index b32e94881..3cbd5c3e8 100644 --- a/cosmwasm/README.md +++ b/cosmwasm/README.md @@ -112,28 +112,44 @@ This folder contains deployment scripts for cosmwasm contracts needed for amplif Deploy each contract. Chain name should match the key of an object in the `chains` section of the config. Chain name should be omitted for contracts that are not chain specific. - `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 "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 "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 "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"` + `node deploy-contract.js [upload|instantiate|upload-instantiate|migrate] -m [mnemonic] -a [path to contract artifacts] -c [contract name] -e [environment] -n ` + +Available subcommands: + +- `upload`: Uploads wasm file and saves codeId to `lastUploadedCodeId` in config + +- `instantiate`: Instantiates a contract, it gets the codeId by order of priority from: + + 1. Value of `--codeId` option + 2. From the network when using `--fetchCodeId` option by comparing previously uploaded bytecode's code hash with config `storeCodeProposalCodeHash` + 3. Value of previously saved `lastUploadedCodeId` in config + +- `upload-instantiate`: Both uploads and then instantiates a contract using the code Id that was just created. It doesn't accept `--codeId` nor `--fetchCodeId` options + +- `migrate`: Migrates a contract using a new codeId, which is retrieved the same way as `instantiate` subcommand. The migrate message must be provided using the `--msg` option. + +Some of the contracts depend on each other and need to be deployed in a specific order. Note the connection router and axelarnet gateway each need to know the other's address, so you need to pass `--instantiate2`, and upload both contract before instatiating them. + +Example deployments: + +1. `node deploy-contract.js upload -m [mnemonic] -a [path to artifacts] -c "AxelarnetGateway" --instantiate2 -e devnet` +2. `node deploy-contract.js upload -m [mnemonic] -a [path to artifacts] -c "Router" --instantiate2 -e devnet` +3. `node deploy-contract.js instantiate -m [mnemonic] -c "AxelarnetGateway" --instantiate2 -e devnet` +4. `node deploy-contract.js instantiate -m [mnemonic] -c "Router" --instantiate2 -e devnet` +5. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "ServiceRegistry" -e devnet` +6. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "Rewards" -e devnet` +7. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "Coordinator" -e devnet` +8. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "Multisig" -e devnet` +9. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "InterchainTokenService" -e devnet` +10. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "VotingVerifier" -e devnet -n "avalanche"` +11. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "Gateway" -e devnet -n "avalanche"` +12. `node deploy-contract.js upload-instantiate -m [mnemonic] -a [path to artifacts] -c "MultisigProver" -e devnet -n "avalanche"` ### Constant Address Deployment To deploy with a constant address using instantiate2, pass the `--instantiate2` flag. -To upload the contract and compute the expected address without instantiating, pass `--instantiate2` and `-u`. This will write the contract address and the code id to the config file. +To upload the contract and compute the expected address without instantiating, pass `--instantiate2` while using the `upload` subcommand. This will write the contract address and the code id to the config file. A salt can be passed with `-s`. If no salt is passed but a salt is needed for constant address deployment, the contract name will be used as a salt. -Pass `-r` to skip the upload step, and reuse the previous code id (specified in the config). ### Deploying through governance proposals diff --git a/cosmwasm/cli-utils.js b/cosmwasm/cli-utils.js index 446946d20..14fe9f5ae 100644 --- a/cosmwasm/cli-utils.js +++ b/cosmwasm/cli-utils.js @@ -121,7 +121,9 @@ const addStoreProposalOptions = (program) => { new Option('--builder ', 'a valid docker image name with tag, such as "cosmwasm/workspace-optimizer:0.16.0'), ); program.addOption( - new Option('-i, --instantiateAddresses ', 'comma separated list of addresses allowed to instantiate'), + new Option('-i, --instantiateAddresses ', 'comma separated list of addresses allowed to instantiate') + .default([]) + .argParser((addresses) => addresses.split(',').map((address) => address.trim())), ); }; diff --git a/cosmwasm/deploy-contract.js b/cosmwasm/deploy-contract.js index e2050ffae..05f5251b8 100644 --- a/cosmwasm/deploy-contract.js +++ b/cosmwasm/deploy-contract.js @@ -1,7 +1,6 @@ 'use strict'; require('dotenv').config(); -const { isNil } = require('lodash'); const { instantiate2Address } = require('@cosmjs/cosmwasm-stargate'); @@ -14,39 +13,24 @@ const { getSalt, initContractConfig, getAmplifierContractConfig, - updateCodeId, + getCodeId, uploadContract, instantiateContract, + migrateContract, } = require('./utils'); -const { Command, Option } = require('commander'); +const { Command } = require('commander'); const { addAmplifierOptions } = require('./cli-utils'); const upload = async (client, wallet, config, options) => { - const { reuseCodeId, contractName, fetchCodeId, instantiate2, salt, chainName } = options; - + const { contractName, instantiate2, salt, chainName } = options; const { contractBaseConfig, contractConfig } = getAmplifierContractConfig(config, options); - if (options.codeId) { - printInfo('Option codeId defined. Skipping upload.'); - return; - } - - if (fetchCodeId) { - printInfo('Option fetchCodeId defined. Skipping upload.'); - return; - } - - if (reuseCodeId && !isNil(contractBaseConfig.lastUploadedCodeId)) { - printInfo('Skipping upload. Reusing previously uploaded bytecode with codeId', contractBaseConfig.lastUploadedCodeId); - return; - } - printInfo('Uploading contract binary'); const { checksum, codeId } = await uploadContract(client, wallet, config, options); - printInfo('Uploaded contract binary'); + printInfo('Uploaded contract binary with codeId', codeId); contractBaseConfig.lastUploadedCodeId = codeId; if (instantiate2) { @@ -60,11 +44,18 @@ const upload = async (client, wallet, config, options) => { }; const instantiate = async (client, wallet, config, options) => { - const { contractName, chainName } = options; + const { contractName, chainName, yes } = options; const { contractConfig } = getAmplifierContractConfig(config, options); - await updateCodeId(client, config, options); + const codeId = await getCodeId(client, config, options); + printInfo('Using code id', codeId); + + if (prompt(`Proceed with instantiation on axelar?`, yes)) { + return; + } + + contractConfig.codeId = codeId; const initMsg = CONTRACTS[contractName].makeInstantiateMsg(config, options, contractConfig); const contractAddress = await instantiateContract(client, wallet, initMsg, config, options); @@ -74,8 +65,30 @@ const instantiate = async (client, wallet, config, options) => { printInfo(`Instantiated ${chainName ? chainName.concat(' ') : ''}${contractName}. Address`, contractAddress); }; -const main = async (options) => { - const { env, uploadOnly, yes } = options; +const uploadInstantiate = async (client, wallet, config, options) => { + await upload(client, wallet, config, options); + await instantiate(client, wallet, config, options); +}; + +const migrate = async (client, wallet, config, options) => { + const { yes } = options; + const { contractConfig } = getAmplifierContractConfig(config, options); + + const codeId = await getCodeId(client, config, options); + printInfo('Using code id', codeId); + + if (prompt(`Proceed with contract migration on axelar?`, yes)) { + return; + } + + contractConfig.codeId = codeId; + + const { transactionHash } = await migrateContract(client, wallet, config, options); + printInfo('Migration completed. Transaction hash', transactionHash); +}; + +const mainProcessor = async (processor, options) => { + const { env } = options; const config = loadConfig(env); initContractConfig(config, options); @@ -83,11 +96,7 @@ const main = async (options) => { const wallet = await prepareWallet(options); const client = await prepareClient(config, wallet); - await upload(client, wallet, config, options); - - if (!(uploadOnly || prompt(`Proceed with deployment on axelar?`, yes))) { - await instantiate(client, wallet, config, options); - } + await processor(client, wallet, config, options); saveConfig(config, env); }; @@ -95,27 +104,58 @@ const main = async (options) => { const programHandler = () => { const program = new Command(); - program.name('upload-contract').description('Upload CosmWasm contracts'); + program.name('deploy-contract').description('Deploy CosmWasm contracts'); - addAmplifierOptions(program, { + const uploadCmd = program + .command('upload') + .description('Upload wasm binary') + .action((options) => { + mainProcessor(upload, options); + }); + addAmplifierOptions(uploadCmd, { contractOptions: true, storeOptions: true, + instantiate2Options: true, + }); + + const instantiateCmd = program + .command('instantiate') + .description('Instantiate contract') + .action((options) => { + mainProcessor(instantiate, options); + }); + addAmplifierOptions(instantiateCmd, { + contractOptions: true, instantiateOptions: true, instantiate2Options: true, codeId: true, fetchCodeId: true, }); - program.addOption(new Option('-r, --reuseCodeId', 'reuse code Id')); - program.addOption( - new Option( - '-u, --uploadOnly', - 'upload the contract without instantiating. prints expected contract address if --instantiate2 is passed', - ), - ); + const uploadInstantiateCmd = program + .command('upload-instantiate') + .description('Upload wasm binary and instantiate contract') + .action((options) => { + mainProcessor(uploadInstantiate, options); + }); + addAmplifierOptions(uploadInstantiateCmd, { + contractOptions: true, + storeOptions: true, + instantiateOptions: true, + instantiate2Options: true, + }); - program.action((options) => { - main(options); + const migrateCmd = program + .command('migrate') + .description('Migrate contract') + .action((options) => { + mainProcessor(migrate, options); + }); + addAmplifierOptions(migrateCmd, { + contractOptions: true, + migrateOptions: true, + codeId: true, + fetchCodeId: true, }); program.parse(); diff --git a/cosmwasm/submit-proposal.js b/cosmwasm/submit-proposal.js index 441b86d5b..d959a8223 100644 --- a/cosmwasm/submit-proposal.js +++ b/cosmwasm/submit-proposal.js @@ -16,7 +16,8 @@ const { initContractConfig, getAmplifierBaseContractConfig, getAmplifierContractConfig, - updateCodeId, + getCodeId, + addDefaultInstantiateAddresses, getChainTruncationParams, decodeProposalAttributes, encodeStoreCodeProposal, @@ -80,6 +81,7 @@ const callSubmitProposal = async (client, wallet, config, options, proposal) => const storeCode = async (client, wallet, config, options) => { const { contractName } = options; const contractBaseConfig = getAmplifierBaseContractConfig(config, contractName); + await addDefaultInstantiateAddresses(client, config, options); const proposal = encodeStoreCodeProposal(options); @@ -96,6 +98,7 @@ const storeCode = async (client, wallet, config, options) => { const storeInstantiate = async (client, wallet, config, options) => { const { contractName, instantiate2 } = options; const { contractConfig, contractBaseConfig } = getAmplifierContractConfig(config, options); + await addDefaultInstantiateAddresses(client, config, options); if (instantiate2) { throw new Error('instantiate2 not supported for storeInstantiate'); @@ -118,7 +121,7 @@ const instantiate = async (client, wallet, config, options) => { const { contractName, instantiate2, predictOnly } = options; const { contractConfig } = getAmplifierContractConfig(config, options); - await updateCodeId(client, config, options); + contractConfig.codeId = await getCodeId(client, config, options); let contractAddress; @@ -203,7 +206,8 @@ const paramChange = async (client, wallet, config, options) => { }; const migrate = async (client, wallet, config, options) => { - await updateCodeId(client, config, options); + const { contractConfig } = getAmplifierContractConfig(config, options); + contractConfig.codeId = await getCodeId(client, config, options); const proposal = encodeMigrateContractProposal(config, options); @@ -295,7 +299,7 @@ const programHandler = () => { options.chains = chains; mainProcessor(registerItsChain, options); }); - addAmplifierOptions(registerItsChainCmd, { registerItsChainOptions: true, proposalOptions: true, runAs: true }); + addAmplifierOptions(registerItsChainCmd, { proposalOptions: true, runAs: true }); const paramChangeCmd = program .command('paramChange') diff --git a/cosmwasm/update-code-id.js b/cosmwasm/update-code-id.js new file mode 100644 index 000000000..ee832ab35 --- /dev/null +++ b/cosmwasm/update-code-id.js @@ -0,0 +1,49 @@ +'use strict'; + +require('dotenv').config(); + +const { printInfo, loadConfig, saveConfig } = require('../common'); +const { prepareWallet, prepareClient, initContractConfig, getAmplifierContractConfig, fetchCodeIdFromContract } = require('./utils'); + +const { Command } = require('commander'); +const { addAmplifierOptions } = require('./cli-utils'); + +const processCommand = async (options) => { + const { env } = options; + const config = loadConfig(env); + + initContractConfig(config, options); + + const wallet = await prepareWallet(options); + const client = await prepareClient(config, wallet); + + const { contractConfig } = getAmplifierContractConfig(config, options); + + printInfo('Old code id', contractConfig.codeId); + + contractConfig.codeId = await fetchCodeIdFromContract(client, contractConfig); + + printInfo('New code id', contractConfig.codeId); + + saveConfig(config, env); +}; + +const programHandler = () => { + const program = new Command(); + + program.name('update-code-id').description('Update configured code id of contract with the one currently being used on-chain'); + + addAmplifierOptions(program, { + contractOptions: true, + }); + + program.action((options) => { + processCommand(options); + }); + + program.parse(); +}; + +if (require.main === module) { + programHandler(); +} diff --git a/cosmwasm/utils.js b/cosmwasm/utils.js index 787feb392..06a6a7cda 100644 --- a/cosmwasm/utils.js +++ b/cosmwasm/utils.js @@ -20,6 +20,7 @@ const { ParameterChangeProposal } = require('cosmjs-types/cosmos/params/v1beta1/ const { AccessType } = require('cosmjs-types/cosmwasm/wasm/v1/types'); const { printInfo, + printWarn, isString, isStringArray, isKeccak256Hash, @@ -66,6 +67,10 @@ const getLabel = ({ contractName, label }) => label || contractName; const readWasmFile = ({ artifactPath, contractName }) => readFileSync(`${artifactPath}/${pascalToSnake(contractName)}.wasm`); const initContractConfig = (config, { contractName, chainName }) => { + if (!contractName) { + return; + } + config.axelar = config.axelar || {}; config.axelar.contracts = config.axelar.contracts || {}; config.axelar.contracts[contractName] = config.axelar.contracts[contractName] || {}; @@ -101,22 +106,24 @@ const getAmplifierContractConfig = (config, { contractName, chainName }) => { return { contractBaseConfig, contractConfig }; }; -const updateCodeId = async (client, config, options) => { - const { fetchCodeId, codeId } = options; +const getCodeId = async (client, config, options) => { + const { fetchCodeId, codeId, contractName } = options; - const { contractBaseConfig, contractConfig } = getAmplifierContractConfig(config, options); + const contractBaseConfig = getAmplifierBaseContractConfig(config, contractName); if (codeId) { - contractConfig.codeId = codeId; - } else if (fetchCodeId) { - contractConfig.codeId = await fetchCodeIdFromCodeHash(client, contractBaseConfig); - } else if (contractBaseConfig.lastUploadedCodeId) { - contractConfig.codeId = contractBaseConfig.lastUploadedCodeId; - } else { - throw new Error('Code Id is not defined'); + return codeId; + } + + if (fetchCodeId) { + return fetchCodeIdFromCodeHash(client, contractBaseConfig); } - printInfo('Using code id', contractConfig.codeId); + if (contractBaseConfig.lastUploadedCodeId) { + return contractBaseConfig.lastUploadedCodeId; + } + + throw new Error('Code Id is not defined'); }; const uploadContract = async (client, wallet, config, options) => { @@ -129,14 +136,13 @@ const uploadContract = async (client, wallet, config, options) => { const uploadFee = gasLimit === 'auto' ? 'auto' : calculateFee(gasLimit, GasPrice.fromString(gasPrice)); - return await client.upload(account.address, wasm, uploadFee); + // uploading through stargate doesn't support defining instantiate permissions + return client.upload(account.address, wasm, uploadFee); }; const instantiateContract = async (client, wallet, initMsg, config, options) => { const { contractName, salt, instantiate2, chainName, admin } = options; - const [account] = await wallet.getAccounts(); - const { contractConfig } = getAmplifierContractConfig(config, options); const { @@ -163,6 +169,19 @@ const instantiateContract = async (client, wallet, initMsg, config, options) => return contractAddress; }; +const migrateContract = async (client, wallet, config, options) => { + const { msg } = options; + const [account] = await wallet.getAccounts(); + const { contractConfig } = getAmplifierContractConfig(config, options); + + const { + axelar: { gasPrice, gasLimit }, + } = config; + const migrateFee = gasLimit === 'auto' ? 'auto' : calculateFee(gasLimit, GasPrice.fromString(gasPrice)); + + return client.migrate(account.address, contractConfig.address, contractConfig.codeId, JSON.parse(msg), migrateFee); +}; + const validateAddress = (address) => { return isString(address) && isValidCosmosAddress(address); }; @@ -540,6 +559,48 @@ const fetchCodeIdFromCodeHash = async (client, contractBaseConfig) => { return codeId; }; +const fetchCodeIdFromContract = async (client, contractConfig) => { + const { address } = contractConfig; + + if (!address) { + throw new Error('Contract address not found in the config'); + } + + const { codeId } = await client.getContract(address); + + return codeId; +}; + +const addDefaultInstantiateAddresses = async (client, config, options) => { + const { contractConfig } = getAmplifierContractConfig(config, options); + + if (!contractConfig.address) { + return; + } + + const contract = await client.getContract(contractConfig.address); + + let { instantiateAddresses } = options; + + if (!instantiateAddresses) { + instantiateAddresses = []; + } + + if (contract.admin && !instantiateAddresses.includes(contract.admin)) { + instantiateAddresses.push(contract.admin); + printWarn( + `Contract ${contractConfig.address} admin address ${contract.admin} was not included in instantiateAddresses list. Adding it by default.`, + ); + } + + if (contract.creator && !instantiateAddresses.includes(contract.creator)) { + instantiateAddresses.push(contract.creator); + printWarn( + `Contract ${contractConfig.address} creator address ${contract.creator} was not included in instantiateAddresses list. Adding it by default.`, + ); + } +}; + const getChainTruncationParams = (config, chainConfig) => { const key = chainConfig.axelarId.toLowerCase(); const chainTruncationParams = config.axelar.contracts.InterchainTokenService[key]; @@ -561,7 +622,7 @@ const getChainTruncationParams = (config, chainConfig) => { const getInstantiatePermission = (accessType, addresses) => { return { permission: accessType, - addresses: addresses.split(',').map((address) => address.trim()), + addresses, }; }; @@ -587,9 +648,10 @@ const getStoreCodeParams = (options) => { codeHash = createHash('sha256').update(wasm).digest(); } - const instantiatePermission = instantiateAddresses - ? getInstantiatePermission(AccessType.ACCESS_TYPE_ANY_OF_ADDRESSES, instantiateAddresses) - : getInstantiatePermission(AccessType.ACCESS_TYPE_NOBODY, ''); + const instantiatePermission = + instantiateAddresses && instantiateAddresses.length > 0 + ? getInstantiatePermission(AccessType.ACCESS_TYPE_ANY_OF_ADDRESSES, instantiateAddresses) + : getInstantiatePermission(AccessType.ACCESS_TYPE_NOBODY, []); return { ...getSubmitProposalParams(options), @@ -833,10 +895,13 @@ module.exports = { initContractConfig, getAmplifierBaseContractConfig, getAmplifierContractConfig, - updateCodeId, + getCodeId, uploadContract, instantiateContract, + migrateContract, fetchCodeIdFromCodeHash, + fetchCodeIdFromContract, + addDefaultInstantiateAddresses, getChainTruncationParams, decodeProposalAttributes, encodeStoreCodeProposal, diff --git a/evm/interchainTokenFactory.js b/evm/interchainTokenFactory.js index 067562abe..aa1759a14 100644 --- a/evm/interchainTokenFactory.js +++ b/evm/interchainTokenFactory.js @@ -20,7 +20,6 @@ async function processCommand(config, chain, options) { const contracts = chain.contracts; const contractName = 'InterchainTokenFactory'; - const interchainTokenFactoryAddress = address || contracts.InterchainTokenFactory?.address; const interchainTokenServiceAddress = contracts.InterchainTokenService?.address; @@ -143,6 +142,7 @@ async function processCommand(config, chain, options) { const tokenId = await interchainTokenFactory.interchainTokenId(wallet.address, deploymentSalt); printInfo('tokenId', tokenId); + printInfo('Token address', await interchainTokenService.registeredTokenAddress(tokenId)); await handleTx(tx, chain, interchainTokenService, options.action, 'TokenManagerDeployed', 'InterchainTokenDeploymentStarted'); @@ -150,13 +150,12 @@ async function processCommand(config, chain, options) { } case 'deployRemoteInterchainToken': { - const { minter, destinationChain, gasValue } = options; + const { destinationChain, gasValue } = options; const deploymentSalt = getDeploymentSalt(options); validateParameters({ isNonEmptyString: { destinationChain }, - isAddress: { minter }, isValidNumber: { gasValue }, }); @@ -164,9 +163,8 @@ async function processCommand(config, chain, options) { throw new Error(`Destination chain ${destinationChain} is not trusted by ITS`); } - const tx = await interchainTokenFactory['deployRemoteInterchainToken(bytes32,address,string,uint256)']( + const tx = await interchainTokenFactory['deployRemoteInterchainToken(bytes32,string,uint256)']( deploymentSalt, - minter, destinationChain, gasValue, { @@ -225,6 +223,65 @@ async function processCommand(config, chain, options) { break; } + case 'registerCustomToken': { + const { tokenAddress, tokenManagerType, operator } = options; + + const deploymentSalt = getDeploymentSalt(options); + + validateParameters({ + isValidAddress: { tokenAddress }, + isAddress: { operator }, + isValidNumber: { tokenManagerType }, + }); + + const tx = await interchainTokenFactory.registerCustomToken( + deploymentSalt, + tokenAddress, + tokenManagerType, + operator, + gasOptions, + ); + const tokenId = await interchainTokenFactory.linkedTokenId(wallet.address, deploymentSalt); + printInfo('tokenId', tokenId); + + await handleTx(tx, chain, interchainTokenService, options.action, 'TokenManagerDeployed', 'InterchainTokenDeploymentStarted'); + + break; + } + + case 'linkToken': { + const { destinationChain, destinationTokenAddress, tokenManagerType, linkParams, gasValue } = options; + + const deploymentSalt = getDeploymentSalt(options); + + if ((await interchainTokenService.trustedAddress(destinationChain)) === '') { + throw new Error(`Destination chain ${destinationChain} is not trusted by ITS`); + } + + validateParameters({ + isNonEmptyString: { destinationChain }, + isValidNumber: { tokenManagerType, gasValue }, + isValidBytesArray: { linkParams, destinationTokenAddress }, + }); + + const tx = await interchainTokenFactory.linkToken( + deploymentSalt, + destinationChain, + destinationTokenAddress, + tokenManagerType, + linkParams, + gasValue, + { value: gasValue, ...gasOptions }, + ); + + const tokenId = await interchainTokenFactory.linkedTokenId(wallet.address, deploymentSalt); + printInfo('tokenId', tokenId); + + await handleTx(tx, chain, interchainTokenService, options.action, 'LinkTokenStarted'); + + break; + } + default: { throw new Error(`Unknown action ${action}`); } @@ -255,6 +312,8 @@ if (require.main === module) { 'deployRemoteInterchainToken', 'registerCanonicalInterchainToken', 'deployRemoteCanonicalInterchainToken', + 'registerCustomToken', + 'linkToken', ]) .makeOptionMandatory(true), ); @@ -267,11 +326,15 @@ if (require.main === module) { program.addOption(new Option('--symbol ', 'token symbol')); program.addOption(new Option('--decimals ', 'token decimals')); program.addOption(new Option('--minter ', 'token minter').default(AddressZero)); + program.addOption(new Option('--operator ', 'token manager operator').default(AddressZero)); + program.addOption(new Option('--tokenManagerType ', 'token manager type')); program.addOption(new Option('--initialSupply ', 'initial supply').default(1e9)); program.addOption(new Option('--destinationChain ', 'destination chain')); program.addOption(new Option('--destinationAddress ', 'destination address')); program.addOption(new Option('--gasValue ', 'gas value').default(0)); program.addOption(new Option('--rawSalt ', 'raw deployment salt').env('RAW_SALT')); + program.addOption(new Option('--destinationTokenAddress ', 'destination token address')); + program.addOption(new Option('--linkParams ', 'parameters to use for linking')); program.action((options) => { main(options); diff --git a/evm/its.js b/evm/its.js index 14277f11b..c33700a54 100644 --- a/evm/its.js +++ b/evm/its.js @@ -3,7 +3,7 @@ const { ethers } = require('hardhat'); const { getDefaultProvider, - utils: { hexZeroPad, toUtf8Bytes, keccak256, defaultAbiCoder }, + utils: { hexZeroPad, toUtf8Bytes, keccak256 }, BigNumber, constants: { AddressZero }, Contract, @@ -30,6 +30,7 @@ const IInterchainTokenService = getContractJSON('IInterchainTokenService'); const InterchainTokenService = getContractJSON('InterchainTokenService'); const InterchainTokenFactory = getContractJSON('InterchainTokenFactory'); const IInterchainTokenDeployer = getContractJSON('IInterchainTokenDeployer'); +const ITokenManager = getContractJSON('ITokenManager'); const IOwnable = getContractJSON('IOwnable'); const { addEvmOptions } = require('./cli-utils'); const { getSaltFromKey } = require('@axelar-network/axelar-gmp-sdk-solidity/scripts/utils'); @@ -223,7 +224,11 @@ async function processCommand(config, chain, options) { const tokenIdBytes32 = hexZeroPad(tokenId.startsWith('0x') ? tokenId : '0x' + tokenId, 32); - const flowLimit = await interchainTokenService.flowLimit(tokenIdBytes32); + const tokenManagerAddress = await interchainTokenService.deployedTokenManager(tokenIdBytes32); + + const tokenManager = new Contract(tokenManagerAddress, ITokenManager.abi, wallet); + + const flowLimit = await tokenManager.flowLimit(); printInfo(`Flow limit for TokenManager with tokenId ${tokenId}`, flowLimit); break; @@ -234,7 +239,11 @@ async function processCommand(config, chain, options) { const tokenIdBytes32 = hexZeroPad(tokenId.startsWith('0x') ? tokenId : '0x' + tokenId, 32); - const flowOutAmount = await interchainTokenService.flowOutAmount(tokenIdBytes32); + const tokenManagerAddress = await interchainTokenService.deployedTokenManager(tokenIdBytes32); + + const tokenManager = new Contract(tokenManagerAddress, ITokenManager.abi, wallet); + + const flowOutAmount = await tokenManager.flowOutAmount(); printInfo(`Flow out amount for TokenManager with tokenId ${tokenId}`, flowOutAmount); break; @@ -245,69 +254,12 @@ async function processCommand(config, chain, options) { const tokenIdBytes32 = hexZeroPad(tokenId.startsWith('0x') ? tokenId : '0x' + tokenId, 32); - const flowInAmount = await interchainTokenService.flowInAmount(tokenIdBytes32); - printInfo(`Flow out amount for TokenManager with tokenId ${tokenId}`, flowInAmount); - - break; - } - - case 'deployTokenManager': { - const { destinationChain, type, operator, tokenAddress, gasValue } = options; + const tokenManagerAddress = await interchainTokenService.deployedTokenManager(tokenIdBytes32); - const deploymentSalt = getDeploymentSalt(options); - const tokenManagerType = tokenManagerImplementations[type]; - - validateParameters({ - isString: { destinationChain }, - 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, - tokenManagerType, - params, - gasValue, - gasOptions, - ); + const tokenManager = new Contract(tokenManagerAddress, ITokenManager.abi, wallet); - await handleTx(tx, chain, interchainTokenService, options.action, 'TokenManagerDeployed', 'TokenManagerDeploymentStarted'); - - break; - } - - case 'deployInterchainToken': { - const { destinationChain, name, symbol, decimals, minter, gasValue } = options; - - const deploymentSalt = getDeploymentSalt(options); - - validateParameters({ - isNonEmptyString: { name, symbol }, - isString: { destinationChain }, - isAddress: { minter }, - isValidNumber: { decimals, gasValue }, - }); - - isValidDestinationChain(config, destinationChain); - - const tx = await interchainTokenService.deployInterchainToken( - deploymentSalt, - destinationChain, - name, - symbol, - decimals, - minter, - gasValue, - { value: gasValue, ...gasOptions }, - ); - - await handleTx(tx, chain, interchainTokenService, options.action, 'TokenManagerDeployed', 'InterchainTokenDeploymentStarted'); + const flowInAmount = await tokenManager.flowInAmount(); + printInfo(`Flow in amount for TokenManager with tokenId ${tokenId}`, flowInAmount); break; } @@ -407,33 +359,14 @@ async function processCommand(config, chain, options) { break; } - case 'callContractWithInterchainToken': { - const { destinationChain, destinationAddress, amount, data, gasValue } = options; - - validateParameters({ - isValidTokenId: { tokenId }, - isNonEmptyString: { destinationChain, destinationAddress }, - isValidNumber: { amount, gasValue }, - isValidCalldata: { data }, - }); + case 'registerTokenMetadata': { + const { tokenAddress, gasValue } = options; - if ((await interchainTokenService.trustedAddress(destinationChain)) === '') { - throw new Error(`Destination chain ${destinationChain} is not trusted by ITS`); - } + validateParameters({ isValidAddress: { tokenAddress }, isNumber: { gasValue } }); - const tokenIdBytes32 = hexZeroPad(tokenId.startsWith('0x') ? tokenId : '0x' + tokenId, 32); + const tx = await interchainTokenService.registerTokenMetadata(tokenAddress, gasValue, { value: gasValue, ...gasOptions }); - const tx = await interchainTokenService.callContractWithInterchainToken( - tokenIdBytes32, - destinationChain, - destinationAddress, - amount, - data, - gasValue, - { value: gasValue, ...gasOptions }, - ); - - await handleTx(tx, chain, interchainTokenService, options.action, 'InterchainTransfer', 'InterchainTransferWithData'); + await handleTx(tx, chain, interchainTokenService, options.action); break; } @@ -448,6 +381,7 @@ async function processCommand(config, chain, options) { } const tokenIdsBytes32 = []; + const tokenManagers = []; for (const tokenId of tokenIds) { if (!isValidTokenId(tokenId)) { @@ -456,13 +390,20 @@ async function processCommand(config, chain, options) { const tokenIdBytes32 = hexZeroPad(tokenId.startsWith('0x') ? tokenId : '0x' + tokenId, 32); tokenIdsBytes32.push(tokenIdBytes32); + + const tokenManager = new Contract( + await interchainTokenService.deployedTokenManager(tokenIdBytes32), + getContractJSON('ITokenManager').abi, + wallet, + ); + tokenManagers.push(tokenManager); } validateParameters({ isNumberArray: { flowLimits } }); const tx = await interchainTokenService.setFlowLimits(tokenIdsBytes32, flowLimits, gasOptions); - await handleTx(tx, chain, interchainTokenService, options.action, 'FlowLimitSet'); + await handleTx(tx, chain, tokenManagers[0], options.action, 'FlowLimitSet'); break; } @@ -667,6 +608,18 @@ async function processCommand(config, chain, options) { break; } + case 'migrateInterchainToken': { + const { tokenId } = options; + + validateParameters({ isKeccak256Hash: { tokenId } }); + + const tx = await interchainTokenService.migrateInterchainToken(tokenId); + + await handleTx(tx, chain, interchainTokenService, options.action); + + break; + } + default: { throw new Error(`Unknown action ${action}`); } @@ -697,12 +650,9 @@ if (require.main === module) { 'flowLimit', 'flowOutAmount', 'flowInAmount', - 'deployTokenManager', - 'deployInterchainToken', 'contractCallValue', 'expressExecute', 'interchainTransfer', - 'callContractWithInterchainToken', 'setFlowLimits', 'trustedAddress', 'setTrustedAddress', @@ -710,6 +660,8 @@ if (require.main === module) { 'setPauseStatus', 'execute', 'checks', + 'migrateInterchainToken', + 'registerTokenMetadata', ]) .makeOptionMandatory(true), ); diff --git a/evm/utils.js b/evm/utils.js index 033ee4fe5..57c6d5753 100644 --- a/evm/utils.js +++ b/evm/utils.js @@ -209,6 +209,11 @@ function isValidBytesAddress(input) { return addressRegex.test(input); } +function isValidBytesArray(input) { + const bytesRegex = /^0x[a-fA-F0-9]/; + return bytesRegex.test(input); +} + const isContract = async (address, provider) => { const code = await provider.getCode(address); return code && code !== '0x'; @@ -272,6 +277,7 @@ const validationFunctions = { isValidAddress, isValidPrivateKey, isValidTokenId, + isValidBytesArray, }; function validateParameters(parameters) { diff --git a/package-lock.json b/package-lock.json index e225bd3b3..8f68b805f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,12 @@ "license": "MIT", "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.4.0", - "@axelar-network/axelar-cgp-sui": "1.0.2", + "@axelar-network/axelar-cgp-sui": "1.0.3", "@axelar-network/axelar-gmp-sdk-solidity": "6.0.4", - "@axelar-network/interchain-token-service": "2.0.1", + "@axelar-network/interchain-token-service": "0.0.0-snapshot.d61ef1b", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", + "@mysten/ledgerjs-hw-app-sui": "^0.4.1", "@mysten/sui": "^1.3.0", "@stellar/stellar-sdk": "^13.0.0", "axios": "^1.7.2", @@ -43,9 +44,9 @@ } }, "node_modules/@0no-co/graphql.web": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.12.tgz", - "integrity": "sha512-BTDjjsV/zSPy5fqItwm+KWUfh9CSe9tTtR6rCB72ddtkAxdcHbi4Ir4r/L1Et4lyxmL+i7Rb3m9sjLLi9tYrzA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.13.tgz", + "integrity": "sha512-jqYxOevheVTU1S36ZdzAkJIdvRp2m3OYIG5SEoKDw5NI8eVwkoI0D/Q3DYNGmXCxkA6CQuoa7zvMiDPTLqUNuw==", "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" }, @@ -91,16 +92,16 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.714.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.714.0.tgz", - "integrity": "sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==", + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dev": true, "dependencies": { - "@smithy/types": "^3.7.2", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/types/node_modules/tslib": { @@ -144,9 +145,9 @@ } }, "node_modules/@axelar-network/axelar-cgp-sui": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-sui/-/axelar-cgp-sui-1.0.2.tgz", - "integrity": "sha512-vPSGP8k+9fHdEycQLZPjZonzKITvIoEbTdq+4tUgPyxvDiLBFSCKTHSEzgYAWsd1GCfptZENSwhVBgluJ9gC9Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-sui/-/axelar-cgp-sui-1.0.3.tgz", + "integrity": "sha512-JlKaJ0tWtndtx/VLNIcEeKVYPaHgEEhVyeL7vBn695cXKlc9moTkxwmMNvAr3rhXMN6GbyeG8GXx62Rx7QbpSw==", "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui": "^1.3.0", @@ -169,9 +170,9 @@ } }, "node_modules/@axelar-network/interchain-token-service": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-2.0.1.tgz", - "integrity": "sha512-5m4ocCIx9qfH1xODPAmhnGPGBl0ytKUzIwvJ94zgTlj0IUmsRkr93ON8/6dRjg+HK8RgfYNwQD1r4Gdy6kaU1w==", + "version": "0.0.0-snapshot.d61ef1b", + "resolved": "https://registry.npmjs.org/@axelar-network/interchain-token-service/-/interchain-token-service-0.0.0-snapshot.d61ef1b.tgz", + "integrity": "sha512-5JhD1FhrMUIawJTYwGxmRjH870lDWpJs/JUH5anoM4WToZLFgJDjPlMfuv5tqqBNAVb9ea61RQC1MmcJBp4BXg==", "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.4.0", "@axelar-network/axelar-gmp-sdk-solidity": "6.0.4" @@ -210,6 +211,7 @@ "version": "0.6.8", "resolved": "https://registry.npmjs.org/@confio/ics23/-/ics23-0.6.8.tgz", "integrity": "sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==", + "deprecated": "Unmaintained. The codebase for this package was moved to https://github.com/cosmos/ics23 but then the JS implementation was removed in https://github.com/cosmos/ics23/pull/353. Please consult the maintainers of https://github.com/cosmos for further assistance.", "dependencies": { "@noble/hashes": "^1.0.0", "protobufjs": "^6.8.8" @@ -1511,20 +1513,29 @@ } }, "node_modules/@mysten/bcs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.2.0.tgz", - "integrity": "sha512-LuKonrGdGW7dq/EM6U2L9/as7dFwnhZnsnINzB/vu08Xfrj0qzWwpLOiXagAa5yZOPLK7anRZydMonczFkUPzA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.2.1.tgz", + "integrity": "sha512-RMSaUsNb8oR0rTRVIOOcyoEVJqQi6DLvMXN+7mvDcki12FJFQ0lF89zQa7AV7cIurWlDQfJ8VIbCuRDyK+955A==", "dependencies": { "bs58": "^6.0.0" } }, + "node_modules/@mysten/ledgerjs-hw-app-sui": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@mysten/ledgerjs-hw-app-sui/-/ledgerjs-hw-app-sui-0.4.2.tgz", + "integrity": "sha512-Ypcb7WHyno16RodUI9CFzHQg/Fy6xl+itgr1D4g7Rdo6sUWBKn83p9s9wldG6wvJv+d4QlilXz/HcEgqrlu5pA==", + "dependencies": { + "@ledgerhq/hw-transport": "^6.31.0", + "fast-sha256": "^1.3.0" + } + }, "node_modules/@mysten/sui": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@mysten/sui/-/sui-1.17.0.tgz", - "integrity": "sha512-vL6QrH3l10dTatimPmz/feqMbYfEjvh8MPf3Xwn5tjuwDwBCS0ha1kdN+4vUpu6t0aCFviK+Df/vanORS8cbGQ==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@mysten/sui/-/sui-1.20.0.tgz", + "integrity": "sha512-/XLogwOYaSP31lPt377fj5b+8sRIyt2Opi/Ssos5dssPqol9vgvN/ZzV5Y5qVl4VquhATJHRpwV33B5rIVi7Ow==", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", - "@mysten/bcs": "1.2.0", + "@mysten/bcs": "1.2.1", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@scure/bip32": "^1.4.0", @@ -1536,7 +1547,6 @@ "graphql": "^16.9.0", "jose": "^5.6.3", "poseidon-lite": "^0.2.0", - "tweetnacl": "^1.0.3", "valibot": "^0.36.0" }, "engines": { @@ -1549,23 +1559,12 @@ "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" }, "node_modules/@noble/curves": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.7.0.tgz", - "integrity": "sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", "dependencies": { - "@noble/hashes": "1.6.0" - }, - "engines": { - "node": "^14.21.3 || >=16" + "@noble/hashes": "1.7.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.0.tgz", - "integrity": "sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==", "engines": { "node": "^14.21.3 || >=16" }, @@ -1574,9 +1573,9 @@ } }, "node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", "engines": { "node": "^14.21.3 || >=16" }, @@ -2238,33 +2237,33 @@ "dev": true }, "node_modules/@scure/base": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.1.tgz", - "integrity": "sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", + "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.0.tgz", - "integrity": "sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", + "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", "dependencies": { - "@noble/curves": "~1.7.0", - "@noble/hashes": "~1.6.0", - "@scure/base": "~1.2.1" + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.2" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.0.tgz", - "integrity": "sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", + "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", "dependencies": { - "@noble/hashes": "~1.6.0", - "@scure/base": "~1.2.1" + "@noble/hashes": "~1.7.1", + "@scure/base": "~1.2.4" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2379,15 +2378,15 @@ "deprecated": "This package has been renamed to @simplewebauthn/types. Please install @simplewebauthn/types instead to ensure you receive future updates." }, "node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", + "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dev": true, "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/types/node_modules/tslib": { @@ -2616,9 +2615,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", "dependencies": { "undici-types": "~6.20.0" } @@ -2640,9 +2639,9 @@ "peer": true }, "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true, "peer": true }, @@ -2958,13 +2957,13 @@ } }, "node_modules/array-buffer-byte-length": { - "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -3453,9 +3452,9 @@ "dev": true }, "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", "devOptional": true, "hasInstallScript": true, "peer": true, @@ -4138,13 +4137,13 @@ "peer": true }, "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "dev": true, "peer": true, "dependencies": { - "node-fetch": "^2.6.12" + "node-fetch": "^2.7.0" } }, "node_modules/cross-spawn": { @@ -4177,12 +4176,9 @@ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "node_modules/csv-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.0.0.tgz", - "integrity": "sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==", - "dependencies": { - "minimist": "^1.2.0" - }, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.1.0.tgz", + "integrity": "sha512-egOwFF+imkpAE0gTrbzdf7c322lonHAmLPT2Ou1b5lhTSeXyfEdaMBdWuVeUJ6fsYuR0/ENonFo16kEXWKOQFw==", "bin": { "csv-parser": "bin/csv-parser" }, @@ -4205,14 +4201,14 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4222,20 +4218,20 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { @@ -4526,27 +4522,28 @@ } }, "node_modules/es-abstract": { - "version": "1.23.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", - "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", + "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.7", - "get-intrinsic": "^1.2.6", - "get-symbol-description": "^1.0.2", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", @@ -4554,31 +4551,33 @@ "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.4", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.3", + "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", - "is-typed-array": "^1.1.13", + "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", - "math-intrinsics": "^1.0.0", + "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "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.3", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.16" + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -4604,9 +4603,9 @@ } }, "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "dependencies": { "es-errors": "^1.3.0" @@ -4616,14 +4615,15 @@ } }, "node_modules/es-set-tostringtag": { - "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5631,9 +5631,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "peer": true, "dependencies": { @@ -5641,7 +5641,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -5672,17 +5672,32 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-sha256": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==" + }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "peer": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5838,9 +5853,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -5888,12 +5903,13 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", - "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "dependencies": { "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", @@ -5940,21 +5956,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", - "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", - "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", + "get-proto": "^1.0.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "math-intrinsics": "^1.0.0" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5973,6 +5989,19 @@ "node": ">=4" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", @@ -7019,12 +7048,15 @@ } }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7112,9 +7144,9 @@ } }, "node_modules/is-core-module": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", - "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -7193,12 +7225,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7241,18 +7276,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7581,9 +7604,9 @@ } }, "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", "dev": true, "peer": true, "engines": { @@ -7950,6 +7973,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8121,9 +8145,9 @@ "peer": true }, "node_modules/node-abi": { - "version": "3.71.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", - "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "version": "3.73.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", + "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -8357,9 +8381,9 @@ } }, "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", "dev": true }, "node_modules/oboe": { @@ -8414,6 +8438,23 @@ "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8730,13 +8771,13 @@ } }, "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, "peer": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -8895,18 +8936,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", - "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "dunder-proto": "^1.0.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" }, "engines": { @@ -8917,14 +8958,16 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -9001,9 +9044,9 @@ } }, "node_modules/resolve": { - "version": "1.22.9", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz", - "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "dependencies": { "is-core-module": "^2.16.0", @@ -9013,6 +9056,9 @@ "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9186,6 +9232,22 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", @@ -9410,6 +9472,20 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -10216,9 +10292,9 @@ "peer": true }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", + "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", "dev": true, "dependencies": { "chownr": "^1.1.1", @@ -10709,9 +10785,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10763,9 +10839,9 @@ } }, "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "version": "5.28.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", + "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" diff --git a/package.json b/package.json index af8a1cbc4..3e1a5153a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "@axelar-network/axelar-contract-deployments", + "type": "commonjs", "version": "1.4.0", "description": "Axelar contract deployment scripts", "main": "index.js", @@ -24,11 +25,12 @@ "homepage": "https://github.com/axelarnetwork/axelar-contract-deployments#readme", "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.4.0", - "@axelar-network/axelar-cgp-sui": "1.0.2", + "@axelar-network/axelar-cgp-sui": "1.0.3", "@axelar-network/axelar-gmp-sdk-solidity": "6.0.4", - "@axelar-network/interchain-token-service": "2.0.1", + "@axelar-network/interchain-token-service": "0.0.0-snapshot.d61ef1b", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", + "@mysten/ledgerjs-hw-app-sui": "^0.4.1", "@mysten/sui": "^1.3.0", "@stellar/stellar-sdk": "^13.0.0", "axios": "^1.7.2", diff --git a/stellar/README.md b/stellar/README.md index c03f2f193..97ee6671e 100644 --- a/stellar/README.md +++ b/stellar/README.md @@ -88,9 +88,9 @@ node stellar/deploy-contract.js deploy axelar_gas_service --chain-name --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/interchain_token.optimized.wasm -```bash node stellar/deploy-contract.js deploy interchain_token_service --chain-name --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/interchain_token_service.optimized.wasm ``` @@ -100,6 +100,22 @@ node stellar/deploy-contract.js deploy interchain_token_service --chain-name --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/example.optimized.wasm ``` +### Contract upgrades + +To facilitate contract upgrades, the `upgrader` contract needs to be deployed first. + +```bash +node stellar/deploy-contract.js deploy upgrader --chain-name --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/upgrader.optimized.wasm +``` + +After the `upgrader` is deployed, any other instantiated contract can be upgraded by calling the `upgrade` function + +```bash +node stellar/deploy-contract.js upgrade --chain-name --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/.optimized.wasm --new-version --migration-data +``` + +where `` is the name of the contract to be upgraded and `--wasm-path` points to the upgraded bytecode. As a sanity check, `` must match the version number defined by the provided bytecode, so upgrading to the wrong version can be prevented. `` is the json encoded data that will be passed to the contract's `migrate` function. If the flag is not provided, the default value `()` will be used, meaning that the migration data is of type `void`. The easiest way to generate the json data for complex types is to instantiate the rust type the contract expects and then use `serde_json::to_string` to convert it to json. + ## Generate bindings Generate TypeScript bindings for the contract @@ -166,14 +182,6 @@ node stellar/gateway.js rotate --new-nonce test --signers wallet node stellar/gateway.js rotate --new-nonce test2 --current-nonce test --signers wallet ``` -#### Upgrade Gateway - -To upgrade the gateway, run the following command: - -```bash -node stellar/deploy-contract.js upgrade axelar_gateway --wasm-path ../axelar-cgp-soroban/target/wasm32-unknown-unknown/release/axelar_gateway.optimized.wasm -``` - ### Interchain Token Service _Note_: Stellar ITS runs only in Hub mode. P2P connections are not supported. Therefore, rather than setting trusted ITS addresses, we set trusted chains (chains which are also registered with ITS Hub). The ITS Hub chain (axelar) itself is not a valid source/destination for direct ITS messages and so shouldn't be set as a trusted chain. All ITS messages must be sent to and received from the ITS Hub. diff --git a/stellar/deploy-contract.js b/stellar/deploy-contract.js index 23b23f593..ac859e9cc 100644 --- a/stellar/deploy-contract.js +++ b/stellar/deploy-contract.js @@ -1,9 +1,9 @@ 'use strict'; -const { Address, nativeToScVal, scValToNative, Operation, StrKey } = require('@stellar/stellar-sdk'); +const { Address, nativeToScVal, scValToNative, Operation, StrKey, xdr, authorizeInvocation, rpc } = require('@stellar/stellar-sdk'); const { Command, Option } = require('commander'); const { loadConfig, printInfo, saveConfig } = require('../evm/utils'); -const { getWallet, broadcast, serializeValue, addBaseOptions } = require('./utils'); +const { getWallet, broadcast, serializeValue, addBaseOptions, getNetworkPassphrase, createAuthorizedFunc } = require('./utils'); const { getDomainSeparator, getChainConfig } = require('../common'); const { prompt, validateParameters } = require('../common/utils'); const { weightedSignersToScVal } = require('./type-utils'); @@ -52,6 +52,7 @@ async function getInitializeArgs(config, chain, contractName, wallet, options) { const gasServiceAddress = nativeToScVal(Address.fromString(chain?.contracts?.axelar_gas_service?.address), { type: 'address' }); const itsHubAddress = nativeToScVal(config.axelar?.contracts?.InterchainTokenService?.address, { type: 'string' }); const chainName = nativeToScVal('stellar', { type: 'string' }); + const nativeTokenAddress = nativeToScVal(Address.fromString(chain?.tokenAddress), { type: 'address' }); if (!chain?.contracts?.interchain_token?.wasmHash) { throw new Error(`interchain_token contract's wasm hash does not exist.`); @@ -61,7 +62,16 @@ async function getInitializeArgs(config, chain, contractName, wallet, options) { type: 'bytes', }); - return { owner, gatewayAddress, gasServiceAddress, itsHubAddress, chainName, interchainTokenWasmHash }; + return { + owner, + operator, + gatewayAddress, + gasServiceAddress, + itsHubAddress, + chainName, + nativeTokenAddress, + interchainTokenWasmHash, + }; } case 'axelar_operators': @@ -74,11 +84,16 @@ async function getInitializeArgs(config, chain, contractName, wallet, options) { return { owner, gasCollector }; } + case 'upgrader': { + return {}; + } + case 'example': { const gatewayAddress = nativeToScVal(Address.fromString(chain?.contracts?.axelar_gateway?.address), { type: 'address' }); const gasServiceAddress = nativeToScVal(Address.fromString(chain?.contracts?.axelar_gas_service?.address), { type: 'address' }); + const itsAddress = nativeToScVal(chain?.contracts?.InterchainTokenService?.address, { type: 'address' }); - return { gatewayAddress, gasServiceAddress }; + return { gatewayAddress, gasServiceAddress, itsAddress }; } default: @@ -139,7 +154,8 @@ async function uploadWasm(filePath, wallet, chain) { async function upgrade(options, _, chain, contractName) { const { wasmPath, yes } = options; - const contractAddress = chain.contracts[contractName].address; + let contractAddress = chain.contracts[contractName]?.address; + const upgraderAddress = chain.contracts.upgrader?.address; const wallet = await getWallet(chain, options); if (prompt(`Proceed with upgrade on ${chain.name}?`, yes)) { @@ -147,22 +163,49 @@ async function upgrade(options, _, chain, contractName) { } validateParameters({ - isNonEmptyString: { contractAddress }, + isNonEmptyString: { contractAddress, upgraderAddress }, }); + contractAddress = Address.fromString(contractAddress); + const newWasmHash = await uploadWasm(wasmPath, wallet, chain); printInfo('New Wasm hash', serializeValue(newWasmHash)); const operation = Operation.invokeContractFunction({ - contract: contractAddress, + contract: chain.contracts.upgrader.address, function: 'upgrade', - args: [nativeToScVal(newWasmHash)], + args: [contractAddress, options.newVersion, newWasmHash, [options.migrationData]].map(nativeToScVal), + auth: await createUpgradeAuths(contractAddress, newWasmHash, options.migrationData, chain, wallet), }); + await broadcast(operation, wallet, chain, 'Upgraded contract', options); chain.contracts[contractName].wasmHash = serializeValue(newWasmHash); printInfo('Contract upgraded successfully!', contractAddress); } +async function createUpgradeAuths(contractAddress, newWasmHash, migrationData, chain, wallet) { + // 20 seems a reasonable number of ledgers to allow for the upgrade to take effect + const validUntil = await new rpc.Server(chain.rpc).getLatestLedger().then((info) => info.sequence + 20); + + return Promise.all( + [ + createAuthorizedFunc(contractAddress, 'upgrade', [nativeToScVal(newWasmHash)]), + createAuthorizedFunc(contractAddress, 'migrate', [nativeToScVal(migrationData)]), + ].map((auth) => + authorizeInvocation( + wallet, + validUntil, + new xdr.SorobanAuthorizedInvocation({ + function: auth, + subInvocations: [], + }), + wallet.publicKey(), + getNetworkPassphrase(chain.networkType), + ), + ), + ); +} + async function mainProcessor(options, processor, contractName) { const config = loadConfig(options.env); const chain = getChainConfig(config, options.chainName); @@ -200,6 +243,8 @@ function main() { .description('Upgrade a Stellar contract') .argument('', 'contract name to deploy') .addOption(new Option('--wasm-path ', 'path to the WASM file')) + .addOption(new Option('--new-version ', 'new version of the contract')) + .addOption(new Option('--migration-data ', 'migration data').default('()')) .action((contractName, options) => { mainProcessor(options, upgrade, contractName); }); diff --git a/stellar/utils.js b/stellar/utils.js index df034b463..972906651 100644 --- a/stellar/utils.js +++ b/stellar/utils.js @@ -9,6 +9,7 @@ const { BASE_FEE, xdr: { DiagnosticEvent, SorobanTransactionData }, Address, + xdr, } = require('@stellar/stellar-sdk'); const { printInfo, sleep, addEnvOption } = require('../common'); const { Option } = require('commander'); @@ -240,12 +241,15 @@ const getAmplifierVerifiers = async (config, chainAxelarId) => { ); const signers = Object.values(verifierSet.signers); + // Include pubKey for sorting, sort based on pubKey, then remove pubKey after sorting. const weightedSigners = signers .map((signer) => ({ signer: Address.account(Buffer.from(arrayify(`0x${signer.pub_key.ed25519}`))).toString(), weight: Number(signer.weight), + pubKey: signer.pub_key.ed25519, })) - .sort((a, b) => a.signer.localeCompare(b.signer)); + .sort((a, b) => a.pubKey.localeCompare(b.pubKey)) + .map(({ signer, weight }) => ({ signer, weight })); return { signers: weightedSigners, @@ -278,6 +282,15 @@ function serializeValue(value) { return value; } +const createAuthorizedFunc = (contractAddress, functionName, args) => + xdr.SorobanAuthorizedFunction.sorobanAuthorizedFunctionTypeContractFn( + new xdr.InvokeContractArgs({ + contractAddress: contractAddress.toScAddress(), + functionName, + args, + }), + ); + module.exports = { stellarCmd, ASSET_TYPE_NATIVE, @@ -292,4 +305,5 @@ module.exports = { getAmplifierVerifiers, serializeValue, getBalances, + createAuthorizedFunc, }; diff --git a/sui/README.md b/sui/README.md index d5c30704c..a8edf0140 100644 --- a/sui/README.md +++ b/sui/README.md @@ -277,6 +277,8 @@ example for adding multisig info to chains config: } ``` +*Note: To sign via ledger replace private-key with 'ledger' keyword in env and update key scheme to ed25519, as it is the only signatureScheme supported by Ledger currently for Sui. + ## Contract Interactions ### Call Contract diff --git a/sui/utils/LedgerSigner.js b/sui/utils/LedgerSigner.js new file mode 100644 index 000000000..2eeee4e62 --- /dev/null +++ b/sui/utils/LedgerSigner.js @@ -0,0 +1,80 @@ +'use strict'; + +const { toSerializedSignature, messageWithIntent } = require('@mysten/sui/cryptography'); +const { Signer } = require('@mysten/sui/cryptography'); +const { Ed25519PublicKey } = require('@mysten/sui/keypairs/ed25519'); +const TransportNodeHid = require('@ledgerhq/hw-transport-node-hid').default; +const Sui = require('@mysten/ledgerjs-hw-app-sui').default; + +class LedgerSigner extends Signer { + constructor(path) { + super(); + this.path = "44'/784'/0'/0'/0'"; + this.sui = null; + } + + async init() { + try { + if (!this.sui) { + this.sui = await this.getSuiTransport(); + await this.sui.getPublicKey(this.path); + } + + return this; + } catch (error) { + if (error.message.includes('cannot open device')) { + throw new Error( + 'Cannot connect to Ledger device. Please ensure:\n' + + '1. Ledger device is connected\n' + + '2. Sui app is open on the device\n' + + '3. Device is unlocked\n' + + '4. No other applications are using the device', + ); + } + + throw error; + } + } + + async getPublicKey() { + if (!this.sui) { + await this.init(); + } + + return await this.sui.getPublicKey(this.path); + } + + async toSuiAddress() { + if (!this.sui) { + await this.init(); + } + + return `0x${(await this.sui.getPublicKey(this.path)).address.toString('hex')}`; + } + + async signTransaction(bytes) { + if (!this.sui) { + await this.init(); + } + + const ledgerPublicKey = await this.getPublicKey(); + const publicKey = new Ed25519PublicKey(ledgerPublicKey.publicKey); + const msgWithIntent = messageWithIntent('TransactionData', bytes); + + return { + signature: toSerializedSignature({ + ...(await this.sui.signTransaction(this.path, msgWithIntent)), + signatureScheme: 'ED25519', + publicKey, + }), + }; + } + + async getSuiTransport() { + return new Sui(await TransportNodeHid.create()); + } +} + +module.exports = { + LedgerSigner, +}; diff --git a/sui/utils/index.js b/sui/utils/index.js index 7bdcf5a49..cc2503360 100644 --- a/sui/utils/index.js +++ b/sui/utils/index.js @@ -4,4 +4,5 @@ module.exports = { ...require('./utils'), ...require('./upgrade-utils'), ...require('./cli-utils'), + ...require('./LedgerSigner'), }; diff --git a/sui/utils/sign-utils.js b/sui/utils/sign-utils.js index 5d5880277..e2a01e4c8 100644 --- a/sui/utils/sign-utils.js +++ b/sui/utils/sign-utils.js @@ -11,6 +11,7 @@ const { fromB64, fromHEX } = require('@mysten/bcs'); const { execute } = require('@axelar-network/axelar-cgp-sui'); const { printInfo } = require('../../common/utils'); const { ethers } = require('hardhat'); +const { LedgerSigner } = require('./LedgerSigner'); const { utils: { hexlify }, } = ethers; @@ -40,6 +41,13 @@ function getWallet(chain, options) { } } + const client = getSuiClient(chain, options.rpc); + + if (options.privateKey === 'ledger') { + keypair = new LedgerSigner(); + return [keypair, client]; + } + switch (options.privateKeyType) { case 'bech32': { const decodedKey = decodeSuiPrivateKey(options.privateKey); @@ -64,8 +72,6 @@ function getWallet(chain, options) { } } - const client = getSuiClient(chain, options.rpc); - return [keypair, client]; } @@ -75,10 +81,18 @@ function getSuiClient(chain, rpc) { } async function printWalletInfo(wallet, client, chain, options = {}) { - const owner = - wallet instanceof Ed25519Keypair || wallet instanceof Secp256k1Keypair || wallet instanceof Secp256r1Keypair - ? wallet.toSuiAddress() - : wallet; + let owner; + + if (options.privateKey !== 'ledger') { + owner = + wallet instanceof Ed25519Keypair || wallet instanceof Secp256k1Keypair || wallet instanceof Secp256r1Keypair + ? wallet.toSuiAddress() + : wallet; + } else { + owner = await wallet.toSuiAddress(); + printInfo('PublicKey', (await wallet.getPublicKey()).address.toString('base64')); + } + printInfo('Wallet address', owner); if (!options.offline) { @@ -157,15 +171,10 @@ async function broadcastSignature(client, txBytes, signature, actionName) { async function signTransactionBlockBytes(keypair, client, txBytes, options) { const serializedSignature = (await keypair.signTransaction(txBytes)).signature; - let publicKey; - try { - publicKey = await verifyTransactionSignature(txBytes, serializedSignature); - } catch { - throw new Error(`Cannot verify tx signature`); - } + const publicKey = await verifyTransactionSignature(txBytes, serializedSignature); - if (publicKey.toSuiAddress() !== keypair.toSuiAddress()) { + if (publicKey.toSuiAddress() !== (await keypair.toSuiAddress())) { throw new Error(`Verification failed for address ${keypair.toSuiAddress()}`); } diff --git a/sui/wallet-info.js b/sui/wallet-info.js new file mode 100644 index 000000000..75d5ed1be --- /dev/null +++ b/sui/wallet-info.js @@ -0,0 +1,32 @@ +'use strict'; + +const { saveConfig, loadConfig, getChainConfig } = require('../common/utils'); +const { getWallet, addBaseOptions, printWalletInfo } = require('./utils'); +const { Command } = require('commander'); + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + await printWalletInfo(keypair, client, chain, options); +} + +async function mainProcessor(options, processor) { + const config = loadConfig(options.env); + const chain = getChainConfig(config, options.chainName); + await processor(config, chain, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program + .name('getPublicKey') + .description('Query the public key and sui address for the ledger') + .action((options) => { + mainProcessor(options, processCommand); + }); + + addBaseOptions(program); + + program.parse(); +}