From 5a0ca67ae18277526654aa71d71410343358cc41 Mon Sep 17 00:00:00 2001 From: Eric Corson Date: Fri, 13 Sep 2024 12:58:00 +0200 Subject: [PATCH] feat: add basic form for IBC transfers to Namada This is a very rough first draft intended to be used as a starting point for building more IBC features. --- apps/namadillo/src/App/AppRoutes.tsx | 8 + apps/namadillo/src/App/Common/Navigation.tsx | 6 + apps/namadillo/src/App/Ibc/Ibc.tsx | 219 +++++++++++++++++++ apps/namadillo/src/App/Ibc/index.ts | 1 + apps/namadillo/src/App/Ibc/routes.ts | 5 + packages/integrations/package.json | 6 +- yarn.lock | 214 +++++++++--------- 7 files changed, 342 insertions(+), 117 deletions(-) create mode 100644 apps/namadillo/src/App/Ibc/Ibc.tsx create mode 100644 apps/namadillo/src/App/Ibc/index.ts create mode 100644 apps/namadillo/src/App/Ibc/routes.ts diff --git a/apps/namadillo/src/App/AppRoutes.tsx b/apps/namadillo/src/App/AppRoutes.tsx index 6facd7bf2..02b5c490e 100644 --- a/apps/namadillo/src/App/AppRoutes.tsx +++ b/apps/namadillo/src/App/AppRoutes.tsx @@ -1,4 +1,5 @@ import { Router } from "@remix-run/router"; +import { useAtomValue } from "jotai"; import { Route, Routes, @@ -11,11 +12,14 @@ import { AccountOverview } from "./AccountOverview"; import { App } from "./App"; import { RouteErrorBoundary } from "./Common/RouteErrorBoundary"; import { Governance } from "./Governance"; +import { Ibc } from "./Ibc"; import { SettingsPanel } from "./Settings/SettingsPanel"; import { Staking } from "./Staking"; import { SwitchAccountPanel } from "./SwitchAccount/SwitchAccountPanel"; +import { applicationFeaturesAtom } from "atoms/settings"; import GovernanceRoutes from "./Governance/routes"; +import IbcRoutes from "./Ibc/routes"; import SettingsRoutes from "./Settings/routes"; import { SignMessages } from "./SignMessages/SignMessages"; import MessageRoutes from "./SignMessages/routes"; @@ -25,6 +29,7 @@ import SwitchAccountRoutes from "./SwitchAccount/routes"; export const MainRoutes = (): JSX.Element => { const location = useLocation(); const state = location.state as { backgroundLocation?: Location }; + const features = useAtomValue(applicationFeaturesAtom); // Avoid animation being fired twice when navigating inside settings modal routes const settingsAnimationKey = @@ -42,6 +47,9 @@ export const MainRoutes = (): JSX.Element => { path={`${GovernanceRoutes.index()}/*`} element={} /> + {features.ibcTransfersEnabled && ( + } /> + )} diff --git a/apps/namadillo/src/App/Common/Navigation.tsx b/apps/namadillo/src/App/Common/Navigation.tsx index 3f9393eca..c8295de0d 100644 --- a/apps/namadillo/src/App/Common/Navigation.tsx +++ b/apps/namadillo/src/App/Common/Navigation.tsx @@ -1,6 +1,7 @@ import { SidebarMenuItem } from "App/Common/SidebarMenuItem"; import GovernanceRoutes from "App/Governance/routes"; import { MASPIcon } from "App/Icons/MASPIcon"; +import { useAtomValue } from "jotai"; import { AiFillHome } from "react-icons/ai"; import { BsDiscord, BsTwitterX } from "react-icons/bs"; import { FaVoteYea } from "react-icons/fa"; @@ -9,9 +10,13 @@ import { IoSwapHorizontal } from "react-icons/io5"; import { TbVectorTriangle } from "react-icons/tb"; import { DISCORD_URL, TWITTER_URL } from "urls"; +import IbcRoutes from "App/Ibc/routes"; import StakingRoutes from "App/Staking/routes"; +import { applicationFeaturesAtom } from "atoms/settings"; export const Navigation = (): JSX.Element => { + const features = useAtomValue(applicationFeaturesAtom); + const menuItems: { label: string; icon: React.ReactNode; url?: string }[] = [ { label: "Overview", @@ -39,6 +44,7 @@ export const Navigation = (): JSX.Element => { { label: "IBC Transfer", icon: , + url: features.ibcTransfersEnabled ? IbcRoutes.index() : undefined, }, { label: "Transfer", diff --git a/apps/namadillo/src/App/Ibc/Ibc.tsx b/apps/namadillo/src/App/Ibc/Ibc.tsx new file mode 100644 index 000000000..137d10ecc --- /dev/null +++ b/apps/namadillo/src/App/Ibc/Ibc.tsx @@ -0,0 +1,219 @@ +import { Coin } from "@cosmjs/launchpad"; +import { coin, coins } from "@cosmjs/proto-signing"; +import { + QueryClient, + SigningStargateClient, + StargateClient, + setupIbcExtension, +} from "@cosmjs/stargate"; +import { Tendermint34Client } from "@cosmjs/tendermint-rpc"; +import { Window as KeplrWindow } from "@keplr-wallet/types"; +import { Panel } from "@namada/components"; +import { DerivedAccount, WindowWithNamada } from "@namada/types"; +import { useState } from "react"; + +const keplr = (window as KeplrWindow).keplr!; +const namada = (window as WindowWithNamada).namada!; + +const chain = "theta-testnet-001"; +const rpc = "https://rpc-t.cosmos.nodestake.top"; + +const buttonStyles = "bg-white my-2 p-2 block"; + +export const Ibc: React.FC = () => { + const [error, setError] = useState(""); + const [address, setAddress] = useState(""); + const [alias, setAlias] = useState(""); + const [balances, setBalances] = useState(); + const [namadaAccounts, setNamadaAccounts] = useState(); + const [token, setToken] = useState(""); + const [target, setTarget] = useState(""); + const [amount, setAmount] = useState(""); + const [channelId, setChannelId] = useState(""); + + const withErrorReporting = + (fn: () => Promise): (() => Promise) => + () => + fn() + .then(() => setError("")) + .catch((e) => + setError(e instanceof Error ? e.message : "unknown error") + ); + + const getAddress = withErrorReporting(async () => { + const key = await keplr.getKey(chain); + setAddress(key.bech32Address); + setAlias(key.name); + }); + + const getBalances = withErrorReporting(async () => { + setBalances(undefined); + const balances = await queryBalances(address); + setBalances(balances); + }); + + const getNamadaAccounts = withErrorReporting(async () => { + const accounts = await namada.accounts(); + setNamadaAccounts(accounts); + }); + + const submitIbcTransfer = withErrorReporting(async () => + submitBridgeTransfer(rpc, chain, address, target, token, amount, channelId) + ); + + return ( + + {/* Error */} +

{error}

+ +
+ + {/* Keplr addresses */} +

Keplr addresses

+ +

+ {alias} {address} +

+ +
+ + {/* Balances */} +

Balances

+ + {balances?.map(({ denom, amount }) => ( +
+ +
+ ))} + +
+ + {/* Namada accounts */} +

Namada accounts

+ + + {namadaAccounts?.map(({ alias, address }) => ( +
+ +
+ ))} + +
+ + {/* Amount to send */} +

Amount to send

+ setAmount(e.target.value)} /> + +
+ + {/* Channel ID */} +

Channel ID

+ setChannelId(e.target.value)} /> + +
+ + {/* Submit IBC transfer */} +

