/* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import clsx from 'clsx' import { Alert } from 'components/Alert' import { Button } from 'components/Button' import { Conditional } from 'components/Conditional' import { ContractPageHeader } from 'components/ContractPageHeader' import { JsonPreview } from 'components/JsonPreview' import type { NextPage } from 'next' import { NextSeo } from 'next-seo' import { useEffect, useRef, useState } from 'react' import { toast } from 'react-hot-toast' import { FaAsterisk } from 'react-icons/fa' import { NETWORK } from 'utils/constants' import { withMetadata } from 'utils/layout' import { useWallet } from 'utils/wallet' const UploadContract: NextPage = () => { const wallet = useWallet() const [loading, setLoading] = useState(false) const [transactionResult, setTransactionResult] = useState() const [wasmFile, setWasmFile] = useState(null) const [wasmByteArray, setWasmByteArray] = useState(null) const inputFile = useRef(null) const onFileChange = (e: React.ChangeEvent) => { if (!e.target.files) return setWasmFile(e.target.files[0]) } useEffect(() => { if (wasmFile) { const reader = new FileReader() reader.onload = (e) => { try { if (!e.target?.result) return toast.error('Error parsing file.') const byteArray = new Uint8Array(e.target.result as ArrayBuffer) setWasmByteArray(byteArray) } catch (error: any) { toast.error(error.message) } } reader.readAsArrayBuffer(wasmFile) } }, [wasmFile]) const upload = async () => { try { if (!wallet.isWalletConnected) return toast.error('Please connect your wallet.') if (!wasmFile || !wasmByteArray) return toast.error('No file selected.') setLoading(true) const client = await wallet.getSigningCosmWasmClient() const result = await client.upload(wallet.address as string, wasmByteArray, 'auto') setTransactionResult({ transactionHash: result.transactionHash, codeId: result.codeId, originalSize: result.originalSize, compressedSize: result.compressedSize, originalChecksum: result.checksum, }) setLoading(false) } catch (err: any) { setLoading(false) toast.error(err.message, { style: { maxWidth: 'none' } }) } } return (
Upload success! Here is the transaction result containing the code ID, transaction hash and other data.
Permissionless upload of contracts is only supported for testnet currently.
) } export default withMetadata(UploadContract, { center: false })