diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94e7dd1c23..da43825214 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,7 +68,7 @@ catalogs: version: 2.1.6 '@radix-ui/react-slot': specifier: ^1.1.2 - version: 1.1.2 + version: 1.2.2 '@radix-ui/react-switch': specifier: ^1.1.3 version: 1.1.3 @@ -185,7 +185,7 @@ catalogs: version: 9.23.0 framer-motion: specifier: ^12.6.3 - version: 12.6.3 + version: 12.9.2 fumadocs-core: specifier: ^15.3.0 version: 15.3.0 @@ -272,7 +272,7 @@ catalogs: version: 16.0.5 shiki: specifier: ^3.2.1 - version: 3.2.1 + version: 3.4.0 storybook: specifier: ^8.6.12 version: 8.6.12 @@ -293,7 +293,7 @@ catalogs: version: 2.3.3 tailwind-merge: specifier: ^3.1.0 - version: 3.1.0 + version: 3.3.0 tailwindcss: specifier: ^3.0.0 version: 3.4.17 @@ -323,7 +323,7 @@ catalogs: version: 2.14.16 zod: specifier: ^3.24.2 - version: 3.24.2 + version: 3.24.4 zod-validation-error: specifier: ^3.4.0 version: 3.4.0 @@ -396,13 +396,13 @@ importers: version: 2.1.1 connectkit: specifier: 'catalog:' - version: 1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)) + version: 1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)) cryptocurrency-icons: specifier: 'catalog:' version: 0.18.1 framer-motion: specifier: 'catalog:' - version: 12.6.3(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.9.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: specifier: 'catalog:' version: 15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1) @@ -423,16 +423,16 @@ importers: version: 10.1.0(@types/react@19.1.0)(react@19.1.0) shiki: specifier: 'catalog:' - version: 3.2.1 + version: 3.4.0 viem: specifier: 'catalog:' - version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) wagmi: specifier: 'catalog:' - version: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + version: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@axe-core/react': specifier: 'catalog:' @@ -523,7 +523,7 @@ importers: version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) nuqs: specifier: 'catalog:' - version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) + version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) react: specifier: 'catalog:' version: 19.1.0 @@ -535,10 +535,10 @@ importers: version: 19.1.0(react@19.1.0) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 zod-validation-error: specifier: 'catalog:' - version: 3.4.0(zod@3.24.2) + version: 3.4.0(zod@3.24.4) devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -614,7 +614,7 @@ importers: version: 2.1.6(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-slot': specifier: 'catalog:' - version: 1.1.2(@types/react@19.1.0)(react@19.1.0) + version: 1.2.2(@types/react@19.1.0)(react@19.1.0) '@radix-ui/react-switch': specifier: 'catalog:' version: 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -641,16 +641,16 @@ importers: version: 19.1.0(react@19.1.0) tailwind-merge: specifier: 'catalog:' - version: 3.1.0 + version: 3.3.0 tailwindcss-animate: specifier: 'catalog:' version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@22.14.0)(typescript@5.8.2))) viem: specifier: 'catalog:' - version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.2) + version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.4) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -711,13 +711,13 @@ importers: version: 2.1.1 connectkit: specifier: 'catalog:' - version: 1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)) + version: 1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)) next: specifier: 'catalog:' version: 15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1) nuqs: specifier: 'catalog:' - version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) + version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) react: specifier: 'catalog:' version: 19.1.0 @@ -732,13 +732,13 @@ importers: version: 8.2.0(react@19.1.0) viem: specifier: 'catalog:' - version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) wagmi: specifier: 'catalog:' - version: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + version: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -817,13 +817,13 @@ importers: version: 15.1.3 viem: specifier: 'catalog:' - version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.2) + version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.4) yargs: specifier: ^17.5.1 version: 17.7.2 zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -966,7 +966,7 @@ importers: version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) nuqs: specifier: 'catalog:' - version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) + version: 2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0) react: specifier: 'catalog:' version: 19.1.0 @@ -987,10 +987,10 @@ importers: version: 2.3.3(react@19.1.0) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 zod-validation-error: specifier: 'catalog:' - version: 3.4.0(zod@3.24.2) + version: 3.4.0(zod@3.24.4) devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -1229,10 +1229,10 @@ importers: version: 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/wallet-adapter-react-ui': specifier: 'catalog:' - version: 0.9.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) + version: 0.9.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/wallet-adapter-wallets': specifier: 'catalog:' - version: 0.19.33(@babel/runtime@7.27.0)(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/sysvars@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) + version: 0.19.33(@babel/runtime@7.27.0)(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/sysvars@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.4) '@solana/web3.js': specifier: 'catalog:' version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -1250,7 +1250,7 @@ importers: version: 2.14.0 framer-motion: specifier: 'catalog:' - version: 12.6.3(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.9.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) ip-range-check: specifier: 'catalog:' version: 0.2.0 @@ -1283,7 +1283,7 @@ importers: version: 2.3.3(react@19.1.0) zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@axe-core/react': specifier: 'catalog:' @@ -1516,7 +1516,7 @@ importers: version: 0.0.22 zod: specifier: 'catalog:' - version: 3.24.2 + version: 3.24.4 devDependencies: '@cprussin/eslint-config': specifier: 'catalog:' @@ -1532,7 +1532,7 @@ importers: version: 3.1.2(typescript@5.8.2) '@solana/wallet-adapter-react': specifier: 'catalog:' - version: 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) + version: 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@types/jest': specifier: 'catalog:' version: 29.5.14 @@ -2763,13 +2763,16 @@ importers: target_chains/ethereum/sdk/js: dependencies: - '@pythnetwork/price-service-client': + '@pythnetwork/hermes-client': specifier: workspace:* - version: link:../../../../price_service/client/js - buffer: - specifier: ^6.0.3 - version: 6.0.3 + version: link:../../../../apps/hermes/client/js + viem: + specifier: 'catalog:' + version: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) devDependencies: + '@cprussin/eslint-config': + specifier: 'catalog:' + version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@5.8.2)))(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@5.8.2))(turbo@2.4.4)(typescript@5.8.2) '@pythnetwork/pyth-sdk-solidity': specifier: workspace:* version: link:../solidity @@ -2791,33 +2794,21 @@ importers: '@types/yargs': specifier: ^17.0.10 version: 17.0.33 - '@typescript-eslint/eslint-plugin': - specifier: ^5.21.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@4.9.5))(eslint@8.56.0)(typescript@4.9.5) - '@typescript-eslint/parser': - specifier: ^5.21.0 - version: 5.62.0(eslint@8.56.0)(typescript@4.9.5) eslint: - specifier: ^8.14.0 - version: 8.56.0 + specifier: 'catalog:' + version: 9.23.0(jiti@2.4.2) jest: specifier: ^29.4.1 - version: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@4.9.5)) + version: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@5.8.2)) prettier: specifier: 'catalog:' version: 3.5.3 ts-jest: specifier: ^29.0.5 - version: 29.3.1(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@4.9.5)))(typescript@4.9.5) + version: 29.3.1(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@18.19.86)(typescript@5.8.2)))(typescript@5.8.2) typescript: - specifier: ^4.6.3 - version: 4.9.5 - web3: - specifier: ^1.8.2 - version: 1.10.4(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - yargs: - specifier: ^17.4.1 - version: 17.7.2 + specifier: 'catalog:' + version: 5.8.2 target_chains/ethereum/sdk/solidity: devDependencies: @@ -8849,36 +8840,24 @@ packages: '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@3.2.1': - resolution: {integrity: sha512-FhsdxMWYu/C11sFisEp7FMGBtX/OSSbnXZDMBhGuUDBNTdsoZlMSgQv5f90rwvzWAdWIW6VobD+G3IrazxA6dQ==} - '@shikijs/core@3.4.0': resolution: {integrity: sha512-0YOzTSRDn/IAfQWtK791gs1u8v87HNGToU6IwcA3K7nPoVOrS2Dh6X6A6YfXgPTSkTwR5y6myk0MnI0htjnwrA==} '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-javascript@3.2.1': - resolution: {integrity: sha512-eMdcUzN3FMQYxOmRf2rmU8frikzoSHbQDFH2hIuXsrMO+IBOCI9BeeRkCiBkcLDHeRKbOCtYMJK3D6U32ooU9Q==} - '@shikijs/engine-javascript@3.4.0': resolution: {integrity: sha512-1ywDoe+z/TPQKj9Jw0eU61B003J9DqUFRfH+DVSzdwPUFhR7yOmfyLzUrFz0yw8JxFg/NgzXoQyyykXgO21n5Q==} '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/engine-oniguruma@3.2.1': - resolution: {integrity: sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==} - '@shikijs/engine-oniguruma@3.4.0': resolution: {integrity: sha512-zwcWlZ4OQuJ/+1t32ClTtyTU1AiDkK1lhtviRWoq/hFqPjCNyLj22bIg9rB7BfoZKOEOfrsGz7No33BPCf+WlQ==} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/langs@3.2.1': - resolution: {integrity: sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==} - '@shikijs/langs@3.4.0': resolution: {integrity: sha512-bQkR+8LllaM2duU9BBRQU0GqFTx7TuF5kKlw/7uiGKoK140n1xlLAwCgXwSxAjJ7Htk9tXTFwnnsJTCU5nDPXQ==} @@ -8888,9 +8867,6 @@ packages: '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/themes@3.2.1': - resolution: {integrity: sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==} - '@shikijs/themes@3.4.0': resolution: {integrity: sha512-YPP4PKNFcFGLxItpbU0ZW1Osyuk8AyZ24YEFaq04CFsuCbcqydMvMUTi40V2dkc0qs1U2uZFrnU6s5zI6IH+uA==} @@ -8900,9 +8876,6 @@ packages: '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - '@shikijs/types@3.2.1': - resolution: {integrity: sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==} - '@shikijs/types@3.4.0': resolution: {integrity: sha512-EUT/0lGiE//7j5N/yTMNMT3eCWNcHJLrRKxT0NDXWIfdfSmFJKfPX7nMmRBrQnWboAzIsUziCThrYMMhjbMS1A==} @@ -10790,6 +10763,7 @@ packages: '@toruslabs/solana-embed@0.3.4': resolution: {integrity: sha512-yj+aBJoBAneap7Jlu9/OOp7irWNuC5CqAhyhVcmb0IjWrCUFnioLdL0U7UfGaqVm/5O0leJh7/Z5Ll+3toWJBg==} engines: {node: '>=14.17.0', npm: '>=6.x'} + deprecated: This sdk is now deprecated. Please use @web3auth/ws-embed instead peerDependencies: '@babel/runtime': 7.x @@ -11946,7 +11920,6 @@ packages: '@walletconnect/modal@2.7.0': resolution: {integrity: sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw==} - deprecated: Please follow the migration guide on https://docs.reown.com/appkit/upgrade/wcm '@walletconnect/qrcode-modal@1.8.0': resolution: {integrity: sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==} @@ -15726,20 +15699,6 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@12.6.3: - resolution: {integrity: sha512-2hsqknz23aloK85bzMc9nSR2/JP+fValQ459ZTVElFQ0xgwR2YqNjYSuDZdFBPOwVCt4Q9jgyTt6hg6sVOALzw==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - framer-motion@12.9.2: resolution: {integrity: sha512-R0O3Jdqbfwywpm45obP+8sTgafmdEcUoShQTAV+rB5pi+Y1Px/FYL5qLLRe5tPtBdN1J4jos7M+xN2VV2oEAbQ==} peerDependencies: @@ -18327,15 +18286,9 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - motion-dom@12.6.3: - resolution: {integrity: sha512-gRY08RjcnzgFYLemUZ1lo/e9RkBxR+6d4BRvoeZDSeArG4XQXERSPapKl3LNQRu22Sndjf1h+iavgY0O4NrYqA==} - motion-dom@12.9.1: resolution: {integrity: sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==} - motion-utils@12.6.3: - resolution: {integrity: sha512-R/b3Ia2VxtTNZ4LTEO5pKYau1OUNHOuUfxuP0WFCTDYdHkeTBR9UtxR1cc8mDmKr8PEhmmfnTKGz3rSMjNRoRg==} - motion-utils@12.8.3: resolution: {integrity: sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==} @@ -18817,15 +18770,9 @@ packages: oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - oniguruma-parser@0.5.4: - resolution: {integrity: sha512-yNxcQ8sKvURiTwP0mV6bLQCYE7NKfKRRWunhbZnXgxSmB1OXa1lHrN3o4DZd+0Si0kU5blidK7BcROO8qv5TZA==} - oniguruma-to-es@2.3.0: resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} - oniguruma-to-es@4.1.0: - resolution: {integrity: sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==} - oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} @@ -20672,9 +20619,6 @@ packages: shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - shiki@3.2.1: - resolution: {integrity: sha512-VML/2o1/KGYkEf/stJJ+s9Ypn7jUKQPomGLGYso4JJFMFxVDyPNsjsI3MB3KLjlMOeH44gyaPdXC6rik2WXvUQ==} - shiki@3.4.0: resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==} @@ -21296,9 +21240,6 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwind-merge@3.1.0: - resolution: {integrity: sha512-aV27Oj8B7U/tAOMhJsSGdWqelfmudnGMdXIlMnk1JfsjwSjts6o8HyfN7SFH3EztzH4YH8kk6GbLTHzITJO39Q==} - tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} @@ -23990,7 +23931,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -24009,16 +23950,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.27.1(supports-color@5.5.0)': dependencies: - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.1(supports-color@5.5.0) '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -24266,52 +24207,52 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.26.10)': dependencies: @@ -24356,32 +24297,32 @@ snapshots: '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.27.1)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)': dependencies: @@ -24391,82 +24332,82 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': dependencies: @@ -25033,22 +24974,22 @@ snapshots: '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10)': dependencies: @@ -25087,10 +25028,10 @@ snapshots: '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.26.10) '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -25098,10 +25039,10 @@ snapshots: '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color @@ -25109,14 +25050,14 @@ snapshots: '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10)': dependencies: @@ -25485,8 +25426,8 @@ snapshots: '@babel/preset-react@7.26.3(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10) @@ -25497,8 +25438,8 @@ snapshots: '@babel/preset-react@7.26.3(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.27.1) @@ -25570,26 +25511,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.0(supports-color@5.5.0)': + '@babel/traverse@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.27.1': + '@babel/traverse@7.27.1(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 '@babel/parser': 7.27.2 '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -29230,12 +29171,12 @@ snapshots: - utf-8-validate - zod - '@jnwng/walletconnect-solana@0.2.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@jnwng/walletconnect-solana@0.2.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/qrcode-modal': 1.8.0 - '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) bs58: 5.0.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -31042,11 +30983,10 @@ snapshots: crypto-js: 4.2.0 uuidv4: 6.2.13 - '@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)': + '@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: '@particle-network/auth': 1.3.1 '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - bs58: 5.0.0 '@paulmillr/qr@0.2.1': {} @@ -33184,9 +33124,9 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} - '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@safe-global/safe-apps-provider@0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -33194,10 +33134,10 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.9 - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) transitivePeerDependencies: - bufferutil - typescript @@ -33378,13 +33318,6 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.2.1': - dependencies: - '@shikijs/types': 3.2.1 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - '@shikijs/core@3.4.0': dependencies: '@shikijs/types': 3.4.0 @@ -33398,12 +33331,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@3.2.1': - dependencies: - '@shikijs/types': 3.2.1 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.1.0 - '@shikijs/engine-javascript@3.4.0': dependencies: '@shikijs/types': 3.4.0 @@ -33415,11 +33342,6 @@ snapshots: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.2.1': - dependencies: - '@shikijs/types': 3.2.1 - '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.4.0': dependencies: '@shikijs/types': 3.4.0 @@ -33429,10 +33351,6 @@ snapshots: dependencies: '@shikijs/types': 1.29.2 - '@shikijs/langs@3.2.1': - dependencies: - '@shikijs/types': 3.2.1 - '@shikijs/langs@3.4.0': dependencies: '@shikijs/types': 3.4.0 @@ -33450,10 +33368,6 @@ snapshots: dependencies: '@shikijs/types': 1.29.2 - '@shikijs/themes@3.2.1': - dependencies: - '@shikijs/types': 3.2.1 - '@shikijs/themes@3.4.0': dependencies: '@shikijs/types': 3.4.0 @@ -33468,11 +33382,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.2.1': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - '@shikijs/types@3.4.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -34881,18 +34790,18 @@ snapshots: '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-base-ui@0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': + '@solana/wallet-adapter-base-ui@0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': dependencies: - '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) + '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.1.0 transitivePeerDependencies: - bs58 - react-native - '@solana/wallet-adapter-base-ui@0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': + '@solana/wallet-adapter-base-ui@0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': dependencies: - '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) + '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.1.0 transitivePeerDependencies: @@ -35008,9 +34917,9 @@ snapshots: '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-particle@0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)': + '@solana/wallet-adapter-particle@0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))': dependencies: - '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -35021,18 +34930,6 @@ snapshots: '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@solana/wallet-adapter-react-ui@0.9.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-base-ui': 0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) - '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) - '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - transitivePeerDependencies: - - bs58 - - react-native - '@solana/wallet-adapter-react-ui@0.9.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': dependencies: '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -35045,22 +34942,23 @@ snapshots: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': + '@solana/wallet-adapter-react-ui@0.9.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.5(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.0) + '@solana/wallet-adapter-base-ui': 0.1.3(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) + '@solana/wallet-adapter-react': 0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: - bs58 - react-native - '@solana/wallet-adapter-react@0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': + '@solana/wallet-adapter-react@0.15.36(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)': dependencies: '@solana-mobile/wallet-adapter-mobile': 2.1.5(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.1.0) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.0) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.1.0 transitivePeerDependencies: @@ -35071,7 +34969,7 @@ snapshots: dependencies: '@solana-mobile/wallet-adapter-mobile': 2.1.5(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(react-native@0.78.2(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.1.0) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.0) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) react: 19.1.0 transitivePeerDependencies: @@ -35227,9 +35125,9 @@ snapshots: - utf-8-validate - zod - '@solana/wallet-adapter-walletconnect@0.1.17(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@solana/wallet-adapter-walletconnect@0.1.17(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@jnwng/walletconnect-solana': 0.2.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@jnwng/walletconnect-solana': 0.2.0(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -35277,7 +35175,7 @@ snapshots: '@solana/wallet-adapter-nightly': 0.1.17(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-nufi': 0.1.18(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.8(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@solana/wallet-adapter-particle': 0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-phantom': 0.9.25(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.19(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.16(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -35333,7 +35231,7 @@ snapshots: - ws - zod - '@solana/wallet-adapter-wallets@0.19.33(@babel/runtime@7.27.0)(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/sysvars@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)': + '@solana/wallet-adapter-wallets@0.19.33(@babel/runtime@7.27.0)(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/sysvars@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.1.0(react@19.1.0))(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.4)': dependencies: '@solana/wallet-adapter-alpha': 0.1.11(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-avana': 0.1.14(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -35354,7 +35252,7 @@ snapshots: '@solana/wallet-adapter-nightly': 0.1.17(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-nufi': 0.1.18(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-onto': 0.1.8(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-particle': 0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@solana/wallet-adapter-particle': 0.1.13(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-phantom': 0.9.25(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-safepal': 0.5.19(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-saifu': 0.1.16(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -35369,7 +35267,7 @@ snapshots: '@solana/wallet-adapter-trezor': 0.1.3(@solana/sysvars@2.1.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-trust': 0.1.14(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/wallet-adapter-unsafe-burner': 0.1.8(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-adapter-walletconnect': 0.1.17(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@solana/wallet-adapter-walletconnect': 0.1.17(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@solana/wallet-adapter-xdefi': 0.1.8(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -35449,19 +35347,6 @@ snapshots: '@wallet-standard/wallet': 1.1.0 bs58: 5.0.0 - '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-chains': 1.1.1 - '@solana/wallet-standard-features': 1.3.0 - '@solana/wallet-standard-util': 1.1.2 - '@solana/web3.js': 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - '@wallet-standard/features': 1.1.0 - '@wallet-standard/wallet': 1.1.0 - bs58: 6.0.0 - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.0)': dependencies: '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) @@ -35473,17 +35358,6 @@ snapshots: - '@solana/web3.js' - bs58 - '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.1.0)': - dependencies: - '@solana/wallet-adapter-base': 0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)) - '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@6.0.0) - '@wallet-standard/app': 1.1.0 - '@wallet-standard/base': 1.1.0 - react: 19.1.0 - transitivePeerDependencies: - - '@solana/web3.js' - - bs58 - '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.24(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.0)': dependencies: '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10))(bs58@5.0.0) @@ -36422,7 +36296,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@babel/runtime': 7.27.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -37486,7 +37360,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -37498,7 +37372,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@types/babel__traverse@7.20.7': @@ -38708,16 +38582,16 @@ snapshots: loupe: 3.1.3 tinyrainbow: 1.2.0 - '@wagmi/connectors@5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)': + '@wagmi/connectors@5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)))(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)': dependencies: '@coinbase/wallet-sdk': 4.3.0 '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - '@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) - '@walletconnect/ethereum-provider': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)) + '@walletconnect/ethereum-provider': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -38747,11 +38621,11 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': + '@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.2) - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) zustand: 5.0.0(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: '@tanstack/query-core': 5.71.5 @@ -38840,7 +38714,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@walletconnect/core@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -38854,7 +38728,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -38887,7 +38761,7 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@walletconnect/ethereum-provider@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) '@walletconnect/jsonrpc-provider': 1.0.14 @@ -38895,10 +38769,10 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) '@walletconnect/modal': 2.7.0(@types/react@19.1.0)(react@19.1.0) - '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/types': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) - '@walletconnect/universal-provider': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/universal-provider': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -39120,16 +38994,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@walletconnect/sign-client@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@walletconnect/core': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/core': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -39217,7 +39091,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@walletconnect/universal-provider@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) @@ -39226,9 +39100,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/sign-client': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/types': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))) - '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@walletconnect/utils': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -39299,7 +39173,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + '@walletconnect/utils@2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -39317,7 +39191,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -40321,7 +40195,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -40390,9 +40264,9 @@ snapshots: babel-plugin-styled-components@2.1.4(@babel/core@7.27.1)(styled-components@5.3.11(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0))(supports-color@5.5.0): dependencies: - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) lodash: 4.17.21 picomatch: 2.3.1 styled-components: 5.3.11(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0) @@ -41457,12 +41331,12 @@ snapshots: transitivePeerDependencies: - supports-color - connectkit@1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)): + connectkit@1.9.0(@babel/core@7.27.1)(@tanstack/react-query@5.71.5(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)): dependencies: '@tanstack/react-query': 5.71.5(react@19.1.0) buffer: 6.0.3 detect-browser: 5.3.0 - family: 0.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)) + family: 0.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)) framer-motion: 6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) qrcode: 1.5.4 react: 19.1.0 @@ -41471,8 +41345,8 @@ snapshots: react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) resize-observer-polyfill: 1.5.1 styled-components: 5.3.11(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0) - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - wagmi: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + wagmi: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) transitivePeerDependencies: - '@babel/core' - react-is @@ -44132,12 +44006,12 @@ snapshots: dependencies: checkpoint-store: 1.1.0 - family@0.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)): + family@0.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4)): optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - wagmi: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) + wagmi: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) fancy-canvas@2.1.0: {} @@ -44404,7 +44278,7 @@ snapshots: fork-ts-checker-webpack-plugin@6.5.3(eslint@9.23.0(jiti@2.4.2))(typescript@4.9.5)(webpack@5.98.0): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -44424,7 +44298,7 @@ snapshots: fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.13.2)(esbuild@0.25.4)): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -44481,16 +44355,6 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@12.6.3(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - motion-dom: 12.6.3 - motion-utils: 12.6.3 - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 1.3.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - framer-motion@12.9.2(@emotion/is-prop-valid@1.3.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: motion-dom: 12.9.1 @@ -45975,7 +45839,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.27.1 - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -45985,7 +45849,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.1 - '@babel/parser': 7.27.0 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.1 @@ -46774,8 +46638,8 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.27.1 - '@babel/generator': 7.27.0 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.27.1) + '@babel/generator': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.27.1) '@babel/types': 7.27.1 '@jest/expect-utils': 29.7.0 @@ -48609,16 +48473,10 @@ snapshots: moment@2.30.1: {} - motion-dom@12.6.3: - dependencies: - motion-utils: 12.6.3 - motion-dom@12.9.1: dependencies: motion-utils: 12.8.3 - motion-utils@12.6.3: {} - motion-utils@12.8.3: {} motion@10.16.2: @@ -49023,7 +48881,7 @@ snapshots: optionalDependencies: next: 15.3.2(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1) - nuqs@2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@19.1.0-rc.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0): + nuqs@2.4.1(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.1))(react@19.1.0): dependencies: mitt: 3.0.1 react: 19.1.0 @@ -49141,21 +48999,12 @@ snapshots: oniguruma-parser@0.12.1: {} - oniguruma-parser@0.5.4: {} - oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 regex: 5.1.1 regex-recursion: 5.1.1 - oniguruma-to-es@4.1.0: - dependencies: - emoji-regex-xs: 1.0.0 - oniguruma-parser: 0.5.4 - regex: 6.0.1 - regex-recursion: 6.0.2 - oniguruma-to-es@4.3.3: dependencies: oniguruma-parser: 0.12.1 @@ -49273,14 +49122,14 @@ snapshots: transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.8.2)(zod@3.24.2): + ox@0.6.7(typescript@5.8.2)(zod@3.24.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.2) + abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.2 @@ -50432,7 +50281,7 @@ snapshots: react-dev-utils@12.0.1(eslint@9.23.0(jiti@2.4.2))(typescript@4.9.5)(webpack@5.98.0): dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 address: 1.2.2 browserslist: 4.24.4 chalk: 4.1.2 @@ -50479,7 +50328,7 @@ snapshots: react-docgen@7.1.1: dependencies: '@babel/core': 7.27.1 - '@babel/traverse': 7.27.0 + '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.7 @@ -51684,17 +51533,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.2.1: - dependencies: - '@shikijs/core': 3.2.1 - '@shikijs/engine-javascript': 3.2.1 - '@shikijs/engine-oniguruma': 3.2.1 - '@shikijs/langs': 3.2.1 - '@shikijs/themes': 3.2.1 - '@shikijs/types': 3.2.1 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - shiki@3.4.0: dependencies: '@shikijs/core': 3.4.0 @@ -52262,8 +52100,8 @@ snapshots: styled-components@5.3.11(@babel/core@7.27.1)(react-dom@19.1.0(react@19.1.0))(react-is@18.3.1)(react@19.1.0): dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) - '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0) + '@babel/traverse': 7.27.1(supports-color@5.5.0) '@emotion/is-prop-valid': 1.3.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 @@ -52524,8 +52362,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwind-merge@3.1.0: {} - tailwind-merge@3.3.0: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.2)(@types/node@22.14.0)(typescript@5.8.2))): @@ -53957,16 +53793,16 @@ snapshots: - utf-8-validate - zod - viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): + viem@2.23.2(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.2) - isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.9(typescript@5.8.2)(zod@3.24.2) - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) + isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.6.7(typescript@5.8.2)(zod@3.24.4) + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -53991,15 +53827,15 @@ snapshots: - utf-8-validate - zod - viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.2): + viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@6.0.3)(zod@3.24.4): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.24.2) + abitype: 1.0.8(typescript@5.8.2)(zod@3.24.4) isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.3)) - ox: 0.6.9(typescript@5.8.2)(zod@3.24.2) + ox: 0.6.9(typescript@5.8.2)(zod@3.24.4) ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.3) optionalDependencies: typescript: 5.8.2 @@ -54025,14 +53861,14 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2): + wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@19.1.0))(@types/react@19.1.0)(bufferutil@4.0.9)(encoding@0.1.13)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4): dependencies: '@tanstack/react-query': 5.71.5(react@19.1.0) - '@wagmi/connectors': 5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) - '@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + '@wagmi/connectors': 5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.78.2(@babel/core@7.27.1)(@babel/preset-env@7.26.9(@babel/core@7.27.1))(@types/react@19.1.0)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10)))(@types/react@19.1.0)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)))(bufferutil@4.0.9)(encoding@0.1.13)(react@19.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4))(zod@3.24.4) + '@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@19.1.0)(immer@9.0.21)(react@19.1.0)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4)) react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) - viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + viem: 2.24.3(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.4) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -55433,9 +55269,9 @@ snapshots: dependencies: ethers: 5.8.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) - zod-validation-error@3.4.0(zod@3.24.2): + zod-validation-error@3.4.0(zod@3.24.4): dependencies: - zod: 3.24.2 + zod: 3.24.4 zod@3.24.2: {} diff --git a/target_chains/ethereum/sdk/js/.eslintrc.js b/target_chains/ethereum/sdk/js/.eslintrc.js deleted file mode 100644 index bb71486c02..0000000000 --- a/target_chains/ethereum/sdk/js/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - root: true, - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/ban-ts-comment": "off", - }, -}; diff --git a/target_chains/ethereum/sdk/js/README.md b/target_chains/ethereum/sdk/js/README.md index 8f1f6993da..8d541be0a6 100644 --- a/target_chains/ethereum/sdk/js/README.md +++ b/target_chains/ethereum/sdk/js/README.md @@ -1,7 +1,4 @@ -# Pyth EVM JS (DEPRECATED) - -> [!WARNING] -> **DEPRECATION NOTICE:** This package is deprecated and no longer maintained. Please use [hermes-client](https://github.com/pyth-network/pyth-crosschain/tree/main/apps/hermes/client/js) instead. +# Pyth EVM JS [Pyth](https://pyth.network/) provides real-time pricing data in a variety of asset classes, including cryptocurrency, equities, FX and commodities. This library allows you to use these real-time prices on EVM-based networks. @@ -22,156 +19,59 @@ $ yarn add @pythnetwork/pyth-evm-js ## Quickstart -Pyth stores prices off-chain to minimize gas fees, which allows us to offer a wider selection of products and faster -update times. See [On-Demand Updates](https://docs.pyth.network/documentation/pythnet-price-feeds/on-demand) for more -information about this approach. In order to use Pyth prices on chain, they must be fetched from an off-chain Hermes -instance. The `EvmPriceServiceConnection` class can be used to interact with these services, providing a way to fetch -these prices directly in your code. The following example wraps an existing RPC provider and shows how to obtain Pyth -prices and submit them to the network: - -```typescript -const connection = new EvmPriceServiceConnection("https://hermes.pyth.network"); // See Hermes endpoints section below for other endpoints - -const priceIds = [ - // You can find the ids of prices at https://pyth.network/developers/price-feed-ids#pyth-evm-stable - "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", // BTC/USD price id - "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", // ETH/USD price id -]; - -// In order to use Pyth prices in your protocol you need to submit the price update data to Pyth contract in your target -// chain. `getPriceFeedsUpdateData` creates the update data which can be submitted to your contract. Then your contract should -// call the Pyth Contract with this data. -const priceUpdateData = await connection.getPriceFeedsUpdateData(priceIds); - -// If the user is paying the price update fee, you need to fetch it from the Pyth contract. -// Please refer to https://docs.pyth.network/documentation/pythnet-price-feeds/on-demand#fees for more information. -// -// `pythContract` below is a web3.js contract; if you wish to use ethers, you need to change it accordingly. -// You can find the Pyth interface ABI in @pythnetwork/pyth-sdk-solidity npm package. -const updateFee = await pythContract.methods - .getUpdateFee(priceUpdateData) - .call(); - -// Calling someContract method -// `someContract` below is a web3.js contract; if you wish to use ethers, you need to change it accordingly. -// Note: In Hedera you need to pass updateFee * 10^10 as value to the send method as there is an -// inconsistency in the way the value is handled in Hedera RPC and the way it is handled on-chain. -await someContract.methods - .doSomething(someArg, otherArg, priceUpdateData) - .send({ value: updateFee }); -``` - -`SomeContract` looks like so: - -```solidity -pragma solidity ^0.8.0; - -import "@pythnetwork/pyth-sdk-solidity/IPyth.sol"; -import "@pythnetwork/pyth-sdk-solidity/PythStructs.sol"; - -contract SomeContract { - IPyth pyth; - - constructor(address pythContract) { - pyth = IPyth(pythContract); - } +### Filling Pyth Data for Transactions - function doSomething( - uint someArg, - string memory otherArg, - bytes[] calldata priceUpdateData - ) public payable { - // Update the prices to be set to the latest values - uint fee = pyth.getUpdateFee(priceUpdateData); - pyth.updatePriceFeeds{ value: fee }(priceUpdateData); - - // Doing other things that uses prices - bytes32 priceId = 0xf9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b; - // Get the price if it is not older than 10 seconds from the current time. - PythStructs.Price price = pyth.getPriceNoOlderThan(priceId, 10); - } -} - -``` - -We strongly recommend reading our guide which explains [how to work with Pyth price feeds](https://docs.pyth.network/documentation/pythnet-price-feeds/best-practices). - -### Off-chain prices - -Many applications additionally need to display Pyth prices off-chain, for example, in their frontend application. -The `EvmPriceServiceConnection` provides two different ways to fetch the current Pyth price. -The code blocks below assume that the `connection` and `priceIds` objects have been initialized as shown above. -The first method is a single-shot query: +The `fillPythUpdate` function helps you automatically determine what Pyth price updates are needed for a transaction and creates the necessary update call. +This function uses the `trace_callMany` method by default but can be used with `debug_traceCall` and a bundler as well. See the example below for more information. ```typescript -// `getLatestPriceFeeds` returns a `PriceFeed` for each price id. It contains all information about a price and has -// utility functions to get the current and exponentially-weighted moving average price, and other functionality. -const priceFeeds = await connection.getLatestPriceFeeds(priceIds); -// Get the price if it is not older than 60 seconds from the current time. -console.log(priceFeeds[0].getPriceNoOlderThan(60)); // Price { conf: '1234', expo: -8, price: '12345678' } -// Get the exponentially-weighted moving average price if it is not older than 60 seconds from the current time. -console.log(priceFeeds[1].getEmaPriceNoOlderThan(60)); -``` +import { fillPythUpdate, multicall3Bundler, CallRequest } from "@pythnetwork/pyth-evm-js"; +import { createPublicClient, http } from "viem"; +import { optimismSepolia } from "viem/chains"; -The object also supports a streaming websocket connection that allows you to subscribe to every new price update for a given feed. -This method is useful if you want to show continuously updating real-time prices in your frontend: +const PYTH_CONTRACT_OP_SEPOLIA = "0x0708325268df9f66270f1401206434524814508b" +const HERMES_ENDPOINT = "https://hermes.pyth.network" -```typescript -// Subscribe to the price feeds given by `priceId`. The callback will be invoked every time the requested feed -// gets a price update. -connection.subscribePriceFeedUpdates(priceIds, (priceFeed) => { - console.log( - `Received update for ${priceFeed.id}: ${priceFeed.getPriceNoOlderThan(60)}` - ); +const client = createPublicClient({ + chain: optimismSepolia, + transport: http("YOUR_RPC_ENDPOINT"), }); -// When using the subscription, make sure to close the websocket upon termination to finish the process gracefully. -setTimeout(() => { - connection.closeWebSocket(); -}, 60000); -``` - -### Examples - -There are two examples in [examples](./src/examples/). - -#### EvmPriceServiceClient - -[This example](./src/examples/EvmPriceServiceClient.ts) fetches `PriceFeed` updates using both a HTTP-request API and a streaming websocket API. You can run it with `npm run example-client`. A full command that prints BTC and ETH price feeds, in the testnet network, looks like so: - -```bash -npm run example-client -- \ - --endpoint https://hermes.pyth.network \ - --price-ids \ - 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 \ - 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace -``` - -#### EvmRelay - -[This example](./src/examples/EvmRelay.ts) shows how to update prices on an EVM network. It does the following: - -1. Gets update data to update given price feeds. -2. Calls the pyth contract with the update data. -3. Submits it to the network and prints the txhash if successful. - -You can run this example with `npm run example-relay`. A full command that updates BTC and ETH prices on the BNB Chain -testnet network looks like so: - -```bash -npm run example-relay -- \ - --network "https://data-seed-prebsc-1-s1.binance.org:8545" \ - --pyth-contract "0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb"\ - --mnemonic "my good mnemonic" \ - --endpoint https://hermes.pyth.network \ - --price-ids \ - "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43" \ - "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" +const call: CallRequest = { + to: "0x3252c2F7962689fA17f892C52555613f36056f22", + data: "0xd09de08a", // Your transaction calldata + from: "0x78357316239040e19fC823372cC179ca75e64b81", +}; + +// Fill Pyth update data using "trace_callMany" +const pythUpdate = await fillPythUpdate( + client, + call, + PYTH_CONTRACT_OP_SEPOLIA, + HERMES_ENDPOINT, + { + method: "trace_callMany", + maxIter: 5, + }, +); + +// Fill Pyth update data using "debug_traceCall" +const _pythUpdateWithDebugTraceCall = await fillPythUpdate( + client, + call, + PYTH_CONTRACT_OP_SEPOLIA, + HERMES_ENDPOINT, + { + method: "debug_traceCall", + bundler: multicall3Bundler, // or any function that takes a PythUpdate and a CallRequest and produces a CallRequest + maxIter: 5, + }, +); + +if (pythUpdate) { + console.log("Pyth update needed:", pythUpdate); + // Bundle the calls together, or pass the pythUpdate.updateData to your contract. +} else { + console.log("No Pyth data needed for this transaction"); +} ``` - -## Hermes endpoints - -Pyth offers a free public endpoint at [https://hermes.pyth.network](https://hermes.pyth.network). However, it is -recommended to obtain a private endpoint from one of the Hermes RPC providers for more reliability. You can find more -information about Hermes RPC providers -[here](https://docs.pyth.network/documentation/pythnet-price-feeds/hermes#public-endpoint). diff --git a/target_chains/ethereum/sdk/js/eslint.config.js b/target_chains/ethereum/sdk/js/eslint.config.js new file mode 100644 index 0000000000..9058bfef8c --- /dev/null +++ b/target_chains/ethereum/sdk/js/eslint.config.js @@ -0,0 +1 @@ +export { base as default } from "@cprussin/eslint-config"; diff --git a/target_chains/ethereum/sdk/js/package.json b/target_chains/ethereum/sdk/js/package.json index b62d6ca8c9..a59af317f7 100644 --- a/target_chains/ethereum/sdk/js/package.json +++ b/target_chains/ethereum/sdk/js/package.json @@ -1,6 +1,6 @@ { "name": "@pythnetwork/pyth-evm-js", - "version": "1.83.0", + "version": "2.0.0-alpha2", "description": "Pyth Network EVM Utils in JS", "homepage": "https://pyth.network", "author": { @@ -21,16 +21,13 @@ }, "scripts": { "build": "tsc", - "example-client": "pnpm run build && node lib/examples/EvmPriceServiceClient.js", - "example-relay": "pnpm run build && node lib/examples/EvmRelay.js", - "example-benchmark": "pnpm run build && node lib/examples/EvmBenchmark.js", "test:format": "prettier --check \"src/**/*.ts\"", "test:lint": "eslint src/ --max-warnings 0", "fix:format": "prettier --write \"src/**/*.ts\"", "fix:lint": "eslint src/ --fix --max-warnings 0", "prepublishOnly": "pnpm run build && pnpm run test:lint", "preversion": "pnpm run test:lint", - "version": "pnpm run format && git add -A src" + "version": "pnpm run test:format && git add -A src" }, "keywords": [ "pyth", @@ -38,6 +35,7 @@ ], "license": "Apache-2.0", "devDependencies": { + "@cprussin/eslint-config": "catalog:", "@pythnetwork/pyth-sdk-solidity": "workspace:*", "@truffle/hdwallet-provider": "^2.1.5", "@types/ethereum-protocol": "^1.0.2", @@ -45,18 +43,14 @@ "@types/node": "^18.11.18", "@types/web3-provider-engine": "^14.0.1", "@types/yargs": "^17.0.10", - "@typescript-eslint/eslint-plugin": "^5.21.0", - "@typescript-eslint/parser": "^5.21.0", - "eslint": "^8.14.0", + "eslint": "catalog:", "jest": "^29.4.1", "prettier": "catalog:", "ts-jest": "^29.0.5", - "typescript": "^4.6.3", - "web3": "^1.8.2", - "yargs": "^17.4.1" + "typescript": "catalog:" }, "dependencies": { - "@pythnetwork/price-service-client": "workspace:*", - "buffer": "^6.0.3" + "@pythnetwork/hermes-client": "workspace:*", + "viem": "catalog:" } } diff --git a/target_chains/ethereum/sdk/js/src/EvmPriceServiceConnection.ts b/target_chains/ethereum/sdk/js/src/EvmPriceServiceConnection.ts deleted file mode 100644 index b985c9a3b9..0000000000 --- a/target_chains/ethereum/sdk/js/src/EvmPriceServiceConnection.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - PriceServiceConnection, - HexString, -} from "@pythnetwork/price-service-client"; -import { Buffer } from "buffer"; - -export class EvmPriceServiceConnection extends PriceServiceConnection { - /** - * Gets price update data which then can be submitted to Pyth contract to update the prices. - * This will throw an axios error if there is a network problem or the price service returns a non-ok response (e.g: Invalid price ids) - * - * @param priceIds Array of hex-encoded price ids. - * @returns Array of price update data. - */ - async getPriceFeedsUpdateData(priceIds: HexString[]): Promise { - const latestVaas = await this.getLatestVaas(priceIds); - return latestVaas.map( - (vaa) => "0x" + Buffer.from(vaa, "base64").toString("hex"), - ); - } -} diff --git a/target_chains/ethereum/sdk/js/src/examples/EvmBenchmark.ts b/target_chains/ethereum/sdk/js/src/examples/EvmBenchmark.ts deleted file mode 100644 index b8ddf95861..0000000000 --- a/target_chains/ethereum/sdk/js/src/examples/EvmBenchmark.ts +++ /dev/null @@ -1,117 +0,0 @@ -import Web3 from "web3"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -import { EvmPriceServiceConnection } from "../index"; -import HDWalletProvider from "@truffle/hdwallet-provider"; -import PythInterfaceAbi from "@pythnetwork/pyth-sdk-solidity/abis/IPyth.json"; - -const argv = yargs(hideBin(process.argv)) - .option("network", { - description: "RPC of the network to relay on.", - type: "string", - required: true, - }) - .option("endpoint", { - description: - "Endpoint URL for the price service. e.g: https://endpoint/example", - type: "string", - required: true, - }) - .option("pyth-contract", { - description: "Pyth contract address.", - type: "string", - required: true, - }) - .option("price-id", { - description: - "Price feed id (in hex) to fetch" + " e.g: 0xf9c0172ba10dfa4d19088d...", - type: "string", - required: true, - }) - .option("timestamp", { - description: "Timestamp of the prices to fetch" + " e.g., 2022-", // TODO - type: "string", - required: true, - }) - .option("mnemonic", { - description: "Mnemonic (private key) for sender", - type: "string", - required: true, - }) - .help() - .alias("help", "h") - .parserConfiguration({ - "parse-numbers": false, - }) - .parseSync(); - -const network = argv.network; -const pythContractAddr = argv.pythContract; - -const connection = new EvmPriceServiceConnection(argv.endpoint); - -async function run() { - const provider = new HDWalletProvider({ - mnemonic: { - phrase: argv.mnemonic, - }, - providerOrUrl: network, - }); - - // @ts-ignore - const web3 = new Web3(provider); - const priceId = argv.priceId as string; - // The unix timestamp in seconds - const unixTimestamp = Date.parse(argv.timestamp) / 1000; - - console.log(`Querying unix timestamp: ${unixTimestamp}`); - - const [priceFeedUpdateVaa, updateTimestamp] = await connection.getVaa( - priceId, - unixTimestamp, - ); - console.log(`Next pyth update was at: ${updateTimestamp}`); - console.log(priceFeedUpdateVaa); - - const priceFeedUpdate = - "0x" + Buffer.from(priceFeedUpdateVaa, "base64").toString("hex"); - - const pythContract = new web3.eth.Contract( - PythInterfaceAbi as any, - pythContractAddr, - { - from: provider.getAddress(0), - }, - ); - - const updateFee = await pythContract.methods - .getUpdateFee([priceFeedUpdate]) - .call(); - console.log(`Update fee: ${updateFee}`); - - // In real use cases, you would pass the update to your contract, then call parsePriceFeedUpdates within your contract. - // When invoked on-chain, this function will return a PriceFeed struct containing the data in the price update - // (such as the current price). - await pythContract.methods - .parsePriceFeedUpdates( - [priceFeedUpdate], - [priceId], - // parsePriceFeedUpdates will reject any price update outside of the time window provided in the following - // two arguments. Integrators can use this to specify the timestamp of the update they are expecting. - unixTimestamp, - unixTimestamp + 5, - ) - .send({ value: updateFee }) - .on("transactionHash", (hash: string) => { - console.log(`Tx hash: ${hash}`); - }) - .on("error", (err: any, receipt: any) => { - console.error(receipt); - throw err; - }); - - provider.engine.stop(); -} - -run(); diff --git a/target_chains/ethereum/sdk/js/src/examples/EvmPriceServiceClient.ts b/target_chains/ethereum/sdk/js/src/examples/EvmPriceServiceClient.ts deleted file mode 100644 index 3c24285ff2..0000000000 --- a/target_chains/ethereum/sdk/js/src/examples/EvmPriceServiceClient.ts +++ /dev/null @@ -1,64 +0,0 @@ -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -import { EvmPriceServiceConnection } from "../index"; - -function sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -const argv = yargs(hideBin(process.argv)) - .option("endpoint", { - description: - "Endpoint URL for the Price Service. e.g: https://endpoint/example", - type: "string", - required: true, - }) - .option("price-ids", { - description: - "Space separated price feed ids (in hex) to fetch" + - " e.g: 0xf9c0172ba10dfa4d19088d...", - type: "array", - required: true, - }) - .help() - .alias("help", "h") - .parserConfiguration({ - "parse-numbers": false, - }) - .parseSync(); - -async function run() { - const connection = new EvmPriceServiceConnection(argv.endpoint, { - logger: console, // Providing logger will allow the connection to log its events. - }); - - const priceIds = argv.priceIds as string[]; - console.log(priceIds); - const priceFeeds = await connection.getLatestPriceFeeds(priceIds); - console.log(priceFeeds); - console.log(priceFeeds?.at(0)?.getPriceNoOlderThan(60)); - - const updateData = await connection.getPriceFeedsUpdateData(priceIds); - console.log(updateData); - - console.log("Subscribing to price feed updates."); - - await connection.subscribePriceFeedUpdates(priceIds, (priceFeed) => { - console.log( - `Current price for ${priceFeed.id}: ${JSON.stringify( - priceFeed.getPriceNoOlderThan(60), - )}.`, - ); - }); - - await sleep(600000); - - // To close the websocket you should either unsubscribe from all - // price feeds or call `connection.closeWebSocket()` directly. - - console.log("Unsubscribing from price feed updates."); - await connection.unsubscribePriceFeedUpdates(priceIds); -} - -run(); diff --git a/target_chains/ethereum/sdk/js/src/examples/EvmRelay.ts b/target_chains/ethereum/sdk/js/src/examples/EvmRelay.ts deleted file mode 100644 index 19582c9d38..0000000000 --- a/target_chains/ethereum/sdk/js/src/examples/EvmRelay.ts +++ /dev/null @@ -1,120 +0,0 @@ -import Web3 from "web3"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -import { EvmPriceServiceConnection } from "../index"; -import HDWalletProvider from "@truffle/hdwallet-provider"; -import PythInterfaceAbi from "@pythnetwork/pyth-sdk-solidity/abis/IPyth.json"; - -const argv = yargs(hideBin(process.argv)) - .option("network", { - description: "RPC of the network to relay on.", - type: "string", - required: true, - }) - .option("endpoint", { - description: - "Endpoint URL for the price service. e.g: https://endpoint/example", - type: "string", - required: true, - }) - .option("pyth-contract", { - description: "Pyth contract address.", - type: "string", - required: true, - }) - .option("price-ids", { - description: - "Space separated price feed ids (in hex) to fetch" + - " e.g: 0xf9c0172ba10dfa4d19088d...", - type: "array", - required: true, - }) - .option("mnemonic", { - description: "Mnemonic (private key) for sender", - type: "string", - required: true, - }) - .help() - .alias("help", "h") - .parserConfiguration({ - "parse-numbers": false, - }) - .parseSync(); - -const network = argv.network; -const pythContractAddr = argv.pythContract; - -const connection = new EvmPriceServiceConnection(argv.endpoint); - -async function run() { - const provider = new HDWalletProvider({ - mnemonic: { - phrase: argv.mnemonic, - }, - providerOrUrl: network, - }); - - // @ts-ignore - const web3 = new Web3(provider); - const priceIds = argv.priceIds as string[]; - - const priceFeeds = await connection.getLatestPriceFeeds(priceIds); - console.log(priceFeeds); - - const priceFeedUpdateData = - await connection.getPriceFeedsUpdateData(priceIds); - console.log(priceFeedUpdateData); - - const pythContract = new web3.eth.Contract( - PythInterfaceAbi as any, - pythContractAddr, - { - from: provider.getAddress(0), - }, - ); - - const updateFee = await pythContract.methods - .getUpdateFee(priceFeedUpdateData) - .call(); - console.log(`Update fee: ${updateFee}`); - - let txHash = undefined; - await pythContract.methods - .updatePriceFeeds(priceFeedUpdateData) - .send({ value: updateFee }) - .on("transactionHash", (hash: string) => { - txHash = hash; - }) - .on("error", (err: any, receipt: any) => { - console.error(receipt); - throw err; - }); - - console.log(`Tx hash: ${txHash}`); - if (txHash === undefined) { - console.error("Something went wrong. Could not send price update tx."); - } else { - console.log("Awaiting tx confirmation..."); - let receipt = undefined; - while (!receipt) { - receipt = await web3.eth.getTransactionReceipt(txHash); - } - - // For on-chain use, you will typically perform the getPriceNoOlderThan call within the same transaction as updatePriceFeeds. - // The call to getPriceNoOlderThan below simply demonstrates that the on-chain price was in fact updated. - // Note that the code above for waiting for tx confirmation is a little flaky -- if so, you may see an old price printed here. - for (const priceId of priceIds) { - const [price, conf, expo, publishTime] = await pythContract.methods - .getPriceNoOlderThan(priceId, 60) // 60 seconds staleness tolerance - .call(); - console.log( - `Updated ${priceId} to (${price} +- ${conf}) * 10^${expo} at unix timestamp ${publishTime}`, - ); - } - } - - provider.engine.stop(); -} - -run(); diff --git a/target_chains/ethereum/sdk/js/src/filler.ts b/target_chains/ethereum/sdk/js/src/filler.ts new file mode 100644 index 0000000000..8604e87d00 --- /dev/null +++ b/target_chains/ethereum/sdk/js/src/filler.ts @@ -0,0 +1,242 @@ +import { HermesClient } from "@pythnetwork/hermes-client"; +import { + Address, + PublicClient, + encodeFunctionData, + Hex, + Transport, + Chain, +} from "viem"; + +import { IPythAbi } from "./pyth-abi"; +import { + debugTraceCallAction, + extractPythPriceFeedsFromDebugTraceCall, +} from "./tracer/debug-trace-call"; +import { + extractPythPriceFeedsFromTraceCallMany, + traceCallManyAction, +} from "./tracer/trace-call-many"; + +/** + * Represents a call request to be executed on the blockchain + */ +export type CallRequest = { + /** The address making the call (optional) */ + from?: Address; + /** The target contract address */ + to: Address; + /** The encoded function call data (optional) */ + data?: Hex; + /** The amount of ETH to send with the call (optional) */ + value?: bigint; +}; + +/** + * Get the update fee for a given set of update data + * + * @param client - The public client instance + * @param pythContractAddress - The Pyth contract address + * @param updateData - Array of hex-encoded update data + * @returns Promise resolving to the update fee in wei + */ +export async function getUpdateFee< + transport extends Transport, + chain extends Chain | undefined, +>( + client: PublicClient, + pythContractAddress: Address, + updateData: Hex[], +): Promise { + return await client.readContract({ + address: pythContractAddress, + abi: IPythAbi, + functionName: "getUpdateFee", + args: [updateData], + }); +} + +/** + * A function that takes a Pyth update and a call request and returns a single bundled call request. + * This is used to combine the Pyth update with the original call. + */ +export type Bundler = ( + pythUpdate: PythUpdate, + call: CallRequest, +) => CallRequest; + +/** + * Tracing configuration options + */ +export type Config = { + /** Maximum number of iterations to find all required price feeds. Default is 5. */ + maxIter?: number; +} & ( + | { + /** + * Use this when you want to trace multiple separate transactions (Pyth update + original call). + * This method traces each call independently, which may be more accurate but requires more RPC calls. + */ + method: "trace_callMany"; + } + | { + /** + * Use this when you want to trace a single bundled transaction that combines the Pyth update with the original call. + * The bundler function is responsible for creating a single transaction that executes both operations. + * + * The bundler is crucial because debug_traceCall can only trace one transaction at a time. + * The bundler must create a single call that includes both the Pyth price update and the original transaction logic. + * This allows the tracer to see all the Pyth price feed calls that would be made in the actual execution. + */ + method: "debug_traceCall"; + /** + * Function that takes a Pyth update and original call, returns a single bundled call request. + * Common bundlers include multicall3Bundler for combining calls via Multicall3 contract. + */ + bundler: Bundler; + } +); + +/** + * Represents a Pyth price update transaction + */ +export type PythUpdate = { + /** The call request to update Pyth price feeds */ + call: CallRequest; + /** Array of hex-encoded price update data */ + updateData: Hex[]; + /** The fee required for the update in wei */ + updateFee: bigint; +}; + +/** + * Fill the Pyth data for a given call request. + * Requires a client that supports trace_callMany or debug_traceCall with a bundler. + * This function will trace the call and find all the Pyth price feeds that are needed to fill the call in multiple + * iterations because a single call might revert if it requires a price feed that is not available and we need to + * trace the call again with the new price feeds until we have all the price feeds. + * + * @param client - The public client instance + * @param call - The call request to fill with Pyth data + * @param pythContractAddress - The Pyth contract address + * @param hermesEndpoint - The Hermes endpoint URL for fetching price updates + * @param config - Configuration options for tracing and bundling. Default is `{ method: "trace_callMany" }`. + * - `Config` with `method: "trace_callMany"`: For trace_callMany method which traces multiple calls separately. + * This method traces the Pyth update and original call as separate transactions. + * - `Config` with `method: "debug_traceCall"` and `bundler`: For debug_traceCall method with a bundler function to + * combine Pyth update with the original call. The bundler creates a single transaction that executes both the + * Pyth update and the original call. + * - `maxIter`: Maximum number of iterations to find all required price feeds. Each iteration traces the current + * transaction(s) to find new Pyth price feed calls. The process stops when no new price feeds are found + * or when maxIter is reached. Default is 5. + * @returns Promise resolving to Pyth update object or undefined if no Pyth data needed + */ +export async function fillPythUpdate< + transport extends Transport, + chain extends Chain | undefined, +>( + client: PublicClient, + call: CallRequest, + pythContractAddress: Address, + hermesEndpoint: string, + config?: Config, +): Promise { + config = { + method: "trace_callMany", + ...config, + }; + + const hermesClient = new HermesClient(hermesEndpoint); + + let requiredPriceFeeds = new Set
(); + let pythUpdate: PythUpdate | undefined; + + for (let i = 0; i < (config.maxIter ?? 5); i++) { + const priceFeeds = await getPriceFeeds( + client, + pythContractAddress, + call, + config, + pythUpdate, + ); + + if (priceFeeds.isSubsetOf(requiredPriceFeeds)) { + break; + } else { + requiredPriceFeeds = requiredPriceFeeds.union(priceFeeds); + pythUpdate = await getPythUpdate( + client, + hermesClient, + requiredPriceFeeds, + pythContractAddress, + call, + ); + } + } + + return pythUpdate; +} + +const getPythUpdate = async < + transport extends Transport, + chain extends Chain | undefined, +>( + client: PublicClient, + hermesClient: HermesClient, + priceFeeds: Set
, + pythContractAddress: Address, + call: CallRequest, +) => { + const hermesResponse = await hermesClient.getLatestPriceUpdates([ + ...priceFeeds, + ]); + const updateData = hermesResponse.binary.data.map((data) => `0x${data}`); + const updateFee = await getUpdateFee(client, pythContractAddress, updateData); + return { + call: { + to: pythContractAddress, + data: encodeFunctionData({ + abi: IPythAbi, + functionName: "updatePriceFeeds", + args: [updateData], + }), + from: call.from, + value: updateFee, + }, + updateData, + updateFee, + }; +}; + +/** + * Get the price feeds from the trace of the given call. + */ +const getPriceFeeds = async < + transport extends Transport, + chain extends Chain | undefined, +>( + client: PublicClient, + pythContractAddress: Address, + call: CallRequest, + config: Config, + pythUpdate: PythUpdate | undefined, +) => { + switch (config.method) { + case "debug_traceCall": { + return extractPythPriceFeedsFromDebugTraceCall( + await client + .extend(debugTraceCallAction) + .debugTraceCall(pythUpdate ? config.bundler(pythUpdate, call) : call), + pythContractAddress, + ); + } + case "trace_callMany": { + return extractPythPriceFeedsFromTraceCallMany( + await client + .extend(traceCallManyAction) + .traceCallMany(pythUpdate ? [pythUpdate.call, call] : [call]), + pythContractAddress, + ); + } + } +}; diff --git a/target_chains/ethereum/sdk/js/src/index.ts b/target_chains/ethereum/sdk/js/src/index.ts index f21f6f3558..1eea6b36e1 100644 --- a/target_chains/ethereum/sdk/js/src/index.ts +++ b/target_chains/ethereum/sdk/js/src/index.ts @@ -1,175 +1,3 @@ -export { EvmPriceServiceConnection } from "./EvmPriceServiceConnection"; - -export { - DurationInMs, - HexString, - Price, - PriceFeed, - PriceServiceConnectionConfig, - UnixTimestamp, -} from "@pythnetwork/price-service-client"; - -export const CONTRACT_ADDR: Record = { - // Mainnets - apechain_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - arbitrum: "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", - astar_zkevm: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - aurora: "0xF89C7b475821EC3fDC2dC8099032c05c6c0c9AB9", - avalanche: "0x4305FB66699C3B2702D4d05CF36551390A4c69C6", - blast: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - bnb: "0x4D7E825f80bDf85e913E0DD2A2D54927e9dE1594", - base: "0x8250f4aF4B972684F7b336503E2D6dFeDeB1487a", - boba: "0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF", - bttc: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - canto: "0x98046Bd286715D3B0BC227Dd7a956b83D8978603", - celo: "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", - chiliz: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - conflux_espace: "0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc", - core_dao: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - cronos: "0xE0d0e68297772Dd5a1f1D99897c581E2082dbA5B", - cronos_zkevm_mainnet: "0x056f829183ec806a78c26c98961678c24fab71af", - eos: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - evmos: "0x354bF866A4B006C9AF9d9e06d9364217A8616E12", - ethereum: "0x4305FB66699C3B2702D4d05CF36551390A4c69C6", - etherlink: "0x2880aB155794e7179c9eE2e38200202908C17B43", - eventum_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - fantom: "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", - fantom_sonic_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - filecoin: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - flow_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - gnosis: "0x2880aB155794e7179c9eE2e38200202908C17B43", - gravity: "0x2880aB155794e7179c9eE2e38200202908C17B43", - hedera: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - hemi_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - horizen_eon: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - idex_xchain_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - injective_inevm: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - iota: "0x8D254a21b3C86D32F7179855531CE99164721933", - kava: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - kcc: "0xE0d0e68297772Dd5a1f1D99897c581E2082dbA5B", - kaia: "0x2880aB155794e7179c9eE2e38200202908C17B43", - lightlink: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - linea: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - manta: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - mantle: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - merlin: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - meter: "0xbFe3f445653f2136b2FD1e6DdDb5676392E3AF16", - mode: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - morph: "0x2880aB155794e7179c9eE2e38200202908C17B43", - neon: "0x7f2dB085eFC3560AFF33865dD727225d91B4f9A5", - opbnb: "0x2880aB155794e7179c9eE2e38200202908C17B43", - optimism: "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", - parallel: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - polygon: "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", - polygon_zkevm: "0xC5E56d6b40F3e3B5fbfa266bCd35C37426537c65", - polynomial: "0x2880aB155794e7179c9eE2e38200202908C17B43", - ronin: "0x2880aB155794e7179c9eE2e38200202908C17B43", - scroll: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - sei_evm_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - shimmer: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - skate: "0x2880aB155794e7179c9eE2e38200202908C17B43", - superseed_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - viction: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - wemix: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - zetachain: "0x2880aB155794e7179c9eE2e38200202908C17B43", - zkfair: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - zksync_era: "0xf087c864AEccFb6A2Bf1Af6A0382B0d0f6c5D834", - // Testnets (Stable sources) - abstract_testnet: "0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486", - apechain_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - arbitrum_blueberry: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - arbitrum_sepolia: "0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF", - astar_zkevm_testnet: "0x8D254a21b3C86D32F7179855531CE99164721933", - astar_zkyoto_testnet: "0x8D254a21b3C86D32F7179855531CE99164721933", - aurora_testnet: "0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E", - bnb_testnet: "0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb", - base_sepolia: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - berachain_testnet_v2: "0x2880aB155794e7179c9eE2e38200202908C17B43", - blackbird: "0x2880aB155794e7179c9eE2e38200202908C17B43", - blast_s2_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - boba_goerli: "0x8D254a21b3C86D32F7179855531CE99164721933", - boba_sepolia: "0x8D254a21b3C86D32F7179855531CE99164721933", - bttc_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - cant_testnet: "0x26DD80569a8B23768A1d80869Ed7339e07595E85", - celo_alfajores: "0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E", - chiado: "0x98046Bd286715D3B0BC227Dd7a956b83D8978603", - chiliz_testnet: "0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509", - conflux_espace_testnet: "0xDd24F84d36BF92C65F92307595335bdFab5Bbd21", - core_dao_testnet: "0x8D254a21b3C86D32F7179855531CE99164721933", - coredao_testnet_v2: "0x2880aB155794e7179c9eE2e38200202908C17B43", - cronos_testnet: "0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320", - cronos_zkevm_testnet: "0xB1DB1498902F08E16E11F1a423ec9CCB9537E1D6", - dela_deperp_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - dela_mithreum_deperp_testnet: "0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc", - ethena_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - etherlink_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - eos_testnet: "0x0708325268dF9F66270F1401206434524814508b", - eventum_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - evmos_testnet: "0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E", - sonic_blaze_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - fantom_sonic_testnet: "0x96124d1F6E44FfDf1fb5D6d74BB2DE1B7Fbe7376", - fantom_testnet: "0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb", - filecoin_calibration: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - flow_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - fuji: "0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509", - hedera_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - idex_xchain_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - injective_inevm_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - kakarot_sepolia: "0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc", - kava_testnet: "0xfA25E653b44586dBbe27eE9d252192F0e4956683", - kcc_testnet: "0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E", - kinto: "0x2880aB155794e7179c9eE2e38200202908C17B43", - kaia_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - kraken_ink_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - lightlink_pegasus_testnet: "0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167", - linea_goerli: "0xdF21D137Aadc95588205586636710ca2890538d5", - linea_sepolia: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - manta_testnet: "0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c", - manta_sepolia: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - mantle_sepolia: "0x98046Bd286715D3B0BC227Dd7a956b83D8978603", - merlin_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - meter_testnet: "0x5a71C07a0588074443545eE0c08fb0375564c3E4", - mode_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - monad_devnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - monad_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - morph_holesky_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - morph_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - movement_evm_devnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - movement_evm_devnet_imola: "0x2880aB155794e7179c9eE2e38200202908C17B43", - mumbai: "0xFC6bd9F9f0c6481c6Af3A7Eb46b296A5B85ed379", - neon_devnet: "0x0708325268dF9F66270F1401206434524814508b", - nighthawk: "0x2880aB155794e7179c9eE2e38200202908C17B43", - olive_testnet: "0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c", - opbnb_testnet: "0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c", - optimism_celestia_raspberry: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - optimism_goerli: "0xDd24F84d36BF92C65F92307595335bdFab5Bbd21", - optimism_sepolia: "0x0708325268dF9F66270F1401206434524814508b", - orange_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - parallel_testnet: "0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509", - polygon_amoy: "0x2880aB155794e7179c9eE2e38200202908C17B43", - polygon_blackberry: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - polygon_zkevm_testnet: "0xFf255f800044225f54Af4510332Aa3D67CC77635", - polynomial_testnet: "0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509", - reya_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - saigon: "0xEbe57e8045F2F230872523bbff7374986E45C486", - sei_evm_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - scroll_sepolia: "0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c", - sepolia: "0xDd24F84d36BF92C65F92307595335bdFab5Bbd21", - shimmer_testnet: "0x8D254a21b3C86D32F7179855531CE99164721933", - skate_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - soneium_minato_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - story_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - superseed_testnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - tabi_testnet: "0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb", - taiko_hekla: "0x2880aB155794e7179c9eE2e38200202908C17B43", - taiko_mainnet: "0x2880aB155794e7179c9eE2e38200202908C17B43", - unichain_sepolia: "0x2880aB155794e7179c9eE2e38200202908C17B43", - viction_testnet: "0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167", - wemix_testnet: "0x26DD80569a8B23768A1d80869Ed7339e07595E85", - zetachain_testnet: "0x0708325268dF9F66270F1401206434524814508b", - zkfair_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - zksync_era_goerli: "0x8739d5024B5143278E2b15Bd9e7C26f6CEc658F1", - zksync_era_sepolia: "0x056f829183Ec806A78c26C98961678c24faB71af", - // Testnets (Beta sources) - horizen_gobi_testnet: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", -}; +export * from "./filler"; +export * from "./multicall3-bundler"; +export * from "./pyth-abi"; diff --git a/target_chains/ethereum/sdk/js/src/multicall3-bundler.ts b/target_chains/ethereum/sdk/js/src/multicall3-bundler.ts new file mode 100644 index 0000000000..e07c3253c3 --- /dev/null +++ b/target_chains/ethereum/sdk/js/src/multicall3-bundler.ts @@ -0,0 +1,79 @@ +import { encodeFunctionData } from "viem"; + +import { CallRequest, PythUpdate } from "./filler"; + +// Multicall3 contract address (deployed on most chains) +export const MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11"; + +// Multicall3 ABI for the aggregate3 and aggregate3Value functions +export const MULTICALL3_ABI = [ + { + inputs: [ + { + components: [ + { name: "target", type: "address" }, + { name: "allowFailure", type: "bool" }, + { name: "value", type: "uint256" }, + { name: "callData", type: "bytes" }, + ], + name: "calls", + type: "tuple[]", + }, + ], + name: "aggregate3Value", + outputs: [ + { + components: [ + { name: "success", type: "bool" }, + { name: "returnData", type: "bytes" }, + ], + name: "returnData", + type: "tuple[]", + }, + ], + stateMutability: "payable", + type: "function", + }, +] as const; + +/** + * Bundle multiple calls using Multicall3. This bundler will change the msg.sender of the calls to the + * Multicall3 contract and this might affect the result of the calls. + */ +export function multicall3Bundler( + pythUpdate: PythUpdate, + call: CallRequest, +): CallRequest { + // Encode the multicall3 aggregate3 function call + const multicallData = encodeFunctionData({ + abi: MULTICALL3_ABI, + functionName: "aggregate3Value", + args: [ + [ + { + target: pythUpdate.call.to, + allowFailure: false, + value: pythUpdate.call.value ?? 0n, + callData: pythUpdate.call.data ?? "0x", + }, + { + target: call.to, + allowFailure: false, + value: call.value ?? 0n, + callData: call.data ?? "0x", + }, + ], + ], + }); + + // Calculate total value needed + const totalValue = (call.value ?? 0n) + (pythUpdate.call.value ?? 0n); + + // Create the bundled transaction that calls multicall3 + return { + to: MULTICALL3_ADDRESS, + data: multicallData, + value: totalValue, + from: call.from, + }; +} diff --git a/target_chains/ethereum/sdk/js/src/pyth-abi.ts b/target_chains/ethereum/sdk/js/src/pyth-abi.ts new file mode 100644 index 0000000000..fe6649c1f5 --- /dev/null +++ b/target_chains/ethereum/sdk/js/src/pyth-abi.ts @@ -0,0 +1,660 @@ +export const IPythAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + indexed: false, + internalType: "uint64", + name: "publishTime", + type: "uint64", + }, + { + indexed: false, + internalType: "int64", + name: "price", + type: "int64", + }, + { + indexed: false, + internalType: "uint64", + name: "conf", + type: "uint64", + }, + ], + name: "PriceFeedUpdate", + type: "event", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + ], + name: "getEmaPrice", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + internalType: "uint256", + name: "age", + type: "uint256", + }, + ], + name: "getEmaPriceNoOlderThan", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + ], + name: "getEmaPriceUnsafe", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + ], + name: "getPrice", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + internalType: "uint256", + name: "age", + type: "uint256", + }, + ], + name: "getPriceNoOlderThan", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + ], + name: "getPriceUnsafe", + outputs: [ + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "updateData", + type: "bytes[]", + }, + ], + name: "getUpdateFee", + outputs: [ + { + internalType: "uint256", + name: "feeAmount", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getValidTimePeriod", + outputs: [ + { + internalType: "uint256", + name: "validTimePeriod", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "updateData", + type: "bytes[]", + }, + { + internalType: "bytes32[]", + name: "priceIds", + type: "bytes32[]", + }, + { + internalType: "uint64", + name: "minPublishTime", + type: "uint64", + }, + { + internalType: "uint64", + name: "maxPublishTime", + type: "uint64", + }, + ], + name: "parsePriceFeedUpdates", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "emaPrice", + type: "tuple", + }, + ], + internalType: "struct PythStructs.PriceFeed[]", + name: "priceFeeds", + type: "tuple[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "updateData", + type: "bytes[]", + }, + { + internalType: "bytes32[]", + name: "priceIds", + type: "bytes32[]", + }, + { + internalType: "uint64", + name: "minPublishTime", + type: "uint64", + }, + { + internalType: "uint64", + name: "maxPublishTime", + type: "uint64", + }, + ], + name: "parsePriceFeedUpdatesUnique", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "price", + type: "tuple", + }, + { + components: [ + { + internalType: "int64", + name: "price", + type: "int64", + }, + { + internalType: "uint64", + name: "conf", + type: "uint64", + }, + { + internalType: "int32", + name: "expo", + type: "int32", + }, + { + internalType: "uint256", + name: "publishTime", + type: "uint256", + }, + ], + internalType: "struct PythStructs.Price", + name: "emaPrice", + type: "tuple", + }, + ], + internalType: "struct PythStructs.PriceFeed[]", + name: "priceFeeds", + type: "tuple[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "updateData", + type: "bytes[]", + }, + ], + name: "updatePriceFeeds", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes[]", + name: "updateData", + type: "bytes[]", + }, + { + internalType: "bytes32[]", + name: "priceIds", + type: "bytes32[]", + }, + { + internalType: "uint64[]", + name: "publishTimes", + type: "uint64[]", + }, + ], + name: "updatePriceFeedsIfNecessary", + outputs: [], + stateMutability: "payable", + type: "function", + }, +] as const; + +export const IPythEventsAbi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "id", + type: "bytes32", + }, + { + indexed: false, + internalType: "uint64", + name: "publishTime", + type: "uint64", + }, + { + indexed: false, + internalType: "int64", + name: "price", + type: "int64", + }, + { + indexed: false, + internalType: "uint64", + name: "conf", + type: "uint64", + }, + ], + name: "PriceFeedUpdate", + type: "event", + }, +] as const; + +export const PythErrorsAbi = [ + { + inputs: [], + name: "InsufficientFee", + type: "error", + }, + { + inputs: [], + name: "InvalidArgument", + type: "error", + }, + { + inputs: [], + name: "InvalidGovernanceDataSource", + type: "error", + }, + { + inputs: [], + name: "InvalidGovernanceMessage", + type: "error", + }, + { + inputs: [], + name: "InvalidGovernanceTarget", + type: "error", + }, + { + inputs: [], + name: "InvalidUpdateData", + type: "error", + }, + { + inputs: [], + name: "InvalidUpdateDataSource", + type: "error", + }, + { + inputs: [], + name: "InvalidWormholeAddressToSet", + type: "error", + }, + { + inputs: [], + name: "InvalidWormholeVaa", + type: "error", + }, + { + inputs: [], + name: "NoFreshUpdate", + type: "error", + }, + { + inputs: [], + name: "OldGovernanceMessage", + type: "error", + }, + { + inputs: [], + name: "PriceFeedNotFound", + type: "error", + }, + { + inputs: [], + name: "PriceFeedNotFoundWithinRange", + type: "error", + }, + { + inputs: [], + name: "StalePrice", + type: "error", + }, +] as const; + +export const PythAbi = [ + ...IPythAbi, + ...IPythEventsAbi, + ...PythErrorsAbi, +] as const; diff --git a/target_chains/ethereum/sdk/js/src/tracer/debug-trace-call.ts b/target_chains/ethereum/sdk/js/src/tracer/debug-trace-call.ts new file mode 100644 index 0000000000..48bdf0de08 --- /dev/null +++ b/target_chains/ethereum/sdk/js/src/tracer/debug-trace-call.ts @@ -0,0 +1,129 @@ +import { + Address, + BlockTag, + CallParameters, + Client, + decodeFunctionData, + ExactPartial, + formatTransactionRequest, + Hex, + isAddressEqual, + RpcTransactionRequest, +} from "viem"; + +import { IPythAbi } from "../pyth-abi"; + +/** + * Extract Pyth price feed IDs from a transaction call trace. + */ +export function extractPythPriceFeedsFromDebugTraceCall( + trace: RpcCallTrace, + pythContractAddress: Address, + ignoreParsingErrors = false, +): Set { + const result = new Set(); + if (isAddressEqual(trace.to, pythContractAddress)) { + // Decode the calldata to see what function is being called + try { + const decoded = decodeFunctionData({ + abi: IPythAbi, + data: trace.input, + }); + + let priceFeedId: Hex | undefined; + switch (decoded.functionName) { + case "getPrice": + case "getPriceNoOlderThan": + case "getPriceUnsafe": + case "getEmaPrice": + case "getEmaPriceNoOlderThan": + case "getEmaPriceUnsafe": { + priceFeedId = decoded.args[0]; + break; + } + default: { + break; + } + } + if (priceFeedId !== undefined) { + result.add(priceFeedId); + } + } catch (error: unknown) { + if (!ignoreParsingErrors) { + const thrownError = new Error( + `Failed to decode calldata: ${trace.input}. Make sure correct Pyth contract address is used.`, + ); + thrownError.cause = error; + throw thrownError; + } + } + } + if (trace.calls === undefined) { + return result; + } + return new Set([ + ...result, + ...trace.calls.flatMap((call) => [ + ...extractPythPriceFeedsFromDebugTraceCall(call, pythContractAddress), + ]), + ]); +} + +export type TraceCallRpcSchema = { + Method: "debug_traceCall"; + Parameters: + | [ExactPartial, Hex | BlockTag] + | [ + ExactPartial, + BlockTag | Hex, + { + tracer: "callTracer" | "prestateTracer"; + tracerConfig?: { onlyTopCall?: boolean; withLog?: boolean }; + }, + ]; + ReturnType: RpcCallTrace; +}; + +export type RpcCallType = + | "CALL" + | "STATICCALL" + | "DELEGATECALL" + | "CREATE" + | "CREATE2" + | "SELFDESTRUCT" + | "CALLCODE"; + +export type RpcLogTrace = { + address: Address; + data: Hex; + position: Hex; + topics: [Hex, ...Hex[]]; +}; + +export type RpcCallTrace = { + from: Address; + gas: Hex; + gasUsed: Hex; + to: Address; + input: Hex; + output: Hex; + error?: string; + revertReason?: string; + calls?: RpcCallTrace[]; + logs?: RpcLogTrace[]; + value?: Hex; + type: RpcCallType; +}; + +export const debugTraceCallAction = (client: Client) => ({ + async debugTraceCall(args: CallParameters) { + return client.request({ + method: "debug_traceCall", + params: [ + formatTransactionRequest(args), + "latest", + { tracer: "callTracer" }, + ], + }); + }, +}); diff --git a/target_chains/ethereum/sdk/js/src/tracer/trace-call-many.ts b/target_chains/ethereum/sdk/js/src/tracer/trace-call-many.ts new file mode 100644 index 0000000000..88e6cf383f --- /dev/null +++ b/target_chains/ethereum/sdk/js/src/tracer/trace-call-many.ts @@ -0,0 +1,118 @@ +import { + Address, + BlockTag, + decodeFunctionData, + RpcTransactionRequest, + ExactPartial, + Hex, + Client, + formatTransactionRequest, + CallParameters, + isAddressEqual, +} from "viem"; + +import { IPythAbi } from "../pyth-abi"; + +/** + * Extract Pyth price feed IDs from a transaction call trace. + */ +export function extractPythPriceFeedsFromTraceCallMany( + traceResults: TraceCallResult[], + pythContractAddress: Address, + ignoreParsingErrors = false, +): Set<`0x${string}`> { + const result = new Set<`0x${string}`>(); + for (const traceResult of traceResults) { + for (const trace of traceResult.trace) { + if (isAddressEqual(trace.action.to, pythContractAddress)) { + // Decode the calldata to see what function is being called + try { + const decoded = decodeFunctionData({ + abi: IPythAbi, + data: trace.action.input, + }); + + let priceFeedId: `0x${string}` | undefined; + switch (decoded.functionName) { + case "getPrice": + case "getPriceNoOlderThan": + case "getPriceUnsafe": + case "getEmaPrice": + case "getEmaPriceNoOlderThan": + case "getEmaPriceUnsafe": { + priceFeedId = decoded.args[0]; + break; + } + default: { + break; + } + } + if (priceFeedId !== undefined) { + result.add(priceFeedId); + } + } catch { + if (!ignoreParsingErrors) { + throw new Error( + `Failed to decode calldata: ${trace.action.input}. Make sure correct Pyth contract address is used.`, + ); + } + } + } + } + } + + return result; +} + +export type TraceCallResult = { + output: Hex; + stateDiff: undefined; + trace: RpcCallTrace[]; + vmTrace: undefined; +}; + +export type TraceCallRpcSchema = { + Method: "trace_callMany"; + Parameters: [ + [ExactPartial, ["trace"]][], + Hex | BlockTag, + ]; + ReturnType: TraceCallResult[]; +}; + +export type RpcCallTrace = { + action: { + from: Address; + callType: + | "call" + | "staticcall" + | "delegatecall" + | "create" + | "create2" + | "selfdestruct" + | "callcode"; + gas: Hex; + input: Hex; + to: Address; + value: Hex; + }; + result: { + gasUsed: Hex; + output: Hex; + }; + subtraces: number; + traceAddress: number[]; + type: "call" | "create"; +}; + +export const traceCallManyAction = (client: Client) => ({ + async traceCallMany(args: CallParameters[]) { + return client.request({ + method: "trace_callMany", + params: [ + args.map((a) => [formatTransactionRequest(a), ["trace"]]), + "latest", + ], + }); + }, +});