diff --git a/components/forms/FindMultisigForm.tsx b/components/forms/FindMultisigForm.tsx index 9c17152..42a6e5a 100644 --- a/components/forms/FindMultisigForm.tsx +++ b/components/forms/FindMultisigForm.tsx @@ -1,8 +1,10 @@ +import { StargateClient } from "@cosmjs/stargate"; import { assert } from "@cosmjs/utils"; import { NextRouter, withRouter } from "next/router"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { useAppContext } from "../../context/AppContext"; import { exampleAddress } from "../../lib/displayHelpers"; +import { getMultisigAccount } from "../../lib/multisigHelpers"; import Button from "../inputs/Button"; import Input from "../inputs/Input"; import StackableContainer from "../layout/StackableContainer"; @@ -14,11 +16,36 @@ interface Props { const FindMultisigForm = (props: Props) => { const { state } = useAppContext(); const [address, setAddress] = useState(""); + const [multisigError, setMultisigError] = useState(""); const handleSearch = () => { props.router.push(`/multi/${address}`); }; + useEffect(() => { + (async function () { + if (!address) { + setMultisigError(""); + return; + } + + try { + assert(state.chain.nodeAddress, "Node address missing"); + const client = await StargateClient.connect(state.chain.nodeAddress); + assert(state.chain.addressPrefix, "addressPrefix missing"); + await getMultisigAccount(address, state.chain.addressPrefix, client); + setMultisigError(""); + } catch (error) { + if (error instanceof Error) { + setMultisigError(error.message); + } else { + setMultisigError("Multisig error"); + } + console.error("Multisig error:", error); + } + })(); + }, [address, state.chain.addressPrefix, state.chain.nodeAddress]); + assert(state.chain.addressPrefix, "addressPrefix missing"); return ( @@ -36,8 +63,14 @@ const FindMultisigForm = (props: Props) => { label="Multisig Address" name="address" placeholder={`E.g. ${exampleAddress(0, state.chain.addressPrefix)}`} + error={multisigError} + /> +