diff --git a/src/blockchain/provider.ts b/src/blockchain/provider.ts index c64ceec..1f15297 100644 --- a/src/blockchain/provider.ts +++ b/src/blockchain/provider.ts @@ -4,71 +4,69 @@ import { NetworkEnum } from "@/model/NetworkEnum"; import { updateWalletStatus } from "./wallet"; const getProviderUrl = (): string => { - const etherStore = useEtherStore(); + const etherStore = useEtherStore(); - const possibleProvidersUrls: {[key: string]: string} = { - Ethereum: import.meta.env.VITE_GOERLI_API_URL, - Polygon: import.meta.env.VITE_MUMBAI_API_URL, - Localhost: import.meta.env.VITE_GOERLI_API_URL - } + const possibleProvidersUrls: { [key: string]: string } = { + Ethereum: import.meta.env.VITE_GOERLI_API_URL, + Polygon: import.meta.env.VITE_MUMBAI_API_URL, + Localhost: import.meta.env.VITE_GOERLI_API_URL, + }; - return possibleProvidersUrls[etherStore.networkName] -} + return possibleProvidersUrls[etherStore.networkName]; +}; -const getProvider = (): ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider => { - const window_ = window as any; - const connection = window_.ethereum; - - if (!connection) - return new ethers.providers.JsonRpcProvider(getProviderUrl()); // alchemy provider +const getProvider = (): + | ethers.providers.Web3Provider + | ethers.providers.JsonRpcProvider => { + const window_ = window as any; + const connection = window_.ethereum; - return new ethers.providers.Web3Provider(connection); // metamask provider + if (!connection) + return new ethers.providers.JsonRpcProvider(getProviderUrl()); // alchemy provider + + return new ethers.providers.Web3Provider(connection); // metamask provider }; const connectProvider = async (): Promise => { - const window_ = window as any; - const connection = window_.ethereum; - const provider = getProvider(); - - if(!(provider instanceof ethers.providers.Web3Provider)){ - window.alert("Please, connect to metamask extension"); - return null; - } - - await updateWalletStatus(); - // await updateValidDeposits(); - // await updateDepositAddedEvents(); - // await updateLockAddedEvents(); - // await updateLockReleasedEvents(); - - listenToNetworkChange(connection); - listenToWalletChange(connection); + const window_ = window as any; + const connection = window_.ethereum; + const provider = getProvider(); + + if (!(provider instanceof ethers.providers.Web3Provider)) { + window.alert("Please, connect to metamask extension"); + return null; + } + + await updateWalletStatus(); + // await updateValidDeposits(); + // await updateDepositAddedEvents(); + // await updateLockAddedEvents(); + // await updateLockReleasedEvents(); + + listenToNetworkChange(connection); + listenToWalletChange(connection); }; const listenToWalletChange = (connection: any): void => { - connection.on("accountsChanged", async () => { - await updateWalletStatus(); - }); -} - + connection.on("accountsChanged", async () => { + await updateWalletStatus(); + }); +}; const listenToNetworkChange = (connection: any) => { - const etherStore = useEtherStore(); - - const possibleNetworks: {[key: string]: NetworkEnum} = { - "0x5": NetworkEnum.ethereum, - "0x13881": NetworkEnum.polygon, - "0x7a69": NetworkEnum.localhost, - } - - connection.on("chainChanged", (networkChain: string) => { - if (Object.keys(possibleNetworks).includes(networkChain)){ - etherStore.setNetworkName(possibleNetworks[networkChain]); - } - }); -} + const etherStore = useEtherStore(); -export { - getProvider, - listenToNetworkChange - } \ No newline at end of file + const possibleNetworks: { [key: string]: NetworkEnum } = { + "0x5": NetworkEnum.ethereum, + "0x13881": NetworkEnum.polygon, + "0x7a69": NetworkEnum.localhost, + }; + + connection.on("chainChanged", (networkChain: string) => { + if (Object.keys(possibleNetworks).includes(networkChain)) { + etherStore.setNetworkName(possibleNetworks[networkChain]); + } + }); +}; + +export { getProvider, connectProvider, listenToNetworkChange }; diff --git a/src/blockchain/wallet.ts b/src/blockchain/wallet.ts index e78f65c..bb8ac96 100644 --- a/src/blockchain/wallet.ts +++ b/src/blockchain/wallet.ts @@ -1,43 +1,38 @@ import { ethers } from "ethers"; import { getProvider } from "./provider"; -import blockchain from "../utils/blockchain" +import blockchain from "../utils/blockchain"; import { useEtherStore } from "@/store/ether"; import mockToken from "../utils/smart_contract_files/MockToken.json"; import addresses from "../utils/smart_contract_files/localhost.json"; const updateWalletStatus = async () => { - const etherStore = useEtherStore(); - const provider = getProvider(); - - if (!provider) return; - - const signer = provider.getSigner(); - const contract = new ethers.Contract(addresses.token, mockToken.abi, signer); - - const walletAddress = await provider.send("eth_requestAccounts", []); - - const balance = await contract.balanceOf(walletAddress[0]); - etherStore.setBalance(blockchain.formatBigNumber(balance)); - etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0])); - }; - - const updateWalletBalance = async () => { - const etherStore = useEtherStore(); - const provider = getProvider(); - - if (!provider) return; - - const signer = provider.getSigner(); - const contract = new ethers.Contract(addresses.token, mockToken.abi, signer); - - const walletAddress = await provider.send("eth_requestAccounts", []); - - const balance = await contract.balanceOf(walletAddress[0]); - etherStore.setBalance(blockchain.formatBigNumber(balance)); - }; + const etherStore = useEtherStore(); + const provider = getProvider(); - export { - updateWalletStatus, - updateWalletBalance - } \ No newline at end of file + const signer = provider.getSigner(); + const contract = new ethers.Contract(addresses.token, mockToken.abi, signer); + + const walletAddress = await provider.send("eth_requestAccounts", []); + + const balance = await contract.balanceOf(walletAddress[0]); + etherStore.setBalance(blockchain.formatBigNumber(balance)); + etherStore.setWalletAddress(ethers.utils.getAddress(walletAddress[0])); +}; + +const updateWalletBalance = async () => { + const etherStore = useEtherStore(); + const provider = getProvider(); + + if (!provider) return; + + const signer = provider.getSigner(); + const contract = new ethers.Contract(addresses.token, mockToken.abi, signer); + + const walletAddress = await provider.send("eth_requestAccounts", []); + + const balance = await contract.balanceOf(walletAddress[0]); + etherStore.setBalance(blockchain.formatBigNumber(balance)); +}; + +export { updateWalletStatus, updateWalletBalance }; diff --git a/src/components/TopBar.vue b/src/components/TopBar.vue index b93ac71..813027f 100644 --- a/src/components/TopBar.vue +++ b/src/components/TopBar.vue @@ -3,7 +3,7 @@ import { storeToRefs } from "pinia"; import { useEtherStore } from "../store/ether"; import { ref } from "vue"; import { NetworkEnum } from "@/model/NetworkEnum"; -import blockchain from "../utils/blockchain"; +import { connectProvider } from "../blockchain/provider"; import ethereumImage from "../assets/ethereum.svg"; import polygonImage from "../assets/polygon.svg"; @@ -20,7 +20,7 @@ const currencyMenuHoverToggle = ref(false); //Methods const connectMetaMask = () => { - blockchain.connectProvider(); + connectProvider(); }; const formatWalletAddress = (): string => { @@ -52,7 +52,7 @@ const getNetworkImage = (networkName: NetworkEnum) => { let validImages = { Ethereum: ethereumImage, Polygon: polygonImage, - Localhost: ethereumImage + Localhost: ethereumImage, }; return validImages[networkName];