From 6ccaac11950207edc7f3b7a54c64fcf45ece02c2 Mon Sep 17 00:00:00 2001 From: osmannyildiz Date: Wed, 24 Apr 2024 22:26:19 +0300 Subject: [PATCH] get distracted by non-essential frontend stuff --- evm/contracts/MessageBox.sol | 2 +- .../src/components/ConnectMetamaskButton.tsx | 17 +++++++- frontend/src/components/ContextsProvider.tsx | 15 +++++++ frontend/src/contexts/MainContext.ts | 39 +++++++++++++++++++ .../src/evm-output/MessageBox.artifacts.json | 4 +- .../src/evm-output/deployed_addresses.json | 4 +- frontend/src/main.tsx | 5 ++- frontend/src/routes/message-box.lazy.tsx | 2 +- frontend/src/routes/pad-token.lazy.tsx | 13 +++---- frontend/src/store.ts | 19 +++++++++ frontend/src/store.tsx | 13 ------- frontend/src/utils/context.ts | 21 ++++++++++ frontend/src/utils/form.ts | 5 +++ frontend/src/{utils.ts => utils/toast.ts} | 10 ----- frontend/src/utils/ui.ts | 9 +++++ 15 files changed, 139 insertions(+), 39 deletions(-) create mode 100644 frontend/src/components/ContextsProvider.tsx create mode 100644 frontend/src/contexts/MainContext.ts create mode 100644 frontend/src/store.ts delete mode 100644 frontend/src/store.tsx create mode 100644 frontend/src/utils/context.ts create mode 100644 frontend/src/utils/form.ts rename frontend/src/{utils.ts => utils/toast.ts} (69%) create mode 100644 frontend/src/utils/ui.ts diff --git a/evm/contracts/MessageBox.sol b/evm/contracts/MessageBox.sol index b9a1f1a..63a0bf7 100644 --- a/evm/contracts/MessageBox.sol +++ b/evm/contracts/MessageBox.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; contract MessageBox { diff --git a/frontend/src/components/ConnectMetamaskButton.tsx b/frontend/src/components/ConnectMetamaskButton.tsx index d4fc723..d34e981 100644 --- a/frontend/src/components/ConnectMetamaskButton.tsx +++ b/frontend/src/components/ConnectMetamaskButton.tsx @@ -1,5 +1,6 @@ import { useStore } from "../store"; -import { shortenAddress, tryWithToast } from "../utils"; +import { tryWithToast } from "../utils/toast"; +import { formatPadTokenAmount, shortenAddress } from "../utils/ui"; import { web3 } from "../web3"; export function ConnectMetamaskButton() { @@ -8,6 +9,7 @@ export function ConnectMetamaskButton() { const unsetConnectedAccount = useStore( (state) => state.unsetConnectedAccount ); + const padTokenBalance = useStore((state) => state.padTokenBalance); // https://docs.web3js.org/guides/getting_started/metamask/#react-app async function connectMetamask() { @@ -35,7 +37,18 @@ export function ConnectMetamaskButton() { connectedAccount ? disconnectWallet() : connectMetamask() } > - {connectedAccount ? shortenAddress(connectedAccount) : "Connect MetaMask"} + {connectedAccount ? ( + <> + {shortenAddress(connectedAccount)} + {padTokenBalance !== null && ( +
+ {formatPadTokenAmount(padTokenBalance)} +
+ )} + + ) : ( + "Connect MetaMask" + )} ); } diff --git a/frontend/src/components/ContextsProvider.tsx b/frontend/src/components/ContextsProvider.tsx new file mode 100644 index 0000000..55be2b6 --- /dev/null +++ b/frontend/src/components/ContextsProvider.tsx @@ -0,0 +1,15 @@ +import { buildMainContextValue, MainContext } from "../contexts/MainContext"; + +interface Props { + children: React.ReactNode; +} + +export function ContextsProvider({ children }: Props) { + const mainContextValue = buildMainContextValue(); + + return ( + + {children} + + ); +} diff --git a/frontend/src/contexts/MainContext.ts b/frontend/src/contexts/MainContext.ts new file mode 100644 index 0000000..927d5b5 --- /dev/null +++ b/frontend/src/contexts/MainContext.ts @@ -0,0 +1,39 @@ +/* eslint-disable react-hooks/rules-of-hooks */ + +import { useEffect } from "react"; +import { useStore } from "../store"; +import buildContext from "../utils/context"; +import { padToken } from "../web3"; + +interface IMainContext { + fetchPadTokenBalance: () => Promise; +} + +export const [MainContext, useMainContext] = buildContext(); + +export function buildMainContextValue(): IMainContext { + const connectedAccount = useStore((state) => state.connectedAccount); + const setPadTokenBalance = useStore((state) => state.setPadTokenBalance); + const unsetPadTokenBalance = useStore((state) => state.unsetPadTokenBalance); + + const fetchPadTokenBalance = async () => { + const balance: bigint = await padToken.methods + .balanceOf(connectedAccount) + .call(); + if (typeof balance === "bigint") { + setPadTokenBalance(balance); + } else { + unsetPadTokenBalance(); + } + }; + + useEffect(() => { + if (connectedAccount) { + fetchPadTokenBalance(); + } + }, [connectedAccount]); + + return { + fetchPadTokenBalance, + }; +} diff --git a/frontend/src/evm-output/MessageBox.artifacts.json b/frontend/src/evm-output/MessageBox.artifacts.json index d870307..26060c8 100644 --- a/frontend/src/evm-output/MessageBox.artifacts.json +++ b/frontend/src/evm-output/MessageBox.artifacts.json @@ -92,8 +92,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162000df738038062000df7833981810160405281019062000037919062000217565b3373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505080600090816200007c9190620004b3565b50506200059a565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000ed82620000a2565b810181811067ffffffffffffffff821117156200010f576200010e620000b3565b5b80604052505050565b60006200012462000084565b9050620001328282620000e2565b919050565b600067ffffffffffffffff821115620001555762000154620000b3565b5b6200016082620000a2565b9050602081019050919050565b60005b838110156200018d57808201518184015260208101905062000170565b60008484015250505050565b6000620001b0620001aa8462000137565b62000118565b905082815260208101848484011115620001cf57620001ce6200009d565b5b620001dc8482856200016d565b509392505050565b600082601f830112620001fc57620001fb62000098565b5b81516200020e84826020860162000199565b91505092915050565b60006020828403121562000230576200022f6200008e565b5b600082015167ffffffffffffffff81111562000251576200025062000093565b5b6200025f84828501620001e4565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bb57607f821691505b602082108103620002d157620002d062000273565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002fc565b620003478683620002fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003946200038e62000388846200035f565b62000369565b6200035f565b9050919050565b6000819050919050565b620003b08362000373565b620003c8620003bf826200039b565b84845462000309565b825550505050565b600090565b620003df620003d0565b620003ec818484620003a5565b505050565b5b81811015620004145762000408600082620003d5565b600181019050620003f2565b5050565b601f82111562000463576200042d81620002d7565b6200043884620002ec565b8101602085101562000448578190505b620004606200045785620002ec565b830182620003f1565b50505b505050565b600082821c905092915050565b6000620004886000198460080262000468565b1980831691505092915050565b6000620004a3838362000475565b9150826002028217905092915050565b620004be8262000268565b67ffffffffffffffff811115620004da57620004d9620000b3565b5b620004e68254620002a2565b620004f382828562000418565b600060209050601f8311600181146200052b576000841562000516578287015190505b62000522858262000495565b86555062000592565b601f1984166200053b86620002d7565b60005b8281101562000565578489015182556001820191506020850194506020810190506200053e565b8683101562000585578489015162000581601f89168262000475565b8355505b6001600288020188555050505b505050505050565b60805161083b620005bc6000396000818160c9015261016d015261083b6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063368b8772146100515780638da5cb5b1461006d578063ce6d41de1461008b578063e21f37ce146100a9575b600080fd5b61006b6004803603810190610066919061031e565b6100c7565b005b61007561016b565b60405161008291906103ac565b60405180910390f35b61009361018f565b6040516100a09190610457565b60405180910390f35b6100b1610221565b6040516100be9190610457565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c906104c5565b60405180910390fd5b818160009182610166929190610735565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606000805461019e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ca9061054e565b80156102175780601f106101ec57610100808354040283529160200191610217565b820191906000526020600020905b8154815290600101906020018083116101fa57829003601f168201915b5050505050905090565b6000805461022e9061054e565b80601f016020809104026020016040519081016040528092919081815260200182805461025a9061054e565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102de576102dd6102b9565b5b8235905067ffffffffffffffff8111156102fb576102fa6102be565b5b602083019150836001820283011115610317576103166102c3565b5b9250929050565b60008060208385031215610335576103346102af565b5b600083013567ffffffffffffffff811115610353576103526102b4565b5b61035f858286016102c8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103968261036b565b9050919050565b6103a68161038b565b82525050565b60006020820190506103c1600083018461039d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104015780820151818401526020810190506103e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610429826103c7565b61043381856103d2565b93506104438185602086016103e3565b61044c8161040d565b840191505092915050565b60006020820190508181036000830152610471818461041e565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f20746861742e0000000000600082015250565b60006104af601b836103d2565b91506104ba82610479565b602082019050919050565b600060208201905081810360008301526104de816104a2565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061056657607f821691505b6020821081036105795761057861051f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105a4565b6105eb86836105a4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061063261062d61062884610603565b61060d565b610603565b9050919050565b6000819050919050565b61064c83610617565b61066061065882610639565b8484546105b1565b825550505050565b600090565b610675610668565b610680818484610643565b505050565b5b818110156106a45761069960008261066d565b600181019050610686565b5050565b601f8211156106e9576106ba8161057f565b6106c384610594565b810160208510156106d2578190505b6106e66106de85610594565b830182610685565b50505b505050565b600082821c905092915050565b600061070c600019846008026106ee565b1980831691505092915050565b600061072583836106fb565b9150826002028217905092915050565b61073f83836104e5565b67ffffffffffffffff811115610758576107576104f0565b5b610762825461054e565b61076d8282856106a8565b6000601f83116001811461079c576000841561078a578287013590505b6107948582610719565b8655506107fc565b601f1984166107aa8661057f565b60005b828110156107d2578489013582556001820191506020850194506020810190506107ad565b868310156107ef57848901356107eb601f8916826106fb565b8355505b6001600288020188555050505b5050505050505056fea26469706673582212204ee1e2b1c6277c5f77a82579fb10a6a2b84c35c9c1f04e3232aef341dc74725264736f6c63430008180033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063368b8772146100515780638da5cb5b1461006d578063ce6d41de1461008b578063e21f37ce146100a9575b600080fd5b61006b6004803603810190610066919061031e565b6100c7565b005b61007561016b565b60405161008291906103ac565b60405180910390f35b61009361018f565b6040516100a09190610457565b60405180910390f35b6100b1610221565b6040516100be9190610457565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c906104c5565b60405180910390fd5b818160009182610166929190610735565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606000805461019e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ca9061054e565b80156102175780601f106101ec57610100808354040283529160200191610217565b820191906000526020600020905b8154815290600101906020018083116101fa57829003601f168201915b5050505050905090565b6000805461022e9061054e565b80601f016020809104026020016040519081016040528092919081815260200182805461025a9061054e565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102de576102dd6102b9565b5b8235905067ffffffffffffffff8111156102fb576102fa6102be565b5b602083019150836001820283011115610317576103166102c3565b5b9250929050565b60008060208385031215610335576103346102af565b5b600083013567ffffffffffffffff811115610353576103526102b4565b5b61035f858286016102c8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103968261036b565b9050919050565b6103a68161038b565b82525050565b60006020820190506103c1600083018461039d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104015780820151818401526020810190506103e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610429826103c7565b61043381856103d2565b93506104438185602086016103e3565b61044c8161040d565b840191505092915050565b60006020820190508181036000830152610471818461041e565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f20746861742e0000000000600082015250565b60006104af601b836103d2565b91506104ba82610479565b602082019050919050565b600060208201905081810360008301526104de816104a2565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061056657607f821691505b6020821081036105795761057861051f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105a4565b6105eb86836105a4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061063261062d61062884610603565b61060d565b610603565b9050919050565b6000819050919050565b61064c83610617565b61066061065882610639565b8484546105b1565b825550505050565b600090565b610675610668565b610680818484610643565b505050565b5b818110156106a45761069960008261066d565b600181019050610686565b5050565b601f8211156106e9576106ba8161057f565b6106c384610594565b810160208510156106d2578190505b6106e66106de85610594565b830182610685565b50505b505050565b600082821c905092915050565b600061070c600019846008026106ee565b1980831691505092915050565b600061072583836106fb565b9150826002028217905092915050565b61073f83836104e5565b67ffffffffffffffff811115610758576107576104f0565b5b610762825461054e565b61076d8282856106a8565b6000601f83116001811461079c576000841561078a578287013590505b6107948582610719565b8655506107fc565b601f1984166107aa8661057f565b60005b828110156107d2578489013582556001820191506020850194506020810190506107ad565b868310156107ef57848901356107eb601f8916826106fb565b8355505b6001600288020188555050505b5050505050505056fea26469706673582212204ee1e2b1c6277c5f77a82579fb10a6a2b84c35c9c1f04e3232aef341dc74725264736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162000df738038062000df7833981810160405281019062000037919062000217565b3373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505080600090816200007c9190620004b3565b50506200059a565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000ed82620000a2565b810181811067ffffffffffffffff821117156200010f576200010e620000b3565b5b80604052505050565b60006200012462000084565b9050620001328282620000e2565b919050565b600067ffffffffffffffff821115620001555762000154620000b3565b5b6200016082620000a2565b9050602081019050919050565b60005b838110156200018d57808201518184015260208101905062000170565b60008484015250505050565b6000620001b0620001aa8462000137565b62000118565b905082815260208101848484011115620001cf57620001ce6200009d565b5b620001dc8482856200016d565b509392505050565b600082601f830112620001fc57620001fb62000098565b5b81516200020e84826020860162000199565b91505092915050565b60006020828403121562000230576200022f6200008e565b5b600082015167ffffffffffffffff81111562000251576200025062000093565b5b6200025f84828501620001e4565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002bb57607f821691505b602082108103620002d157620002d062000273565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200033b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002fc565b620003478683620002fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003946200038e62000388846200035f565b62000369565b6200035f565b9050919050565b6000819050919050565b620003b08362000373565b620003c8620003bf826200039b565b84845462000309565b825550505050565b600090565b620003df620003d0565b620003ec818484620003a5565b505050565b5b81811015620004145762000408600082620003d5565b600181019050620003f2565b5050565b601f82111562000463576200042d81620002d7565b6200043884620002ec565b8101602085101562000448578190505b620004606200045785620002ec565b830182620003f1565b50505b505050565b600082821c905092915050565b6000620004886000198460080262000468565b1980831691505092915050565b6000620004a3838362000475565b9150826002028217905092915050565b620004be8262000268565b67ffffffffffffffff811115620004da57620004d9620000b3565b5b620004e68254620002a2565b620004f382828562000418565b600060209050601f8311600181146200052b576000841562000516578287015190505b62000522858262000495565b86555062000592565b601f1984166200053b86620002d7565b60005b8281101562000565578489015182556001820191506020850194506020810190506200053e565b8683101562000585578489015162000581601f89168262000475565b8355505b6001600288020188555050505b505050505050565b60805161083b620005bc6000396000818160c9015261016d015261083b6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063368b8772146100515780638da5cb5b1461006d578063ce6d41de1461008b578063e21f37ce146100a9575b600080fd5b61006b6004803603810190610066919061031e565b6100c7565b005b61007561016b565b60405161008291906103ac565b60405180910390f35b61009361018f565b6040516100a09190610457565b60405180910390f35b6100b1610221565b6040516100be9190610457565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c906104c5565b60405180910390fd5b818160009182610166929190610735565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606000805461019e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ca9061054e565b80156102175780601f106101ec57610100808354040283529160200191610217565b820191906000526020600020905b8154815290600101906020018083116101fa57829003601f168201915b5050505050905090565b6000805461022e9061054e565b80601f016020809104026020016040519081016040528092919081815260200182805461025a9061054e565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102de576102dd6102b9565b5b8235905067ffffffffffffffff8111156102fb576102fa6102be565b5b602083019150836001820283011115610317576103166102c3565b5b9250929050565b60008060208385031215610335576103346102af565b5b600083013567ffffffffffffffff811115610353576103526102b4565b5b61035f858286016102c8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103968261036b565b9050919050565b6103a68161038b565b82525050565b60006020820190506103c1600083018461039d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104015780820151818401526020810190506103e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610429826103c7565b61043381856103d2565b93506104438185602086016103e3565b61044c8161040d565b840191505092915050565b60006020820190508181036000830152610471818461041e565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f20746861742e0000000000600082015250565b60006104af601b836103d2565b91506104ba82610479565b602082019050919050565b600060208201905081810360008301526104de816104a2565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061056657607f821691505b6020821081036105795761057861051f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105a4565b6105eb86836105a4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061063261062d61062884610603565b61060d565b610603565b9050919050565b6000819050919050565b61064c83610617565b61066061065882610639565b8484546105b1565b825550505050565b600090565b610675610668565b610680818484610643565b505050565b5b818110156106a45761069960008261066d565b600181019050610686565b5050565b601f8211156106e9576106ba8161057f565b6106c384610594565b810160208510156106d2578190505b6106e66106de85610594565b830182610685565b50505b505050565b600082821c905092915050565b600061070c600019846008026106ee565b1980831691505092915050565b600061072583836106fb565b9150826002028217905092915050565b61073f83836104e5565b67ffffffffffffffff811115610758576107576104f0565b5b610762825461054e565b61076d8282856106a8565b6000601f83116001811461079c576000841561078a578287013590505b6107948582610719565b8655506107fc565b601f1984166107aa8661057f565b60005b828110156107d2578489013582556001820191506020850194506020810190506107ad565b868310156107ef57848901356107eb601f8916826106fb565b8355505b6001600288020188555050505b5050505050505056fea2646970667358221220857f282e7fe7b42efc67e25fd9bfb82923b121ac6c201bc3bb0ce3395baaa0d664736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063368b8772146100515780638da5cb5b1461006d578063ce6d41de1461008b578063e21f37ce146100a9575b600080fd5b61006b6004803603810190610066919061031e565b6100c7565b005b61007561016b565b60405161008291906103ac565b60405180910390f35b61009361018f565b6040516100a09190610457565b60405180910390f35b6100b1610221565b6040516100be9190610457565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014c906104c5565b60405180910390fd5b818160009182610166929190610735565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606000805461019e9061054e565b80601f01602080910402602001604051908101604052809291908181526020018280546101ca9061054e565b80156102175780601f106101ec57610100808354040283529160200191610217565b820191906000526020600020905b8154815290600101906020018083116101fa57829003601f168201915b5050505050905090565b6000805461022e9061054e565b80601f016020809104026020016040519081016040528092919081815260200182805461025a9061054e565b80156102a75780601f1061027c576101008083540402835291602001916102a7565b820191906000526020600020905b81548152906001019060200180831161028a57829003601f168201915b505050505081565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102de576102dd6102b9565b5b8235905067ffffffffffffffff8111156102fb576102fa6102be565b5b602083019150836001820283011115610317576103166102c3565b5b9250929050565b60008060208385031215610335576103346102af565b5b600083013567ffffffffffffffff811115610353576103526102b4565b5b61035f858286016102c8565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006103968261036b565b9050919050565b6103a68161038b565b82525050565b60006020820190506103c1600083018461039d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104015780820151818401526020810190506103e6565b60008484015250505050565b6000601f19601f8301169050919050565b6000610429826103c7565b61043381856103d2565b93506104438185602086016103e3565b61044c8161040d565b840191505092915050565b60006020820190508181036000830152610471818461041e565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f20746861742e0000000000600082015250565b60006104af601b836103d2565b91506104ba82610479565b602082019050919050565b600060208201905081810360008301526104de816104a2565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061056657607f821691505b6020821081036105795761057861051f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105a4565b6105eb86836105a4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061063261062d61062884610603565b61060d565b610603565b9050919050565b6000819050919050565b61064c83610617565b61066061065882610639565b8484546105b1565b825550505050565b600090565b610675610668565b610680818484610643565b505050565b5b818110156106a45761069960008261066d565b600181019050610686565b5050565b601f8211156106e9576106ba8161057f565b6106c384610594565b810160208510156106d2578190505b6106e66106de85610594565b830182610685565b50505b505050565b600082821c905092915050565b600061070c600019846008026106ee565b1980831691505092915050565b600061072583836106fb565b9150826002028217905092915050565b61073f83836104e5565b67ffffffffffffffff811115610758576107576104f0565b5b610762825461054e565b61076d8282856106a8565b6000601f83116001811461079c576000841561078a578287013590505b6107948582610719565b8655506107fc565b601f1984166107aa8661057f565b60005b828110156107d2578489013582556001820191506020850194506020810190506107ad565b868310156107ef57848901356107eb601f8916826106fb565b8355505b6001600288020188555050505b5050505050505056fea2646970667358221220857f282e7fe7b42efc67e25fd9bfb82923b121ac6c201bc3bb0ce3395baaa0d664736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } \ No newline at end of file diff --git a/frontend/src/evm-output/deployed_addresses.json b/frontend/src/evm-output/deployed_addresses.json index cd3767e..864e7c9 100644 --- a/frontend/src/evm-output/deployed_addresses.json +++ b/frontend/src/evm-output/deployed_addresses.json @@ -1,4 +1,4 @@ { - "MessageBoxModule#MessageBox": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "MainModule#PADToken": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" + "MainModule#PADToken": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "MessageBoxModule#MessageBox": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" } diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index b32ba6c..5bddb1e 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -1,6 +1,7 @@ import { RouterProvider, createRouter } from "@tanstack/react-router"; import React from "react"; import ReactDOM from "react-dom/client"; +import { ContextsProvider } from "./components/ContextsProvider"; import "./index.css"; import { routeTree } from "./routeTree.gen"; @@ -13,6 +14,8 @@ declare module "@tanstack/react-router" { ReactDOM.createRoot(document.getElementById("root")!).render( - + + + ); diff --git a/frontend/src/routes/message-box.lazy.tsx b/frontend/src/routes/message-box.lazy.tsx index 0f5e03c..daca144 100644 --- a/frontend/src/routes/message-box.lazy.tsx +++ b/frontend/src/routes/message-box.lazy.tsx @@ -1,7 +1,7 @@ import { createLazyFileRoute } from "@tanstack/react-router"; import { useState } from "react"; import { useStore } from "../store"; -import { toastError, tryWithToast } from "../utils"; +import { toastError, tryWithToast } from "../utils/toast"; import { messageBox } from "../web3"; export const Route = createLazyFileRoute("/message-box")({ diff --git a/frontend/src/routes/pad-token.lazy.tsx b/frontend/src/routes/pad-token.lazy.tsx index e1dc3f4..b27feaf 100644 --- a/frontend/src/routes/pad-token.lazy.tsx +++ b/frontend/src/routes/pad-token.lazy.tsx @@ -1,8 +1,9 @@ import { createLazyFileRoute } from "@tanstack/react-router"; import { useState } from "react"; -import type { Numbers } from "web3"; import { useStore } from "../store"; -import { getFormInputValue, toastError, tryWithToast } from "../utils"; +import { getFormInputValue } from "../utils/form"; +import { toastError, tryWithToast } from "../utils/toast"; +import { formatPadTokenAmount } from "../utils/ui"; import { padToken, web3 } from "../web3"; export const Route = createLazyFileRoute("/pad-token")({ @@ -28,10 +29,8 @@ function PadTokenPage() { } await tryWithToast("Balance Of", async () => { - const balanceBN: Numbers = await padToken.methods - .balanceOf(address) - .call(); - setBalance(web3.utils.fromWei(balanceBN, "ether")); + const _balance: bigint = await padToken.methods.balanceOf(address).call(); + setBalance(formatPadTokenAmount(_balance)); }); }; @@ -86,7 +85,7 @@ function PadTokenPage() { Get
- Balance: {balance} PAD + Balance: {balance}
diff --git a/frontend/src/store.ts b/frontend/src/store.ts new file mode 100644 index 0000000..bc9dfa5 --- /dev/null +++ b/frontend/src/store.ts @@ -0,0 +1,19 @@ +import { create } from "zustand"; + +interface State { + connectedAccount: string | null; + setConnectedAccount: (connectedAccount: string) => void; + unsetConnectedAccount: () => void; + padTokenBalance: bigint | null; + setPadTokenBalance: (padTokenBalance: bigint) => void; + unsetPadTokenBalance: () => void; +} + +export const useStore = create()((set, get) => ({ + connectedAccount: null, + setConnectedAccount: (connectedAccount) => set({ connectedAccount }), + unsetConnectedAccount: () => set({ connectedAccount: null }), + padTokenBalance: null, + setPadTokenBalance: (padTokenBalance) => set({ padTokenBalance }), + unsetPadTokenBalance: () => set({ padTokenBalance: null }), +})); diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx deleted file mode 100644 index 92adf15..0000000 --- a/frontend/src/store.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { create } from "zustand"; - -interface State { - connectedAccount: string | null; - setConnectedAccount: (newAccount: string) => void; - unsetConnectedAccount: () => void; -} - -export const useStore = create()((set) => ({ - connectedAccount: null, - setConnectedAccount: (newAccount) => set({ connectedAccount: newAccount }), - unsetConnectedAccount: () => set({ connectedAccount: null }), -})); diff --git a/frontend/src/utils/context.ts b/frontend/src/utils/context.ts new file mode 100644 index 0000000..38a8d98 --- /dev/null +++ b/frontend/src/utils/context.ts @@ -0,0 +1,21 @@ +import { createContext, useContext } from "react"; + +export default function buildContext(): [ + React.Context, + () => TContext, +] { + const builtContext = createContext(null); + + const builtUseContext = () => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const contextInstance = useContext(builtContext); + if (contextInstance === null) { + throw new Error( + "You can use this hook only inside the context's provider." + ); + } + return contextInstance; + }; + + return [builtContext, builtUseContext]; +} diff --git a/frontend/src/utils/form.ts b/frontend/src/utils/form.ts new file mode 100644 index 0000000..3516595 --- /dev/null +++ b/frontend/src/utils/form.ts @@ -0,0 +1,5 @@ +export function getFormInputValue(form: HTMLFormElement, name: string) { + // @ts-expect-error + const input = form.elements[name] as HTMLInputElement; + return input.value; +} diff --git a/frontend/src/utils.ts b/frontend/src/utils/toast.ts similarity index 69% rename from frontend/src/utils.ts rename to frontend/src/utils/toast.ts index 197e78b..57386cb 100644 --- a/frontend/src/utils.ts +++ b/frontend/src/utils/toast.ts @@ -29,13 +29,3 @@ export async function tryWithToast( ); } } - -export function shortenAddress(address: string) { - return address.slice(0, 6) + "..." + address.slice(-4); -} - -export function getFormInputValue(form: HTMLFormElement, name: string) { - // @ts-expect-error - const input = form.elements[name] as HTMLInputElement; - return input.value; -} diff --git a/frontend/src/utils/ui.ts b/frontend/src/utils/ui.ts new file mode 100644 index 0000000..a6705d4 --- /dev/null +++ b/frontend/src/utils/ui.ts @@ -0,0 +1,9 @@ +import { web3 } from "../web3"; + +export function shortenAddress(address: string) { + return address.slice(0, 6) + "..." + address.slice(-4); +} + +export function formatPadTokenAmount(amount: bigint) { + return `${web3.utils.fromWei(amount, "ether").replace(/\.*$/, "")} PAD`; +}