From c4b74309cc1a62359630063affaa398fdb8f67ff Mon Sep 17 00:00:00 2001 From: Bruno Date: Fri, 16 Dec 2022 01:19:08 -0300 Subject: [PATCH] adding filter for valid deposits --- src/components/SearchComponent.vue | 13 ++++---- src/components/TopBar.vue | 6 ++-- src/utils/blockchain.ts | 51 ++++++++++++++++++++++++++---- src/views/HomeView.vue | 24 ++++++-------- src/views/MockView.vue | 14 +++++++- 5 files changed, 76 insertions(+), 32 deletions(-) diff --git a/src/components/SearchComponent.vue b/src/components/SearchComponent.vue index d5e5c53..72f8b37 100644 --- a/src/components/SearchComponent.vue +++ b/src/components/SearchComponent.vue @@ -9,7 +9,7 @@ import blockchain from "../utils/blockchain"; // Store reference const etherStore = useEtherStore(); -const { walletAddress, depositsAddedList } = storeToRefs(etherStore); +const { walletAddress, depositsValidList } = storeToRefs(etherStore); // Reactive state const tokenValue = ref(0); @@ -59,14 +59,13 @@ const verifyLiquidity = () => { selectedDeposit.value = null; if (!walletAddress.value || tokenValue.value <= 0) return; - depositsAddedList.value.find((element) => { - const p2pixTokenValue = Number( - blockchain.formatBigNumber(element.args.amount) - ); + depositsValidList.value.find((element) => { + const remaining = element.remaining; if ( - tokenValue.value!! <= p2pixTokenValue && + element.valid == true && + tokenValue.value!! <= remaining && tokenValue.value!! != 0 && - element.args.seller !== walletAddress.value + element.seller !== walletAddress.value ) { enableSelectButton.value = true; hasLiquidity.value = true; diff --git a/src/components/TopBar.vue b/src/components/TopBar.vue index 4bb0997..6b7de9f 100644 --- a/src/components/TopBar.vue +++ b/src/components/TopBar.vue @@ -24,9 +24,9 @@ const formatWalletAddress = (): string => { return `${initialText}...${finalText}`; }; -const formatWalletBalance = (): string => { - const fixed = balance.value.substring(0, 8); - return fixed; +const formatWalletBalance = (): String => { + const fixed = Number(balance.value); + return fixed.toFixed(2); }; diff --git a/src/utils/blockchain.ts b/src/utils/blockchain.ts index cf2f036..d1d6853 100644 --- a/src/utils/blockchain.ts +++ b/src/utils/blockchain.ts @@ -132,6 +132,38 @@ const listReleaseTransactionByWalletAddress = async ( }; // Update events at store methods +const updateValidDeposits = async () => { + const etherStore = useEtherStore(); + const window_ = window as any; + const connection = window_.ethereum; + let provider: ethers.providers.Web3Provider | null = null; + if (!connection) return; + provider = new ethers.providers.Web3Provider(connection); + const signer = provider.getSigner(); + const p2pContract = new ethers.Contract(addresses.p2pix, p2pix.abi, signer); + + const filterDeposits = p2pContract.filters.DepositAdded(null); + const eventsDeposits = await p2pContract.queryFilter(filterDeposits); + + const depositList = [] as any[]; + + eventsDeposits.forEach(async (deposit) => { + const mappedDeposit = await mapDeposits(deposit.args?.depositID); + + const validDeposit = { + depositID: deposit.args?.depositID, + remaining: formatBigNumber(mappedDeposit.remaining), + seller: mappedDeposit.seller, + pixKey: mappedDeposit.pixTarget, + valid: mappedDeposit.valid, + }; + + depositList.push(validDeposit); + }); + + etherStore.setDepositsValidList(depositList); +}; + const updateDepositAddedEvents = async () => { const etherStore = useEtherStore(); const window_ = window as any; @@ -192,9 +224,10 @@ const connectProvider = async () => { await updateDepositAddedEvents(); await updateLockAddedEvents(); await updateLockReleasedEvents(); + await updateValidDeposits(); - connection.on("accountsChanged", () => { - updateWalletStatus(); + connection.on("accountsChanged", async () => { + await updateWalletStatus(); }); }; @@ -209,7 +242,7 @@ const getProvider = (): ethers.providers.Web3Provider | null => { // Deposit methods // Gets value and pix key from user's form to create a deposit in the blockchain -const addDeposit = async (tokenQty: string, pixKey: string) => { +const addDeposit = async (tokenQty: Number, pixKey: string) => { const provider = getProvider(); if (!provider) return; @@ -225,20 +258,21 @@ const addDeposit = async (tokenQty: string, pixKey: string) => { // First get the approval const apprv = await tokenContract.approve( addresses.p2pix, - formatEther(tokenQty) + formatEther(String(tokenQty)) ); await apprv.wait(); // Now we make the deposit const deposit = await p2pContract.deposit( addresses.token, - formatEther(tokenQty), + formatEther(String(tokenQty)), pixKey ); await deposit.wait(); - updateWalletStatus(); - updateDepositAddedEvents(); + await updateWalletStatus(); + await updateDepositAddedEvents(); + await updateValidDeposits(); }; // Get specific deposit data by its ID @@ -278,6 +312,7 @@ const addLock = async (depositId: BigNumber, amount: Number) => { while (etherStore.locksAddedList.length === oldEventsLen) { await updateLockAddedEvents(); + await updateValidDeposits(); } return lock; @@ -331,6 +366,7 @@ const releaseLock = async ( ); release.wait(); await updateLockReleasedEvents(); + await updateValidDeposits(); return release; }; @@ -362,4 +398,5 @@ export default { mapLocks, releaseLock, updateLockAddedEvents, + updateValidDeposits, }; diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 7627d11..a45b568 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -28,14 +28,10 @@ const lastWalletReleaseTransactions = ref([]); const confirmBuyClick = async ({ selectedDeposit, tokenValue }: any) => { // finish buy screen - let depositDetail; - // depositId is BigNumber type object - const depositId = selectedDeposit["args"]["depositID"]; - await blockchain - .mapDeposits(depositId) - .then((deposit) => (depositDetail = deposit)); + const depositDetail = selectedDeposit; + const depositId = selectedDeposit.depositID; + pixTarget.value = selectedDeposit.pixKey; tokenAmount.value = tokenValue; - pixTarget.value = String(depositDetail?.pixTarget); // Makes lock with deposit ID and the Amount if (depositDetail) { @@ -59,20 +55,20 @@ const releaseTransaction = async ({ e2eId }: any) => { flowStep.value = Step.List; loadingRelease.value = true; - const findLockId = locksAddedList.value.find((element) => { + const findLock = locksAddedList.value.find((element) => { if (element.transactionHash === lockTransactionHash.value) { - lockId.value = element.args.lockID; // BigNumber type + lockId.value = element.args.lockID; return true; } return false; }); - if (findLockId) { + if (findLock && tokenAmount.value) { const release = await blockchain.releaseLock( - pixTarget.value, // String - tokenAmount.value ?? 0, // Number - e2eId, // String - lockId.value // String + pixTarget.value, + tokenAmount.value, + e2eId, + lockId.value ); release.wait(); diff --git a/src/views/MockView.vue b/src/views/MockView.vue index 1f4324d..faf0fbb 100644 --- a/src/views/MockView.vue +++ b/src/views/MockView.vue @@ -7,6 +7,7 @@ import blockchain from "../utils/blockchain"; // Blockchain Data const etherStore = useEtherStore(); +const { depositsValidList } = storeToRefs(etherStore); const { depositsAddedList } = storeToRefs(etherStore); const { locksAddedList } = storeToRefs(etherStore); @@ -35,7 +36,7 @@ const formatWalletAddress = (wallet: string): string => { // Gets value and pix key from user's form to create a deposit in the blockchain const mockDeposit = () => { if (!depositValue.value || !depositPixKey.value) return; - blockchain.addDeposit(depositValue.value.toString(), depositPixKey.value); + blockchain.addDeposit(depositValue.value, depositPixKey.value); }; // Get specific deposit data by its ID @@ -102,6 +103,17 @@ const mapLock = (lockId: string) => { MRBZ: {{ blockchain.formatBigNumber(lock.args.amount) }} +