diff --git a/.changeset/separate-rebalancer-package.md b/.changeset/separate-rebalancer-package.md new file mode 100644 index 00000000000..25a303a7258 --- /dev/null +++ b/.changeset/separate-rebalancer-package.md @@ -0,0 +1,10 @@ +--- +"@hyperlane-xyz/rebalancer": minor +"@hyperlane-xyz/cli": minor +--- + +feat: separate rebalancer package + +- Extract rebalancer logic from CLI into dedicated `@hyperlane-xyz/rebalancer` package +- New package supports both manual CLI execution and continuous daemon mode for K8s deployments +- CLI now imports from new package, maintaining backward compatibility for manual rebalancing diff --git a/Dockerfile b/Dockerfile index 1689e67ba6c..d80e6ac3a9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,7 @@ COPY typescript/http-registry-server/package.json ./typescript/http-registry-ser COPY typescript/infra/package.json ./typescript/infra/ COPY typescript/provider-sdk/package.json ./typescript/provider-sdk/ COPY typescript/radix-sdk/package.json ./typescript/radix-sdk/ +COPY typescript/rebalancer/package.json ./typescript/rebalancer/ COPY typescript/sdk/package.json ./typescript/sdk/ COPY typescript/tsconfig/package.json ./typescript/tsconfig/ COPY typescript/utils/package.json ./typescript/utils/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 38c42f8276f..3d6101b4700 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -740,6 +740,9 @@ importers: '@hyperlane-xyz/radix-sdk': specifier: workspace:* version: link:../radix-sdk + '@hyperlane-xyz/rebalancer': + specifier: workspace:* + version: link:../rebalancer '@hyperlane-xyz/registry': specifier: 'catalog:' version: 23.7.0 @@ -1156,7 +1159,7 @@ importers: version: 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) '@types/node': specifier: '*' - version: 22.19.1 + version: 18.19.130 '@types/sinon-chai': specifier: '*' version: 3.2.12 @@ -1181,10 +1184,10 @@ importers: version: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@nomiclabs/hardhat-ethers': specifier: 'catalog:' - version: 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + version: 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@nomiclabs/hardhat-waffle': specifier: 'catalog:' - version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + version: 2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@trivago/prettier-plugin-sort-imports': specifier: 'catalog:' version: 5.2.2(prettier@3.5.3) @@ -1196,7 +1199,7 @@ importers: version: 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3) '@typechain/hardhat': specifier: 'catalog:' - version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3)) + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3)) '@types/chai': specifier: 'catalog:' version: 4.3.20 @@ -1235,10 +1238,10 @@ importers: version: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3) hardhat: specifier: 'catalog:' - version: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + version: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) hardhat-gas-reporter: specifier: 'catalog:' - version: 1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + version: 1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) prettier: specifier: 'catalog:' version: 3.5.3 @@ -1253,10 +1256,10 @@ importers: version: 0.1.0(prettier-plugin-solidity@1.4.2(prettier@3.5.3))(prettier@3.5.3) solidity-coverage: specifier: 'catalog:' - version: 0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + version: 0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) ts-node: specifier: 'catalog:' - version: 10.9.2(@types/node@22.19.1)(typescript@5.8.3) + version: 10.9.2(@types/node@18.19.130)(typescript@5.8.3) tsx: specifier: 'catalog:' version: 4.19.1 @@ -1703,6 +1706,106 @@ importers: specifier: 'catalog:' version: 8.47.0(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) + typescript/rebalancer: + dependencies: + '@google-cloud/pino-logging-gcp-config': + specifier: 'catalog:' + version: 1.3.0 + '@hyperlane-xyz/core': + specifier: workspace:* + version: link:../../solidity + '@hyperlane-xyz/provider-sdk': + specifier: workspace:* + version: link:../provider-sdk + '@hyperlane-xyz/registry': + specifier: 'catalog:' + version: 23.7.0 + '@hyperlane-xyz/sdk': + specifier: workspace:* + version: link:../sdk + '@hyperlane-xyz/utils': + specifier: workspace:* + version: link:../utils + '@inquirer/prompts': + specifier: 'catalog:' + version: 3.3.2 + '@inquirer/select': + specifier: 'catalog:' + version: 1.3.3 + bignumber.js: + specifier: 'catalog:' + version: 9.3.1 + ethers: + specifier: 'catalog:' + version: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + express: + specifier: ^5.1.0 + version: 5.1.0 + pino: + specifier: 'catalog:' + version: 8.21.0 + pino-pretty: + specifier: 'catalog:' + version: 13.1.2 + prom-client: + specifier: 'catalog:' + version: 14.2.0 + yaml: + specifier: 'catalog:' + version: 2.4.5 + zod: + specifier: 'catalog:' + version: 3.25.76 + zod-validation-error: + specifier: 'catalog:' + version: 3.5.4(zod@3.25.76) + devDependencies: + '@ethersproject/constants': + specifier: '*' + version: 5.8.0 + '@hyperlane-xyz/tsconfig': + specifier: workspace:^ + version: link:../tsconfig + '@types/chai-as-promised': + specifier: 'catalog:' + version: 8.0.2 + '@types/express': + specifier: ^5.0.3 + version: 5.0.5 + '@types/mocha': + specifier: 'catalog:' + version: 10.0.10 + '@types/node': + specifier: 'catalog:' + version: 20.19.25 + '@types/sinon': + specifier: 'catalog:' + version: 17.0.4 + chai: + specifier: 'catalog:' + version: 4.5.0 + chai-as-promised: + specifier: 'catalog:' + version: 8.0.2(chai@4.5.0) + eslint: + specifier: 'catalog:' + version: 9.31.0(jiti@2.6.1) + mocha: + specifier: 'catalog:' + version: 11.7.5 + prettier: + specifier: 'catalog:' + version: 3.5.3 + sinon: + specifier: 'catalog:' + version: 13.0.2 + tsx: + specifier: 'catalog:' + version: 4.19.1 + typescript: + specifier: 'catalog:' + version: 5.8.3 + typescript/sdk: dependencies: '@arbitrum/sdk': @@ -2509,8 +2612,8 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true @@ -3022,10 +3125,6 @@ packages: resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -7782,9 +7881,6 @@ packages: '@types/estree@0.0.51': resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -10365,8 +10461,8 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - enhanced-resolve@5.18.4: - resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -10393,9 +10489,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -13697,8 +13790,8 @@ packages: preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.28.0: - resolution: {integrity: sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA==} + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} prebuild-install@5.3.6: resolution: {integrity: sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==} @@ -15214,8 +15307,8 @@ packages: resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} engines: {node: '>=12'} - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -16318,8 +16411,8 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true @@ -17087,7 +17180,7 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 @@ -17102,7 +17195,7 @@ snapshots: '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -17226,7 +17319,7 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.5 - '@babel/parser@7.28.5': + '@babel/parser@7.27.0': dependencies: '@babel/types': 7.28.5 @@ -17844,12 +17937,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.0 - '@babel/runtime@7.28.4': {} - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/types': 7.28.5 '@babel/traverse@7.28.5': @@ -17857,7 +17948,7 @@ snapshots: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/template': 7.27.2 '@babel/types': 7.28.5 debug: 4.4.3(supports-color@5.5.0) @@ -18229,7 +18320,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.28.0 + preact: 10.27.2 sha.js: 2.4.12 transitivePeerDependencies: - supports-color @@ -20616,7 +20707,7 @@ snapshots: '@metamask/sdk@0.33.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.26.0 '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 '@metamask/sdk-analytics': 0.0.5 @@ -20900,15 +20991,15 @@ snapshots: - encoding - supports-color - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) '@nomiclabs/hardhat-etherscan@3.1.8(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: @@ -20926,21 +21017,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@types/sinon-chai': 3.2.12 ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) - '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': + '@nomiclabs/hardhat-waffle@2.0.6(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)))(@types/sinon-chai@3.2.12)(ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))': dependencies: - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)) '@types/sinon-chai': 3.2.12 ethereum-waffle: 4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.8.0)(@ethersproject/providers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typescript@5.8.3) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) '@opentelemetry/api@1.9.0': {} @@ -22181,7 +22272,7 @@ snapshots: '@react-native/codegen@0.82.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 glob: 7.2.3 hermes-parser: 0.32.0 invariant: 2.2.4 @@ -22911,7 +23002,7 @@ snapshots: '@rollup/pluginutils@5.3.0(rollup@4.53.3)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: @@ -24283,7 +24374,7 @@ snapshots: '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.26.0 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 '@solana/buffer-layout': 4.0.1 @@ -24769,7 +24860,7 @@ snapshots: '@storybook/csf-tools@7.6.20': dependencies: '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 '@storybook/csf': 0.1.13 @@ -25017,7 +25108,7 @@ snapshots: '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.5.3)': dependencies: '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 javascript-natural-sort: 0.7.1 @@ -25236,20 +25327,20 @@ snapshots: typechain: 8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3) typescript: 5.8.3 - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))': dependencies: '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) typechain: 8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3) - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3))(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))': dependencies: '@typechain/ethers-v6': 0.5.1(ethers@5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3))(typescript@5.8.3) ethers: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) typechain: 8.3.2(patch_hash=fbb49bf3d1f71d8430767373c9ae33cd36e1aedd8ae9584d00dc90775f804950)(typescript@5.8.3) '@types/abstract-leveldown@7.2.5': {} @@ -25258,7 +25349,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/types': 7.28.5 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -25270,7 +25361,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/types': 7.28.5 '@types/babel__traverse@7.28.0': @@ -25314,7 +25405,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.1 + '@types/node': 20.19.25 '@types/cross-spawn@6.0.6': dependencies: @@ -25359,8 +25450,6 @@ snapshots: '@types/estree@0.0.51': {} - '@types/estree@1.0.6': {} - '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.7': @@ -25539,7 +25628,7 @@ snapshots: '@types/prompts@2.4.9': dependencies: - '@types/node': 22.19.1 + '@types/node': 20.19.25 kleur: 3.0.3 '@types/prop-types@15.7.15': {} @@ -25646,7 +25735,7 @@ snapshots: '@types/unzipper@0.10.11': dependencies: - '@types/node': 22.19.1 + '@types/node': 20.19.25 '@types/uuid@8.3.4': {} @@ -27677,7 +27766,7 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 - resolve: 1.22.11 + resolve: 1.22.8 babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: @@ -28694,7 +28783,7 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.26.0 date-fns@3.6.0: {} @@ -28914,7 +29003,7 @@ snapshots: docker-compose@1.3.0: dependencies: - yaml: 2.8.2 + yaml: 2.8.1 docker-modem@1.0.9: dependencies: @@ -29093,7 +29182,7 @@ snapshots: engine.io-parser@5.2.3: {} - enhanced-resolve@5.18.4: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -29117,10 +29206,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 @@ -29394,7 +29479,7 @@ snapshots: eslint-compat-utils@0.6.5(eslint@9.31.0(jiti@2.6.1)): dependencies: eslint: 9.31.0(jiti@2.6.1) - semver: 7.7.2 + semver: 7.7.3 eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@1.21.7)): dependencies: @@ -30774,11 +30859,11 @@ snapshots: ajv: 6.12.6 har-schema: 2.0.0 - hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -30786,11 +30871,11 @@ snapshots: - debug - utf-8-validate - hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.9)(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.9)(utf-8-validate@5.0.10) - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -30804,7 +30889,7 @@ snapshots: node-interval-tree: 2.1.2 solidity-comments: 0.0.2 - hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): + hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 @@ -30846,14 +30931,14 @@ snapshots: uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@types/node@20.19.25)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@18.19.130)(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): + hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 @@ -30895,7 +30980,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@types/node@22.19.1)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@20.19.25)(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - bufferutil @@ -31385,7 +31470,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -31395,7 +31480,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.3 @@ -31729,7 +31814,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.11 + resolve: 1.22.8 resolve.exports: 2.0.3 slash: 3.0.0 @@ -31912,7 +31997,7 @@ snapshots: jscodeshift@0.15.2(@babel/preset-env@7.28.5(@babel/core@7.28.5)): dependencies: '@babel/core': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5) @@ -32472,7 +32557,7 @@ snapshots: metro-cache: 0.83.3 metro-core: 0.83.3 metro-runtime: 0.83.3 - yaml: 2.8.2 + yaml: 2.8.1 transitivePeerDependencies: - bufferutil - supports-color @@ -32509,7 +32594,7 @@ snapshots: metro-runtime@0.83.3: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.26.0 flow-enums-runtime: 0.0.6 metro-source-map@0.83.3: @@ -32553,7 +32638,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/types': 7.28.5 flow-enums-runtime: 0.0.6 metro: 0.83.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -32574,7 +32659,7 @@ snapshots: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.5 '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 + '@babel/parser': 7.27.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 @@ -33394,7 +33479,7 @@ snapshots: parse-json@2.2.0: dependencies: - error-ex: 1.3.4 + error-ex: 1.3.2 parse-json@5.2.0: dependencies: @@ -33706,7 +33791,7 @@ snapshots: preact@10.24.2: {} - preact@10.28.0: {} + preact@10.27.2: {} prebuild-install@5.3.6: dependencies: @@ -33868,7 +33953,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.1 + '@types/node': 20.19.25 long: 5.3.2 proxy-addr@2.0.7: @@ -34902,7 +34987,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.1.2 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -35177,7 +35262,7 @@ snapshots: solidity-comments-win32-ia32-msvc: 0.0.2 solidity-comments-win32-x64-msvc: 0.0.2 - solidity-coverage@0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.8.0 '@solidity-parser/parser': 0.20.2 @@ -35188,7 +35273,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.8.2 @@ -35200,7 +35285,7 @@ snapshots: shelljs: 0.8.5 web3-utils: 1.10.4 - solidity-coverage@0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.16(hardhat@2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.8.0 '@solidity-parser/parser': 0.20.2 @@ -35211,7 +35296,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) + hardhat: 2.27.0(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3))(typescript@5.8.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.8.2 @@ -35804,7 +35889,7 @@ snapshots: ansi-escapes: 5.0.0 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.16(esbuild@0.18.20)(webpack@5.103.0(esbuild@0.18.20)): + terser-webpack-plugin@5.3.14(esbuild@0.18.20)(webpack@5.103.0(esbuild@0.18.20)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 @@ -36030,6 +36115,24 @@ snapshots: ts-mixer@6.0.4: {} + ts-node@10.9.2(@types/node@18.19.130)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.19.130 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + ts-node@10.9.2(@types/node@20.19.25)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -36750,7 +36853,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.15.0) browserslist: 4.28.0 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -36762,7 +36865,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(esbuild@0.18.20)(webpack@5.103.0(esbuild@0.18.20)) + terser-webpack-plugin: 5.3.14(esbuild@0.18.20)(webpack@5.103.0(esbuild@0.18.20)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -37019,13 +37122,13 @@ snapshots: yaml-eslint-parser@1.3.0: dependencies: eslint-visitor-keys: 3.4.3 - yaml: 2.8.2 + yaml: 2.8.1 yaml@1.10.2: {} yaml@2.4.5: {} - yaml@2.8.2: {} + yaml@2.8.1: {} yargs-parser@18.1.3: dependencies: diff --git a/typescript/cli/package.json b/typescript/cli/package.json index e38e3e3469e..d7ddcdbc142 100644 --- a/typescript/cli/package.json +++ b/typescript/cli/package.json @@ -17,6 +17,7 @@ "@hyperlane-xyz/http-registry-server": "workspace:*", "@hyperlane-xyz/provider-sdk": "workspace:*", "@hyperlane-xyz/radix-sdk": "workspace:*", + "@hyperlane-xyz/rebalancer": "workspace:*", "@hyperlane-xyz/registry": "catalog:", "@hyperlane-xyz/sdk": "workspace:*", "@hyperlane-xyz/tsconfig": "workspace:^", diff --git a/typescript/cli/src/commands/warp.ts b/typescript/cli/src/commands/warp.ts index 6d2a3ff20c4..dc5a7ef118f 100644 --- a/typescript/cli/src/commands/warp.ts +++ b/typescript/cli/src/commands/warp.ts @@ -2,6 +2,7 @@ import util from 'util'; import { stringify as yamlStringify } from 'yaml'; import { CommandModule } from 'yargs'; +import { RebalancerConfig, RebalancerService } from '@hyperlane-xyz/rebalancer'; import { RawForkedChainConfigByChain, RawForkedChainConfigByChainSchema, @@ -15,6 +16,7 @@ import { difference, intersection, objFilter, + rootLogger, } from '@hyperlane-xyz/utils'; import { runWarpRouteCheck } from '../check/warp.js'; @@ -35,7 +37,6 @@ import { logGreen, } from '../logger.js'; import { getWarpRouteConfigsByCore, runWarpRouteRead } from '../read/warp.js'; -import { RebalancerRunner } from '../rebalancer/runner.js'; import { sendTestTransfer } from '../send/transfer.js'; import { ExtendedChainSubmissionStrategySchema } from '../submitters/types.js'; import { @@ -490,18 +491,63 @@ export const rebalancer: CommandModuleWithWriteContext<{ }, }, handler: async (args) => { - let runner: RebalancerRunner; - try { - const { context, ...rest } = args; - runner = await RebalancerRunner.create(rest, context); - } catch (e: any) { - // exit on startup errors - errorRed(`Rebalancer startup error: ${util.format(e)}`); - process.exit(1); - } + const { + context, + config: configPath, + checkFrequency, + withMetrics, + monitorOnly, + manual, + origin, + destination, + amount, + } = args; + + logCommandHeader('Hyperlane Warp Route Rebalancer'); try { - await runner.run(); + // Load rebalancer configuration + const rebalancerConfig = RebalancerConfig.load(configPath); + + // Determine execution mode + const mode = manual ? 'manual' : 'daemon'; + + // Create rebalancer service + const service = new RebalancerService( + context.multiProvider, + context.multiProtocolProvider, + context.registry, + rebalancerConfig, + { + mode, + checkFrequency, + withMetrics, + monitorOnly, + coingeckoApiKey: process.env.COINGECKO_API_KEY, + logger: rootLogger.child({ module: 'rebalancer' }), + }, + ); + + // Execute based on mode + if (manual) { + if (!origin || !destination || !amount) { + errorRed( + 'Origin, destination, and amount are required for manual rebalance', + ); + process.exit(1); + } + + await service.executeManual({ + origin, + destination, + amount, + }); + + logGreen('✅ Manual rebalance completed successfully'); + } else { + // Start daemon mode + await service.start(); + } } catch (e: any) { errorRed(`Rebalancer error: ${util.format(e)}`); process.exit(1); diff --git a/typescript/cli/src/context/strategies/chain/chainResolver.ts b/typescript/cli/src/context/strategies/chain/chainResolver.ts index 87ee90673d0..748a6d9225e 100644 --- a/typescript/cli/src/context/strategies/chain/chainResolver.ts +++ b/typescript/cli/src/context/strategies/chain/chainResolver.ts @@ -1,3 +1,4 @@ +import { RebalancerConfig } from '@hyperlane-xyz/rebalancer'; import { ChainName, DeployedCoreAddresses, @@ -9,7 +10,6 @@ import { ProtocolType, assert } from '@hyperlane-xyz/utils'; import { CommandType } from '../../../commands/signCommands.js'; import { readCoreDeployConfigs } from '../../../config/core.js'; import { getWarpRouteDeployConfig } from '../../../config/warp.js'; -import { RebalancerConfig } from '../../../rebalancer/config/RebalancerConfig.js'; import { runMultiChainSelectionStep, runSingleChainSelectionStep, diff --git a/typescript/cli/src/rebalancer/README.md b/typescript/cli/src/rebalancer/README.md deleted file mode 100644 index a375f41da95..00000000000 --- a/typescript/cli/src/rebalancer/README.md +++ /dev/null @@ -1,177 +0,0 @@ -# Hyperlane Warp Rebalancer - -The Hyperlane Warp Rebalancer is a tool that automatically manages the balance of collateral across chains in a Warp Route. It ensures that each chain maintains an optimal balance of tokens based on the configured strategy. - -## Configuration - -The rebalancer uses a configuration file that defines both global settings and chain-specific configurations. The configuration file can be in either YAML or JSON format. - -The basic structure of the configuration is as follows: - -```yaml -# Required: Unique identifier for the Warp Route. This is used to identify the -# HypERC20 token that is being rebalanced. -# The format is /