Submit IBC transfer

+ +
+ ); +}; + +const queryBalances = async (owner: string): Promise => { + const client = await StargateClient.connect(rpc); + const balances = (await client.getAllBalances(owner)) || []; + + await Promise.all( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + balances.map(async (coin: any) => { + // any becuse of annoying readonly + if (coin.denom.startsWith("ibc/")) { + coin.denom = await ibcAddressToDenom(coin.denom); + } + }) + ); + + return [...balances]; +}; + +const ibcAddressToDenom = async (address: string): Promise => { + const tmClient = await Tendermint34Client.connect(rpc); + const queryClient = new QueryClient(tmClient); + const ibcExtension = setupIbcExtension(queryClient); + + const ibcHash = address.replace("ibc/", ""); + const { denomTrace } = await ibcExtension.ibc.transfer.denomTrace(ibcHash); + const baseDenom = denomTrace?.baseDenom; + + if (typeof baseDenom === "undefined") { + throw new Error("couldn't get denom from ibc address"); + } + + return baseDenom; +}; + +const submitBridgeTransfer = async ( + rpc: string, + sourceChainId: string, + source: string, + target: string, + token: string, + amount: string, + channelId: string +): Promise => { + const client = await SigningStargateClient.connectWithSigner( + rpc, + keplr.getOfflineSigner(sourceChainId), + { + broadcastPollIntervalMs: 300, + broadcastTimeoutMs: 8_000, + } + ); + + const fee = { + amount: coins("0", token), + gas: "222000", + }; + + const response = await client.sendIbcTokens( + source, + target, + coin(amount, token), + "transfer", + channelId, + undefined, // timeout height + Math.floor(Date.now() / 1000) + 60, // timeout timestamp + fee, + `${sourceChainId}->Namada` + ); + + if (response.code !== 0) { + throw new Error(response.code + " " + response.rawLog); + } +}; diff --git a/apps/namadillo/src/App/Ibc/index.ts b/apps/namadillo/src/App/Ibc/index.ts new file mode 100644 index 000000000..863deea33 --- /dev/null +++ b/apps/namadillo/src/App/Ibc/index.ts @@ -0,0 +1 @@ +export { Ibc } from "./Ibc"; diff --git a/apps/namadillo/src/App/Ibc/routes.ts b/apps/namadillo/src/App/Ibc/routes.ts new file mode 100644 index 000000000..369def705 --- /dev/null +++ b/apps/namadillo/src/App/Ibc/routes.ts @@ -0,0 +1,5 @@ +export const index = (): string => `/ibc`; + +export default { + index, +}; diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 5ae2b00ce..790a69ec8 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -41,9 +41,9 @@ }, "dependencies": { "@cosmjs/launchpad": "^0.27.1", - "@cosmjs/proto-signing": "^0.27.1", - "@cosmjs/stargate": "^0.29.5", - "@cosmjs/tendermint-rpc": "~0.29.5", + "@cosmjs/proto-signing": "^0.32.4", + "@cosmjs/stargate": "^0.32.4", + "@cosmjs/tendermint-rpc": "^0.32.4", "@keplr-wallet/types": "^0.10.19", "@metamask/providers": "^10.2.1" }, diff --git a/yarn.lock b/yarn.lock index 54da07600..80fe33322 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1610,15 +1610,15 @@ __metadata: languageName: node linkType: hard -"@cosmjs/amino@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/amino@npm:0.29.5" +"@cosmjs/amino@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/amino@npm:0.32.4" dependencies: - "@cosmjs/crypto": "npm:^0.29.5" - "@cosmjs/encoding": "npm:^0.29.5" - "@cosmjs/math": "npm:^0.29.5" - "@cosmjs/utils": "npm:^0.29.5" - checksum: bf8ec4d2412997aea89997fa07474c8590b02ac9337b3e87e68e8c9295d1001cf3f41a660a72208dc4e005d5a25620483c8eac21f7fa1b0a6adc6b6eeaee2a4a + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + checksum: cd8e215b0406f5c7b73ab0a21106d06b6f76b1da12f1ab7b612884e1dd8bc626966dc67d4e7580090ade131546cbec70000f854e6596935299d054b788929a7e languageName: node linkType: hard @@ -1660,18 +1660,18 @@ __metadata: languageName: node linkType: hard -"@cosmjs/crypto@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/crypto@npm:0.29.5" +"@cosmjs/crypto@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/crypto@npm:0.32.4" dependencies: - "@cosmjs/encoding": "npm:^0.29.5" - "@cosmjs/math": "npm:^0.29.5" - "@cosmjs/utils": "npm:^0.29.5" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" "@noble/hashes": "npm:^1" bn.js: "npm:^5.2.0" elliptic: "npm:^6.5.4" - libsodium-wrappers: "npm:^0.7.6" - checksum: 5f4706cd4b80853e0e3891252e9eab414334ca4a50afd7d6efeca5525dbb612c0cb1828b04119419ea4ac6bad74f6c4771b7ab6a7b840cc91971a49eb7f6f2dc + libsodium-wrappers-sumo: "npm:^0.7.11" + checksum: 94e742285eb8c7c5393055ba0635f10c06bf87710e953aedc71e3edc2b8e21a12a0d9b5e8eff37e326765f57c9eb3c7fd358f24f639efad4f1a6624eb8189534 languageName: node linkType: hard @@ -1708,7 +1708,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/encoding@npm:^0.29.0, @cosmjs/encoding@npm:^0.29.5": +"@cosmjs/encoding@npm:^0.29.0": version: 0.29.5 resolution: "@cosmjs/encoding@npm:0.29.5" dependencies: @@ -1719,7 +1719,7 @@ __metadata: languageName: node linkType: hard -"@cosmjs/encoding@npm:^0.32.3": +"@cosmjs/encoding@npm:^0.32.3, @cosmjs/encoding@npm:^0.32.4": version: 0.32.4 resolution: "@cosmjs/encoding@npm:0.32.4" dependencies: @@ -1740,13 +1740,13 @@ __metadata: languageName: node linkType: hard -"@cosmjs/json-rpc@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/json-rpc@npm:0.29.5" +"@cosmjs/json-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/json-rpc@npm:0.32.4" dependencies: - "@cosmjs/stream": "npm:^0.29.5" + "@cosmjs/stream": "npm:^0.32.4" xstream: "npm:^11.14.0" - checksum: 3616604eacd7987597e9bb656668b45498919f9a4acdf455ffda263d3736e1af30582dcf8ba094ae623bc7d484f4dab07ffd97d9cc479f1205e26b36a1aeab1b + checksum: b3ebd240f4fb21260e284d2e503ecc61bac898842187ab717f0efb9a5f21272f161f267cc145629caeb9735f80946844384e2bd410275a4744147a44518c0fa0 languageName: node linkType: hard @@ -1806,12 +1806,12 @@ __metadata: languageName: node linkType: hard -"@cosmjs/math@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/math@npm:0.29.5" +"@cosmjs/math@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/math@npm:0.32.4" dependencies: bn.js: "npm:^5.2.0" - checksum: e44aedcaf2d72085585612909685c453b6c27397b4506bdfa3556163f33050df5448f6ca076256ed8229ddb12bdd74072b38334d136524180d23d89781deeea7 + checksum: 91e47015be5634d27d71d14c5a05899fb4992b69db02cab1558376dedf8254f96d5e24f097c5601804ae18ed33c7c25d023653ac2bf9d20250fd3e5637f6b101 languageName: node linkType: hard @@ -1826,64 +1826,47 @@ __metadata: languageName: node linkType: hard -"@cosmjs/proto-signing@npm:^0.27.1": - version: 0.27.1 - resolution: "@cosmjs/proto-signing@npm:0.27.1" +"@cosmjs/proto-signing@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/proto-signing@npm:0.32.4" dependencies: - "@cosmjs/amino": "npm:0.27.1" - "@cosmjs/crypto": "npm:0.27.1" - "@cosmjs/math": "npm:0.27.1" - cosmjs-types: "npm:^0.4.0" - long: "npm:^4.0.0" - protobufjs: "npm:~6.10.2" - checksum: 9acd1c66d9af962aaf43bcdcc1974c471b7ac49cb29e428a2af9ed02bd2be965d7ac827ad4bec5f71ed04861827ff4a4ad20608441e88364efd217559757d4ea + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + checksum: 6915059d2e6dbe1abda4a747c3b1abd47a9eff4f8cb2cf9a5545f939b656b4a15bbde2bfc1364357f9b2a081a066280c3b469f6d13dd5fc51b429b0f90a54913 languageName: node linkType: hard -"@cosmjs/proto-signing@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/proto-signing@npm:0.29.5" - dependencies: - "@cosmjs/amino": "npm:^0.29.5" - "@cosmjs/crypto": "npm:^0.29.5" - "@cosmjs/encoding": "npm:^0.29.5" - "@cosmjs/math": "npm:^0.29.5" - "@cosmjs/utils": "npm:^0.29.5" - cosmjs-types: "npm:^0.5.2" - long: "npm:^4.0.0" - checksum: d2bcb001511c67f65cee6dbf760f1abcefce0eadcb44f7c663156469cbf2ec0bff80b665b971327b40d4f8ca72b84193f00b17889badf1d8d8407fd05a359fe3 - languageName: node - linkType: hard - -"@cosmjs/socket@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/socket@npm:0.29.5" +"@cosmjs/socket@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/socket@npm:0.32.4" dependencies: - "@cosmjs/stream": "npm:^0.29.5" + "@cosmjs/stream": "npm:^0.32.4" isomorphic-ws: "npm:^4.0.1" ws: "npm:^7" xstream: "npm:^11.14.0" - checksum: ffd7afe5a12fc77603ae3d89380f81330ea565de9de41485c266e61fce224c4666a19f6c47d91de6b6f276389bb5e51bd89bb7002bd43a1d02ae6eb776df9b8f + checksum: 2d94c1fb39016bea3c7c145f4565c8a0fed20c805ac569ea604cd3646c15147b82b8db18a4e3c832d6ae0c3dd14363d4db3d91bcacac922679efba164ed49386 languageName: node linkType: hard -"@cosmjs/stargate@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/stargate@npm:0.29.5" +"@cosmjs/stargate@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stargate@npm:0.32.4" dependencies: "@confio/ics23": "npm:^0.6.8" - "@cosmjs/amino": "npm:^0.29.5" - "@cosmjs/encoding": "npm:^0.29.5" - "@cosmjs/math": "npm:^0.29.5" - "@cosmjs/proto-signing": "npm:^0.29.5" - "@cosmjs/stream": "npm:^0.29.5" - "@cosmjs/tendermint-rpc": "npm:^0.29.5" - "@cosmjs/utils": "npm:^0.29.5" - cosmjs-types: "npm:^0.5.2" - long: "npm:^4.0.0" - protobufjs: "npm:~6.11.3" + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" xstream: "npm:^11.14.0" - checksum: 63304ad0eeac72b837eed535934fdb500f077c7213a13f05524316d1dc7b3239e8e7ec4ebae4b332dd00efe3f807fbbc7624a5b21e0ea8fc47c63612a54afe05 + checksum: c30a3519516aaa7eae58ba827c80fcf74c7fe7a9d3aa5cc8138c3a2768f5f241f59c2f5cec27e9037b4df12b1c6605b4fac9eadb4de97bd84edddc3a80a02e24 languageName: node linkType: hard @@ -1896,30 +1879,30 @@ __metadata: languageName: node linkType: hard -"@cosmjs/stream@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/stream@npm:0.29.5" +"@cosmjs/stream@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stream@npm:0.32.4" dependencies: xstream: "npm:^11.14.0" - checksum: c69613738c01282d43e855af6350a3cb1e254cc472f1a63a817a8f32a86bd4797b5280c120528787dfb6f38738a037a5fafa9c83821c2aef54e79684e134d6ca + checksum: c677c53f9101c2a36fa03a475d92dea2fa69c475f896751b5e18a5d07087eeecbf6bca2e62a8940003da53fa235a9b2dd78c8257bf19c3f96e3f69fa8d5f183d languageName: node linkType: hard -"@cosmjs/tendermint-rpc@npm:^0.29.5, @cosmjs/tendermint-rpc@npm:~0.29.5": - version: 0.29.5 - resolution: "@cosmjs/tendermint-rpc@npm:0.29.5" - dependencies: - "@cosmjs/crypto": "npm:^0.29.5" - "@cosmjs/encoding": "npm:^0.29.5" - "@cosmjs/json-rpc": "npm:^0.29.5" - "@cosmjs/math": "npm:^0.29.5" - "@cosmjs/socket": "npm:^0.29.5" - "@cosmjs/stream": "npm:^0.29.5" - "@cosmjs/utils": "npm:^0.29.5" - axios: "npm:^0.21.2" +"@cosmjs/tendermint-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/tendermint-rpc@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/json-rpc": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/socket": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + axios: "npm:^1.6.0" readonly-date: "npm:^1.0.0" xstream: "npm:^11.14.0" - checksum: b2e958e01eb4aafa106a3098c8cae93fcbc04d999c2fb2646132d4d93c7b3668c03f6bb7b0c35946b96a01ab18214c9039f2b078cb16b604fa52444a3f1851c0 + checksum: 5fae7afcdf98cc7dd36922aa1586254cc8c202cf8fe66804e61d793d31dcff816f40d33f7a0eb72c1b9226c7c361d4848e4ff12d0489f6fa66f47f0c86ae18dd languageName: node linkType: hard @@ -1944,10 +1927,10 @@ __metadata: languageName: node linkType: hard -"@cosmjs/utils@npm:^0.29.5": - version: 0.29.5 - resolution: "@cosmjs/utils@npm:0.29.5" - checksum: cfb2dbc499bc305cf0b7d3f0afc936b52e0e7492dce33e3bef7986b0e3aa8c34316c60072b7664799d182ce5f5016eaead3d5f948d871c5b1afe30604ef2542d +"@cosmjs/utils@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/utils@npm:0.32.4" + checksum: d5ff8b235094be1150853a715116049f73eb5cdfeea8ce8e22ecccc61ec99792db457404d4307782b1a2f935dcf438f5c485beabfcfbc1dc5df26eb6e6da9062 languageName: node linkType: hard @@ -3605,9 +3588,9 @@ __metadata: resolution: "@namada/integrations@workspace:packages/integrations" dependencies: "@cosmjs/launchpad": "npm:^0.27.1" - "@cosmjs/proto-signing": "npm:^0.27.1" - "@cosmjs/stargate": "npm:^0.29.5" - "@cosmjs/tendermint-rpc": "npm:~0.29.5" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stargate": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" "@keplr-wallet/types": "npm:^0.10.19" "@metamask/providers": "npm:^10.2.1" "@types/jest": "npm:^29.5.12" @@ -6750,7 +6733,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.6.1": +"axios@npm:^1.6.0, axios@npm:^1.6.1": version: 1.7.7 resolution: "axios@npm:1.7.7" dependencies: @@ -8539,23 +8522,10 @@ __metadata: languageName: node linkType: hard -"cosmjs-types@npm:^0.4.0": - version: 0.4.1 - resolution: "cosmjs-types@npm:0.4.1" - dependencies: - long: "npm:^4.0.0" - protobufjs: "npm:~6.11.2" - checksum: eb4cb612505415850691e05cb537e11b438f907d5cee78ce1effd101441fa854b85a250d9623d64a6c87fd1a47623cdd92dcb62ceea066b42f53ddc3c054bf99 - languageName: node - linkType: hard - -"cosmjs-types@npm:^0.5.2": - version: 0.5.2 - resolution: "cosmjs-types@npm:0.5.2" - dependencies: - long: "npm:^4.0.0" - protobufjs: "npm:~6.11.2" - checksum: 88bc5fd23339abeaf08a7d63cb34eb96e04a36776c7dba585ae03ceb364b436526dadafc709ba0494cb7d53d9a8b9cd4233c4d6b45cce323042366d4f8781812 +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b languageName: node linkType: hard @@ -14712,6 +14682,22 @@ __metadata: languageName: node linkType: hard +"libsodium-sumo@npm:^0.7.15": + version: 0.7.15 + resolution: "libsodium-sumo@npm:0.7.15" + checksum: 5a1437ccff03c72669e7b49da702034e171df9ff6a4e65698297ab63ad0bf8f889d3dd51494e29418c643143526d8d7f08cbba3929d220334cddbe3e74a1560e + languageName: node + linkType: hard + +"libsodium-wrappers-sumo@npm:^0.7.11": + version: 0.7.15 + resolution: "libsodium-wrappers-sumo@npm:0.7.15" + dependencies: + libsodium-sumo: "npm:^0.7.15" + checksum: 6da919a13395346d54f2ce4841adda8feb3fbb8a8c378ec5c93b7e6dc6353b379289349e659f3e017a9f1995ef396bf43f89c7ab4aab4e3b5ed85df62407d810 + languageName: node + linkType: hard + "libsodium-wrappers@npm:^0.7.6": version: 0.7.15 resolution: "libsodium-wrappers@npm:0.7.15" @@ -17679,7 +17665,7 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^6.8.8, protobufjs@npm:~6.11.2, protobufjs@npm:~6.11.3": +"protobufjs@npm:^6.8.8": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" dependencies: