UNPKG

autemaliquam

Version:

A simple, maximally extensible, dependency minimized framework for building modern Ethereum dApps

1 lines 48.2 kB
{"ast":null,"code":"var _jsxFileName = \"/home/jsw/code/codeoneline/web3-react/example/pages/index.tsx\";\nvar __jsx = React.createElement;\nimport React from 'react';\nimport { Web3ReactProvider, useWeb3React, UnsupportedChainIdError } from '@web3-react-wan/core';\nimport { NoEthereumProviderError, UserRejectedRequestError as UserRejectedRequestErrorInjected } from '@web3-react-wan/injected-connector';\nimport { UserRejectedRequestError as UserRejectedRequestErrorWalletConnect } from '@web3-react-wan/walletconnect-connector';\nimport { UserRejectedRequestError as UserRejectedRequestErrorFrame } from '@web3-react-wan/frame-connector';\nimport { Web3Provider } from '@wansproject/providers';\nimport { formatEther } from '@wansproject/units';\nimport { useEagerConnect, useInactiveListener } from '../hooks';\nimport { injected, network, walletconnect, walletlink, ledger, trezor, frame, authereum, fortmatic, magic, portis, squarelink, torus } from '../connectors';\nimport { Spinner } from '../components/Spinner';\nvar ConnectorNames;\n\n(function (ConnectorNames) {\n ConnectorNames[\"Injected\"] = \"Injected\";\n ConnectorNames[\"Network\"] = \"Network\";\n ConnectorNames[\"WalletConnect\"] = \"WalletConnect\";\n ConnectorNames[\"WalletLink\"] = \"WalletLink\";\n ConnectorNames[\"Ledger\"] = \"Ledger\";\n ConnectorNames[\"Trezor\"] = \"Trezor\";\n ConnectorNames[\"Frame\"] = \"Frame\";\n ConnectorNames[\"Authereum\"] = \"Authereum\";\n ConnectorNames[\"Fortmatic\"] = \"Fortmatic\";\n ConnectorNames[\"Magic\"] = \"Magic\";\n ConnectorNames[\"Portis\"] = \"Portis\";\n ConnectorNames[\"Squarelink\"] = \"Squarelink\";\n ConnectorNames[\"Torus\"] = \"Torus\";\n})(ConnectorNames || (ConnectorNames = {}));\n\nconst connectorsByName = {\n [ConnectorNames.Injected]: injected,\n [ConnectorNames.Network]: network,\n [ConnectorNames.WalletConnect]: walletconnect,\n [ConnectorNames.WalletLink]: walletlink,\n [ConnectorNames.Ledger]: ledger,\n [ConnectorNames.Trezor]: trezor,\n [ConnectorNames.Frame]: frame,\n [ConnectorNames.Authereum]: authereum,\n [ConnectorNames.Fortmatic]: fortmatic,\n [ConnectorNames.Magic]: magic,\n [ConnectorNames.Portis]: portis,\n [ConnectorNames.Squarelink]: squarelink,\n [ConnectorNames.Torus]: torus\n};\n\nfunction getErrorMessage(error) {\n if (error instanceof NoEthereumProviderError) {\n return 'No Ethereum browser extension detected, install MetaMask on desktop or visit from a dApp browser on mobile.';\n } else if (error instanceof UnsupportedChainIdError) {\n return \"You're connected to an unsupported network.\";\n } else if (error instanceof UserRejectedRequestErrorInjected || error instanceof UserRejectedRequestErrorWalletConnect || error instanceof UserRejectedRequestErrorFrame) {\n return 'Please authorize this website to access your Ethereum account.';\n } else {\n console.error(error);\n return 'An unknown error occurred. Check the console for more details.';\n }\n}\n\nfunction getLibrary(provider) {\n const library = new Web3Provider(provider);\n library.pollingInterval = 12000;\n return library;\n}\n\nexport default function () {\n return __jsx(Web3ReactProvider, {\n getLibrary: getLibrary,\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 87,\n columnNumber: 5\n }\n }, __jsx(App, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 7\n }\n }));\n}\n\nfunction ChainId() {\n const {\n chainId\n } = useWeb3React();\n return __jsx(React.Fragment, null, __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 98,\n columnNumber: 7\n }\n }, \"Chain Id\"), __jsx(\"span\", {\n role: \"img\",\n \"aria-label\": \"chain\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 99,\n columnNumber: 7\n }\n }, \"\\u26D3\"), __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 102,\n columnNumber: 7\n }\n }, chainId !== null && chainId !== void 0 ? chainId : ''));\n}\n\nfunction BlockNumber() {\n const {\n chainId,\n library\n } = useWeb3React();\n const [blockNumber, setBlockNumber] = React.useState();\n React.useEffect(() => {\n if (!!library) {\n let stale = false;\n library.getBlockNumber().then(blockNumber => {\n if (!stale) {\n setBlockNumber(blockNumber);\n }\n }).catch(() => {\n if (!stale) {\n setBlockNumber(null);\n }\n });\n\n const updateBlockNumber = blockNumber => {\n setBlockNumber(blockNumber);\n };\n\n library.on('block', updateBlockNumber);\n return () => {\n stale = true;\n library.removeListener('block', updateBlockNumber);\n setBlockNumber(undefined);\n };\n }\n }, [library, chainId]); // ensures refresh if referential identity of library doesn't change across chainIds\n\n return __jsx(React.Fragment, null, __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 143,\n columnNumber: 7\n }\n }, \"Block Number\"), __jsx(\"span\", {\n role: \"img\",\n \"aria-label\": \"numbers\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 144,\n columnNumber: 7\n }\n }, \"\\uD83D\\uDD22\"), __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 147,\n columnNumber: 7\n }\n }, blockNumber === null ? 'Error' : blockNumber !== null && blockNumber !== void 0 ? blockNumber : ''));\n}\n\nfunction Account() {\n const {\n account\n } = useWeb3React();\n return __jsx(React.Fragment, null, __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 157,\n columnNumber: 7\n }\n }, \"Account\"), __jsx(\"span\", {\n role: \"img\",\n \"aria-label\": \"robot\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 158,\n columnNumber: 7\n }\n }, \"\\uD83E\\uDD16\"), __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 161,\n columnNumber: 7\n }\n }, account === null ? '-' : account ? `${account.substring(0, 6)}...${account.substring(account.length - 4)}` : ''));\n}\n\nfunction Balance() {\n const {\n account,\n library,\n chainId\n } = useWeb3React();\n const [balance, setBalance] = React.useState();\n React.useEffect(() => {\n if (!!account && !!library) {\n let stale = false;\n library.getBalance(account).then(balance => {\n if (!stale) {\n setBalance(balance);\n }\n }).catch(() => {\n if (!stale) {\n setBalance(null);\n }\n });\n return () => {\n stale = true;\n setBalance(undefined);\n };\n }\n }, [account, library, chainId]); // ensures refresh if referential identity of library doesn't change across chainIds\n\n return __jsx(React.Fragment, null, __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 202,\n columnNumber: 7\n }\n }, \"Balance\"), __jsx(\"span\", {\n role: \"img\",\n \"aria-label\": \"gold\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 203,\n columnNumber: 7\n }\n }, \"\\uD83D\\uDCB0\"), __jsx(\"span\", {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 7\n }\n }, balance === null ? 'Error' : balance ? `Ξ${formatEther(balance)}` : ''));\n}\n\nfunction Header() {\n const {\n active,\n error\n } = useWeb3React();\n return __jsx(React.Fragment, null, __jsx(\"h1\", {\n style: {\n margin: '1rem',\n textAlign: 'right'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 216,\n columnNumber: 7\n }\n }, active ? '🟢' : error ? '🔴' : '🟠'), __jsx(\"h3\", {\n style: {\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: '1fr min-content 1fr',\n maxWidth: '20rem',\n lineHeight: '2rem',\n margin: 'auto'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 217,\n columnNumber: 7\n }\n }, __jsx(ChainId, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 227,\n columnNumber: 9\n }\n }), __jsx(BlockNumber, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 228,\n columnNumber: 9\n }\n }), __jsx(Account, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 229,\n columnNumber: 9\n }\n }), __jsx(Balance, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 230,\n columnNumber: 9\n }\n })));\n}\n\nfunction App() {\n const context = useWeb3React();\n const {\n connector,\n library,\n chainId,\n account,\n activate,\n deactivate,\n active,\n error\n } = context; // handle logic to recognize the connector currently being activated\n\n const [activatingConnector, setActivatingConnector] = React.useState();\n React.useEffect(() => {\n if (activatingConnector && activatingConnector === connector) {\n setActivatingConnector(undefined);\n }\n }, [activatingConnector, connector]); // handle logic to eagerly connect to the injected ethereum provider, if it exists and has granted access already\n\n const triedEager = useEagerConnect(); // handle logic to connect in reaction to certain events on the injected ethereum provider, if it exists\n\n useInactiveListener(!triedEager || !!activatingConnector);\n return __jsx(React.Fragment, null, __jsx(Header, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 256,\n columnNumber: 7\n }\n }), __jsx(\"hr\", {\n style: {\n margin: '2rem'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 257,\n columnNumber: 7\n }\n }), __jsx(\"div\", {\n style: {\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: '1fr 1fr',\n maxWidth: '20rem',\n margin: 'auto'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 258,\n columnNumber: 7\n }\n }, Object.keys(connectorsByName).map(name => {\n const currentConnector = connectorsByName[name];\n const activating = currentConnector === activatingConnector;\n const connected = currentConnector === connector;\n const disabled = !triedEager || !!activatingConnector || connected || !!error;\n return __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n borderColor: activating ? 'orange' : connected ? 'green' : 'unset',\n cursor: disabled ? 'unset' : 'pointer',\n position: 'relative'\n },\n disabled: disabled,\n key: name,\n onClick: () => {\n setActivatingConnector(currentConnector);\n activate(connectorsByName[name]);\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 274,\n columnNumber: 13\n }\n }, __jsx(\"div\", {\n style: {\n position: 'absolute',\n top: '0',\n left: '0',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'black',\n margin: '0 0 0 1rem'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 289,\n columnNumber: 15\n }\n }, activating && __jsx(Spinner, {\n color: 'black',\n style: {\n height: '25%',\n marginLeft: '-1rem'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 301,\n columnNumber: 32\n }\n }), connected && __jsx(\"span\", {\n role: \"img\",\n \"aria-label\": \"check\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 303,\n columnNumber: 19\n }\n }, \"\\u2705\")), name);\n })), __jsx(\"div\", {\n style: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 313,\n columnNumber: 7\n }\n }, (active || error) && __jsx(\"button\", {\n style: {\n height: '3rem',\n marginTop: '2rem',\n borderRadius: '1rem',\n borderColor: 'red',\n cursor: 'pointer'\n },\n onClick: () => {\n deactivate();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 315,\n columnNumber: 11\n }\n }, \"Deactivate\"), !!error && __jsx(\"h4\", {\n style: {\n marginTop: '1rem',\n marginBottom: '0'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 21\n }\n }, getErrorMessage(error))), __jsx(\"hr\", {\n style: {\n margin: '2rem'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 7\n }\n }), __jsx(\"div\", {\n style: {\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: 'fit-content',\n maxWidth: '20rem',\n margin: 'auto'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 335,\n columnNumber: 7\n }\n }, !!(library && account) && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n library.getSigner(account).sendTransaction({\n to: \"0xf368ca0ff41caa0f71deac40c05ca05e017d1702\",\n value: \"0x01\"\n }).then(signature => {\n window.alert(`Success!\\n\\n${signature}`);\n }).catch(error => {\n window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''));\n });\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 345,\n columnNumber: 11\n }\n }, \"send wan\")), __jsx(\"hr\", {\n style: {\n margin: '2rem'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 370,\n columnNumber: 7\n }\n }), __jsx(\"div\", {\n style: {\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: 'fit-content',\n maxWidth: '20rem',\n margin: 'auto'\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 372,\n columnNumber: 7\n }\n }, !!(library && account) && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n library.getSigner(account).signMessage('👋').then(signature => {\n window.alert(`Success!\\n\\n${signature}`);\n }).catch(error => {\n window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''));\n });\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 382,\n columnNumber: 11\n }\n }, \"Sign Message\"), !!(connector === connectorsByName[ConnectorNames.Network] && chainId) && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.changeChainId(chainId === 1 ? 4 : 1);\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 404,\n columnNumber: 11\n }\n }, \"Switch Networks\"), connector === connectorsByName[ConnectorNames.WalletConnect] && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 418,\n columnNumber: 11\n }\n }, \"Kill WalletConnect Session\"), connector === connectorsByName[ConnectorNames.WalletLink] && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 432,\n columnNumber: 11\n }\n }, \"Kill WalletLink Session\"), connector === connectorsByName[ConnectorNames.Fortmatic] && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 446,\n columnNumber: 11\n }\n }, \"Kill Fortmatic Session\"), connector === connectorsByName[ConnectorNames.Magic] && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 460,\n columnNumber: 11\n }\n }, \"Kill Magic Session\"), connector === connectorsByName[ConnectorNames.Portis] && __jsx(React.Fragment, null, chainId !== undefined && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.changeNetwork(chainId === 1 ? 100 : 1);\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 476,\n columnNumber: 15\n }\n }, \"Switch Networks\"), __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 489,\n columnNumber: 13\n }\n }, \"Kill Portis Session\")), connector === connectorsByName[ConnectorNames.Torus] && __jsx(\"button\", {\n style: {\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n },\n onClick: () => {\n ;\n connector.close();\n },\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 504,\n columnNumber: 11\n }\n }, \"Kill Torus Session\")));\n}","map":{"version":3,"sources":["/home/jsw/code/codeoneline/web3-react/example/pages/index.tsx"],"names":["React","Web3ReactProvider","useWeb3React","UnsupportedChainIdError","NoEthereumProviderError","UserRejectedRequestError","UserRejectedRequestErrorInjected","UserRejectedRequestErrorWalletConnect","UserRejectedRequestErrorFrame","Web3Provider","formatEther","useEagerConnect","useInactiveListener","injected","network","walletconnect","walletlink","ledger","trezor","frame","authereum","fortmatic","magic","portis","squarelink","torus","Spinner","ConnectorNames","connectorsByName","Injected","Network","WalletConnect","WalletLink","Ledger","Trezor","Frame","Authereum","Fortmatic","Magic","Portis","Squarelink","Torus","getErrorMessage","error","console","getLibrary","provider","library","pollingInterval","ChainId","chainId","BlockNumber","blockNumber","setBlockNumber","useState","useEffect","stale","getBlockNumber","then","catch","updateBlockNumber","on","removeListener","undefined","Account","account","substring","length","Balance","balance","setBalance","getBalance","Header","active","margin","textAlign","display","gridGap","gridTemplateColumns","maxWidth","lineHeight","App","context","connector","activate","deactivate","activatingConnector","setActivatingConnector","triedEager","Object","keys","map","name","currentConnector","activating","connected","disabled","height","borderRadius","borderColor","cursor","position","top","left","alignItems","color","marginLeft","flexDirection","marginTop","marginBottom","getSigner","sendTransaction","to","value","signature","window","alert","message","signMessage","changeChainId","close","changeNetwork"],"mappings":"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","sourcesContent":["import React from 'react'\nimport { Web3ReactProvider, useWeb3React, UnsupportedChainIdError } from '@web3-react-wan/core'\nimport {\n NoEthereumProviderError,\n UserRejectedRequestError as UserRejectedRequestErrorInjected\n} from '@web3-react-wan/injected-connector'\nimport { UserRejectedRequestError as UserRejectedRequestErrorWalletConnect } from '@web3-react-wan/walletconnect-connector'\nimport { UserRejectedRequestError as UserRejectedRequestErrorFrame } from '@web3-react-wan/frame-connector'\nimport { Web3Provider } from '@wansproject/providers'\nimport { formatEther } from '@wansproject/units'\n\nimport { useEagerConnect, useInactiveListener } from '../hooks'\nimport {\n injected,\n network,\n walletconnect,\n walletlink,\n ledger,\n trezor,\n frame,\n authereum,\n fortmatic,\n magic,\n portis,\n squarelink,\n torus\n} from '../connectors'\nimport { Spinner } from '../components/Spinner'\n\nenum ConnectorNames {\n Injected = 'Injected',\n Network = 'Network',\n WalletConnect = 'WalletConnect',\n WalletLink = 'WalletLink',\n Ledger = 'Ledger',\n Trezor = 'Trezor',\n Frame = 'Frame',\n Authereum = 'Authereum',\n Fortmatic = 'Fortmatic',\n Magic = 'Magic',\n Portis = 'Portis',\n Squarelink = 'Squarelink',\n Torus = 'Torus'\n}\n\nconst connectorsByName: { [connectorName in ConnectorNames]: any } = {\n [ConnectorNames.Injected]: injected,\n [ConnectorNames.Network]: network,\n [ConnectorNames.WalletConnect]: walletconnect,\n [ConnectorNames.WalletLink]: walletlink,\n [ConnectorNames.Ledger]: ledger,\n [ConnectorNames.Trezor]: trezor,\n [ConnectorNames.Frame]: frame,\n [ConnectorNames.Authereum]: authereum,\n [ConnectorNames.Fortmatic]: fortmatic,\n [ConnectorNames.Magic]: magic,\n [ConnectorNames.Portis]: portis,\n [ConnectorNames.Squarelink]: squarelink,\n [ConnectorNames.Torus]: torus\n}\n\nfunction getErrorMessage(error: Error) {\n if (error instanceof NoEthereumProviderError) {\n return 'No Ethereum browser extension detected, install MetaMask on desktop or visit from a dApp browser on mobile.'\n } else if (error instanceof UnsupportedChainIdError) {\n return \"You're connected to an unsupported network.\"\n } else if (\n error instanceof UserRejectedRequestErrorInjected ||\n error instanceof UserRejectedRequestErrorWalletConnect ||\n error instanceof UserRejectedRequestErrorFrame\n ) {\n return 'Please authorize this website to access your Ethereum account.'\n } else {\n console.error(error)\n return 'An unknown error occurred. Check the console for more details.'\n }\n}\n\nfunction getLibrary(provider: any): Web3Provider {\n const library = new Web3Provider(provider)\n library.pollingInterval = 12000\n return library\n}\n\nexport default function() {\n return (\n <Web3ReactProvider getLibrary={getLibrary}>\n <App />\n </Web3ReactProvider>\n )\n}\n\nfunction ChainId() {\n const { chainId } = useWeb3React()\n\n return (\n <>\n <span>Chain Id</span>\n <span role=\"img\" aria-label=\"chain\">\n\n </span>\n <span>{chainId ?? ''}</span>\n </>\n )\n}\n\nfunction BlockNumber() {\n const { chainId, library } = useWeb3React()\n\n const [blockNumber, setBlockNumber] = React.useState<number>()\n React.useEffect((): any => {\n if (!!library) {\n let stale = false\n\n library\n .getBlockNumber()\n .then((blockNumber: number) => {\n if (!stale) {\n setBlockNumber(blockNumber)\n }\n })\n .catch(() => {\n if (!stale) {\n setBlockNumber(null)\n }\n })\n\n const updateBlockNumber = (blockNumber: number) => {\n setBlockNumber(blockNumber)\n }\n library.on('block', updateBlockNumber)\n\n return () => {\n stale = true\n library.removeListener('block', updateBlockNumber)\n setBlockNumber(undefined)\n }\n }\n }, [library, chainId]) // ensures refresh if referential identity of library doesn't change across chainIds\n\n return (\n <>\n <span>Block Number</span>\n <span role=\"img\" aria-label=\"numbers\">\n 🔢\n </span>\n <span>{blockNumber === null ? 'Error' : blockNumber ?? ''}</span>\n </>\n )\n}\n\nfunction Account() {\n const { account } = useWeb3React()\n\n return (\n <>\n <span>Account</span>\n <span role=\"img\" aria-label=\"robot\">\n 🤖\n </span>\n <span>\n {account === null\n ? '-'\n : account\n ? `${account.substring(0, 6)}...${account.substring(account.length - 4)}`\n : ''}\n </span>\n </>\n )\n}\n\nfunction Balance() {\n const { account, library, chainId } = useWeb3React()\n\n const [balance, setBalance] = React.useState()\n React.useEffect((): any => {\n if (!!account && !!library) {\n let stale = false\n\n library\n .getBalance(account)\n .then((balance: any) => {\n if (!stale) {\n setBalance(balance)\n }\n })\n .catch(() => {\n if (!stale) {\n setBalance(null)\n }\n })\n\n return () => {\n stale = true\n setBalance(undefined)\n }\n }\n }, [account, library, chainId]) // ensures refresh if referential identity of library doesn't change across chainIds\n\n return (\n <>\n <span>Balance</span>\n <span role=\"img\" aria-label=\"gold\">\n 💰\n </span>\n <span>{balance === null ? 'Error' : balance ? `Ξ${formatEther(balance)}` : ''}</span>\n </>\n )\n}\n\nfunction Header() {\n const { active, error } = useWeb3React()\n\n return (\n <>\n <h1 style={{ margin: '1rem', textAlign: 'right' }}>{active ? '🟢' : error ? '🔴' : '🟠'}</h1>\n <h3\n style={{\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: '1fr min-content 1fr',\n maxWidth: '20rem',\n lineHeight: '2rem',\n margin: 'auto'\n }}\n >\n <ChainId />\n <BlockNumber />\n <Account />\n <Balance />\n </h3>\n </>\n )\n}\n\nfunction App() {\n const context = useWeb3React<Web3Provider>()\n const { connector, library, chainId, account, activate, deactivate, active, error } = context\n\n // handle logic to recognize the connector currently being activated\n const [activatingConnector, setActivatingConnector] = React.useState<any>()\n React.useEffect(() => {\n if (activatingConnector && activatingConnector === connector) {\n setActivatingConnector(undefined)\n }\n }, [activatingConnector, connector])\n\n // handle logic to eagerly connect to the injected ethereum provider, if it exists and has granted access already\n const triedEager = useEagerConnect()\n\n // handle logic to connect in reaction to certain events on the injected ethereum provider, if it exists\n useInactiveListener(!triedEager || !!activatingConnector)\n\n return (\n <>\n <Header />\n <hr style={{ margin: '2rem' }} />\n <div\n style={{\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: '1fr 1fr',\n maxWidth: '20rem',\n margin: 'auto'\n }}\n >\n {Object.keys(connectorsByName).map(name => {\n const currentConnector = connectorsByName[name]\n const activating = currentConnector === activatingConnector\n const connected = currentConnector === connector\n const disabled = !triedEager || !!activatingConnector || connected || !!error\n\n return (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n borderColor: activating ? 'orange' : connected ? 'green' : 'unset',\n cursor: disabled ? 'unset' : 'pointer',\n position: 'relative'\n }}\n disabled={disabled}\n key={name}\n onClick={() => {\n setActivatingConnector(currentConnector)\n activate(connectorsByName[name])\n }}\n >\n <div\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n color: 'black',\n margin: '0 0 0 1rem'\n }}\n >\n {activating && <Spinner color={'black'} style={{ height: '25%', marginLeft: '-1rem' }} />}\n {connected && (\n <span role=\"img\" aria-label=\"check\">\n\n </span>\n )}\n </div>\n {name}\n </button>\n )\n })}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {(active || error) && (\n <button\n style={{\n height: '3rem',\n marginTop: '2rem',\n borderRadius: '1rem',\n borderColor: 'red',\n cursor: 'pointer'\n }}\n onClick={() => {\n deactivate()\n }}\n >\n Deactivate\n </button>\n )}\n\n {!!error && <h4 style={{ marginTop: '1rem', marginBottom: '0' }}>{getErrorMessage(error)}</h4>}\n </div>\n\n <hr style={{ margin: '2rem' }} />\n <div\n style={{\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: 'fit-content',\n maxWidth: '20rem',\n margin: 'auto'\n }}\n >\n {!!(library && account) && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n library\n .getSigner(account)\n .sendTransaction({\n to: \"0xf368ca0ff41caa0f71deac40c05ca05e017d1702\",\n value: \"0x01\"\n })\n .then((signature: any) => {\n window.alert(`Success!\\n\\n${signature}`)\n })\n .catch((error: any) => {\n window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''))\n })\n }}\n >\n send wan\n </button>\n )}\n </div>\n <hr style={{ margin: '2rem' }} />\n\n <div\n style={{\n display: 'grid',\n gridGap: '1rem',\n gridTemplateColumns: 'fit-content',\n maxWidth: '20rem',\n margin: 'auto'\n }}\n >\n {!!(library && account) && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n library\n .getSigner(account)\n .signMessage('👋')\n .then((signature: any) => {\n window.alert(`Success!\\n\\n${signature}`)\n })\n .catch((error: any) => {\n window.alert('Failure!' + (error && error.message ? `\\n\\n${error.message}` : ''))\n })\n }}\n >\n Sign Message\n </button>\n )}\n {!!(connector === connectorsByName[ConnectorNames.Network] && chainId) && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).changeChainId(chainId === 1 ? 4 : 1)\n }}\n >\n Switch Networks\n </button>\n )}\n {connector === connectorsByName[ConnectorNames.WalletConnect] && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill WalletConnect Session\n </button>\n )}\n {connector === connectorsByName[ConnectorNames.WalletLink] && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill WalletLink Session\n </button>\n )}\n {connector === connectorsByName[ConnectorNames.Fortmatic] && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill Fortmatic Session\n </button>\n )}\n {connector === connectorsByName[ConnectorNames.Magic] && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill Magic Session\n </button>\n )}\n {connector === connectorsByName[ConnectorNames.Portis] && (\n <>\n {chainId !== undefined && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).changeNetwork(chainId === 1 ? 100 : 1)\n }}\n >\n Switch Networks\n </button>\n )}\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill Portis Session\n </button>\n </>\n )}\n {connector === connectorsByName[ConnectorNames.Torus] && (\n <button\n style={{\n height: '3rem',\n borderRadius: '1rem',\n cursor: 'pointer'\n }}\n onClick={() => {\n ;(connector as any).close()\n }}\n >\n Kill Torus Session\n </button>\n )}\n </div>\n </>\n )\n}\n"]},"metadata":{},"sourceType":"module"}