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 ? (
+
+ ) : (
+
+ )}
+ >
+ );
+}
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",