diff --git a/src/blockchain/buyerMethods.ts b/src/blockchain/buyerMethods.ts index bdf97df..92cc2a8 100644 --- a/src/blockchain/buyerMethods.ts +++ b/src/blockchain/buyerMethods.ts @@ -1,6 +1,6 @@ import { useEtherStore } from "@/store/ether"; -import { getProvider } from "./provider"; +import { getContract, getProvider } from "./provider"; import { getP2PixAddress } from "./addresses"; import p2pix from "../utils/smart_contract_files/P2PIX.json"; @@ -14,9 +14,7 @@ const addLock = async ( ): Promise => { const etherStore = useEtherStore(); - const provider = getProvider(); - const signer = provider.getSigner(); - const p2pContract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); + const p2pContract = getContract(); const lock = await p2pContract.lock( depositId, // BigNumber @@ -75,26 +73,22 @@ const releaseLock = async ( return release; }; -const cancelDeposit = async (depositId: BigNumber): Promise => { - const provider = getProvider(); +const cancelDeposit = async (depositId: BigNumber): Promise => { + const contract = getContract(); - const signer = provider.getSigner(); - const contract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); - await contract.cancelDeposit(depositId); + const cancel = await contract.cancelDeposit(depositId); + await cancel.wait(); - return true; + return cancel; }; -const withdrawDeposit = async (depositId: BigNumber): Promise => { - const provider = getProvider(); +const withdrawDeposit = async (depositId: BigNumber): Promise => { + const contract = getContract(); - if (!provider) return false; + const withdraw = await contract.withdraw(depositId, []); + await withdraw.wait(); - const signer = provider.getSigner(); - const contract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); - await contract.withdraw(depositId, []); - - return true; + return withdraw; }; export { cancelDeposit, withdrawDeposit, addLock, releaseLock }; diff --git a/src/blockchain/events.ts b/src/blockchain/events.ts index 2f18f5d..f0242d0 100644 --- a/src/blockchain/events.ts +++ b/src/blockchain/events.ts @@ -3,8 +3,7 @@ import { Contract, ethers } from "ethers"; import p2pix from "../utils/smart_contract_files/P2PIX.json"; import { formatEther } from "ethers/lib/utils"; -import { getProvider } from "./provider"; -import { getP2PixAddress } from "./addresses"; +import { getContract } from "./provider"; import type { ValidDeposit } from "@/model/ValidDeposit"; const getNetworksLiquidity = async (): Promise => { @@ -50,15 +49,14 @@ const getValidDeposits = async ( if (contract) { p2pContract = contract; } else { - const provider = getProvider(); - const signer = provider.getSigner(); - - p2pContract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); + p2pContract = getContract(true); } const filterDeposits = p2pContract.filters.DepositAdded(null); const eventsDeposits = await p2pContract.queryFilter(filterDeposits); + p2pContract = getContract(); // get metamask provider contract + const depositList = await Promise.all( eventsDeposits.map(async (deposit) => { const mappedDeposit = await p2pContract.mapDeposits( diff --git a/src/blockchain/provider.ts b/src/blockchain/provider.ts index 4950f11..63bac1a 100644 --- a/src/blockchain/provider.ts +++ b/src/blockchain/provider.ts @@ -1,27 +1,36 @@ import { useEtherStore } from "@/store/ether"; +import p2pix from "../utils/smart_contract_files/P2PIX.json"; + import { updateWalletStatus } from "./wallet"; import { getProviderUrl, isPossibleNetwork, possibleChains, network2Chain, + getP2PixAddress, } from "./addresses"; import { ethers } from "ethers"; -const getProvider = (): - | ethers.providers.Web3Provider - | ethers.providers.JsonRpcProvider => { +const getProvider = ( + onlyAlchemyProvider: boolean = false +): ethers.providers.Web3Provider | ethers.providers.JsonRpcProvider => { const window_ = window as any; const connection = window_.ethereum; - if (!connection) + if (!connection || onlyAlchemyProvider) return new ethers.providers.JsonRpcProvider(getProviderUrl()); // alchemy provider return new ethers.providers.Web3Provider(connection); // metamask provider }; +const getContract = (onlyAlchemyProvider: boolean = false) => { + const provider = getProvider(onlyAlchemyProvider); + const signer = provider.getSigner(); + return new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); +}; + const connectProvider = async (): Promise => { const window_ = window as any; const connection = window_.ethereum; @@ -79,6 +88,7 @@ const requestNetworkChange = async (network: string): Promise => { export { getProvider, + getContract, connectProvider, listenToNetworkChange, requestNetworkChange, diff --git a/src/blockchain/sellerMethods.ts b/src/blockchain/sellerMethods.ts index a316059..6385f7f 100644 --- a/src/blockchain/sellerMethods.ts +++ b/src/blockchain/sellerMethods.ts @@ -1,10 +1,9 @@ -import { getProvider } from "./provider"; +import { getContract, getProvider } from "./provider"; import { getTokenAddress, getP2PixAddress } from "./addresses"; import { parseEther } from "ethers/lib/utils"; import { ethers } from "ethers"; -import p2pix from "../utils/smart_contract_files/P2PIX.json"; import mockToken from "../utils/smart_contract_files/MockToken.json"; const approveTokens = async (tokenQty: string): Promise => { @@ -28,10 +27,7 @@ const approveTokens = async (tokenQty: string): Promise => { }; const addDeposit = async (tokenQty: string, pixKey: string): Promise => { - const provider = getProvider(); - - const signer = provider.getSigner(); - const p2pContract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); + const p2pContract = getContract(); const deposit = await p2pContract.deposit( getTokenAddress(), diff --git a/src/blockchain/wallet.ts b/src/blockchain/wallet.ts index 33d4056..f7175aa 100644 --- a/src/blockchain/wallet.ts +++ b/src/blockchain/wallet.ts @@ -1,9 +1,8 @@ import { useEtherStore } from "@/store/ether"; -import { getProvider } from "./provider"; -import { getP2PixAddress, getTokenAddress, possibleChains } from "./addresses"; +import { getContract, getProvider } from "./provider"; +import { getTokenAddress, possibleChains } from "./addresses"; -import p2pix from "../utils/smart_contract_files/P2PIX.json"; import mockToken from "../utils/smart_contract_files/MockToken.json"; import { ethers, type Event } from "ethers"; @@ -52,10 +51,7 @@ const listValidDepositTransactionsByWalletAddress = async ( const listAllTransactionByWalletAddress = async ( walletAddress: string ): Promise => { - const provider = getProvider(); - - const signer = provider.getSigner(); - const p2pContract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); + const p2pContract = getContract(); const filterDeposits = p2pContract.filters.DepositAdded([walletAddress]); const eventsDeposits = await p2pContract.queryFilter(filterDeposits); @@ -79,10 +75,7 @@ const listAllTransactionByWalletAddress = async ( const listReleaseTransactionByWalletAddress = async ( walletAddress: string ): Promise => { - const provider = getProvider(); - - const signer = provider.getSigner(); - const p2pContract = new ethers.Contract(getP2PixAddress(), p2pix.abi, signer); + const p2pContract = getContract(); const filterReleasedLocks = p2pContract.filters.LockReleased([walletAddress]); const eventsReleasedLocks = await p2pContract.queryFilter(