import axios from "axios"; import { calculateFee } from "@cosmjs/stargate"; import { Decimal } from "@cosmjs/math"; import React, { useState } from "react"; import { withRouter } from "next/router"; import { useAppContext } from "../../context/AppContext"; import Button from "../../components/inputs/Button"; import Input from "../../components/inputs/Input"; import StackableContainer from "../layout/StackableContainer"; import { checkAddress, exampleAddress } from "../../lib/displayHelpers"; const TransactionForm = (props) => { const { state } = useAppContext(); const [toAddress, setToAddress] = useState(""); const [amount, setAmount] = useState("0"); const [memo, setMemo] = useState(""); const [gas, setGas] = useState(200000); const [gasPrice, _setGasPrice] = useState(state.chain.gasPrice); const [_processing, setProcessing] = useState(false); const [addressError, setAddressError] = useState(""); const createTransaction = (txToAddress, txAmount, txGas) => { const amountInAtomics = Decimal.fromUserInput( txAmount, Number(state.chain.displayDenomExponent), ).atomics; const msgSend = { fromAddress: props.address, toAddress: txToAddress, amount: [ { amount: amountInAtomics, denom: state.chain.denom, }, ], }; const msg = { typeUrl: "/cosmos.bank.v1beta1.MsgSend", value: msgSend, }; const fee = calculateFee(Number(txGas), gasPrice); return { accountNumber: props.accountOnChain.accountNumber, sequence: props.accountOnChain.sequence, chainId: state.chain.chainId, msgs: [msg], fee: fee, memo: memo, }; }; const handleCreate = async () => { const toAddressError = checkAddress(toAddress, state.chain.addressPrefix); if (toAddressError) { setAddressError(`Invalid address for network ${state.chain.chainId}: ${toAddressError}`); return; } setProcessing(true); const tx = createTransaction(toAddress, amount, gas); console.log(tx); const dataJSON = JSON.stringify(tx); const res = await axios.post("/api/transaction", { dataJSON }); const { transactionID } = res.data; props.router.push(`${props.address}/transaction/${transactionID}`); }; return (

Create New transaction

setToAddress(e.target.value)} error={addressError} placeholder={`E.g. ${exampleAddress(0, state.chain.addressPrefix)}`} />
setAmount(e.target.value)} />
setGas(e.target.value)} />
setMemo(e.target.value)} />