import React, { useMemo, useState } from "react"; import { useParams, useLocation } from "react-router-dom"; import { SnackbarProvider, enqueueSnackbar } from "notistack"; import canonicalStringify from "canonical-json"; import { Button, Dialog, DialogContent, DialogActions, Box, Typography, } from "@mui/material"; import { useWalletConnectContext } from "../context/WalletConnectContext"; const SignWithCosmos = () => { const { session, signClient } = useWalletConnectContext(); const { ethAddress, ethSignature } = useParams(); const [openModal, setOpenModal] = useState(false); const [cosmosSignature, setCosmosSignature] = useState(""); const location = useLocation(); const innerMessage = location.state; const cosmosAddress = innerMessage.address; const displayAttestation = useMemo(() => { return canonicalStringify( { payload: { msg: "Onboarding my Azimuth ID onto UrbitChain", address: ethAddress, payload: innerMessage, }, signatures: [cosmosSignature, ethSignature], }, null, 2 ); }, [ethAddress, cosmosSignature, ethSignature, innerMessage]); const message = useMemo(() => { return canonicalStringify( { msg: "Onboarding my Azimuth ID onto UrbitChain", address: ethAddress, payload: innerMessage, }, null, 2 ); }, [ethAddress, innerMessage]); const signCosmos = async () => { try { if (ethAddress) { const signDoc = { msgs: [], fee: { amount: [], gas: "23" }, chain_id: "cosmos:cosmoshub-4", memo: message, account_number: "7", sequence: "54", }; const params = { signerAddress: cosmosAddress, signDoc }; const signedMessage = await signClient!.request<{ signature: string }>({ topic: session!.topic, chainId: "cosmos:cosmoshub-4", request: { method: "cosmos_signAmino", params, }, }); setOpenModal(true); setCosmosSignature(signedMessage.signature); } } catch (error) { console.log("err in signing ", error); setOpenModal(false); enqueueSnackbar("Error signing message", { variant: "error" }); } }; return ( Sign with cosmos key Cosmos account: {cosmosAddress} Message:
{message} 
{ setOpenModal(false); }} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" maxWidth="md" > Attested message to be broadcasted on chain
              {displayAttestation}{" "}
            
); }; export default SignWithCosmos;