From dfceb356183965673a9616bd63f5c600e8d6bb55 Mon Sep 17 00:00:00 2001
From: abefernan <44572727+abefernan@users.noreply.github.com>
Date: Tue, 18 Apr 2023 15:12:50 +0200
Subject: [PATCH] Check multisig before using it. Notify user
---
components/forms/FindMultisigForm.tsx | 53 +++++++++++++++++++++------
1 file changed, 41 insertions(+), 12 deletions(-)
diff --git a/components/forms/FindMultisigForm.tsx b/components/forms/FindMultisigForm.tsx
index 8dfbf4a..aa10300 100644
--- a/components/forms/FindMultisigForm.tsx
+++ b/components/forms/FindMultisigForm.tsx
@@ -1,12 +1,13 @@
-import React, { useState } from "react";
-import { withRouter, NextRouter } from "next/router";
-
-import { useAppContext } from "../../context/AppContext";
-import Button from "../inputs/Button";
-import StackableContainer from "../layout/StackableContainer";
-import Input from "../inputs/Input";
-import { exampleAddress } from "../../lib/displayHelpers";
+import { StargateClient } from "@cosmjs/stargate";
import { assert } from "@cosmjs/utils";
+import { NextRouter, withRouter } from "next/router";
+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";
interface Props {
router: NextRouter;
@@ -15,14 +16,36 @@ interface Props {
const FindMultisigForm = (props: Props) => {
const { state } = useAppContext();
const [address, setAddress] = useState("");
- const [_processing, setProcessing] = useState(false);
+ const [multisigError, setMultisigError] = useState("");
const handleSearch = () => {
- setProcessing(true);
-
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 (
@@ -40,8 +63,14 @@ const FindMultisigForm = (props: Props) => {
label="Multisig Address"
name="address"
placeholder={`E.g. ${exampleAddress(0, state.chain.addressPrefix)}`}
+ error={multisigError}
+ />
+
-
Don't have a multisig?