From 019e3549e47074b51235935bd2ea1b3b0daecf5e Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 17:28:13 +0530 Subject: [PATCH 01/37] refactor: update cgp-sui dependency --- package-lock.json | 1034 +++++++++++++++++---------------------------- 1 file changed, 392 insertions(+), 642 deletions(-) diff --git a/package-lock.json b/package-lock.json index 393fc038..06a10e5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,9 +54,9 @@ } }, "node_modules/@0no-co/graphqlsp": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.7.tgz", - "integrity": "sha512-jZeTKW8pl/IWTHWZUox5oQk0n+IsLNY+OkmxoZwW+AkZaQOXdzIlZ0OabJGw4+/vutwdZYR+UsoC8Nhi9hRnRw==", + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.11.tgz", + "integrity": "sha512-vLja9r7L6BBXwxW86Wyi5z5hjTHscH7qoQooy+MXHkM9srBB6ZuesYZq5DQ/+SErQrFyaxeY+hwv2qBAksxriw==", "dependencies": { "@gql.tada/internal": "^1.0.0", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" @@ -117,12 +117,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", - "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", "dev": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -130,9 +130,9 @@ } }, "node_modules/@aws-sdk/types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@aws-sdk/util-utf8-browser": { @@ -145,9 +145,9 @@ } }, "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@axelar-network/axelar-cgp-solidity": { @@ -171,10 +171,12 @@ }, "node_modules/@axelar-network/axelar-cgp-sui": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#368b2d4032314e6400b5be3058490dcc79ed0fbb", + "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#44336e556e3e9e0fd36bfa854bf88573abc1461a", + "hasInstallScript": true, "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui.js": "^0.54.1", + "@types/tmp": "^0.2.6", "child_process": "^1.0.2", "ethers": "^5.0.0", "fs": "^0.0.1-security", @@ -225,9 +227,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "bin": { "parser": "bin/babel-parser.js" }, @@ -271,41 +273,41 @@ } }, "node_modules/@cosmjs/amino": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.3.tgz", - "integrity": "sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.4.tgz", + "integrity": "sha512-zKYOt6hPy8obIFtLie/xtygCkH9ZROiQ12UHfKsOkWaZfPQUvVbtgmu6R4Kn1tFLI/SRkw7eqhaogmW/3NYu/Q==", "dependencies": { - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/utils": "^0.32.3" + "@cosmjs/crypto": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/utils": "^0.32.4" } }, "node_modules/@cosmjs/cosmwasm-stargate": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.3.tgz", - "integrity": "sha512-pqkt+QsLIPNMTRh9m+igJgIpzXXgn1BxmxfAb9zlC23kvsuzY/12un9M7iAdim1NwKXDFeYw46xC2YkprwQp+g==", - "dependencies": { - "@cosmjs/amino": "^0.32.3", - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/proto-signing": "^0.32.3", - "@cosmjs/stargate": "^0.32.3", - "@cosmjs/tendermint-rpc": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.4.tgz", + "integrity": "sha512-Fuo9BGEiB+POJ5WeRyBGuhyKR1ordvxZGLPuPosFJOH9U0gKMgcjwKMCgAlWFkMlHaTB+tNdA8AifWiHrI7VgA==", + "dependencies": { + "@cosmjs/amino": "^0.32.4", + "@cosmjs/crypto": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/proto-signing": "^0.32.4", + "@cosmjs/stargate": "^0.32.4", + "@cosmjs/tendermint-rpc": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0", "pako": "^2.0.2" } }, "node_modules/@cosmjs/crypto": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.3.tgz", - "integrity": "sha512-niQOWJHUtlJm2GG4F00yGT7sGPKxfUwz+2qQ30uO/E3p58gOusTcH2qjiJNVxb8vScYJhFYFqpm/OA/mVqoUGQ==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.4.tgz", + "integrity": "sha512-zicjGU051LF1V9v7bp8p7ovq+VyC91xlaHdsFOTo2oVry3KQikp8L/81RkXmUIT8FxMwdx1T7DmFwVQikcSDIw==", "dependencies": { - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "@noble/hashes": "^1", "bn.js": "^5.2.0", "elliptic": "^6.5.4", @@ -313,9 +315,9 @@ } }, "node_modules/@cosmjs/encoding": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.3.tgz", - "integrity": "sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.4.tgz", + "integrity": "sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==", "dependencies": { "base64-js": "^1.3.0", "bech32": "^1.1.4", @@ -323,92 +325,92 @@ } }, "node_modules/@cosmjs/json-rpc": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.3.tgz", - "integrity": "sha512-JwFRWZa+Y95KrAG8CuEbPVOSnXO2uMSEBcaAB/FBU3Mo4jQnDoUjXvt3vwtFWxfAytrWCn1I4YDFaOAinnEG/Q==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.4.tgz", + "integrity": "sha512-/jt4mBl7nYzfJ2J/VJ+r19c92mUKF0Lt0JxM3MXEJl7wlwW5haHAWtzRujHkyYMXOwIR+gBqT2S0vntXVBRyhQ==", "dependencies": { - "@cosmjs/stream": "^0.32.3", + "@cosmjs/stream": "^0.32.4", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/math": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.3.tgz", - "integrity": "sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", + "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", "dependencies": { "bn.js": "^5.2.0" } }, "node_modules/@cosmjs/proto-signing": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz", - "integrity": "sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==", - "dependencies": { - "@cosmjs/amino": "^0.32.3", - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz", + "integrity": "sha512-QdyQDbezvdRI4xxSlyM1rSVBO2st5sqtbEIl3IX03uJ7YiZIQHyv6vaHVf1V4mapusCqguiHJzm4N4gsFdLBbQ==", + "dependencies": { + "@cosmjs/amino": "^0.32.4", + "@cosmjs/crypto": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0" } }, "node_modules/@cosmjs/socket": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.3.tgz", - "integrity": "sha512-F2WwNmaUPdZ4SsH6Uyreq3wQk7jpaEkb3wfOP951f5Jt6HCW/PxbxhKzHkAAf6+Sqks6SPhkbWoE8XaZpjL2KA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.4.tgz", + "integrity": "sha512-davcyYziBhkzfXQTu1l5NrpDYv0K9GekZCC9apBRvL1dvMc9F/ygM7iemHjUA+z8tJkxKxrt/YPjJ6XNHzLrkw==", "dependencies": { - "@cosmjs/stream": "^0.32.3", + "@cosmjs/stream": "^0.32.4", "isomorphic-ws": "^4.0.1", "ws": "^7", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/stargate": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.3.tgz", - "integrity": "sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.4.tgz", + "integrity": "sha512-usj08LxBSsPRq9sbpCeVdyLx2guEcOHfJS9mHGCLCXpdAPEIEQEtWLDpEUc0LEhWOx6+k/ChXTc5NpFkdrtGUQ==", "dependencies": { "@confio/ics23": "^0.6.8", - "@cosmjs/amino": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/proto-signing": "^0.32.3", - "@cosmjs/stream": "^0.32.3", - "@cosmjs/tendermint-rpc": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "@cosmjs/amino": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/proto-signing": "^0.32.4", + "@cosmjs/stream": "^0.32.4", + "@cosmjs/tendermint-rpc": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/stream": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.3.tgz", - "integrity": "sha512-J2zVWDojkynYifAUcRmVczzmp6STEpyiAARq0rSsviqjreGIfspfuws/8rmkPa6qQBZvpQOBQCm2HyZZwYplIw==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.4.tgz", + "integrity": "sha512-Gih++NYHEiP+oyD4jNEUxU9antoC0pFSg+33Hpp0JlHwH0wXhtD3OOKnzSfDB7OIoEbrzLJUpEjOgpCp5Z+W3A==", "dependencies": { "xstream": "^11.14.0" } }, "node_modules/@cosmjs/tendermint-rpc": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.3.tgz", - "integrity": "sha512-xeprW+VR9xKGstqZg0H/KBZoUp8/FfFyS9ljIUTLM/UINjP2MhiwncANPS2KScfJVepGufUKk0/phHUeIBSEkw==", - "dependencies": { - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/json-rpc": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/socket": "^0.32.3", - "@cosmjs/stream": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.4.tgz", + "integrity": "sha512-MWvUUno+4bCb/LmlMIErLypXxy7ckUuzEmpufYYYd9wgbdCXaTaO08SZzyFM5PI8UJ/0S2AmUrgWhldlbxO8mw==", + "dependencies": { + "@cosmjs/crypto": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/json-rpc": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/socket": "^0.32.4", + "@cosmjs/stream": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "axios": "^1.6.0", "readonly-date": "^1.0.0", "xstream": "^11.14.0" } }, "node_modules/@cosmjs/utils": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.3.tgz", - "integrity": "sha512-WCZK4yksj2hBDz4w7xFZQTRZQ/RJhBX26uFHmmQFIcNUUVAihrLO+RerqJgk0dZqC42wstM9pEUQGtPmLcIYvg==" + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w==" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -450,9 +452,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -574,72 +576,17 @@ "node": ">=14" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, "peer": true, "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, "node_modules/@ethersproject/abi": { @@ -1362,26 +1309,27 @@ } }, "node_modules/@gql.tada/cli-utils": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.3.9.tgz", - "integrity": "sha512-oRb7SG/+csx9CiypSJTI21KaLfulOUnhX1vxg4FXi2snub9XShkGR2XnnlJVTAOZXY9Vcxti1NutAElxdDkycA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@gql.tada/cli-utils/-/cli-utils-1.5.1.tgz", + "integrity": "sha512-JVLpoXLa4msrE7MHnmW/7fYnIl8dncLom8T/Ghsxu+Kz5iMGnzK2joJN5cZt4ewCAqfCV3HZZ0VH189OalGd9g==", "dependencies": { - "@0no-co/graphqlsp": "^1.12.1", - "@gql.tada/internal": "1.0.0", + "@0no-co/graphqlsp": "^1.12.9", + "@gql.tada/internal": "1.0.4", "@vue/compiler-dom": "^3.4.23", "@vue/language-core": "^2.0.17", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "svelte2tsx": "^0.7.6" }, "peerDependencies": { + "@0no-co/graphqlsp": "^1.12.9", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", "typescript": "^5.0.0" } }, "node_modules/@gql.tada/internal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.0.tgz", - "integrity": "sha512-B55aIYyZn5ewdgMqoJciPAwF5DKYX6HBabTU+ap/dpNH3EgJrLomc8Y8w+MCxCyOx+dXL9OduT6eWnVr7J7Eyg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@gql.tada/internal/-/internal-1.0.4.tgz", + "integrity": "sha512-tq0rgoqjhdVqKWEsbrkiX7Qpp5gA4/Br9r9TVBeh3WpJIcuGh5U48UjB4IOxtXBePZdX8E0oc07GjOid/P60Wg==", "dependencies": { "@0no-co/graphql.web": "^1.0.5" }, @@ -1402,6 +1350,7 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", @@ -1429,6 +1378,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -1464,9 +1414,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "peer": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1488,20 +1438,20 @@ } }, "node_modules/@ledgerhq/devices": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.3.0.tgz", - "integrity": "sha512-h5Scr+yIae8yjPOViCHLdMjpqn4oC2Whrsq8LinRxe48LEGMdPqSV1yY7+3Ch827wtzNpMv+/ilKnd8rY+rTlg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.4.0.tgz", + "integrity": "sha512-TUrMlWZJ+5AFp2lWMw4rGQoU+WtjIqlFX5SzQDL9phaUHrt4TFierAGHsaj5+tUHudhD4JhIaLI2cn1NOyq5NQ==", "dependencies": { - "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/errors": "^6.17.0", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1", "semver": "^7.3.5" } }, "node_modules/@ledgerhq/errors": { - "version": "6.16.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.4.tgz", - "integrity": "sha512-M57yFaLYSN+fZCX0E0zUqOmrV6eipK+s5RhijHoUNlHUqrsvUz7iRQgpd5gRgHB5VkIjav7KdaZjKiWGcHovaQ==" + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.17.0.tgz", + "integrity": "sha512-xnOVpy/gUUkusEORdr2Qhw3Vd0MGfjyVGgkGR9Ck6FXE26OIdIQ3tNmG5BdZN+gwMMFJJVxxS4/hr0taQfZ43w==" }, "node_modules/@ledgerhq/hw-app-eth": { "version": "6.32.2", @@ -1529,53 +1479,53 @@ } }, "node_modules/@ledgerhq/hw-transport": { - "version": "6.30.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.6.tgz", - "integrity": "sha512-fT0Z4IywiuJuZrZE/+W0blkV5UCotDPFTYKLkKCLzYzuE6javva7D/ajRaIeR+hZ4kTmKF4EqnsmDCXwElez+w==", + "version": "6.31.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.0.tgz", + "integrity": "sha512-BY1poLk8vlJdIYngp8Zfaa/V9n14dqgt1G7iNetVRhJVFEKp9EYONeC3x6q/N7x81LUpzBk6M+T+s46Z4UiXHw==", "dependencies": { - "@ledgerhq/devices": "^8.3.0", - "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/devices": "^8.4.0", + "@ledgerhq/errors": "^6.17.0", "@ledgerhq/logs": "^6.12.0", "events": "^3.3.0" } }, "node_modules/@ledgerhq/hw-transport-mocker": { - "version": "6.28.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.28.6.tgz", - "integrity": "sha512-JDO2kqMOTRCQWNZr1KVlyX1AqE6WBzHjJDS3FnSI8Z/Bj2KSc2/1H/4lW6+Ap64yLtlmOW3GchdafFmLgYAgqw==", + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.29.0.tgz", + "integrity": "sha512-SbS4SvbMcpNquUsvN4Gd0bTi7ohySqIDMHFf2YLhYBRu1HviU3TG/p4zoFrJcFUiIX2/wOmUdHsWtaQFdMVGyQ==", "dependencies": { - "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/hw-transport": "^6.31.0", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1" } }, "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.28.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.28.6.tgz", - "integrity": "sha512-USSTOO0zv9XtguWismP7/StnNS/s7Rz0JOGGaBhKe3Bzl7d5XPncUlmOvoNFzzY/QdasEoFs2QId1+ibJG71Vw==", + "version": "6.29.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.1.tgz", + "integrity": "sha512-l+zAfsE0uvo2/Wni0TSW+n6HoFmZdPH6ukrjPocY6jvbhcaxhpbK7ERvDpnZMir/pHwsDoAsvwPY/0sFRBf7bw==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.3.0", - "@ledgerhq/errors": "^6.16.4", - "@ledgerhq/hw-transport": "^6.30.6", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.29.6", + "@ledgerhq/devices": "^8.4.0", + "@ledgerhq/errors": "^6.17.0", + "@ledgerhq/hw-transport": "^6.31.0", + "@ledgerhq/hw-transport-node-hid-noevents": "^6.30.1", "@ledgerhq/logs": "^6.12.0", "lodash": "^4.17.21", - "node-hid": "^2.1.2", + "node-hid": "2.1.2", "usb": "2.9.0" } }, "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.29.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz", - "integrity": "sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg==", + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.1.tgz", + "integrity": "sha512-9Mb5vDBXfSaRhfl0U2DnJLN4FgosfQopkzjzZYYHT3+s9XMot4WN/eWWbv5Ksx5qsV8RLQ77dewFFomNthm/vQ==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.3.0", - "@ledgerhq/errors": "^6.16.4", - "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/devices": "^8.4.0", + "@ledgerhq/errors": "^6.17.0", + "@ledgerhq/hw-transport": "^6.31.0", "@ledgerhq/logs": "^6.12.0", - "node-hid": "^2.1.2" + "node-hid": "2.1.2" } }, "node_modules/@ledgerhq/logs": { @@ -1665,9 +1615,9 @@ "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" }, "node_modules/@noble/curves": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz", - "integrity": "sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1998,184 +1948,91 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, "engines": { "node": ">= 12" }, "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "dev": true, "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomiclabs/hardhat-ethers": { @@ -2502,9 +2359,9 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", + "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", "funding": { "url": "https://paulmillr.com/funding/" } @@ -2637,9 +2494,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", - "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -2649,9 +2506,9 @@ } }, "node_modules/@smithy/types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/@solidity-parser/parser": { @@ -2670,9 +2527,9 @@ "integrity": "sha512-3gnPjAz78htgqsNEDkEsKHKosV2BF2iZkoHCNxpmZwUxiPsw+2VaXMed8RRMe0rGk3d5GZe7RrSba8zV80J3Ag==" }, "node_modules/@stellar/stellar-base": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-12.0.0.tgz", - "integrity": "sha512-uGpahDFFXbE39myOmBnEZSjVys4yUkQ/ASNuYENGyS8MNdfA0TS7DPWkiO6t17P+rW+FRV1zmumJtjRHwxxMdw==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-12.0.1.tgz", + "integrity": "sha512-g6c27MNsDgEdUmoNQJn7zCWoCY50WHt0OIIOq3PhWaJRtUaT++qs1Jpb8+1bny2GmhtfRGOfPUFSyQBuHT9Mvg==", "dependencies": { "@stellar/js-xdr": "^3.1.1", "base32.js": "^0.1.0", @@ -2686,11 +2543,11 @@ } }, "node_modules/@stellar/stellar-sdk": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-12.0.1.tgz", - "integrity": "sha512-0+YXUTS2LpZ+Of383hSYVpsRl9BJ3X9lHcj05ouS3VkVL9BH7w+Par8RHPkiHS6lLYn3gWRgaJauTebkamY/Jw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-12.1.0.tgz", + "integrity": "sha512-Va0hu9SaPezmMbO5eMwL5D15Wrx1AGWRtxayUDRWV2Fr3ynY58mvCZS1vsgNQ4kE8MZe3nBVKv6T9Kzqwgx1PQ==", "dependencies": { - "@stellar/stellar-base": "^12.0.0", + "@stellar/stellar-base": "^12.0.1", "axios": "^1.7.2", "bignumber.js": "^9.1.2", "eventsource": "^2.0.2", @@ -2891,16 +2748,16 @@ "peer": true }, "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", "dev": true, "peer": true }, "node_modules/@types/node": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", - "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "version": "20.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dependencies": { "undici-types": "~5.26.4" } @@ -2951,6 +2808,11 @@ "@types/node": "*" } }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==" + }, "node_modules/@types/w3c-web-usb": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", @@ -2964,52 +2826,50 @@ "dev": true }, "node_modules/@volar/language-core": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.5.tgz", - "integrity": "sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==", + "version": "2.4.0-alpha.16", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.16.tgz", + "integrity": "sha512-oOTnIZlx0P/idFwVw+W0NbzKDtZAQMzXSdIFfTePCKcXlb4Ys12GaGkx8NF9dsvPYV3nbv3ZsSxnkZWBmNKd7A==", "dependencies": { - "@volar/source-map": "2.2.5" + "@volar/source-map": "2.4.0-alpha.16" } }, "node_modules/@volar/source-map": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.5.tgz", - "integrity": "sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==", - "dependencies": { - "muggle-string": "^0.4.0" - } + "version": "2.4.0-alpha.16", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.16.tgz", + "integrity": "sha512-sL9vNG7iR2hiKZor7UkD5Sufu3QCia4cbp2gX/nGRNSdaPbhOpdAoavwlBm0PrVkpiA19NZuavZoobD8krviFg==" }, "node_modules/@vue/compiler-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", - "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.32.tgz", + "integrity": "sha512-8tCVWkkLe/QCWIsrIvExUGnhYCAOroUs5dzhSoKL5w4MJS8uIYiou+pOPSVIOALOQ80B0jBs+Ri+kd5+MBnCDw==", "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.32", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", - "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.32.tgz", + "integrity": "sha512-PbSgt9KuYo4fyb90dynuPc0XFTfFPs3sCTbPLOLlo+PrUESW1gn/NjSsUvhR+mI2AmmEzexwYMxbHDldxSOr2A==", "dependencies": { - "@vue/compiler-core": "3.4.27", - "@vue/shared": "3.4.27" + "@vue/compiler-core": "3.4.32", + "@vue/shared": "3.4.32" } }, "node_modules/@vue/language-core": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.19.tgz", - "integrity": "sha512-A9EGOnvb51jOvnCYoRLnMP+CcoPlbZVxI9gZXE/y2GksRWM6j/PrLEIC++pnosWTN08tFpJgxhSS//E9v/Sg+Q==", + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.26.tgz", + "integrity": "sha512-/lt6SfQ3O1yDAhPsnLv9iSUgXd1dMHqUm/t3RctfqjuwQf1LnftZ414X3UBn6aXT4MiwXWtbNJ4Z0NZWwDWgJQ==", "dependencies": { - "@volar/language-core": "~2.2.4", + "@volar/language-core": "~2.4.0-alpha.15", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "vue-template-compiler": "^2.7.14" }, @@ -3031,9 +2891,9 @@ } }, "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3045,9 +2905,9 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.32.tgz", + "integrity": "sha512-ep4mF1IVnX/pYaNwxwOpJHyBtOMKWoKZMbnUyd+z0udqIxLUh7YCCd/JfDna8aUrmnG9SFORyIq2HzEATRrQsg==" }, "node_modules/abbrev": { "version": "1.0.9", @@ -3131,9 +2991,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "bin": { "acorn": "bin/acorn" }, @@ -3151,11 +3011,14 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", "dev": true, "peer": true, + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -3603,12 +3466,12 @@ } }, "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "peer": true, - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/balanced-match": { @@ -3840,9 +3703,9 @@ } }, "node_modules/bs58check/node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", "dependencies": { "safe-buffer": "^5.0.1" } @@ -4762,9 +4625,9 @@ "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -4917,9 +4780,9 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -4976,9 +4839,9 @@ } }, "node_modules/elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", + "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5758,9 +5621,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6195,6 +6058,13 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true, + "peer": true + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -6747,13 +6617,14 @@ } }, "node_modules/gql.tada": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.7.5.tgz", - "integrity": "sha512-GepPTee+FWSVVZQ7GiJHzsGNo7gOb59kcn4mUPYLlkbpeJfOUwpuoB05ZNaXG0W4qZVPd1I7R2UgMHBjY1lGlQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/gql.tada/-/gql.tada-1.8.2.tgz", + "integrity": "sha512-LLt+2RcLY6i+Rq+LQQwx3uiEAPfA+pmEaAo/bJjUdaV1CVJBy3Wowds6GHeerW5kvekRM/XdbPTJw5OvnLq/DQ==", "dependencies": { "@0no-co/graphql.web": "^1.0.5", - "@gql.tada/cli-utils": "1.3.9", - "@gql.tada/internal": "1.0.0" + "@0no-co/graphqlsp": "^1.12.9", + "@gql.tada/cli-utils": "1.5.1", + "@gql.tada/internal": "1.0.4" }, "bin": { "gql-tada": "bin/cli.js", @@ -6776,9 +6647,9 @@ "dev": true }, "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -7591,12 +7462,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8203,16 +8077,16 @@ } }, "node_modules/libsodium-sumo": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.13.tgz", - "integrity": "sha512-zTGdLu4b9zSNLfovImpBCbdAA4xkpkZbMnSQjP8HShyOutnGjRHmSOKlsylh1okao6QhLiz7nG98EGn+04cZjQ==" + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.14.tgz", + "integrity": "sha512-2nDge6qlAjcwyslAhWfVumlkeSNK5+WCfKa2/VEq9prvlT5vP2FR0m0o5hmKaYqfsZ4TQVj5czQsimZvXDB1CQ==" }, "node_modules/libsodium-wrappers-sumo": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.13.tgz", - "integrity": "sha512-lz4YdplzDRh6AhnLGF2Dj2IUj94xRN6Bh8T0HLNwzYGwPehQJX6c7iYVrFUPZ3QqxE0bqC+K0IIqqZJYWumwSQ==", + "version": "0.7.14", + "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.14.tgz", + "integrity": "sha512-0lm7ZwN5a95J2yUi8R1rgQeeaVDIWnvNzgVmXmZswis4mC+bQtbDrB+QpJlL4qklaKx3hVpJjoc6ubzJFiv64Q==", "dependencies": { - "libsodium-sumo": "^0.7.13" + "libsodium-sumo": "^0.7.14" } }, "node_modules/locate-character": { @@ -8626,31 +8500,31 @@ } }, "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz", + "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", @@ -8660,15 +8534,6 @@ "node": ">= 14.0.0" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -8678,56 +8543,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -8748,22 +8563,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -8859,9 +8662,9 @@ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/node-abi": { - "version": "3.63.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz", - "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==", + "version": "3.65.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", + "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -8916,9 +8719,9 @@ } }, "node_modules/node-hid": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.2.0.tgz", - "integrity": "sha512-vj48zh9j555DZzUhMc8tk/qw6xPFrDyPBH1ST1Z/hWaA/juBJw7IuSxPeOgpzNFNU36mGYj+THioRMt1xOdm/g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.2.tgz", + "integrity": "sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -9004,10 +8807,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9339,9 +9145,9 @@ } }, "node_modules/pg": { - "version": "8.11.5", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.5.tgz", - "integrity": "sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", "dependencies": { "pg-connection-string": "^2.6.4", "pg-pool": "^3.6.2", @@ -9521,9 +9327,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -9615,9 +9421,9 @@ } }, "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", + "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", "dev": true, "peer": true, "dependencies": { @@ -10003,9 +9809,9 @@ } }, "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/safe-array-concat": { "version": "1.1.2", @@ -10232,9 +10038,9 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -10243,9 +10049,9 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -10976,9 +10782,9 @@ } }, "node_modules/svelte2tsx": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.9.tgz", - "integrity": "sha512-Rm+0LAwg9wT4H2IsR8EaM9EWErTzi9LmuZKxkH5b1ua94XjQmwHstBP4VabLgA9AE6XmwBg+xK7Cjzwfm6ustQ==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.13.tgz", + "integrity": "sha512-aObZ93/kGAiLXA/I/kP+x9FriZM+GboB/ReOIGmLNbVGEd2xC+aTCppm3mk1cc9I/z60VQf7b2QDxC3jOXu3yw==", "dependencies": { "dedent-js": "^1.0.1", "pascal-case": "^3.1.1" @@ -11075,16 +10881,16 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -11586,9 +11392,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -11609,9 +11415,9 @@ } }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", + "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==", "dev": true, "optional": true, "peer": true, @@ -11989,72 +11795,17 @@ "node": ">=8.0.0" } }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, "peer": true, "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, "node_modules/webidl-conversions": { @@ -12211,9 +11962,9 @@ } }, "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true }, "node_modules/wrap-ansi": { @@ -12240,9 +11991,9 @@ "dev": true }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -12319,9 +12070,9 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" @@ -12366,4 +12117,3 @@ } } } - From 21834b61a9e8940fccff9c2e9a924d19ee2c37c1 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 17:28:36 +0530 Subject: [PATCH 02/37] refactor: update script acccording to latest sui changes --- sui/deploy-gateway.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index 2a4ea04c..e181db84 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -1,8 +1,8 @@ const { saveConfig, prompt, printInfo } = require('../evm/utils'); const { Command, Option } = require('commander'); -const { publishPackage, updateMoveToml } = require('@axelar-network/axelar-cgp-sui/scripts/publish-package'); const { TransactionBlock } = require('@mysten/sui.js/transactions'); const { bcs } = require('@mysten/sui.js/bcs'); +const { TxBuilder, updateMoveToml } = require('@axelar-network/axelar-cgp-sui'); const { ethers } = require('hardhat'); const { utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, @@ -62,15 +62,15 @@ async function processCommand(config, chain, options) { return; } - const published = await publishPackage('axelar_gateway', client, keypair); - const packageId = published.packageId; + const builder = new TxBuilder(client); + await builder.publishPackageAndTransferCap('axelar_gateway', keypair.toSuiAddress()); + const publishTxn = await builder.signAndExecute(keypair); + const packageId = (publishTxn.objectChanges?.find((a) => a.type === 'published') ?? []).packageId; updateMoveToml('axelar_gateway', packageId); - const creatorCap = published.publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); - const relayerDiscovery = published.publishTxn.objectChanges.find( - (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, - ); + const creatorCap = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); + const relayerDiscovery = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`); const encodedSigners = signersStruct .serialize({ From 5bf01b67ff858d201182a1ac1c03c4206fff5b8e Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 17:28:53 +0530 Subject: [PATCH 03/37] feat: add script to upgrade gateway --- sui/upgrade-gateway.js | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 sui/upgrade-gateway.js diff --git a/sui/upgrade-gateway.js b/sui/upgrade-gateway.js new file mode 100644 index 00000000..5d29f607 --- /dev/null +++ b/sui/upgrade-gateway.js @@ -0,0 +1,96 @@ +const { Command, Option } = require('commander'); +const { TxBuilder } = require('@axelar-network/axelar-cgp-sui'); +const { bcs } = require('@mysten/sui.js/bcs'); +const { fromB64, toB64 } = require('@mysten/bcs'); +const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); +const { addBaseOptions } = require('./cli-utils'); +const { getWallet, broadcast } = require('./sign-utils'); +const { loadSuiConfig } = require('./utils'); + +async function processCommand(chain, options) { + const [keypair, client] = getWallet(chain, options); + printInfo('Wallet address', keypair.toSuiAddress()); + + const { offline, policy, sender, txFilePath } = options; + + if (!chain.contracts.axelar_gateway) { + chain.contracts.axelar_gateway = {}; + } + + const contractsConfig = chain.contracts; + const gatewayConfig = contractsConfig.axelar_gateway; + + const builder = new TxBuilder(client); + + const { modules, dependencies, digest } = await builder.getContractBuild('axelar_gateway'); + + const upgradeCap = options.upgradeCap || gatewayConfig.objects?.UpgradeCap; + const digestHash = options.digest ? fromB64(options.digest) : digest; + + validateParameters({ isNonEmptyString: { upgradeCap, policy }, isNonEmptyStringArray: { modules, dependencies } }); + + const tx = builder.tx; + const cap = tx.object(upgradeCap); + + const ticket = tx.moveCall({ + target: `0x2::package::authorize_upgrade`, + arguments: [cap, tx.pure(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], + }); + + const receipt = tx.upgrade({ + modules, + dependencies, + packageId: gatewayConfig.address, + ticket, + }); + + tx.moveCall({ + target: `0x2::package::commit_upgrade`, + arguments: [cap, receipt], + }); + + if (offline) { + sender ? tx.setSender(sender) : tx.setSender(keypair.toSuiAddress()); + const txBytes = await tx.build({ client }); + validateParameters({ isNonEmptyString: { txFilePath } }); + const txB64Bytes = toB64(txBytes); + + writeJSON({ status: 'PENDING', bytes: txB64Bytes }, txFilePath); + printInfo(`The unsigned transaction is`, txB64Bytes); + } else { + const result = await broadcast(client, keypair, tx); + + const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; + gatewayConfig.address = packageId; + printInfo('Transaction result', JSON.stringify(result, null, 2)); + printInfo(`Gateway upgraded`, packageId); + } +} + +async function mainProcessor(options, processor) { + const config = loadSuiConfig(options.env); + + await processor(config.sui, options); + saveConfig(config, options.env); +} + +if (require.main === module) { + const program = new Command(); + + program.name('upgrade-gateway').description('Deploy/Upgrade the Sui Gateway'); + + addBaseOptions(program); + + program.addOption(new Option('--upgradeCap ', 'gateway UpgradeCap id')); + program.addOption(new Option('--policy ', 'new policy to upgrade')); + program.addOption(new Option('--sender ', 'transaction sender')); + program.addOption(new Option('--digest ', 'digest hash for upgrade')); + program.addOption(new Option('--offline', 'store tx block for sign')); + program.addOption(new Option('--txFilePath ', 'unsigned transaction will be stored')); + + program.action((options) => { + mainProcessor(options, processCommand); + }); + + program.parse(); +} From 4ca5ee06394c540bed0ee0dc12482ebfdadae7ad Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 20:04:26 +0530 Subject: [PATCH 04/37] docs: add command to upgrade gateway --- sui/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sui/README.md b/sui/README.md index 4fb3e275..cc14f2fe 100644 --- a/sui/README.md +++ b/sui/README.md @@ -121,6 +121,15 @@ node sui/gateway.js rotate --signers wallet --proof wallet --currentNonce test - Use the same nonce for `--currentNonce` as the `--nonce` when deploying the gateway. +Upgrading Gateway: + +To update the gateway run the following command: + +```bash +node sui/upgrade-gateway.js --upgradeCap 0x9a7ca3b1e1ed75d821f1c5e34fed451d5a5dc17d4faaea692860530871c46456 --policy 0 +``` + +Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. ### Multisig From 01eba292c95ebf14c2e8e2ad8ce9b77f2a14fcea Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 20:14:37 +0530 Subject: [PATCH 05/37] refactor: clean logging --- sui/upgrade-gateway.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sui/upgrade-gateway.js b/sui/upgrade-gateway.js index 5d29f607..b0b60a85 100644 --- a/sui/upgrade-gateway.js +++ b/sui/upgrade-gateway.js @@ -62,8 +62,8 @@ async function processCommand(chain, options) { const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; gatewayConfig.address = packageId; - printInfo('Transaction result', JSON.stringify(result, null, 2)); - printInfo(`Gateway upgraded`, packageId); + printInfo('Transaction digest', result.digest); + printInfo(`Gateway upgraded to`, packageId); } } From 62a0de9fcb54df56de8e03b1d47e0bdc90c21554 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 18 Jul 2024 20:48:35 +0530 Subject: [PATCH 06/37] improved readability --- sui/README.md | 2 +- sui/upgrade-gateway.js | 29 +++++++++++++---------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/sui/README.md b/sui/README.md index cc14f2fe..aced3091 100644 --- a/sui/README.md +++ b/sui/README.md @@ -126,7 +126,7 @@ Upgrading Gateway: To update the gateway run the following command: ```bash -node sui/upgrade-gateway.js --upgradeCap 0x9a7ca3b1e1ed75d821f1c5e34fed451d5a5dc17d4faaea692860530871c46456 --policy 0 +node sui/upgrade-gateway.js --upgradeCap --policy 0 ``` Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. diff --git a/sui/upgrade-gateway.js b/sui/upgrade-gateway.js index b0b60a85..66b31d05 100644 --- a/sui/upgrade-gateway.js +++ b/sui/upgrade-gateway.js @@ -2,50 +2,47 @@ const { Command, Option } = require('commander'); const { TxBuilder } = require('@axelar-network/axelar-cgp-sui'); const { bcs } = require('@mysten/sui.js/bcs'); const { fromB64, toB64 } = require('@mysten/bcs'); -const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet, broadcast } = require('./sign-utils'); const { loadSuiConfig } = require('./utils'); +const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); async function processCommand(chain, options) { const [keypair, client] = getWallet(chain, options); printInfo('Wallet address', keypair.toSuiAddress()); const { offline, policy, sender, txFilePath } = options; - - if (!chain.contracts.axelar_gateway) { - chain.contracts.axelar_gateway = {}; - } - - const contractsConfig = chain.contracts; - const gatewayConfig = contractsConfig.axelar_gateway; + const gatewayConfig = chain.contracts.axelar_gateway ?? {}; const builder = new TxBuilder(client); - const { modules, dependencies, digest } = await builder.getContractBuild('axelar_gateway'); - const upgradeCap = options.upgradeCap || gatewayConfig.objects?.UpgradeCap; const digestHash = options.digest ? fromB64(options.digest) : digest; + const packageId = gatewayConfig.address; - validateParameters({ isNonEmptyString: { upgradeCap, policy }, isNonEmptyStringArray: { modules, dependencies } }); + validateParameters({ + isNonEmptyString: { policy }, + isNonEmptyStringArray: { modules, dependencies }, + isKeccak256Has: { upgradeCap, packageId }, + }); const tx = builder.tx; const cap = tx.object(upgradeCap); const ticket = tx.moveCall({ - target: `0x2::package::authorize_upgrade`, + target: '0x2::package::authorize_upgrade', arguments: [cap, tx.pure(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], }); const receipt = tx.upgrade({ modules, dependencies, - packageId: gatewayConfig.address, + packageId, ticket, }); tx.moveCall({ - target: `0x2::package::commit_upgrade`, + target: '0x2::package::commit_upgrade', arguments: [cap, receipt], }); @@ -56,14 +53,14 @@ async function processCommand(chain, options) { const txB64Bytes = toB64(txBytes); writeJSON({ status: 'PENDING', bytes: txB64Bytes }, txFilePath); - printInfo(`The unsigned transaction is`, txB64Bytes); + printInfo('The unsigned transaction is', txB64Bytes); } else { const result = await broadcast(client, keypair, tx); const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; gatewayConfig.address = packageId; printInfo('Transaction digest', result.digest); - printInfo(`Gateway upgraded to`, packageId); + printInfo('Gateway upgraded to', packageId); } } From cfa3985870481b730793db7093c17b72e9c09178 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 18:32:22 +0530 Subject: [PATCH 07/37] refactor: update cgp sui package --- package-lock.json | 181 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 90 insertions(+), 93 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a929b90..63f77123 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git", + "@axelar-network/axelar-cgp-sui": "^0.2.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", @@ -55,9 +55,6 @@ } }, "node_modules/@0no-co/graphqlsp": { - "version": "1.12.11", - "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.11.tgz", - "integrity": "sha512-vLja9r7L6BBXwxW86Wyi5z5hjTHscH7qoQooy+MXHkM9srBB6ZuesYZq5DQ/+SErQrFyaxeY+hwv2qBAksxriw==", "version": "1.12.11", "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.11.tgz", "integrity": "sha512-vLja9r7L6BBXwxW86Wyi5z5hjTHscH7qoQooy+MXHkM9srBB6ZuesYZq5DQ/+SErQrFyaxeY+hwv2qBAksxriw==", @@ -73,7 +70,6 @@ "node_modules/@0xpolygonhermez/zkevm-commonjs": { "version": "1.0.0", "resolved": "git+ssh://git@github.com/0xpolygonhermez/zkevm-commonjs.git#34f72fe9f7a4c3c45965742476a87148c9e05c0f", - "license": "pending", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", @@ -175,8 +171,10 @@ } }, "node_modules/@axelar-network/axelar-cgp-sui": { - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/axelarnetwork/axelar-cgp-sui.git#368b2d4032314e6400b5be3058490dcc79ed0fbb", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-sui/-/axelar-cgp-sui-0.2.0.tgz", + "integrity": "sha512-yQtc/1Aq7kllR0wdKHDAmtwN+lkDxHS0/6FCIYJewH74nAwd+yDnRBkrZeWIW3p2FY3y31t7/DRmdbfN+gpUVQ==", + "hasInstallScript": true, "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", "@mysten/sui.js": "^0.54.1", @@ -191,6 +189,33 @@ "node": ">=18" } }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/secp256k1": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@axelar-network/axelar-cgp-sui/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } + }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", @@ -1442,20 +1467,20 @@ } }, "node_modules/@ledgerhq/devices": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.4.0.tgz", - "integrity": "sha512-TUrMlWZJ+5AFp2lWMw4rGQoU+WtjIqlFX5SzQDL9phaUHrt4TFierAGHsaj5+tUHudhD4JhIaLI2cn1NOyq5NQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.4.1.tgz", + "integrity": "sha512-Mbjzqlcj4Q2StxEmaYEb5wv6sK5Sk26L4xs0BC9io/AyvpXNTDAp67tryB/klNcvd+WwZPcPdYYvlNzfQ0WTUA==", "dependencies": { - "@ledgerhq/errors": "^6.17.0", + "@ledgerhq/errors": "^6.18.0", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1", "semver": "^7.3.5" } }, "node_modules/@ledgerhq/errors": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.17.0.tgz", - "integrity": "sha512-xnOVpy/gUUkusEORdr2Qhw3Vd0MGfjyVGgkGR9Ck6FXE26OIdIQ3tNmG5BdZN+gwMMFJJVxxS4/hr0taQfZ43w==" + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.18.0.tgz", + "integrity": "sha512-L3jQWAGyooxRDk/MRlW2v4Ji9+kloBtdmz9wBkHaj2j0n+05rweJSV3GHw9oye1BYMbVFqFffmT4H3hlXlCasw==" }, "node_modules/@ledgerhq/hw-app-eth": { "version": "6.32.2", @@ -1483,36 +1508,36 @@ } }, "node_modules/@ledgerhq/hw-transport": { - "version": "6.31.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.0.tgz", - "integrity": "sha512-BY1poLk8vlJdIYngp8Zfaa/V9n14dqgt1G7iNetVRhJVFEKp9EYONeC3x6q/N7x81LUpzBk6M+T+s46Z4UiXHw==", + "version": "6.31.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.1.tgz", + "integrity": "sha512-0hVcrqUOM7AYV/JEq8yoeBiXLjpWrentgYt8MC3n+iNFfpORU/SUprcbu0s884IHzj+a8mx0JCZp9y7uPSLlzg==", "dependencies": { - "@ledgerhq/devices": "^8.4.0", - "@ledgerhq/errors": "^6.17.0", + "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/errors": "^6.18.0", "@ledgerhq/logs": "^6.12.0", "events": "^3.3.0" } }, "node_modules/@ledgerhq/hw-transport-mocker": { - "version": "6.29.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.29.0.tgz", - "integrity": "sha512-SbS4SvbMcpNquUsvN4Gd0bTi7ohySqIDMHFf2YLhYBRu1HviU3TG/p4zoFrJcFUiIX2/wOmUdHsWtaQFdMVGyQ==", + "version": "6.29.1", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.29.1.tgz", + "integrity": "sha512-NmQ1Z4Swq6YjIi99kAxtnsi3nDLjlRSn3Kb4G9nJZkM49RPoG0XsYNxpYhUoRj+5RPrXO4h8wFUkNQ6yHcmYvw==", "dependencies": { - "@ledgerhq/hw-transport": "^6.31.0", + "@ledgerhq/hw-transport": "^6.31.1", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1" } }, "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.29.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.1.tgz", - "integrity": "sha512-l+zAfsE0uvo2/Wni0TSW+n6HoFmZdPH6ukrjPocY6jvbhcaxhpbK7ERvDpnZMir/pHwsDoAsvwPY/0sFRBf7bw==", + "version": "6.29.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.2.tgz", + "integrity": "sha512-MuRIRjAeRV1ibhh5An16GUZ+a1+T2Df+g8hXuoN/KKVqN2iqn22CngrL7WAFz7MxXsHuCH2GBtsrtesc15Dfqw==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.4.0", - "@ledgerhq/errors": "^6.17.0", - "@ledgerhq/hw-transport": "^6.31.0", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.30.1", + "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/errors": "^6.18.0", + "@ledgerhq/hw-transport": "^6.31.1", + "@ledgerhq/hw-transport-node-hid-noevents": "^6.30.2", "@ledgerhq/logs": "^6.12.0", "lodash": "^4.17.21", "node-hid": "2.1.2", @@ -1520,14 +1545,14 @@ } }, "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.1.tgz", - "integrity": "sha512-9Mb5vDBXfSaRhfl0U2DnJLN4FgosfQopkzjzZYYHT3+s9XMot4WN/eWWbv5Ksx5qsV8RLQ77dewFFomNthm/vQ==", + "version": "6.30.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.2.tgz", + "integrity": "sha512-BsrzQr34x3sKCIr0G8x4AEMtoB8EYmlQXEpleEjC/nmK9wMIJPpuZSc54/6xHD/xiITOw57KpBrYbcVk7srk0w==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.4.0", - "@ledgerhq/errors": "^6.17.0", - "@ledgerhq/hw-transport": "^6.31.0", + "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/errors": "^6.18.0", + "@ledgerhq/hw-transport": "^6.31.1", "@ledgerhq/logs": "^6.12.0", "node-hid": "2.1.2" } @@ -2266,7 +2291,6 @@ "name": "@0xpolygonhermez/zkevm-commonjs", "version": "0.5.0.1", "resolved": "git+ssh://git@github.com/hermeznetwork/zkevm-commonjs.git#3ee798329f567fa19b7c4f1ffbcf3d91cf5bf273", - "license": "pending", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", @@ -2527,9 +2551,9 @@ } }, "node_modules/@stellar/js-xdr": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.1.tgz", - "integrity": "sha512-3gnPjAz78htgqsNEDkEsKHKosV2BF2iZkoHCNxpmZwUxiPsw+2VaXMed8RRMe0rGk3d5GZe7RrSba8zV80J3Ag==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.2.tgz", + "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==" }, "node_modules/@stellar/stellar-base": { "version": "12.0.1", @@ -2844,24 +2868,24 @@ "integrity": "sha512-sL9vNG7iR2hiKZor7UkD5Sufu3QCia4cbp2gX/nGRNSdaPbhOpdAoavwlBm0PrVkpiA19NZuavZoobD8krviFg==" }, "node_modules/@vue/compiler-core": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.32.tgz", - "integrity": "sha512-8tCVWkkLe/QCWIsrIvExUGnhYCAOroUs5dzhSoKL5w4MJS8uIYiou+pOPSVIOALOQ80B0jBs+Ri+kd5+MBnCDw==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.33.tgz", + "integrity": "sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.32", + "@vue/shared": "3.4.33", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.32.tgz", - "integrity": "sha512-PbSgt9KuYo4fyb90dynuPc0XFTfFPs3sCTbPLOLlo+PrUESW1gn/NjSsUvhR+mI2AmmEzexwYMxbHDldxSOr2A==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.33.tgz", + "integrity": "sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==", "dependencies": { - "@vue/compiler-core": "3.4.32", - "@vue/shared": "3.4.32" + "@vue/compiler-core": "3.4.33", + "@vue/shared": "3.4.33" } }, "node_modules/@vue/language-core": { @@ -2910,9 +2934,9 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.32.tgz", - "integrity": "sha512-ep4mF1IVnX/pYaNwxwOpJHyBtOMKWoKZMbnUyd+z0udqIxLUh7YCCd/JfDna8aUrmnG9SFORyIq2HzEATRrQsg==" + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.33.tgz", + "integrity": "sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==" }, "node_modules/abbrev": { "version": "1.0.9", @@ -5795,20 +5819,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/ethereum-cryptography/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", @@ -10016,24 +10026,19 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "hasInstallScript": true, "dependencies": { "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", + "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10.0.0" } }, - "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, "node_modules/semaphore-async-await": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", @@ -10344,18 +10349,6 @@ "semver": "bin/semver" } }, - "node_modules/solc/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/solidity-coverage": { "version": "0.8.12", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", @@ -10989,11 +10982,15 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, "engines": { - "node": ">=14.14" + "node": ">=0.6.0" } }, "node_modules/to-regex-range": { diff --git a/package.json b/package.json index ddc89f29..e310af1d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-cgp-sui": "https://github.com/axelarnetwork/axelar-cgp-sui.git", + "@axelar-network/axelar-cgp-sui": "^0.2.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", From d0d847ba859572a474f3ce362639fc3005c19361 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 18:33:40 +0530 Subject: [PATCH 08/37] refactor: export deploy utils --- sui/deploy-utils.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index a6f53db6..c484c0dc 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -175,3 +175,8 @@ if (require.main === module) { program.parse(); } + +module.exports = { + upgradePackage, + deployPackage, +}; From 0443b688e784af4f11019b152eb042cfbc6e8f18 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 18:34:53 +0530 Subject: [PATCH 09/37] refactor: move gateway upgrade script --- sui/deploy-gateway.js | 58 +++++++++++++++++++++----- sui/upgrade-gateway.js | 93 ------------------------------------------ 2 files changed, 47 insertions(+), 104 deletions(-) delete mode 100644 sui/upgrade-gateway.js diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index 4c849f42..b24b9c67 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -1,7 +1,8 @@ -const { saveConfig, prompt, printInfo } = require('../evm/utils'); +const { saveConfig, prompt, printInfo, validateParameters, writeJSON } = require('../evm/utils'); const { Command, Option } = require('commander'); const { TransactionBlock } = require('@mysten/sui.js/transactions'); const { bcs } = require('@mysten/sui.js/bcs'); +const { TxBuilder } = require('@axelar-network/axelar-cgp-sui'); const { ethers } = require('hardhat'); const { utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, @@ -12,6 +13,8 @@ const { addBaseOptions } = require('./cli-utils'); const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); const { bytes32Struct, signersStruct } = require('./types-utils'); const { getAmplifierSigners, loadSuiConfig, deployPackage } = require('./utils'); +const { upgradePackage } = require('./deploy-utils'); +const { toB64 } = require('@mysten/sui.js/utils'); async function getSigners(keypair, config, chain, options) { if (options.signers === 'wallet') { @@ -43,15 +46,7 @@ async function getSigners(keypair, config, chain, options) { return getAmplifierSigners(config, chain); } -async function processCommand(config, chain, options) { - const [keypair, client] = getWallet(chain, options); - - await printWalletInfo(keypair, client, chain, options); - - if (!chain.contracts.axelar_gateway) { - chain.contracts.axelar_gateway = {}; - } - +async function deployGateway(config, chain, options, keypair, client) { const contractConfig = chain.contracts.axelar_gateway; const { minimumRotationDelay, domainSeparator } = options; const signers = await getSigners(keypair, config, chain, options); @@ -87,6 +82,7 @@ async function processCommand(config, chain, options) { tx.pure.address(operator), separator, tx.pure(minimumRotationDelay), + tx.pure(options.previousSigners), tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), tx.object('0x6'), ], @@ -107,6 +103,38 @@ async function processCommand(config, chain, options) { printInfo('Gateway deployed', JSON.stringify(contractConfig, null, 2)); } +async function upgradeGateway(chain, options, keypair, client) { + const contractsConfig = chain.contracts; + const packageName = 'axelar_gateway'; + const builder = new TxBuilder(client); + contractsConfig[packageName].objects.UpgradeCap = options.upgradeCap; + + await upgradePackage(client, keypair, packageName, contractsConfig[packageName], builder, options); +} + +async function processCommand(config, chain, options) { + const [keypair, client] = getWallet(chain, options); + await printWalletInfo(keypair, client, chain, options); + + chain.contracts.axelar_gateway = chain.contracts.axelar_gateway ?? {}; + + if (!options.upgrade) { + await deployGateway(config, chain, options, keypair, client); + } else { + await upgradeGateway(chain, options, keypair, client); + } + + if (options.offline) { + const { txFilePath } = options; + validateParameters({ isNonEmptyString: { txFilePath } }); + + const txB64Bytes = toB64(options.txBytes); + + writeJSON({ status: 'PENDING', bytes: txB64Bytes }, txFilePath); + printInfo(`The unsigned transaction is`, txB64Bytes); + } +} + async function mainProcessor(options, processor) { const config = loadSuiConfig(options.env); @@ -117,7 +145,7 @@ async function mainProcessor(options, processor) { if (require.main === module) { const program = new Command(); - program.name('deploy-gateway').description('Deploys/publishes the Sui gateway'); + program.name('deploy-gateway').description('Deploys/Upgrades the Sui gateway'); addBaseOptions(program); @@ -126,6 +154,14 @@ if (require.main === module) { program.addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)); program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); program.addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')); + program.addOption(new Option('--previousSigners ', 'number of previous signers to retain').default(0)); + program.addOption(new Option('--upgradeCap ', 'gateway UpgradeCap id')); + program.addOption(new Option('--upgrade', 'upgrade a deployed contract')); + program.addOption(new Option('--policy ', 'new policy to upgrade')); + program.addOption(new Option('--sender ', 'transaction sender')); + program.addOption(new Option('--digest ', 'digest hash for upgrade')); + program.addOption(new Option('--offline', 'store tx block for sign')); + program.addOption(new Option('--txFilePath ', 'unsigned transaction will be stored')); program.action((options) => { mainProcessor(options, processCommand); diff --git a/sui/upgrade-gateway.js b/sui/upgrade-gateway.js deleted file mode 100644 index 66b31d05..00000000 --- a/sui/upgrade-gateway.js +++ /dev/null @@ -1,93 +0,0 @@ -const { Command, Option } = require('commander'); -const { TxBuilder } = require('@axelar-network/axelar-cgp-sui'); -const { bcs } = require('@mysten/sui.js/bcs'); -const { fromB64, toB64 } = require('@mysten/bcs'); -const { addBaseOptions } = require('./cli-utils'); -const { getWallet, broadcast } = require('./sign-utils'); -const { loadSuiConfig } = require('./utils'); -const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); - -async function processCommand(chain, options) { - const [keypair, client] = getWallet(chain, options); - printInfo('Wallet address', keypair.toSuiAddress()); - - const { offline, policy, sender, txFilePath } = options; - const gatewayConfig = chain.contracts.axelar_gateway ?? {}; - - const builder = new TxBuilder(client); - const { modules, dependencies, digest } = await builder.getContractBuild('axelar_gateway'); - const upgradeCap = options.upgradeCap || gatewayConfig.objects?.UpgradeCap; - const digestHash = options.digest ? fromB64(options.digest) : digest; - const packageId = gatewayConfig.address; - - validateParameters({ - isNonEmptyString: { policy }, - isNonEmptyStringArray: { modules, dependencies }, - isKeccak256Has: { upgradeCap, packageId }, - }); - - const tx = builder.tx; - const cap = tx.object(upgradeCap); - - const ticket = tx.moveCall({ - target: '0x2::package::authorize_upgrade', - arguments: [cap, tx.pure(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], - }); - - const receipt = tx.upgrade({ - modules, - dependencies, - packageId, - ticket, - }); - - tx.moveCall({ - target: '0x2::package::commit_upgrade', - arguments: [cap, receipt], - }); - - if (offline) { - sender ? tx.setSender(sender) : tx.setSender(keypair.toSuiAddress()); - const txBytes = await tx.build({ client }); - validateParameters({ isNonEmptyString: { txFilePath } }); - const txB64Bytes = toB64(txBytes); - - writeJSON({ status: 'PENDING', bytes: txB64Bytes }, txFilePath); - printInfo('The unsigned transaction is', txB64Bytes); - } else { - const result = await broadcast(client, keypair, tx); - - const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; - gatewayConfig.address = packageId; - printInfo('Transaction digest', result.digest); - printInfo('Gateway upgraded to', packageId); - } -} - -async function mainProcessor(options, processor) { - const config = loadSuiConfig(options.env); - - await processor(config.sui, options); - saveConfig(config, options.env); -} - -if (require.main === module) { - const program = new Command(); - - program.name('upgrade-gateway').description('Deploy/Upgrade the Sui Gateway'); - - addBaseOptions(program); - - program.addOption(new Option('--upgradeCap ', 'gateway UpgradeCap id')); - program.addOption(new Option('--policy ', 'new policy to upgrade')); - program.addOption(new Option('--sender ', 'transaction sender')); - program.addOption(new Option('--digest ', 'digest hash for upgrade')); - program.addOption(new Option('--offline', 'store tx block for sign')); - program.addOption(new Option('--txFilePath ', 'unsigned transaction will be stored')); - - program.action((options) => { - mainProcessor(options, processCommand); - }); - - program.parse(); -} From 4a6b97b1a0392c544efd2a72343a9d1bfd9865f6 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 18:36:54 +0530 Subject: [PATCH 10/37] docs: update gateway upgrade command --- sui/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/README.md b/sui/README.md index 3f076332..c50c9282 100644 --- a/sui/README.md +++ b/sui/README.md @@ -126,7 +126,7 @@ Upgrading Gateway: To update the gateway run the following command: ```bash -node sui/upgrade-gateway.js --upgradeCap --policy 0 +node sui/deploy-gateway.js --upgradeCap --policy --upgrade ``` Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. From eb81dc37f9dcaa707c9e46873fc22d0d2e3960ff Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 18:48:33 +0530 Subject: [PATCH 11/37] refactor: add check for previos signers --- sui/deploy-gateway.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index b24b9c67..3fe16af6 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -51,6 +51,9 @@ async function deployGateway(config, chain, options, keypair, client) { const { minimumRotationDelay, domainSeparator } = options; const signers = await getSigners(keypair, config, chain, options); const operator = options.operator || keypair.toSuiAddress(); + const { previousSigners } = options; + + validateParameters({ isNonEmptyString: { previousSigners } }); if (prompt(`Proceed with deployment on ${chain.name}?`, options.yes)) { return; From a5f72affebeb2aaeab92309439b3fdb08dc4a71b Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 19 Jul 2024 19:43:33 +0530 Subject: [PATCH 12/37] refactor: update variable name --- sui/deploy-gateway.js | 4 +++- sui/deploy-utils.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js index 3fe16af6..835e6585 100644 --- a/sui/deploy-gateway.js +++ b/sui/deploy-gateway.js @@ -110,7 +110,9 @@ async function upgradeGateway(chain, options, keypair, client) { const contractsConfig = chain.contracts; const packageName = 'axelar_gateway'; const builder = new TxBuilder(client); - contractsConfig[packageName].objects.UpgradeCap = options.upgradeCap; + const chainConfig = contractsConfig[packageName]; + chainConfig.objects = chainConfig.objects || {}; + chainConfig.objects.upgradeCap = options.upgradeCap || chainConfig.objects.UpgradeCap; await upgradePackage(client, keypair, packageName, contractsConfig[packageName], builder, options); } diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index c484c0dc..db653fdc 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -13,7 +13,7 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const sender = options.sender || keypair.toSuiAddress(); const suiPackageId = '0x2'; - const upgradeCap = packageConfig.objects?.UpgradeCap; + const upgradeCap = packageConfig.objects?.upgradeCap; const digestHash = options.digest ? fromB64(options.digest) : digest; validateParameters({ isNonEmptyString: { upgradeCap, policy }, isNonEmptyStringArray: { modules, dependencies } }); From 6e0710e99a20d52ae318e6dfea8b20449edcd95b Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 08:38:45 +0530 Subject: [PATCH 13/37] chore: update sui sdk and cgp sui dependency --- package-lock.json | 293 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 147 insertions(+), 150 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63f77123..f31caba6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,12 +11,12 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-cgp-sui": "^0.2.0", + "@axelar-network/axelar-cgp-sui": "0.3.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", - "@mysten/sui.js": "^0.54.1", + "@mysten/sui": "^1.3.0", "@stellar/stellar-sdk": "^12.0.0-rc3", "axios": "^1.6.2", "path": "^0.12.7" @@ -55,9 +55,9 @@ } }, "node_modules/@0no-co/graphqlsp": { - "version": "1.12.11", - "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.11.tgz", - "integrity": "sha512-vLja9r7L6BBXwxW86Wyi5z5hjTHscH7qoQooy+MXHkM9srBB6ZuesYZq5DQ/+SErQrFyaxeY+hwv2qBAksxriw==", + "version": "1.12.12", + "resolved": "https://registry.npmjs.org/@0no-co/graphqlsp/-/graphqlsp-1.12.12.tgz", + "integrity": "sha512-BmCAc/q3tQcIwXxKoxubYaB23s2fWMMmNGSlY9mgQvWiReBS8ZutPZSf11OADfwTv1J1JIazU6q6OFX+cEp8PQ==", "dependencies": { "@gql.tada/internal": "^1.0.0", "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" @@ -171,13 +171,13 @@ } }, "node_modules/@axelar-network/axelar-cgp-sui": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-sui/-/axelar-cgp-sui-0.2.0.tgz", - "integrity": "sha512-yQtc/1Aq7kllR0wdKHDAmtwN+lkDxHS0/6FCIYJewH74nAwd+yDnRBkrZeWIW3p2FY3y31t7/DRmdbfN+gpUVQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-sui/-/axelar-cgp-sui-0.3.0.tgz", + "integrity": "sha512-zHhtmT4L1WmOEhL8gjsZKAE+b7EGC+OIIMZTVoXVrK/NRldEoPW6356hGvyGIaWM6UzyxNh2o+JU2jj0C/avaw==", "hasInstallScript": true, "dependencies": { "@cosmjs/cosmwasm-stargate": "^0.32.2", - "@mysten/sui.js": "^0.54.1", + "@mysten/sui": "^1.3.0", "@types/tmp": "^0.2.6", "child_process": "^1.0.2", "ethers": "^5.0.0", @@ -189,33 +189,6 @@ "node": ">=18" } }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@axelar-network/axelar-cgp-sui/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "engines": { - "node": ">=14.14" - } - }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", @@ -1467,9 +1440,9 @@ } }, "node_modules/@ledgerhq/devices": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.4.1.tgz", - "integrity": "sha512-Mbjzqlcj4Q2StxEmaYEb5wv6sK5Sk26L4xs0BC9io/AyvpXNTDAp67tryB/klNcvd+WwZPcPdYYvlNzfQ0WTUA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.4.2.tgz", + "integrity": "sha512-oWNTp3jCMaEvRHsXNYE/yo+PFMgXAJGFHLOU1UdE4/fYkniHbD9wdxwyZrZvrxr9hNw4/9wHiThyITwPtMzG7g==", "dependencies": { "@ledgerhq/errors": "^6.18.0", "@ledgerhq/logs": "^6.12.0", @@ -1508,36 +1481,36 @@ } }, "node_modules/@ledgerhq/hw-transport": { - "version": "6.31.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.1.tgz", - "integrity": "sha512-0hVcrqUOM7AYV/JEq8yoeBiXLjpWrentgYt8MC3n+iNFfpORU/SUprcbu0s884IHzj+a8mx0JCZp9y7uPSLlzg==", + "version": "6.31.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.2.tgz", + "integrity": "sha512-B27UIzMzm2IXPGYnEB95R7eHxpXBkTBHh6MUJJQZVknt8LilEz1tfpTYUdzAKDGQ+Z5MZyYb01Eh3Zqm3kn3uw==", "dependencies": { - "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/devices": "^8.4.2", "@ledgerhq/errors": "^6.18.0", "@ledgerhq/logs": "^6.12.0", "events": "^3.3.0" } }, "node_modules/@ledgerhq/hw-transport-mocker": { - "version": "6.29.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.29.1.tgz", - "integrity": "sha512-NmQ1Z4Swq6YjIi99kAxtnsi3nDLjlRSn3Kb4G9nJZkM49RPoG0XsYNxpYhUoRj+5RPrXO4h8wFUkNQ6yHcmYvw==", + "version": "6.29.2", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.29.2.tgz", + "integrity": "sha512-s+YcMy0Bna6r1Sm6qiawrd8FBE6AJhUTIUqBxP9n7OuzaIGKdf/Y++16PWfNE1rBuzplbzBDRBLAa4XnQ8uCEA==", "dependencies": { - "@ledgerhq/hw-transport": "^6.31.1", + "@ledgerhq/hw-transport": "^6.31.2", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1" } }, "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.29.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.2.tgz", - "integrity": "sha512-MuRIRjAeRV1ibhh5An16GUZ+a1+T2Df+g8hXuoN/KKVqN2iqn22CngrL7WAFz7MxXsHuCH2GBtsrtesc15Dfqw==", + "version": "6.29.3", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.3.tgz", + "integrity": "sha512-4ruOXRuZvWI6HijFng9xjg7hT4Y4MY+IThsKXKE6ndZ6oEkHXzCwfTI8gPkQvHwnmCrPmeL/PMOTWMgffjgJvQ==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/devices": "^8.4.2", "@ledgerhq/errors": "^6.18.0", - "@ledgerhq/hw-transport": "^6.31.1", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.30.2", + "@ledgerhq/hw-transport": "^6.31.2", + "@ledgerhq/hw-transport-node-hid-noevents": "^6.30.3", "@ledgerhq/logs": "^6.12.0", "lodash": "^4.17.21", "node-hid": "2.1.2", @@ -1545,14 +1518,14 @@ } }, "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.30.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.2.tgz", - "integrity": "sha512-BsrzQr34x3sKCIr0G8x4AEMtoB8EYmlQXEpleEjC/nmK9wMIJPpuZSc54/6xHD/xiITOw57KpBrYbcVk7srk0w==", + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.3.tgz", + "integrity": "sha512-rYnHmWaGFKiQOhdRgr7xm767fLOl2yKv95vG+FNztDjKZBOj8RfH9K0S4eNVilqxGSW7ad3H5XlpfSTzgC5eIQ==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.4.1", + "@ledgerhq/devices": "^8.4.2", "@ledgerhq/errors": "^6.18.0", - "@ledgerhq/hw-transport": "^6.31.1", + "@ledgerhq/hw-transport": "^6.31.2", "@ledgerhq/logs": "^6.12.0", "node-hid": "2.1.2" } @@ -1609,36 +1582,36 @@ } }, "node_modules/@mysten/bcs": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-0.11.1.tgz", - "integrity": "sha512-xP85isNSYUCHd3O/g+TmZYmg4wK6cU8q/n/MebkIGP4CYVJZz2wU/G24xIZ3wI+0iTop4dfgA5kYrg/DQKCUzA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.0.3.tgz", + "integrity": "sha512-fc2xDj8eteP18zCNr6WStlE0Hxi7kYeY9yAzAN8oyz5EYOLas0JwScR9pAd9VR61BfIThJ+5vxQ6K7Y22lHDVQ==", "dependencies": { - "bs58": "^5.0.0" + "bs58": "^6.0.0" } }, - "node_modules/@mysten/sui.js": { - "version": "0.54.1", - "resolved": "https://registry.npmjs.org/@mysten/sui.js/-/sui.js-0.54.1.tgz", - "integrity": "sha512-TSmGIX7U9O/uS9EKIQdv7/S69KTbBhMJVelXCafJE6IJw8iB9cN9uLu0+uklkBSDrbRmLSEY70jMr3uRFjReIg==", + "node_modules/@mysten/sui": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@mysten/sui/-/sui-1.3.0.tgz", + "integrity": "sha512-KBEM+nzY30i+S1meWage5jU+upNBGSrZxY5v+oz68gj1VluldWwiaf/LtcZ3RnMcnNtkyMkeYpDL9eiMxTBTbQ==", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", - "@mysten/bcs": "0.11.1", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@scure/bip32": "^1.3.1", - "@scure/bip39": "^1.2.1", + "@mysten/bcs": "1.0.3", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@scure/bip32": "^1.4.0", + "@scure/bip39": "^1.3.0", "@suchipi/femver": "^1.0.0", "bech32": "^2.0.0", - "gql.tada": "^1.7.0", - "graphql": "^16.8.1", - "superstruct": "^1.0.3", - "tweetnacl": "^1.0.3" + "gql.tada": "^1.8.2", + "graphql": "^16.9.0", + "tweetnacl": "^1.0.3", + "valibot": "^0.36.0" }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "node_modules/@mysten/sui.js/node_modules/bech32": { + "node_modules/@mysten/sui/node_modules/bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" @@ -2556,11 +2529,11 @@ "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==" }, "node_modules/@stellar/stellar-base": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-12.0.1.tgz", - "integrity": "sha512-g6c27MNsDgEdUmoNQJn7zCWoCY50WHt0OIIOq3PhWaJRtUaT++qs1Jpb8+1bny2GmhtfRGOfPUFSyQBuHT9Mvg==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-12.1.0.tgz", + "integrity": "sha512-pWwn+XWP5NotmIteZNuJzHeNn9DYSqH3lsYbtFUoSYy1QegzZdi9D8dK6fJ2fpBAnf/rcDjHgHOw3gtHaQFVbg==", "dependencies": { - "@stellar/js-xdr": "^3.1.1", + "@stellar/js-xdr": "^3.1.2", "base32.js": "^0.1.0", "bignumber.js": "^9.1.2", "buffer": "^6.0.3", @@ -2572,11 +2545,11 @@ } }, "node_modules/@stellar/stellar-sdk": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-12.1.0.tgz", - "integrity": "sha512-Va0hu9SaPezmMbO5eMwL5D15Wrx1AGWRtxayUDRWV2Fr3ynY58mvCZS1vsgNQ4kE8MZe3nBVKv6T9Kzqwgx1PQ==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-12.2.0.tgz", + "integrity": "sha512-Wy5sDOqb5JvAC76f4sQIV6Pe3JNyZb0PuyVNjwt3/uWsjtxRkFk6s2yTHTefBLWoR+mKxDjO7QfzhycF1v8FXQ==", "dependencies": { - "@stellar/stellar-base": "^12.0.1", + "@stellar/stellar-base": "^12.1.0", "axios": "^1.7.2", "bignumber.js": "^9.1.2", "eventsource": "^2.0.2", @@ -2784,9 +2757,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -2855,45 +2828,45 @@ "dev": true }, "node_modules/@volar/language-core": { - "version": "2.4.0-alpha.16", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.16.tgz", - "integrity": "sha512-oOTnIZlx0P/idFwVw+W0NbzKDtZAQMzXSdIFfTePCKcXlb4Ys12GaGkx8NF9dsvPYV3nbv3ZsSxnkZWBmNKd7A==", + "version": "2.4.0-alpha.18", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.0-alpha.18.tgz", + "integrity": "sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==", "dependencies": { - "@volar/source-map": "2.4.0-alpha.16" + "@volar/source-map": "2.4.0-alpha.18" } }, "node_modules/@volar/source-map": { - "version": "2.4.0-alpha.16", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.16.tgz", - "integrity": "sha512-sL9vNG7iR2hiKZor7UkD5Sufu3QCia4cbp2gX/nGRNSdaPbhOpdAoavwlBm0PrVkpiA19NZuavZoobD8krviFg==" + "version": "2.4.0-alpha.18", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.0-alpha.18.tgz", + "integrity": "sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==" }, "node_modules/@vue/compiler-core": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.33.tgz", - "integrity": "sha512-MoIREbkdPQlnGfSKDMgzTqzqx5nmEjIc0ydLVYlTACGBsfvOJ4tHSbZXKVF536n6fB+0eZaGEOqsGThPpdvF5A==", + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz", + "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==", "dependencies": { "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.33", + "@vue/shared": "3.4.34", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.33.tgz", - "integrity": "sha512-GzB8fxEHKw0gGet5BKlpfXEqoBnzSVWwMnT+dc25wE7pFEfrU/QsvjZMP9rD4iVXHBBoemTct8mN0GJEI6ZX5A==", + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz", + "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==", "dependencies": { - "@vue/compiler-core": "3.4.33", - "@vue/shared": "3.4.33" + "@vue/compiler-core": "3.4.34", + "@vue/shared": "3.4.34" } }, "node_modules/@vue/language-core": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.26.tgz", - "integrity": "sha512-/lt6SfQ3O1yDAhPsnLv9iSUgXd1dMHqUm/t3RctfqjuwQf1LnftZ414X3UBn6aXT4MiwXWtbNJ4Z0NZWwDWgJQ==", + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.28.tgz", + "integrity": "sha512-0z4tyCCaqqPbdyz0T4yTFQeLpCo4TOM/ZHAC3geGLHeCiFAjVbROB9PiEtrXR1AoLObqUPFHSmKZeWtEMssSqw==", "dependencies": { - "@volar/language-core": "~2.4.0-alpha.15", + "@volar/language-core": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", @@ -2934,9 +2907,9 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.33.tgz", - "integrity": "sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==" + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz", + "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==" }, "node_modules/abbrev": { "version": "1.0.9", @@ -3509,9 +3482,9 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.0.tgz", + "integrity": "sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==" }, "node_modules/base32.js": { "version": "0.1.0", @@ -3714,11 +3687,11 @@ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", "dependencies": { - "base-x": "^4.0.0" + "base-x": "^5.0.0" } }, "node_modules/bs58check": { @@ -5819,6 +5792,20 @@ "setimmediate": "^1.0.5" } }, + "node_modules/ethereum-cryptography/node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", @@ -7266,9 +7253,9 @@ "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" }, "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "node_modules/import-fresh": { @@ -8515,9 +8502,9 @@ } }, "node_modules/mocha": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz", - "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz", + "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", "dev": true, "dependencies": { "ansi-colors": "^4.1.3", @@ -10026,19 +10013,24 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", + "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", "hasInstallScript": true, "dependencies": { "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", + "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" } }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, "node_modules/semaphore-async-await": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", @@ -10349,6 +10341,18 @@ "semver": "bin/semver" } }, + "node_modules/solc/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/solidity-coverage": { "version": "0.8.12", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", @@ -10713,14 +10717,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/superstruct": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.4.tgz", - "integrity": "sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10982,15 +10978,11 @@ } }, "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "engines": { - "node": ">=0.6.0" + "node": ">=14.14" } }, "node_modules/to-regex-range": { @@ -11394,9 +11386,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "peer": true, "bin": { "tsc": "bin/tsc", @@ -11576,6 +11568,11 @@ "dev": true, "peer": true }, + "node_modules/valibot": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.36.0.tgz", + "integrity": "sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==" + }, "node_modules/vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", diff --git a/package.json b/package.json index e310af1d..f2af4cba 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,12 @@ "dependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v1.0.0", "@axelar-network/axelar-cgp-solidity": "6.3.1", - "@axelar-network/axelar-cgp-sui": "^0.2.0", + "@axelar-network/axelar-cgp-sui": "0.3.0", "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", - "@mysten/sui.js": "^0.54.1", + "@mysten/sui": "^1.3.0", "@stellar/stellar-sdk": "^12.0.0-rc3", "axios": "^1.6.2", "path": "^0.12.7" From 89b990557ca47984961da3d6a2a28a6cdb50a692 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 08:40:25 +0530 Subject: [PATCH 14/37] refactor: resolve PR comments and update accroding to new cgp version --- sui/deploy-contract.js | 224 +++++++++++++++++++++++++++++++++++------ sui/deploy-gateway.js | 180 --------------------------------- sui/deploy-utils.js | 17 +++- sui/multisig.js | 32 ++++-- sui/sign-utils.js | 22 ++-- sui/types-utils.js | 2 +- 6 files changed, 238 insertions(+), 239 deletions(-) delete mode 100644 sui/deploy-gateway.js diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 8692bf1b..aff4c531 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -1,19 +1,61 @@ -const { saveConfig, printInfo } = require('../evm/utils'); -const { Command, Argument, Option } = require('commander'); -const { publishPackage, updateMoveToml } = require('@axelar-network/axelar-cgp-sui/scripts/publish-package'); - +const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); +const { Command, Option } = require('commander'); +const { updateMoveToml, TxBuilder } = require('@axelar-network/axelar-cgp-sui'); +const { ethers } = require('hardhat'); +const { + utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, + constants: { HashZero }, +} = ethers; const { addBaseOptions } = require('./cli-utils'); -const { getWallet, printWalletInfo } = require('./sign-utils'); -const { loadSuiConfig, findPublishedObject } = require('./utils'); +const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); +const { loadSuiConfig, getAmplifierSigners, deployPackage } = require('./utils'); +const { bytes32Struct, signersStruct } = require('./types-utils'); +const { bcs } = require('@mysten/sui/bcs'); +const { Transaction } = require('@mysten/sui/transactions'); +const { upgradePackage } = require('./deploy-utils'); +const { toB64 } = require('@mysten/sui/utils'); // Add more contracts here to support more modules deployment const contractMap = { GasService: { packageName: 'gas_service', }, + AxelarGateway: { + packageName: 'axelar_gateway', + }, }; -async function processCommand(contractName, config, chain, options) { +async function getSigners(keypair, config, chain, options) { + if (options.signers === 'wallet') { + const pubKey = keypair.getPublicKey().toRawBytes(); + printInfo('Using wallet pubkey as the signer for the gateway', hexlify(pubKey)); + + if (keypair.getKeyScheme() !== 'Secp256k1') { + throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); + } + + return { + signers: [{ pub_key: pubKey, weight: 1 }], + threshold: 1, + nonce: options.nonce ? keccak256(toUtf8Bytes(options.nonce)) : HashZero, + }; + } else if (options.signers) { + printInfo('Using provided signers', options.signers); + + const signers = JSON.parse(options.signers); + return { + signers: signers.signers.map(({ pub_key: pubKey, weight }) => { + return { pub_key: arrayify(pubKey), weight }; + }), + threshold: signers.threshold, + nonce: arrayify(signers.nonce) || HashZero, + }; + } + + return getAmplifierSigners(config, chain); +} + +async function deploy(contractName, config, chain, options) { const contract = contractMap[contractName]; const packageName = options.packageName || contract.packageName; @@ -25,51 +67,171 @@ async function processCommand(contractName, config, chain, options) { chain.contracts[contractName] = {}; } - const published = await publishPackage(packageName, client, keypair); - const packageId = published.packageId; - - updateMoveToml(packageName, packageId); - - const contractObject = findPublishedObject(published, packageName, contractName); - const gasCollectorCapObject = findPublishedObject(published, packageName, 'GasCollectorCap'); + const { packageId, publishTxn } = await deployPackage(packageName, client, keypair, options); const contractConfig = chain.contracts[contractName]; contractConfig.address = packageId; - contractConfig.objects = { - [contractName]: contractObject.objectId, - }; + contractConfig.objects = {}; switch (contractName) { - case 'GasService': + case 'GasService': { + const contractObject = publishTxn.objectChanges.find( + (change) => change.objectType === `${packageId}::${packageName}::${contractName}`, + ); + contractConfig.objects[contractName] = contractObject.objectId; + const gasCollectorCapObject = publishTxn.objectChanges.find( + (change) => change.objectType === `${packageId}::${packageName}::GasCollectorCap`, + ); contractConfig.objects.GasCollectorCap = gasCollectorCapObject.objectId; break; - default: + } + + case 'AxelarGateway': { + const { minimumRotationDelay, domainSeparator } = options; + const signers = await getSigners(keypair, config, chain, options); + const operator = options.operator || keypair.toSuiAddress(); + const { previousSigners } = options; + + validateParameters({ isNonEmptyString: { previousSigners } }); + + const creatorCap = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); + + const relayerDiscovery = publishTxn.objectChanges.find( + (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, + ); + + const upgradeCap = publishTxn.objectChanges.find((change) => change.objectType === '0x2::package::UpgradeCap').objectId; + + const encodedSigners = signersStruct + .serialize({ + ...signers, + nonce: bytes32Struct.serialize(signers.nonce).toBytes(), + }) + .toBytes(); + + const tx = new Transaction(); + + const separator = tx.moveCall({ + target: `${packageId}::bytes32::new`, + arguments: [tx.pure(arrayify(domainSeparator))], + }); + + tx.moveCall({ + target: `${packageId}::gateway::setup`, + arguments: [ + tx.object(creatorCap.objectId), + tx.pure.address(operator), + separator, + tx.pure.u64(minimumRotationDelay), + tx.pure.u64(options.previousSigners), + tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), + tx.object('0x6'), + ], + }); + const result = await broadcast(client, keypair, tx); + + const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); + + contractConfig.address = packageId; + contractConfig.objects = { + gateway: gateway.objectId, + relayerDiscovery: relayerDiscovery.objectId, + upgradeCap, + }; + contractConfig.domainSeparator = domainSeparator; + contractConfig.operator = operator; + contractConfig.minimumRotationDelay = minimumRotationDelay; + break; + } + + default: { throw new Error(`${contractName} is not supported.`); + } } printInfo(`${contractName} deployed`, JSON.stringify(contractConfig, null, 2)); } -async function mainProcessor(contractName, options, processor) { +async function upgrade(contractName, policy, config, chain, options) { + const [keypair, client] = getWallet(chain, options); + const { packageDependencies } = options; + const contract = contractMap[contractName]; + const packageName = options.packageName || contract.packageName; + options.policy = policy; + + printInfo('Wallet address', keypair.toSuiAddress()); + + if (!chain.contracts[packageName]) { + chain.contracts[packageName] = {}; + } + + const contractsConfig = chain.contracts; + const packageConfig = contractsConfig?.[contractName]; + + validateParameters({ isNonEmptyString: { packageName } }); + + if (packageDependencies) { + for (const dependencies of packageDependencies) { + const packageId = contractsConfig[dependencies]?.address; + updateMoveToml(dependencies, packageId); + } + } + + const builder = new TxBuilder(client); + await upgradePackage(client, keypair, packageName, packageConfig, builder, options); +} + +async function mainProcessor(args, options, processor) { const config = loadSuiConfig(options.env); - await processor(contractName, config, config.sui, options); + await processor(...args, config, config.sui, options); saveConfig(config, options.env); + + if (options.offline) { + const { txFilePath } = options; + validateParameters({ isNonEmptyString: { txFilePath } }); + + const txB64Bytes = toB64(options.txBytes); + + writeJSON({ message: options.offlineMessage, status: 'PENDING', unsignedTx: txB64Bytes }, txFilePath); + printInfo(`The unsigned transaction is`, txB64Bytes); + } } if (require.main === module) { const program = new Command(); - program - .name('deploy-contract') - .addOption(new Option('--packageName ', 'Package name to deploy')) - .addArgument(new Argument('', 'Contract name to deploy').choices(Object.keys(contractMap))) - .description('Deploy SUI modules'); - - addBaseOptions(program); + program.name('deploy-contract').description('Deploy/Upgrade packages'); - program.action((contractName, options) => { - mainProcessor(contractName, options, processCommand); - }); + const deployCMD = program + .name('deploy') + .description('Deploy SUI modules') + .command('deploy ') + .addOption(new Option('--packageName ', 'Package name to deploy')) + .addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')) + .addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')) + .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)) + .addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)) + .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) + .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default(15)) + .action((contractName, options) => { + mainProcessor([contractName], options, deploy); + }); + + const upgradeCMD = program + .name('upgrade') + .description('Upgrade SUI modules') + .command('upgrade ') + .addOption(new Option('--packageName ', 'package name to upgrade')) + .addOption(new Option('--sender ', 'transaction sender')) + .addOption(new Option('--digest ', 'digest hash for upgrade')) + .addOption(new Option('--offline', 'store tx block for sign')) + .addOption(new Option('--txFilePath ', 'unsigned transaction will be stored')) + .action((contractName, policy, options) => { + mainProcessor([contractName, policy], options, upgrade); + }); + + addBaseOptions(deployCMD); + addBaseOptions(upgradeCMD); program.parse(); } diff --git a/sui/deploy-gateway.js b/sui/deploy-gateway.js deleted file mode 100644 index 835e6585..00000000 --- a/sui/deploy-gateway.js +++ /dev/null @@ -1,180 +0,0 @@ -const { saveConfig, prompt, printInfo, validateParameters, writeJSON } = require('../evm/utils'); -const { Command, Option } = require('commander'); -const { TransactionBlock } = require('@mysten/sui.js/transactions'); -const { bcs } = require('@mysten/sui.js/bcs'); -const { TxBuilder } = require('@axelar-network/axelar-cgp-sui'); -const { ethers } = require('hardhat'); -const { - utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, - constants: { HashZero }, -} = ethers; - -const { addBaseOptions } = require('./cli-utils'); -const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); -const { bytes32Struct, signersStruct } = require('./types-utils'); -const { getAmplifierSigners, loadSuiConfig, deployPackage } = require('./utils'); -const { upgradePackage } = require('./deploy-utils'); -const { toB64 } = require('@mysten/sui.js/utils'); - -async function getSigners(keypair, config, chain, options) { - if (options.signers === 'wallet') { - const pubKey = keypair.getPublicKey().toRawBytes(); - printInfo('Using wallet pubkey as the signer for the gateway', hexlify(pubKey)); - - if (keypair.getKeyScheme() !== 'Secp256k1') { - throw new Error('Only Secp256k1 pubkeys are supported by the gateway'); - } - - return { - signers: [{ pub_key: pubKey, weight: 1 }], - threshold: 1, - nonce: options.nonce ? keccak256(toUtf8Bytes(options.nonce)) : HashZero, - }; - } else if (options.signers) { - printInfo('Using provided signers', options.signers); - - const signers = JSON.parse(options.signers); - return { - signers: signers.signers.map(({ pub_key: pubKey, weight }) => { - return { pub_key: arrayify(pubKey), weight }; - }), - threshold: signers.threshold, - nonce: arrayify(signers.nonce) || HashZero, - }; - } - - return getAmplifierSigners(config, chain); -} - -async function deployGateway(config, chain, options, keypair, client) { - const contractConfig = chain.contracts.axelar_gateway; - const { minimumRotationDelay, domainSeparator } = options; - const signers = await getSigners(keypair, config, chain, options); - const operator = options.operator || keypair.toSuiAddress(); - const { previousSigners } = options; - - validateParameters({ isNonEmptyString: { previousSigners } }); - - if (prompt(`Proceed with deployment on ${chain.name}?`, options.yes)) { - return; - } - - const { packageId, publishTxn } = await deployPackage('axelar_gateway', client, keypair); - - const creatorCap = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); - const relayerDiscovery = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`); - - const encodedSigners = signersStruct - .serialize({ - ...signers, - nonce: bytes32Struct.serialize(signers.nonce).toBytes(), - }) - .toBytes(); - - const tx = new TransactionBlock(); - - const separator = tx.moveCall({ - target: `${packageId}::bytes32::new`, - arguments: [tx.pure(arrayify(domainSeparator))], - }); - - tx.moveCall({ - target: `${packageId}::gateway::setup`, - arguments: [ - tx.object(creatorCap.objectId), - tx.pure.address(operator), - separator, - tx.pure(minimumRotationDelay), - tx.pure(options.previousSigners), - tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), - tx.object('0x6'), - ], - }); - const result = await broadcast(client, keypair, tx); - - const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); - - contractConfig.address = packageId; - contractConfig.objects = { - gateway: gateway.objectId, - relayerDiscovery: relayerDiscovery.objectId, - }; - contractConfig.domainSeparator = domainSeparator; - contractConfig.operator = operator; - contractConfig.minimumRotationDelay = minimumRotationDelay; - - printInfo('Gateway deployed', JSON.stringify(contractConfig, null, 2)); -} - -async function upgradeGateway(chain, options, keypair, client) { - const contractsConfig = chain.contracts; - const packageName = 'axelar_gateway'; - const builder = new TxBuilder(client); - const chainConfig = contractsConfig[packageName]; - chainConfig.objects = chainConfig.objects || {}; - chainConfig.objects.upgradeCap = options.upgradeCap || chainConfig.objects.UpgradeCap; - - await upgradePackage(client, keypair, packageName, contractsConfig[packageName], builder, options); -} - -async function processCommand(config, chain, options) { - const [keypair, client] = getWallet(chain, options); - await printWalletInfo(keypair, client, chain, options); - - chain.contracts.axelar_gateway = chain.contracts.axelar_gateway ?? {}; - - if (!options.upgrade) { - await deployGateway(config, chain, options, keypair, client); - } else { - await upgradeGateway(chain, options, keypair, client); - } - - if (options.offline) { - const { txFilePath } = options; - validateParameters({ isNonEmptyString: { txFilePath } }); - - const txB64Bytes = toB64(options.txBytes); - - writeJSON({ status: 'PENDING', bytes: txB64Bytes }, txFilePath); - printInfo(`The unsigned transaction is`, txB64Bytes); - } -} - -async function mainProcessor(options, processor) { - const config = loadSuiConfig(options.env); - - await processor(config, config.sui, options); - saveConfig(config, options.env); -} - -if (require.main === module) { - const program = new Command(); - - program.name('deploy-gateway').description('Deploys/Upgrades the Sui gateway'); - - addBaseOptions(program); - - program.addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')); - program.addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')); - program.addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)); - program.addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)); - program.addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')); - program.addOption(new Option('--previousSigners ', 'number of previous signers to retain').default(0)); - program.addOption(new Option('--upgradeCap ', 'gateway UpgradeCap id')); - program.addOption(new Option('--upgrade', 'upgrade a deployed contract')); - program.addOption(new Option('--policy ', 'new policy to upgrade')); - program.addOption(new Option('--sender ', 'transaction sender')); - program.addOption(new Option('--digest ', 'digest hash for upgrade')); - program.addOption(new Option('--offline', 'store tx block for sign')); - program.addOption(new Option('--txFilePath ', 'unsigned transaction will be stored')); - - program.action((options) => { - mainProcessor(options, processCommand); - }); - - program.parse(); -} - -module.exports = { - getSigners, -}; diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index db653fdc..68bf3461 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -1,6 +1,6 @@ const { Command, Option } = require('commander'); const { TxBuilder, updateMoveToml } = require('@axelar-network/axelar-cgp-sui'); -const { bcs } = require('@mysten/sui.js/bcs'); +const { bcs } = require('@mysten/bcs'); const { fromB64, toB64 } = require('@mysten/bcs'); const { saveConfig, printInfo, validateParameters, prompt, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); @@ -13,6 +13,10 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const sender = options.sender || keypair.toSuiAddress(); const suiPackageId = '0x2'; + if (!['0', '128', '192'].includes(policy)) { + throw new Error(`Unknown upgrade policy: ${policy}`); + } + const upgradeCap = packageConfig.objects?.upgradeCap; const digestHash = options.digest ? fromB64(options.digest) : digest; @@ -20,16 +24,15 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const tx = builder.tx; const cap = tx.object(upgradeCap); - const ticket = tx.moveCall({ target: `${suiPackageId}::package::authorize_upgrade`, - arguments: [cap, tx.pure(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], + arguments: [cap, tx.pure.u8(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], }); const receipt = tx.upgrade({ modules, dependencies, - packageId: packageConfig.address, + package: packageConfig.address, ticket, }); @@ -43,8 +46,9 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build if (offline) { options.txBytes = txBytes; + options.offlineMessage = `Transaction to upgrade ${packageName}`; } else { - const signature = (await keypair.signTransactionBlock(txBytes)).signature; + const signature = (await keypair.signTransaction(txBytes)).signature; const result = await client.executeTransactionBlock({ transactionBlock: txBytes, signature, @@ -57,6 +61,9 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; packageConfig.address = packageId; + const upgradeCap = result.objectChanges.find((change) => change.objectType === '0x2::package::UpgradeCap').objectId; + packageConfig.objects.upgradeCap = upgradeCap; + printInfo('Transaction result', JSON.stringify(result, null, 2)); printInfo(`${packageName} upgraded`, packageId); } diff --git a/sui/multisig.js b/sui/multisig.js index 50d390c9..553598ae 100644 --- a/sui/multisig.js +++ b/sui/multisig.js @@ -8,14 +8,19 @@ const { printInfo, validateParameters } = require('../evm/utils'); async function signTx(keypair, client, options) { const txFileData = getSignedTx(options.txBlockPath); - const txData = txFileData?.bytes; + const txData = txFileData?.unsignedTx; validateParameters({ isNonEmptyString: { txData } }); const encodedTxBytes = fromB64(txData); - const { signature, publicKey } = await signTransactionBlockBytes(keypair, client, encodedTxBytes, options); - return { signature, publicKey, txBytes: txData }; + if (options.offline) { + const { signature, publicKey } = await signTransactionBlockBytes(keypair, client, encodedTxBytes, options); + return { ...txFileData, signedTx: signature, publicKey }; + } + + await signTransactionBlockBytes(keypair, client, encodedTxBytes, options); + return {}; } async function executeCombinedSignature(client, options) { @@ -30,7 +35,7 @@ async function executeCombinedSignature(client, options) { } const fileData = getSignedTx(combinedSignPath); - const txData = fileData.txBytes; + const txData = fileData.unsignedTx; validateParameters({ isNonEmptyString: { txData } }); @@ -59,16 +64,16 @@ async function combineSignature(client, chain, options) { const signatureArray = []; const firstSignData = getSignedTx(signatures[0]); - const txBytes = firstSignData.txBytes; + const txBytes = firstSignData.unsignedTx; for (const file of signatures) { const fileData = getSignedTx(file); - if (fileData.txBytes !== txBytes) { + if (fileData.unsignedTx !== txBytes) { throw new Error(`Transaction bytes mismatch with file [${file}]`); } - signatureArray.push(fileData.signature); + signatureArray.push(fileData.signedTx); } const txBlockBytes = fromB64(txBytes); @@ -85,9 +90,10 @@ async function combineSignature(client, chain, options) { printInfo('Transaction result', JSON.stringify(txResult)); } else { const data = { - signature: combinedSignature, + message: firstSignData.message, + signedTx: combinedSignature, status: 'PENDING', - txBytes, + unsignedTx: txBytes, }; return data; } @@ -121,14 +127,18 @@ async function processCommand(chain, options) { } if (options.offline) { - const { signatureFilePath } = options; + let { signatureFilePath } = options; + + if (options.action === 'combine') { + signatureFilePath = options.txBlockPath; + } if (!signatureFilePath) { throw new Error('No filePath provided'); } storeSignedTx(signatureFilePath, fileData); - printInfo(`The signed signature is`, fileData.signature); + printInfo(`The signed signature is`, fileData.signedTx); } } diff --git a/sui/sign-utils.js b/sui/sign-utils.js index 34e67033..d909d272 100644 --- a/sui/sign-utils.js +++ b/sui/sign-utils.js @@ -1,12 +1,12 @@ 'use strict'; -const { verifyTransactionBlock } = require('@mysten/sui.js/verify'); -const { decodeSuiPrivateKey } = require('@mysten/sui.js/cryptography'); -const { Ed25519Keypair, Ed25519PublicKey } = require('@mysten/sui.js/keypairs/ed25519'); -const { MultiSigPublicKey } = require('@mysten/sui.js/multisig'); -const { Secp256k1Keypair, Secp256k1PublicKey } = require('@mysten/sui.js/keypairs/secp256k1'); -const { Secp256r1Keypair, Secp256r1PublicKey } = require('@mysten/sui.js/keypairs/secp256r1'); -const { SuiClient, getFullnodeUrl } = require('@mysten/sui.js/client'); +const { verifyTransactionSignature } = require('@mysten/sui/verify'); +const { decodeSuiPrivateKey } = require('@mysten/sui/cryptography'); +const { Ed25519Keypair, Ed25519PublicKey } = require('@mysten/sui/keypairs/ed25519'); +const { MultiSigPublicKey } = require('@mysten/sui/multisig'); +const { Secp256k1Keypair, Secp256k1PublicKey } = require('@mysten/sui/keypairs/secp256k1'); +const { Secp256r1Keypair, Secp256r1PublicKey } = require('@mysten/sui/keypairs/secp256r1'); +const { SuiClient, getFullnodeUrl } = require('@mysten/sui/client'); const { fromB64, fromHEX } = require('@mysten/bcs'); const { printInfo } = require('../evm/utils'); const { ethers } = require('hardhat'); @@ -96,8 +96,8 @@ function getRawPrivateKey(keypair) { } async function broadcast(client, keypair, tx) { - return await client.signAndExecuteTransactionBlock({ - transactionBlock: tx, + return await client.signAndExecuteTransaction({ + transaction: tx, signer: keypair, options: { showEffects: true, @@ -120,11 +120,11 @@ async function broadcastSignature(client, txBytes, signature) { } async function signTransactionBlockBytes(keypair, client, txBytes, options) { - const serializedSignature = (await keypair.signTransactionBlock(txBytes)).signature; + const serializedSignature = (await keypair.signTransaction(txBytes)).signature; let publicKey; try { - publicKey = await verifyTransactionBlock(txBytes, serializedSignature); + publicKey = await verifyTransactionSignature(txBytes, serializedSignature); } catch { throw new Error(`Cannot verify tx signature`); } diff --git a/sui/types-utils.js b/sui/types-utils.js index b8c3c98e..d1861075 100644 --- a/sui/types-utils.js +++ b/sui/types-utils.js @@ -1,6 +1,6 @@ 'use strict'; -const { bcs } = require('@mysten/sui.js/bcs'); +const { bcs } = require('@mysten/sui/bcs'); const { fromHEX, toHEX } = require('@mysten/bcs'); const { ethers } = require('hardhat'); const { From 48a135808e7bcb9144d1d9064d812fdbaf907f58 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 09:06:21 +0530 Subject: [PATCH 15/37] fix: default previous signers param --- sui/deploy-contract.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index aff4c531..53cba03b 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -212,7 +212,7 @@ if (require.main === module) { .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)) .addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)) .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) - .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default(15)) + .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) .action((contractName, options) => { mainProcessor([contractName], options, deploy); }); From 75ac00af2617a816ffcaf67ead131a50ea24895f Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 09:07:06 +0530 Subject: [PATCH 16/37] docs: update docs with new gateway deployment script --- sui/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sui/README.md b/sui/README.md index c50c9282..2b2119a8 100644 --- a/sui/README.md +++ b/sui/README.md @@ -54,7 +54,7 @@ Deploy the gateway package: - By querying the signer set from the Amplifier contract (this only works if Amplifier contracts have been setup): ```bash -node sui/deploy-gateway.js +node sui/deploy-contract.js deploy AxelarGateway ``` Use `--help` flag to see other setup params that can be overridden. @@ -62,19 +62,19 @@ Use `--help` flag to see other setup params that can be overridden. - For testing convenience, you can use the secp256k1 wallet as the signer set for the gateway. ```bash -node sui/deploy-gateway.js --signers wallet --nonce test +node sui/deploy-contract.js deploy AxelarGateway --signers wallet --nonce test ``` - You can also provide a JSON object with a full signer set: ```bash -node sui/deploy-gateway.js -e testnet --signers '{"signers": [{"pub_key": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' +node sui/deploy-contract.js deploy AxelarGateway -e testnet --signers '{"signers": [{"pub_key": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' ``` Deploy the Gas Service package: ```bash -node sui/deploy-contract.js GasService +node sui/deploy-contract.js deploy GasService ``` Deploy the test GMP package: @@ -126,9 +126,9 @@ Upgrading Gateway: To update the gateway run the following command: ```bash -node sui/deploy-gateway.js --upgradeCap --policy --upgrade +node sui/deploy-contract.js upgrade AxelarGateway ``` - +policy should be one of 0, 128, or 192. Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. ### Multisig From 0bc23462dbe530313a6316de8c54aaa2d97f1601 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 09:07:06 +0530 Subject: [PATCH 17/37] fix: updated gmp dependency --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a70e4b9..55b67d22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.3.1", "@axelar-network/axelar-cgp-sui": "0.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", + "@axelar-network/axelar-gmp-sdk-solidity": "5.10.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", @@ -174,9 +174,9 @@ } }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.9.0.tgz", - "integrity": "sha512-BarUqOln3m5jnvBo+LF6ARWwbRXqek93dDtCgIevKGl+Be2JcNOaBB32Bg2LOOBnpOKJBvJq1SI2ZoGurBQ4Qg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", + "integrity": "sha512-s8SImALvYB+5AeiT3tbfWNBI2Mhqw1x91i/zM3DNpVUCnAR2HKtsB9T84KnUn/OJjOVgb4h0lv7q9smeYniRPw==", "engines": { "node": ">=18" } diff --git a/package.json b/package.json index 94bac966..01379e8c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dependencies": { "@axelar-network/axelar-cgp-solidity": "6.3.1", "@axelar-network/axelar-cgp-sui": "0.3.0", - "@axelar-network/axelar-gmp-sdk-solidity": "5.9.0", + "@axelar-network/axelar-gmp-sdk-solidity": "5.10.0", "@axelar-network/interchain-token-service": "1.2.4", "@cosmjs/cosmwasm-stargate": "^0.32.1", "@ledgerhq/hw-app-eth": "6.32.2", From 093cd1c3e82d33e3195fcc9001f9ed238a7be33b Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 15:19:05 +0530 Subject: [PATCH 18/37] refactor: add option for policy in gateay-deployment --- sui/deploy-contract.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 53cba03b..d76f9748 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -87,7 +87,7 @@ async function deploy(contractName, config, chain, options) { } case 'AxelarGateway': { - const { minimumRotationDelay, domainSeparator } = options; + const { minimumRotationDelay, domainSeparator, policy } = options; const signers = await getSigners(keypair, config, chain, options); const operator = options.operator || keypair.toSuiAddress(); const { previousSigners } = options; @@ -128,6 +128,22 @@ async function deploy(contractName, config, chain, options) { tx.object('0x6'), ], }); + + if (policy !== '0') { + let upgradeType; + + if (policy === '128') { + upgradeType = 'only_additive_upgrades'; + } else if (policy === '192') { + upgradeType = 'only_dep_upgrades'; + } + + tx.moveCall({ + target: `0x2::package::${upgradeType}`, + arguments: [tx.object(upgradeCap)], + }); + } + const result = await broadcast(client, keypair, tx); const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); @@ -213,6 +229,13 @@ if (require.main === module) { .addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)) .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) + .addOption( + new Option('--policy ', 'upgrade policy for upgrade cap: For example, use "0" to allow all types of upgrades').choices([ + '0', + '128', + '192', + ]), + ) .action((contractName, options) => { mainProcessor([contractName], options, deploy); }); From 34e38f89e2770303336c9382846f7fdf4bea2057 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 15:35:16 +0530 Subject: [PATCH 19/37] refactor: remove extra contract object creation --- sui/deploy-contract.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index d76f9748..bf262ed5 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -1,19 +1,19 @@ -const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); const { Command, Option } = require('commander'); const { updateMoveToml, TxBuilder } = require('@axelar-network/axelar-cgp-sui'); const { ethers } = require('hardhat'); +const { toB64 } = require('@mysten/sui/utils'); +const { bcs } = require('@mysten/sui/bcs'); +const { Transaction } = require('@mysten/sui/transactions'); const { utils: { arrayify, hexlify, toUtf8Bytes, keccak256 }, constants: { HashZero }, } = ethers; +const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); const { loadSuiConfig, getAmplifierSigners, deployPackage } = require('./utils'); const { bytes32Struct, signersStruct } = require('./types-utils'); -const { bcs } = require('@mysten/sui/bcs'); -const { Transaction } = require('@mysten/sui/transactions'); const { upgradePackage } = require('./deploy-utils'); -const { toB64 } = require('@mysten/sui/utils'); // Add more contracts here to support more modules deployment const contractMap = { @@ -177,8 +177,8 @@ async function upgrade(contractName, policy, config, chain, options) { printInfo('Wallet address', keypair.toSuiAddress()); - if (!chain.contracts[packageName]) { - chain.contracts[packageName] = {}; + if (!chain.contracts[contractName]) { + throw new Error(`Cannot found specified contract: ${contractName}`); } const contractsConfig = chain.contracts; From 04e323caf6a02e88a5081d4168a46e36e0d30ece Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 16:46:31 +0530 Subject: [PATCH 20/37] fix: multisig combined tx execution --- sui/multisig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/multisig.js b/sui/multisig.js index 67cf8939..403bae2b 100644 --- a/sui/multisig.js +++ b/sui/multisig.js @@ -40,7 +40,7 @@ async function executeCombinedSignature(client, options) { validateParameters({ isNonEmptyString: { txData } }); const encodedTxBytes = fromB64(txData); - const combinedSignatureBytes = fileData.signature; + const combinedSignatureBytes = fileData.signedTx; if (!combinedSignatureBytes) { throw new Error(`No signature specified in [${combinedSignPath}]`); From bdce17b1b97587c3ef384e9184c6002253ca875a Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Thu, 25 Jul 2024 19:29:13 +0530 Subject: [PATCH 21/37] refactor: remove check for policy type --- sui/deploy-contract.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index bf262ed5..1750ddf7 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -134,7 +134,7 @@ async function deploy(contractName, config, chain, options) { if (policy === '128') { upgradeType = 'only_additive_upgrades'; - } else if (policy === '192') { + } else { upgradeType = 'only_dep_upgrades'; } From 110ebf5f79988a06faeeea7dc9cf43dc00332cc4 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Fri, 26 Jul 2024 19:15:21 +0530 Subject: [PATCH 22/37] added optimizations --- sui/deploy-contract.js | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 1750ddf7..ee7ac0c1 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -87,19 +87,16 @@ async function deploy(contractName, config, chain, options) { } case 'AxelarGateway': { - const { minimumRotationDelay, domainSeparator, policy } = options; - const signers = await getSigners(keypair, config, chain, options); + const { minimumRotationDelay, domainSeparator, policy, previousSigners } = options; const operator = options.operator || keypair.toSuiAddress(); - const { previousSigners } = options; + const signers = await getSigners(keypair, config, chain, options); validateParameters({ isNonEmptyString: { previousSigners } }); const creatorCap = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); - const relayerDiscovery = publishTxn.objectChanges.find( (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, ); - const upgradeCap = publishTxn.objectChanges.find((change) => change.objectType === '0x2::package::UpgradeCap').objectId; const encodedSigners = signersStruct @@ -130,13 +127,7 @@ async function deploy(contractName, config, chain, options) { }); if (policy !== '0') { - let upgradeType; - - if (policy === '128') { - upgradeType = 'only_additive_upgrades'; - } else { - upgradeType = 'only_dep_upgrades'; - } + const upgradeType = policy === '128' ? 'only_additive_upgrades' : 'only_dep_upgrades'; tx.moveCall({ target: `0x2::package::${upgradeType}`, @@ -145,7 +136,6 @@ async function deploy(contractName, config, chain, options) { } const result = await broadcast(client, keypair, tx); - const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); contractConfig.address = packageId; @@ -230,11 +220,9 @@ if (require.main === module) { .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) .addOption( - new Option('--policy ', 'upgrade policy for upgrade cap: For example, use "0" to allow all types of upgrades').choices([ - '0', - '128', - '192', - ]), + new Option('--policy ', 'upgrade policy for upgrade cap: For example, use "0" to allow all types of upgrades') + .choices(['0', '128', '192']) + .default('0'), ) .action((contractName, options) => { mainProcessor([contractName], options, deploy); From a631ac8671a7897620b10131b72033acd13553e5 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Sat, 27 Jul 2024 01:40:37 +0530 Subject: [PATCH 23/37] refactor: increase readability and add logs --- sui/deploy-contract.js | 76 +++++++++++++++++------------------------- sui/deploy-utils.js | 6 ++-- sui/utils.js | 13 +++++--- 3 files changed, 42 insertions(+), 53 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index ee7ac0c1..6a78d4e9 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -11,20 +11,10 @@ const { const { saveConfig, printInfo, validateParameters, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); -const { loadSuiConfig, getAmplifierSigners, deployPackage } = require('./utils'); +const { loadSuiConfig, getAmplifierSigners, deployPackage, getObjectIdsByObjectTypes } = require('./utils'); const { bytes32Struct, signersStruct } = require('./types-utils'); const { upgradePackage } = require('./deploy-utils'); -// Add more contracts here to support more modules deployment -const contractMap = { - GasService: { - packageName: 'gas_service', - }, - AxelarGateway: { - packageName: 'axelar_gateway', - }, -}; - async function getSigners(keypair, config, chain, options) { if (options.signers === 'wallet') { const pubKey = keypair.getPublicKey().toRawBytes(); @@ -56,9 +46,6 @@ async function getSigners(keypair, config, chain, options) { } async function deploy(contractName, config, chain, options) { - const contract = contractMap[contractName]; - const packageName = options.packageName || contract.packageName; - const [keypair, client] = getWallet(chain, options); await printWalletInfo(keypair, client, chain, options); @@ -67,37 +54,36 @@ async function deploy(contractName, config, chain, options) { chain.contracts[contractName] = {}; } - const { packageId, publishTxn } = await deployPackage(packageName, client, keypair, options); + const { packageId, publishTxn } = await deployPackage(contractName, client, keypair, options); + + printInfo('Publish transaction digest: ', publishTxn.digest); const contractConfig = chain.contracts[contractName]; contractConfig.address = packageId; contractConfig.objects = {}; switch (contractName) { - case 'GasService': { - const contractObject = publishTxn.objectChanges.find( - (change) => change.objectType === `${packageId}::${packageName}::${contractName}`, - ); - contractConfig.objects[contractName] = contractObject.objectId; - const gasCollectorCapObject = publishTxn.objectChanges.find( - (change) => change.objectType === `${packageId}::${packageName}::GasCollectorCap`, - ); - contractConfig.objects.GasCollectorCap = gasCollectorCapObject.objectId; + case 'gas_service': { + const [GasService, GasCollectorCap] = getObjectIdsByObjectTypes(publishTxn, [ + `${packageId}::gas_service::GasService`, + `${packageId}::gas_service::GasCollectorCap`, + ]); + contractConfig.objects = { GasService, GasCollectorCap }; break; } - case 'AxelarGateway': { + case 'axelar_gateway': { const { minimumRotationDelay, domainSeparator, policy, previousSigners } = options; const operator = options.operator || keypair.toSuiAddress(); const signers = await getSigners(keypair, config, chain, options); - validateParameters({ isNonEmptyString: { previousSigners } }); + validateParameters({ isNonEmptyString: { previousSigners, minimumRotationDelay }, isKeccak256Hash: { domainSeparator } }); - const creatorCap = publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::gateway::CreatorCap`); - const relayerDiscovery = publishTxn.objectChanges.find( - (change) => change.objectType === `${packageId}::discovery::RelayerDiscovery`, - ); - const upgradeCap = publishTxn.objectChanges.find((change) => change.objectType === '0x2::package::UpgradeCap').objectId; + const [creatorCap, relayerDiscovery, upgradeCap] = getObjectIdsByObjectTypes(publishTxn, [ + `${packageId}::gateway::CreatorCap`, + `${packageId}::discovery::RelayerDiscovery`, + '0x2::package::UpgradeCap', + ]); const encodedSigners = signersStruct .serialize({ @@ -116,7 +102,7 @@ async function deploy(contractName, config, chain, options) { tx.moveCall({ target: `${packageId}::gateway::setup`, arguments: [ - tx.object(creatorCap.objectId), + tx.object(creatorCap), tx.pure.address(operator), separator, tx.pure.u64(minimumRotationDelay), @@ -136,12 +122,14 @@ async function deploy(contractName, config, chain, options) { } const result = await broadcast(client, keypair, tx); - const gateway = result.objectChanges.find((change) => change.objectType === `${packageId}::gateway::Gateway`); - contractConfig.address = packageId; + printInfo('Setup transaction digest: ', result.digest); + + const [gateway] = getObjectIdsByObjectTypes(result, [`${packageId}::gateway::Gateway`]); + contractConfig.objects = { - gateway: gateway.objectId, - relayerDiscovery: relayerDiscovery.objectId, + gateway, + relayerDiscovery, upgradeCap, }; contractConfig.domainSeparator = domainSeparator; @@ -161,20 +149,18 @@ async function deploy(contractName, config, chain, options) { async function upgrade(contractName, policy, config, chain, options) { const [keypair, client] = getWallet(chain, options); const { packageDependencies } = options; - const contract = contractMap[contractName]; - const packageName = options.packageName || contract.packageName; options.policy = policy; - printInfo('Wallet address', keypair.toSuiAddress()); + await printWalletInfo(keypair, client, chain, options); if (!chain.contracts[contractName]) { - throw new Error(`Cannot found specified contract: ${contractName}`); + throw new Error(`Cannot find specified contract: ${contractName}`); } const contractsConfig = chain.contracts; const packageConfig = contractsConfig?.[contractName]; - validateParameters({ isNonEmptyString: { packageName } }); + validateParameters({ isNonEmptyString: { contractName } }); if (packageDependencies) { for (const dependencies of packageDependencies) { @@ -184,7 +170,7 @@ async function upgrade(contractName, policy, config, chain, options) { } const builder = new TxBuilder(client); - await upgradePackage(client, keypair, packageName, packageConfig, builder, options); + await upgradePackage(client, keypair, contractName, packageConfig, builder, options); } async function mainProcessor(args, options, processor) { @@ -199,7 +185,7 @@ async function mainProcessor(args, options, processor) { const txB64Bytes = toB64(options.txBytes); writeJSON({ message: options.offlineMessage, status: 'PENDING', unsignedTx: txB64Bytes }, txFilePath); - printInfo(`The unsigned transaction is`, txB64Bytes); + printInfo(`Unsigned transaction`, txFilePath); } } @@ -212,10 +198,9 @@ if (require.main === module) { .name('deploy') .description('Deploy SUI modules') .command('deploy ') - .addOption(new Option('--packageName ', 'Package name to deploy')) .addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')) .addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')) - .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default(0)) + .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default('0')) .addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)) .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) @@ -232,7 +217,6 @@ if (require.main === module) { .name('upgrade') .description('Upgrade SUI modules') .command('upgrade ') - .addOption(new Option('--packageName ', 'package name to upgrade')) .addOption(new Option('--sender ', 'transaction sender')) .addOption(new Option('--digest ', 'digest hash for upgrade')) .addOption(new Option('--offline', 'store tx block for sign')) diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index 70062678..8f337a9e 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -5,7 +5,7 @@ const { fromB64, toB64 } = require('@mysten/bcs'); const { saveConfig, printInfo, validateParameters, prompt, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); -const { loadSuiConfig } = require('./utils'); +const { loadSuiConfig, getObjectIdsByObjectTypes } = require('./utils'); async function upgradePackage(client, keypair, packageName, packageConfig, builder, options) { const { modules, dependencies, digest } = await builder.getContractBuild(packageName); @@ -61,10 +61,10 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const packageId = (result.objectChanges?.filter((a) => a.type === 'published') ?? [])[0].packageId; packageConfig.address = packageId; - const upgradeCap = result.objectChanges.find((change) => change.objectType === '0x2::package::UpgradeCap').objectId; + const [upgradeCap] = getObjectIdsByObjectTypes(result, ['0x2::package::UpgradeCap']); packageConfig.objects.upgradeCap = upgradeCap; - printInfo('Transaction result', JSON.stringify(result, null, 2)); + printInfo('Transaction digest', JSON.stringify(result.digest, null, 2)); printInfo(`${packageName} upgraded`, packageId); } } diff --git a/sui/utils.js b/sui/utils.js index e46aedcb..655dc829 100644 --- a/sui/utils.js +++ b/sui/utils.js @@ -77,9 +77,14 @@ const deployPackage = async (packageName, client, keypair, options = {}) => { return { packageId, publishTxn }; }; -const findPublishedObject = (published, packageName, contractName) => { - const packageId = published.packageId; - return published.publishTxn.objectChanges.find((change) => change.objectType === `${packageId}::${packageName}::${contractName}`); +const getObjectIdsByObjectTypes = (txn, objectTypes) => { + const objectIds = []; + + for (const objectType of objectTypes) { + objectIds.push(txn.objectChanges.find((change) => change.objectType === objectType).objectId); + } + + return objectIds; }; module.exports = { @@ -87,5 +92,5 @@ module.exports = { getBcsBytesByObjectId, loadSuiConfig, deployPackage, - findPublishedObject, + getObjectIdsByObjectTypes, }; From ba2699a83dbfc3e252635198cba93b93ea1564b8 Mon Sep 17 00:00:00 2001 From: blockchainguyy Date: Sat, 27 Jul 2024 01:52:10 +0530 Subject: [PATCH 24/37] docs: update package names in deploy commands --- sui/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sui/README.md b/sui/README.md index c0fc91f8..2fc49915 100644 --- a/sui/README.md +++ b/sui/README.md @@ -54,7 +54,7 @@ Deploy the gateway package: - By querying the signer set from the Amplifier contract (this only works if Amplifier contracts have been setup): ```bash -node sui/deploy-contract.js deploy AxelarGateway +node sui/deploy-contract.js deploy axelar_gateway ``` Use `--help` flag to see other setup params that can be overridden. @@ -62,19 +62,19 @@ Use `--help` flag to see other setup params that can be overridden. - For testing convenience, you can use the secp256k1 wallet as the signer set for the gateway. ```bash -node sui/deploy-contract.js deploy AxelarGateway --signers wallet --nonce test +node sui/deploy-contract.js deploy axelar_gateway --signers wallet --nonce test ``` - You can also provide a JSON object with a full signer set: ```bash -node sui/deploy-contract.js deploy AxelarGateway -e testnet --signers '{"signers": [{"pub_key": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' +node sui/deploy-contract.js deploy axelar_gateway -e testnet --signers '{"signers": [{"pub_key": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' ``` Deploy the Gas Service package: ```bash -node sui/deploy-contract.js deploy GasService +node sui/deploy-contract.js deploy gas_service ``` Deploy the test GMP package: @@ -126,7 +126,7 @@ Upgrading Gateway: To update the gateway run the following command: ```bash -node sui/deploy-contract.js upgrade AxelarGateway +node sui/deploy-contract.js upgrade axelar_gateway ``` policy should be one of 0, 128, or 192. Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. From 94cb012e6967d48d7646db3d01652e0d503eebe2 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 17:29:29 +0700 Subject: [PATCH 25/37] chore: remove extra spacing --- sui/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/README.md b/sui/README.md index 2fc49915..231d665e 100644 --- a/sui/README.md +++ b/sui/README.md @@ -126,7 +126,7 @@ Upgrading Gateway: To update the gateway run the following command: ```bash -node sui/deploy-contract.js upgrade axelar_gateway +node sui/deploy-contract.js upgrade axelar_gateway ``` policy should be one of 0, 128, or 192. Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. From 61046841a2024996c08ec2d6d4f67085cef649f8 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 17:31:24 +0700 Subject: [PATCH 26/37] chore: move upgrading gateway section --- sui/README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/sui/README.md b/sui/README.md index 231d665e..b4fdc975 100644 --- a/sui/README.md +++ b/sui/README.md @@ -71,6 +71,17 @@ node sui/deploy-contract.js deploy axelar_gateway --signers wallet --nonce test node sui/deploy-contract.js deploy axelar_gateway -e testnet --signers '{"signers": [{"pub_key": "0x020194ead85b350d90472117e6122cf1764d93bf17d6de4b51b03d19afc4d6302b", "weight": 1}], "threshold": 1, "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000"}' ``` +Upgrading Gateway: + +To update the gateway run the following command: + +```bash +node sui/deploy-contract.js upgrade axelar_gateway +``` + +policy should be one of 0, 128, or 192. +Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. + Deploy the Gas Service package: ```bash @@ -121,16 +132,6 @@ node sui/gateway.js rotate --signers wallet --proof wallet --currentNonce test - Use the same nonce for `--currentNonce` as the `--nonce` when deploying the gateway. -Upgrading Gateway: - -To update the gateway run the following command: - -```bash -node sui/deploy-contract.js upgrade axelar_gateway -``` -policy should be one of 0, 128, or 192. -Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. - ### Multisig To create a Multisig, follow the documentation [here](https://docs.sui.io/guides/developer/cryptography/multisig). From add6d162d7a5a01d84ff31e9883e12bf32a2fad7 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 17:42:46 +0700 Subject: [PATCH 27/37] chore: add more description to policy --- sui/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sui/README.md b/sui/README.md index b4fdc975..0d80e3f4 100644 --- a/sui/README.md +++ b/sui/README.md @@ -79,7 +79,12 @@ To update the gateway run the following command: node sui/deploy-contract.js upgrade axelar_gateway ``` -policy should be one of 0, 128, or 192. +policy should be one of the following: + +- `0`: No upgrade policy +- `128`: Upgrade policy to just add code. https://docs.sui.io/references/framework/sui-framework/package#function-only_additive_upgrades +- `192`: Upgrade policy to just change dependencies. https://docs.sui.io/references/framework/sui-framework/package#function-only_dep_upgrades + Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. Deploy the Gas Service package: From 7d7f4ae22efabea291510770d95b86dccd14f27c Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 18:50:20 +0700 Subject: [PATCH 28/37] chore: define suiPackageAddress --- sui/README.md | 2 +- sui/deploy-contract.js | 5 +++-- sui/deploy-utils.js | 7 +++---- sui/utils.js | 3 +++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/sui/README.md b/sui/README.md index 0d80e3f4..d5d70aec 100644 --- a/sui/README.md +++ b/sui/README.md @@ -81,7 +81,7 @@ node sui/deploy-contract.js upgrade axelar_gateway policy should be one of the following: -- `0`: No upgrade policy +- `0`: Allow any upgrade. - `128`: Upgrade policy to just add code. https://docs.sui.io/references/framework/sui-framework/package#function-only_additive_upgrades - `192`: Upgrade policy to just change dependencies. https://docs.sui.io/references/framework/sui-framework/package#function-only_dep_upgrades diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 6a78d4e9..ac1277ea 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -14,6 +14,7 @@ const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); const { loadSuiConfig, getAmplifierSigners, deployPackage, getObjectIdsByObjectTypes } = require('./utils'); const { bytes32Struct, signersStruct } = require('./types-utils'); const { upgradePackage } = require('./deploy-utils'); +const { suiPackageAddress } = require('./utils'); async function getSigners(keypair, config, chain, options) { if (options.signers === 'wallet') { @@ -82,7 +83,7 @@ async function deploy(contractName, config, chain, options) { const [creatorCap, relayerDiscovery, upgradeCap] = getObjectIdsByObjectTypes(publishTxn, [ `${packageId}::gateway::CreatorCap`, `${packageId}::discovery::RelayerDiscovery`, - '0x2::package::UpgradeCap', + `${suiPackageAddress}::package::UpgradeCap`, ]); const encodedSigners = signersStruct @@ -116,7 +117,7 @@ async function deploy(contractName, config, chain, options) { const upgradeType = policy === '128' ? 'only_additive_upgrades' : 'only_dep_upgrades'; tx.moveCall({ - target: `0x2::package::${upgradeType}`, + target: `${suiPackageAddress}::package::${upgradeType}`, arguments: [tx.object(upgradeCap)], }); } diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index 8f337a9e..c3a6ebff 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -5,13 +5,12 @@ const { fromB64, toB64 } = require('@mysten/bcs'); const { saveConfig, printInfo, validateParameters, prompt, writeJSON } = require('../evm/utils'); const { addBaseOptions } = require('./cli-utils'); const { getWallet } = require('./sign-utils'); -const { loadSuiConfig, getObjectIdsByObjectTypes } = require('./utils'); +const { loadSuiConfig, getObjectIdsByObjectTypes, suiPackageAddress } = require('./utils'); async function upgradePackage(client, keypair, packageName, packageConfig, builder, options) { const { modules, dependencies, digest } = await builder.getContractBuild(packageName); const { policy, offline } = options; const sender = options.sender || keypair.toSuiAddress(); - const suiPackageId = '0x2'; if (!['0', '128', '192'].includes(policy)) { throw new Error(`Unknown upgrade policy: ${policy}`); @@ -25,7 +24,7 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const tx = builder.tx; const cap = tx.object(upgradeCap); const ticket = tx.moveCall({ - target: `${suiPackageId}::package::authorize_upgrade`, + target: `${suiPackageAddress}::package::authorize_upgrade`, arguments: [cap, tx.pure.u8(policy), tx.pure(bcs.vector(bcs.u8()).serialize(digestHash).toBytes())], }); @@ -37,7 +36,7 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build }); tx.moveCall({ - target: `${suiPackageId}::package::commit_upgrade`, + target: `${suiPackageAddress}::package::commit_upgrade`, arguments: [cap, receipt], }); diff --git a/sui/utils.js b/sui/utils.js index 655dc829..47d8fbe0 100644 --- a/sui/utils.js +++ b/sui/utils.js @@ -10,6 +10,8 @@ const { fromB64 } = require('@mysten/bcs'); const { CosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const { updateMoveToml, copyMovePackage, TxBuilder } = require('@axelar-network/axelar-cgp-sui'); +const suiPackageAddress = '0x2'; + const getAmplifierSigners = async (config, chain) => { const client = await CosmWasmClient.connect(config.axelar.rpc); const { id: verifierSetId, verifier_set: verifierSet } = await client.queryContractSmart( @@ -88,6 +90,7 @@ const getObjectIdsByObjectTypes = (txn, objectTypes) => { }; module.exports = { + suiPackageAddress, getAmplifierSigners, getBcsBytesByObjectId, loadSuiConfig, From 1cf6f5f5b3a3401795732de800880cc017192b55 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 18:54:37 +0700 Subject: [PATCH 29/37] chore: update policy values --- sui/README.md | 6 +++--- sui/deploy-contract.js | 10 +++++----- sui/deploy-utils.js | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sui/README.md b/sui/README.md index d5d70aec..44aea8f1 100644 --- a/sui/README.md +++ b/sui/README.md @@ -81,9 +81,9 @@ node sui/deploy-contract.js upgrade axelar_gateway policy should be one of the following: -- `0`: Allow any upgrade. -- `128`: Upgrade policy to just add code. https://docs.sui.io/references/framework/sui-framework/package#function-only_additive_upgrades -- `192`: Upgrade policy to just change dependencies. https://docs.sui.io/references/framework/sui-framework/package#function-only_dep_upgrades +- `any_upgrade`: Allow any upgrade. +- `code_upgrade`: Upgrade policy to just add code. https://docs.sui.io/references/framework/sui-framework/package#function-only_additive_upgrades +- `dep_upgrade`: Upgrade policy to just change dependencies. https://docs.sui.io/references/framework/sui-framework/package#function-only_dep_upgrades Provide `--txFilePath` with `--offline` to generate tx data file for offline signing. diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index ac1277ea..f2af1c51 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -113,8 +113,8 @@ async function deploy(contractName, config, chain, options) { ], }); - if (policy !== '0') { - const upgradeType = policy === '128' ? 'only_additive_upgrades' : 'only_dep_upgrades'; + if (policy !== 'any_upgrade') { + const upgradeType = policy === 'code_upgrade' ? 'only_additive_upgrades' : 'only_dep_upgrades'; tx.moveCall({ target: `${suiPackageAddress}::package::${upgradeType}`, @@ -206,9 +206,9 @@ if (require.main === module) { .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) .addOption( - new Option('--policy ', 'upgrade policy for upgrade cap: For example, use "0" to allow all types of upgrades') - .choices(['0', '128', '192']) - .default('0'), + new Option('--policy ', 'upgrade policy for upgrade cap: For example, use "any_upgrade" to allow all types of upgrades') + .choices(['any_upgrade', 'code_upgrade', 'dep_upgrade']) + .default('any_upgrade'), ) .action((contractName, options) => { mainProcessor([contractName], options, deploy); diff --git a/sui/deploy-utils.js b/sui/deploy-utils.js index c3a6ebff..fc46e5ff 100644 --- a/sui/deploy-utils.js +++ b/sui/deploy-utils.js @@ -12,8 +12,8 @@ async function upgradePackage(client, keypair, packageName, packageConfig, build const { policy, offline } = options; const sender = options.sender || keypair.toSuiAddress(); - if (!['0', '128', '192'].includes(policy)) { - throw new Error(`Unknown upgrade policy: ${policy}`); + if (!['any_upgrade', 'code_upgrade', 'dep_upgrade'].includes(policy)) { + throw new Error(`Unknown upgrade policy: ${policy}. Supported policies: any_upgrade, code_upgrade, dep_upgrade`); } const upgradeCap = packageConfig.objects?.upgradeCap; From 278bce170956aa0a763eec6d4d8c2539989b9f00 Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 18:56:47 +0700 Subject: [PATCH 30/37] chore: rename cmd --- sui/deploy-contract.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index f2af1c51..222a182b 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -195,7 +195,7 @@ if (require.main === module) { program.name('deploy-contract').description('Deploy/Upgrade packages'); - const deployCMD = program + const deployCmd = program .name('deploy') .description('Deploy SUI modules') .command('deploy ') @@ -214,7 +214,7 @@ if (require.main === module) { mainProcessor([contractName], options, deploy); }); - const upgradeCMD = program + const upgradeCmd = program .name('upgrade') .description('Upgrade SUI modules') .command('upgrade ') @@ -226,8 +226,8 @@ if (require.main === module) { mainProcessor([contractName, policy], options, upgrade); }); - addBaseOptions(deployCMD); - addBaseOptions(upgradeCMD); + addBaseOptions(deployCmd); + addBaseOptions(upgradeCmd); program.parse(); } From 6f52fc26640d297de8fe04e2bc0cb17618fbe70f Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 20:48:44 +0700 Subject: [PATCH 31/37] chore: remove default for domain separator --- sui/deploy-contract.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 222a182b..b7575226 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -202,7 +202,7 @@ if (require.main === module) { .addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')) .addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')) .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default('0')) - .addOption(new Option('--domainSeparator ', 'domain separator').default(HashZero)) + .addOption(new Option('--domainSeparator ', 'domain separator')) .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) .addOption( From e0dece9846aadc4ce4ade4ff351bd8448e5f974d Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:00:07 +0700 Subject: [PATCH 32/37] chore: convert minimumRotation delay into seconds unit --- sui/README.md | 2 ++ sui/deploy-contract.js | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sui/README.md b/sui/README.md index 44aea8f1..0ea2275c 100644 --- a/sui/README.md +++ b/sui/README.md @@ -57,6 +57,8 @@ Deploy the gateway package: node sui/deploy-contract.js deploy axelar_gateway ``` +Note: the `minimumRotationDelay` is in `seconds` unit. The default value is `24 * 60 * 60` (1 day). + Use `--help` flag to see other setup params that can be overridden. - For testing convenience, you can use the secp256k1 wallet as the signer set for the gateway. diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index b7575226..c6eb5724 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -197,11 +197,15 @@ if (require.main === module) { const deployCmd = program .name('deploy') - .description('Deploy SUI modules') + .description('Deploy a Sui package') .command('deploy ') .addOption(new Option('--signers ', 'JSON with the initial signer set').env('SIGNERS')) .addOption(new Option('--operator ', 'operator for the gateway (defaults to the deployer address)').env('OPERATOR')) - .addOption(new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in ms)').default('0')) + .addOption( + new Option('--minimumRotationDelay ', 'minium delay for signer rotations (in second)') + .default(24 * 60 * 60) + .parseArg((val) => parseInt(val) * 1000), + ) .addOption(new Option('--domainSeparator ', 'domain separator')) .addOption(new Option('--nonce ', 'nonce for the signer (defaults to HashZero)')) .addOption(new Option('--previousSigners ', 'number of previous signers to retain').default('15')) From d0877054d3b31958a07cfa3d9e499c11f14e571c Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:01:08 +0700 Subject: [PATCH 33/37] chore: fix description for upgrade cmd --- sui/deploy-contract.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index c6eb5724..78362776 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -220,7 +220,7 @@ if (require.main === module) { const upgradeCmd = program .name('upgrade') - .description('Upgrade SUI modules') + .description('Upgrade a Sui package') .command('upgrade ') .addOption(new Option('--sender ', 'transaction sender')) .addOption(new Option('--digest ', 'digest hash for upgrade')) From 6b30578125d3530b6c49c4f0e99daff4952320fd Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:04:29 +0700 Subject: [PATCH 34/37] chore: assign hardcoded value --- sui/deploy-contract.js | 4 ++-- sui/utils.js | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 78362776..d68813b0 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -14,7 +14,7 @@ const { getWallet, printWalletInfo, broadcast } = require('./sign-utils'); const { loadSuiConfig, getAmplifierSigners, deployPackage, getObjectIdsByObjectTypes } = require('./utils'); const { bytes32Struct, signersStruct } = require('./types-utils'); const { upgradePackage } = require('./deploy-utils'); -const { suiPackageAddress } = require('./utils'); +const { suiPackageAddress, suiClockAddress } = require('./utils'); async function getSigners(keypair, config, chain, options) { if (options.signers === 'wallet') { @@ -109,7 +109,7 @@ async function deploy(contractName, config, chain, options) { tx.pure.u64(minimumRotationDelay), tx.pure.u64(options.previousSigners), tx.pure(bcs.vector(bcs.u8()).serialize(encodedSigners).toBytes()), - tx.object('0x6'), + tx.object(suiClockAddress), ], }); diff --git a/sui/utils.js b/sui/utils.js index 47d8fbe0..c6154a51 100644 --- a/sui/utils.js +++ b/sui/utils.js @@ -11,6 +11,7 @@ const { CosmWasmClient } = require('@cosmjs/cosmwasm-stargate'); const { updateMoveToml, copyMovePackage, TxBuilder } = require('@axelar-network/axelar-cgp-sui'); const suiPackageAddress = '0x2'; +const suiClockAddress = '0x6'; const getAmplifierSigners = async (config, chain) => { const client = await CosmWasmClient.connect(config.axelar.rpc); @@ -91,6 +92,7 @@ const getObjectIdsByObjectTypes = (txn, objectTypes) => { module.exports = { suiPackageAddress, + suiClockAddress, getAmplifierSigners, getBcsBytesByObjectId, loadSuiConfig, From 79f39906baa9cdcb84bcea51b842bb63c61f451c Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:10:42 +0700 Subject: [PATCH 35/37] chore: refactor --- sui/utils.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sui/utils.js b/sui/utils.js index c6154a51..f42f833e 100644 --- a/sui/utils.js +++ b/sui/utils.js @@ -80,15 +80,14 @@ const deployPackage = async (packageName, client, keypair, options = {}) => { return { packageId, publishTxn }; }; -const getObjectIdsByObjectTypes = (txn, objectTypes) => { - const objectIds = []; +const getObjectIdsByObjectTypes = (txn, objectTypes) => + objectTypes.map((objectType) => { + const objectId = txn.objectChanges.find((change) => change.objectType === objectType)?.objectId; - for (const objectType of objectTypes) { - objectIds.push(txn.objectChanges.find((change) => change.objectType === objectType).objectId); - } - - return objectIds; -}; + if (!objectId) { + throw new Error(`No object found for type: ${objectType}`); + } + }); module.exports = { suiPackageAddress, From ec033eb5dc0a0e75462b0cd1d1317ea792f4911e Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:11:19 +0700 Subject: [PATCH 36/37] chore: remove colon in printInfo --- sui/deploy-contract.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index d68813b0..5defecc9 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -124,7 +124,7 @@ async function deploy(contractName, config, chain, options) { const result = await broadcast(client, keypair, tx); - printInfo('Setup transaction digest: ', result.digest); + printInfo('Setup transaction digest', result.digest); const [gateway] = getObjectIdsByObjectTypes(result, [`${packageId}::gateway::Gateway`]); From d7a339776fcf4957891135b1436b35038f8488ae Mon Sep 17 00:00:00 2001 From: npty Date: Mon, 29 Jul 2024 21:16:16 +0700 Subject: [PATCH 37/37] chore: fix printWallet duplication --- sui/deploy-contract.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/sui/deploy-contract.js b/sui/deploy-contract.js index 5defecc9..eb562f56 100644 --- a/sui/deploy-contract.js +++ b/sui/deploy-contract.js @@ -46,11 +46,7 @@ async function getSigners(keypair, config, chain, options) { return getAmplifierSigners(config, chain); } -async function deploy(contractName, config, chain, options) { - const [keypair, client] = getWallet(chain, options); - - await printWalletInfo(keypair, client, chain, options); - +async function deploy(keypair, client, contractName, config, chain, options) { if (!chain.contracts[contractName]) { chain.contracts[contractName] = {}; } @@ -147,13 +143,10 @@ async function deploy(contractName, config, chain, options) { printInfo(`${contractName} deployed`, JSON.stringify(contractConfig, null, 2)); } -async function upgrade(contractName, policy, config, chain, options) { - const [keypair, client] = getWallet(chain, options); +async function upgrade(keypair, client, contractName, policy, config, chain, options) { const { packageDependencies } = options; options.policy = policy; - await printWalletInfo(keypair, client, chain, options); - if (!chain.contracts[contractName]) { throw new Error(`Cannot find specified contract: ${contractName}`); } @@ -176,7 +169,9 @@ async function upgrade(contractName, policy, config, chain, options) { async function mainProcessor(args, options, processor) { const config = loadSuiConfig(options.env); - await processor(...args, config, config.sui, options); + const [keypair, client] = getWallet(config.sui, options); + await printWalletInfo(keypair, client, config.sui, options); + await processor(keypair, client, ...args, config, config.sui, options); saveConfig(config, options.env); if (options.offline) {