import React, {useState} from 'react'; import logo from './logo.svg'; import './App.css'; import Web3 from 'web3'; import { WagmiConfig, createClient, configureChains, mainnet, useConnect, useAccount, useDisconnect } from 'wagmi' import { MetaMaskConnector } from 'wagmi/connectors/metaMask' import { publicProvider } from 'wagmi/providers/public' const web3 = new Web3(Web3.givenProvider); import Airdrop from "./Airdrop.json"; import MagnaToken from "./MagnaToken.json"; const airdropAddress = "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"; const airdropContract = new web3.eth.Contract(Airdrop.abi as any, airdropAddress); const magnaTokenAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3"; const magnaTokenContract = new web3.eth.Contract(MagnaToken.abi as any, magnaTokenAddress); const { chains, provider, webSocketProvider } = configureChains([mainnet], [publicProvider()]); const wagmiClient = createClient({ autoConnect: true, connectors: [ new MetaMaskConnector({ chains }), ], provider, webSocketProvider, }) function Profile() { const { connect, connectors, error, isLoading, pendingConnector } = useConnect() const { address, connector, isConnected } = useAccount() const { disconnect } = useDisconnect() if (isConnected) { const connectorName = connector?.name || "unknown connector"; return (
Connected to {connectorName} address: {address}
) } return (
Connect to Airdrop App
{connectors.map((connector) => ( ))} {error &&
{error.message}
}
) } interface AddressesProps { addressList: string[]; setAddressListFn: any; } function Addresses(props: AddressesProps) { const [inputState, setInputState] = useState(""); const [errorText, setErrorText] = useState(""); const [numTokens, setNumTokens] = useState(0); const { setAddressListFn, addressList } = props; const save = () => { if (!web3.utils.isAddress(inputState)) { setErrorText("Invalid ETH address"); return; } setErrorText(""); const checksumAddr = web3.utils.toChecksumAddress(inputState); if (addressList.includes(checksumAddr)) { //Do nothing } else { setAddressListFn([...addressList, checksumAddr]); } setInputState(""); } var num; if (isNaN(numTokens) || numTokens < 0) { num = 0; } else { num = numTokens; } return (
setInputState(evt.target.value) } >
{errorText}
Number of tokens: setNumTokens(parseInt(evt.target.value)) }>
); } interface AddressListProps { addressList: string[]; }; function AddressList({addressList}: AddressListProps) { const addresses = addressList.length == 0 ?

No addresses specified yet

: addressList.map((addr: string) =>
{addr}
); return (

Addresses to airdrop to:

{ addresses }
) } function App() { const [addressList, setAddressList] = useState([]); const { address: ownerAddress } = useAccount() async function performAirdrop() { console.log("Performing airdrop"); console.log(magnaTokenContract.methods); const allowance = await magnaTokenContract.methods.allowance(ownerAddress, airdropAddress).call({ from: ownerAddress }); console.log(`Allowance: ${allowance}`); if (allowance <= 0) { //TODO prompt to set a positive balance return; } } return (

Airdrop App

Add an address to airdrop to:

); } export default App;