diff --git a/app/src/app/marketplace/configuration/collection/content.tsx b/app/src/app/marketplace/configuration/collection/content.tsx index d19247f..7721daf 100644 --- a/app/src/app/marketplace/configuration/collection/content.tsx +++ b/app/src/app/marketplace/configuration/collection/content.tsx @@ -4,10 +4,12 @@ import { ConfigurationContractClient } from "@/chain/client"; import { useSearchParams } from "next/navigation"; import { NftProvider } from "@/chain/client"; import { ConfigurationCards } from "@/components/ConfigurationCards/ConfigurationCards"; +import { MintConfigurationDialog } from "@/components/MintConfigurationDialog"; export function Content() { const searchParams = useSearchParams(); const contractId = searchParams.get("id"); + if (!contractId) return; return ( @@ -21,6 +23,9 @@ export function Content() { }} contractId={contractId} > +
+ +
); diff --git a/app/src/chain/client/cosmos/components/NftProvider/NftProvider.tsx b/app/src/chain/client/cosmos/components/NftProvider/NftProvider.tsx index b72c55f..4e47820 100644 --- a/app/src/chain/client/cosmos/components/NftProvider/NftProvider.tsx +++ b/app/src/chain/client/cosmos/components/NftProvider/NftProvider.tsx @@ -5,14 +5,20 @@ import React, { useState, useCallback, } from "react"; -import { CosmWasmClient } from "@cosmjs/cosmwasm-stargate"; +import { + CosmWasmClient, + SigningCosmWasmClient, +} from "@cosmjs/cosmwasm-stargate"; import { useToast } from "@/hooks/use-toast"; import { Nft } from "@/lib/types"; import { NftContextType, NftProviderProps, useNetwork, + useWallet, } from "@/chain/client/cosmos"; +import { useChain } from "@cosmos-kit/react"; +import { GasPrice } from "@cosmjs/stargate"; const NftContext = createContext | undefined>( undefined, @@ -25,22 +31,35 @@ export function NftProvider({ children, }: NftProviderProps) { const [client, setClient] = useState(null); + const [signingClient, setSigningClient] = + useState(null); const { toast } = useToast(); const { networkMeta } = useNetwork(); + const { getOfflineSigner, address, isWalletConnected } = useChain( + networkMeta.chain_name, + ); + const { balance } = useWallet(); + const rpcEndpoint = networkMeta.apis.rpc[0].address; + + CosmWasmClient.connect(rpcEndpoint) + .then(setClient) + .catch(() => { + toast({ + title: "Error", + description: "Failed to connect to RPC", + variant: "destructive", + }); + }); useEffect(() => { - const rpcEndpoint = networkMeta.apis.rpc[0].address; + if (isWalletConnected) { + const gasPrice = GasPrice.fromString("0ovk"); - CosmWasmClient.connect(rpcEndpoint) - .then(setClient) - .catch(() => { - toast({ - title: "Error", - description: "Failed to connect to RPC", - variant: "destructive", - }); - }); - }, [toast, networkMeta]); + SigningCosmWasmClient.connectWithSigner(rpcEndpoint, getOfflineSigner(), { + gasPrice, + }).then(setSigningClient); + } + }, [isWalletConnected]); const getCollectionNft = useCallback( async ( @@ -87,11 +106,62 @@ export function NftProvider({ return { nft: [] }; } }, - [client, toast], + [client], + ); + + const mintNft = useCallback( + async ({ + contractAddress, + tokenId, + tokenUri = "", + }: { + contractAddress: string; + tokenId: string; + tokenUri?: string; + }) => { + if (!signingClient || !address) { + toast({ + title: "Error", + description: "Failed to mint NFT", + variant: "destructive", + }); + return; + } + + if (balance && Number(balance.amount) > 0) { + try { + const msg = { + mint: { + token_id: tokenId, + owner: address, + token_uri: tokenUri, + }, + }; + await signingClient.execute(address, contractAddress, msg, "auto"); + toast({ + title: "Success", + description: `NFT minted successfully!`, + }); + } catch { + toast({ + title: "Error", + description: "Failed to mint NFT", + variant: "destructive", + }); + } + } else { + toast({ + title: "Error", + description: "You don't have enough tokens", + variant: "destructive", + }); + } + }, + [signingClient, address, balance], ); return ( - + {children} ); diff --git a/app/src/chain/client/cosmos/lib/types.ts b/app/src/chain/client/cosmos/lib/types.ts index 57321ae..08ac079 100644 --- a/app/src/chain/client/cosmos/lib/types.ts +++ b/app/src/chain/client/cosmos/lib/types.ts @@ -106,6 +106,11 @@ export interface NftContextType { nft: Nft[]; nextStartAfter?: string; }>; + mintNft: (params: { + contractAddress: string; + tokenId: string; + tokenUri?: string; + }) => Promise; } export interface ContractsProviderProps { diff --git a/app/src/chain/client/solana/components/NftProvider/NftProvider.tsx b/app/src/chain/client/solana/components/NftProvider/NftProvider.tsx index 75f7382..d7f3a06 100644 --- a/app/src/chain/client/solana/components/NftProvider/NftProvider.tsx +++ b/app/src/chain/client/solana/components/NftProvider/NftProvider.tsx @@ -16,8 +16,10 @@ export function NftProvider({ children }: NftProviderProps) { return { nft: [] }; }, []); + const mintNft = async () => {}; + return ( - + {children} ); diff --git a/app/src/chain/client/solana/index.ts b/app/src/chain/client/solana/index.ts index 703214a..05e8df9 100644 --- a/app/src/chain/client/solana/index.ts +++ b/app/src/chain/client/solana/index.ts @@ -4,3 +4,32 @@ export * from "./hooks"; export { WalletProviderWrapper } from "./components/WalletProviderWrapper"; export { useWallet } from "./components/WalletProvider"; export { useNft, NftProvider } from "./components/NftProvider"; +export class GasContractClient { + nftInfo = async ({}: { + tokenId: string; + }): Promise<{ token_uri?: string | null | undefined }> => { + return { token_uri: undefined }; + }; + + allTokens = async ({}: { + limit?: number; + startAfter?: string; + }): Promise<{ tokens: string[] }> => { + return { tokens: [] }; + }; +} + +export class ConfigurationContractClient { + nftInfo = async ({}: { + tokenId: string; + }): Promise<{ token_uri?: string | null | undefined }> => { + return { token_uri: undefined }; + }; + + allTokens = async ({}: { + limit?: number; + startAfter?: string; + }): Promise<{ tokens: string[] }> => { + return { tokens: [] }; + }; +} diff --git a/app/src/components/MintConfigurationDialog/MintConfigurationDialog.tsx b/app/src/components/MintConfigurationDialog/MintConfigurationDialog.tsx new file mode 100644 index 0000000..b4ca60e --- /dev/null +++ b/app/src/components/MintConfigurationDialog/MintConfigurationDialog.tsx @@ -0,0 +1,129 @@ +"use client"; + +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { CirclePlus } from "lucide-react"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useNft, useWallet, useWalletModal } from "@/chain/client"; + +const MintConfigurationSchema = z.object({ + name: z.string().min(2), + crossplaneVersion: z.string().min(2), + configurationImage: z.string().min(2), +}); + +type MintForm = z.infer; + +export function MintConfigurationDialog({ + contractId, +}: { + contractId: string; +}) { + const form = useForm({ + resolver: zodResolver(MintConfigurationSchema), + defaultValues: { name: "", crossplaneVersion: "", configurationImage: "" }, + }); + const { connected } = useWallet(); + const { setVisible } = useWalletModal(); + const { mintNft } = useNft(); + + const onSubmit = async () => { + const tokenId = crypto.randomUUID(); + + await mintNft({ contractAddress: contractId, tokenId }); + form.reset(); + }; + + return ( + <> + {connected ? ( + + + + + + + Mint configuration + +
+ + ( + + Name + + + + + + )} + /> + ( + + Crossplane Version + + + + + + )} + /> + ( + + Configuration Image + + + + + + )} + /> + + + +
+
+ ) : ( + + )} + + ); +} diff --git a/app/src/components/MintConfigurationDialog/index.ts b/app/src/components/MintConfigurationDialog/index.ts new file mode 100644 index 0000000..ee0ceb4 --- /dev/null +++ b/app/src/components/MintConfigurationDialog/index.ts @@ -0,0 +1 @@ +export { MintConfigurationDialog } from "./MintConfigurationDialog"; diff --git a/app/src/lib/types.ts b/app/src/lib/types.ts index 2ba64e4..31f5179 100644 --- a/app/src/lib/types.ts +++ b/app/src/lib/types.ts @@ -94,3 +94,11 @@ export interface Nft { tokenId: string; metadata: T; } + +export interface WalletContextType { + disconnect: () => Promise; + connected: boolean; + address: string | null; + balance: Coin | null; + fetchBalance: () => Promise; +} diff --git a/package-lock.json b/package-lock.json index 5098004..d49eb90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ ], "dependencies": { "@coral-xyz/anchor": "^0.31.1", + "@cosmjs/amino": "0.32.4", + "@cosmjs/proto-signing": "0.32.4", + "@cosmjs/stargate": "0.32.4", "@cosmos-kit/core": "^2.16.0", "@cosmos-kit/keplr": "^2.15.0", "@cosmos-kit/react": "^2.22.0", @@ -811,36 +814,6 @@ } }, "node_modules/@cosmjs/amino": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.3.tgz", - "integrity": "sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/utils": "^0.32.3" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.4.tgz", - "integrity": "sha512-Fuo9BGEiB+POJ5WeRyBGuhyKR1ordvxZGLPuPosFJOH9U0gKMgcjwKMCgAlWFkMlHaTB+tNdA8AifWiHrI7VgA==", - "license": "Apache-2.0", - "dependencies": { - "@cosmjs/amino": "^0.32.4", - "@cosmjs/crypto": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", - "@cosmjs/proto-signing": "^0.32.4", - "@cosmjs/stargate": "^0.32.4", - "@cosmjs/tendermint-rpc": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "cosmjs-types": "^0.9.0", - "pako": "^2.0.2" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/amino": { "version": "0.32.4", "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.4.tgz", "integrity": "sha512-zKYOt6hPy8obIFtLie/xtygCkH9ZROiQ12UHfKsOkWaZfPQUvVbtgmu6R4Kn1tFLI/SRkw7eqhaogmW/3NYu/Q==", @@ -852,56 +825,22 @@ "@cosmjs/utils": "^0.32.4" } }, - "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/encoding": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.4.tgz", - "integrity": "sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/math": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", - "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/proto-signing": { + "node_modules/@cosmjs/cosmwasm-stargate": { "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz", - "integrity": "sha512-QdyQDbezvdRI4xxSlyM1rSVBO2st5sqtbEIl3IX03uJ7YiZIQHyv6vaHVf1V4mapusCqguiHJzm4N4gsFdLBbQ==", + "resolved": "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.4.tgz", + "integrity": "sha512-Fuo9BGEiB+POJ5WeRyBGuhyKR1ordvxZGLPuPosFJOH9U0gKMgcjwKMCgAlWFkMlHaTB+tNdA8AifWiHrI7VgA==", "license": "Apache-2.0", "dependencies": { "@cosmjs/amino": "^0.32.4", "@cosmjs/crypto": "^0.32.4", "@cosmjs/encoding": "^0.32.4", "@cosmjs/math": "^0.32.4", - "@cosmjs/utils": "^0.32.4", - "cosmjs-types": "^0.9.0" - } - }, - "node_modules/@cosmjs/cosmwasm-stargate/node_modules/@cosmjs/stargate": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.4.tgz", - "integrity": "sha512-usj08LxBSsPRq9sbpCeVdyLx2guEcOHfJS9mHGCLCXpdAPEIEQEtWLDpEUc0LEhWOx6+k/ChXTc5NpFkdrtGUQ==", - "license": "Apache-2.0", - "dependencies": { - "@confio/ics23": "^0.6.8", - "@cosmjs/amino": "^0.32.4", - "@cosmjs/encoding": "^0.32.4", - "@cosmjs/math": "^0.32.4", "@cosmjs/proto-signing": "^0.32.4", - "@cosmjs/stream": "^0.32.4", + "@cosmjs/stargate": "^0.32.4", "@cosmjs/tendermint-rpc": "^0.32.4", "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0", - "xstream": "^11.14.0" + "pako": "^2.0.2" } }, "node_modules/@cosmjs/crypto": { @@ -919,7 +858,7 @@ "libsodium-wrappers-sumo": "^0.7.11" } }, - "node_modules/@cosmjs/crypto/node_modules/@cosmjs/encoding": { + "node_modules/@cosmjs/encoding": { "version": "0.32.4", "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.4.tgz", "integrity": "sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==", @@ -930,26 +869,6 @@ "readonly-date": "^1.0.0" } }, - "node_modules/@cosmjs/crypto/node_modules/@cosmjs/math": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", - "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0" - } - }, - "node_modules/@cosmjs/encoding": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.3.tgz", - "integrity": "sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, "node_modules/@cosmjs/json-rpc": { "version": "0.32.4", "resolved": "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.4.tgz", @@ -961,25 +880,25 @@ } }, "node_modules/@cosmjs/math": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.3.tgz", - "integrity": "sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", + "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", "license": "Apache-2.0", "dependencies": { "bn.js": "^5.2.0" } }, "node_modules/@cosmjs/proto-signing": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz", - "integrity": "sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz", + "integrity": "sha512-QdyQDbezvdRI4xxSlyM1rSVBO2st5sqtbEIl3IX03uJ7YiZIQHyv6vaHVf1V4mapusCqguiHJzm4N4gsFdLBbQ==", "license": "Apache-2.0", "dependencies": { - "@cosmjs/amino": "^0.32.3", - "@cosmjs/crypto": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "@cosmjs/amino": "^0.32.4", + "@cosmjs/crypto": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0" } }, @@ -1026,19 +945,19 @@ } }, "node_modules/@cosmjs/stargate": { - "version": "0.32.3", - "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.3.tgz", - "integrity": "sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.4.tgz", + "integrity": "sha512-usj08LxBSsPRq9sbpCeVdyLx2guEcOHfJS9mHGCLCXpdAPEIEQEtWLDpEUc0LEhWOx6+k/ChXTc5NpFkdrtGUQ==", "license": "Apache-2.0", "dependencies": { "@confio/ics23": "^0.6.8", - "@cosmjs/amino": "^0.32.3", - "@cosmjs/encoding": "^0.32.3", - "@cosmjs/math": "^0.32.3", - "@cosmjs/proto-signing": "^0.32.3", - "@cosmjs/stream": "^0.32.3", - "@cosmjs/tendermint-rpc": "^0.32.3", - "@cosmjs/utils": "^0.32.3", + "@cosmjs/amino": "^0.32.4", + "@cosmjs/encoding": "^0.32.4", + "@cosmjs/math": "^0.32.4", + "@cosmjs/proto-signing": "^0.32.4", + "@cosmjs/stream": "^0.32.4", + "@cosmjs/tendermint-rpc": "^0.32.4", + "@cosmjs/utils": "^0.32.4", "cosmjs-types": "^0.9.0", "xstream": "^11.14.0" } @@ -1070,26 +989,6 @@ "xstream": "^11.14.0" } }, - "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/encoding": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.4.tgz", - "integrity": "sha512-tjvaEy6ZGxJchiizzTn7HVRiyTg1i4CObRRaTRPknm5EalE13SV+TCHq38gIDfyUeden4fCuaBVEdBR5+ti7Hw==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "bech32": "^1.1.4", - "readonly-date": "^1.0.0" - } - }, - "node_modules/@cosmjs/tendermint-rpc/node_modules/@cosmjs/math": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.4.tgz", - "integrity": "sha512-++dqq2TJkoB8zsPVYCvrt88oJWsy1vMOuSOKcdlnXuOA/ASheTJuYy4+oZlTQ3Fr8eALDLGGPhJI02W2HyAQaw==", - "license": "Apache-2.0", - "dependencies": { - "bn.js": "^5.2.0" - } - }, "node_modules/@cosmjs/utils": { "version": "0.32.4", "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.4.tgz", @@ -5482,6 +5381,70 @@ "@tanstack/react-query": "^5.62.11" } }, + "node_modules/@overlocknetwork/api/node_modules/@cosmjs/amino": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.3.tgz", + "integrity": "sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA==", + "license": "Apache-2.0", + "dependencies": { + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3" + } + }, + "node_modules/@overlocknetwork/api/node_modules/@cosmjs/encoding": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.3.tgz", + "integrity": "sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "bech32": "^1.1.4", + "readonly-date": "^1.0.0" + } + }, + "node_modules/@overlocknetwork/api/node_modules/@cosmjs/math": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.3.tgz", + "integrity": "sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0" + } + }, + "node_modules/@overlocknetwork/api/node_modules/@cosmjs/proto-signing": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz", + "integrity": "sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg==", + "license": "Apache-2.0", + "dependencies": { + "@cosmjs/amino": "^0.32.3", + "@cosmjs/crypto": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/utils": "^0.32.3", + "cosmjs-types": "^0.9.0" + } + }, + "node_modules/@overlocknetwork/api/node_modules/@cosmjs/stargate": { + "version": "0.32.3", + "resolved": "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.3.tgz", + "integrity": "sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w==", + "license": "Apache-2.0", + "dependencies": { + "@confio/ics23": "^0.6.8", + "@cosmjs/amino": "^0.32.3", + "@cosmjs/encoding": "^0.32.3", + "@cosmjs/math": "^0.32.3", + "@cosmjs/proto-signing": "^0.32.3", + "@cosmjs/stream": "^0.32.3", + "@cosmjs/tendermint-rpc": "^0.32.3", + "@cosmjs/utils": "^0.32.3", + "cosmjs-types": "^0.9.0", + "xstream": "^11.14.0" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", diff --git a/package.json b/package.json index a1c9dac..9dcbdc9 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,10 @@ "chain-registry": "^2.0.22", "concurrently": "^9.1.2", "react": "19.0.0", - "react-dom": "19.0.0" + "react-dom": "19.0.0", + "@cosmjs/amino": "0.32.4", + "@cosmjs/proto-signing": "0.32.4", + "@cosmjs/stargate": "0.32.4" }, "devDependencies": { "@solana/web3.js": "^1.98.2",