import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { ChainInfo } from "@/context/ChainsContext/types"; import { StargateClient } from "@cosmjs/stargate"; import { zodResolver } from "@hookform/resolvers/zod"; import Link from "next/link"; import { NextRouter, withRouter } from "next/router"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { useChains } from "../../context/ChainsContext"; import { exampleAddress } from "../../lib/displayHelpers"; const existsMultisigAccount = async (chain: ChainInfo, address: string) => { try { const client = await StargateClient.connect(chain.nodeAddress); const accountOnChain = await client.getAccount(address); return accountOnChain !== null; } catch { return false; } }; interface FindMultisigFormProps { router: NextRouter; } const FindMultisigForm = ({ router }: FindMultisigFormProps) => { const { chain } = useChains(); const findMultisigSchema = z.object({ address: z .string() .trim() .min(1, "Required") .startsWith(chain.addressPrefix, `Invalid prefix for ${chain.chainDisplayName}`) .refine(async (address) => await existsMultisigAccount(chain, address), { message: "Multisig not found", }), }); const findMultisigForm = useForm>({ resolver: zodResolver(findMultisigSchema), defaultValues: { address: "" }, }); const submitFindMultisig = ({ address }: z.infer) => router.push(`/${chain.registryName}/${address}`); return ( Already have a multisig on {chain.chainDisplayName || "Cosmos Hub"}? Enter its address below to view its transactions and create new ones.
( Multisig address )} />
); }; export default withRouter(FindMultisigForm);