From ef545735a2808ba24f13af4e2f7c888d564a7c21 Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Wed, 7 Aug 2024 14:20:09 +0200 Subject: [PATCH 1/5] add processing approvals from endpoint --- packages/sdk/src/types.ts | 1 + web/src/lib/components/TransactionCard.svelte | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index d5b4463..93f3ecd 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -76,6 +76,7 @@ export interface Solution { name: string; }; transaction: Transaction; + approvals?: Transaction[]; } export interface Transaction { diff --git a/web/src/lib/components/TransactionCard.svelte b/web/src/lib/components/TransactionCard.svelte index 687302f..a2de366 100644 --- a/web/src/lib/components/TransactionCard.svelte +++ b/web/src/lib/components/TransactionCard.svelte @@ -52,20 +52,27 @@ const callOptions: NonPayableCallOptions = { chainId: quotaRecord.sourceChain }; // Approval sniff etc...\ - const erc20 = new web3.eth.Contract(erc20Abi, quotaRecord.sourceTokenAddress); + if (quotaRecord.approvals?.length > 0) { + for (const approval in quotaRecord.approvals) { + const receipt = await web3.eth.sendTransaction(approval); + console.warn(`Approval receipt: `, receipt); + } + } else { + const erc20 = new web3.eth.Contract(erc20Abi, quotaRecord.sourceTokenAddress); - const allowed = await erc20.methods - .allowance(ownerAddress, quotaRecord.transaction.to) - .call(callOptions); + const allowed = await erc20.methods + .allowance(ownerAddress, quotaRecord.transaction.to) + .call(callOptions); - if (BigInt(quotaRecord.amount) > BigInt(allowed)) { - const approval = await erc20.methods - .approve(quotaRecord.transaction.to, quotaRecord.amount) - .send({ - ...callOptions, - from: ownerAddress - }); - if (!approval.status) throw new Error('Not Approved!'); // To stop execution + if (BigInt(quotaRecord.amount) > BigInt(allowed)) { + const approval = await erc20.methods + .approve(quotaRecord.transaction.to, quotaRecord.amount) + .send({ + ...callOptions, + from: ownerAddress + }); + if (!approval.status) throw new Error('Not Approved!'); // To stop execution + } } // FINAL STEP! From 6ae5f2823782862234b376ef5ba44389b79cef6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20S=CC=8Ctokovic=CC=81?= Date: Wed, 7 Aug 2024 14:32:46 +0200 Subject: [PATCH 2/5] chore: fix linter error --- web/src/lib/components/TransactionCard.svelte | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/web/src/lib/components/TransactionCard.svelte b/web/src/lib/components/TransactionCard.svelte index a2de366..709c0bb 100644 --- a/web/src/lib/components/TransactionCard.svelte +++ b/web/src/lib/components/TransactionCard.svelte @@ -61,16 +61,16 @@ const erc20 = new web3.eth.Contract(erc20Abi, quotaRecord.sourceTokenAddress); const allowed = await erc20.methods - .allowance(ownerAddress, quotaRecord.transaction.to) - .call(callOptions); + .allowance(ownerAddress, quotaRecord.transaction.to) + .call(callOptions); if (BigInt(quotaRecord.amount) > BigInt(allowed)) { const approval = await erc20.methods - .approve(quotaRecord.transaction.to, quotaRecord.amount) - .send({ - ...callOptions, - from: ownerAddress - }); + .approve(quotaRecord.transaction.to, quotaRecord.amount) + .send({ + ...callOptions, + from: ownerAddress + }); if (!approval.status) throw new Error('Not Approved!'); // To stop execution } } From d5136e85172dedab00b42838bc8d8079a7bf9410 Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Wed, 7 Aug 2024 16:26:12 +0200 Subject: [PATCH 3/5] wip debugging approval fails --- web/src/lib/components/TransactionCard.svelte | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/src/lib/components/TransactionCard.svelte b/web/src/lib/components/TransactionCard.svelte index a2de366..6bfe28b 100644 --- a/web/src/lib/components/TransactionCard.svelte +++ b/web/src/lib/components/TransactionCard.svelte @@ -51,9 +51,12 @@ // @ts-expect-error // chainId is missing in web3js call options type const callOptions: NonPayableCallOptions = { chainId: quotaRecord.sourceChain }; + console.info('Quote', quotaRecord) + // Approval sniff etc...\ if (quotaRecord.approvals?.length > 0) { for (const approval in quotaRecord.approvals) { + console.log('Requesting approval:', approval) const receipt = await web3.eth.sendTransaction(approval); console.warn(`Approval receipt: `, receipt); } From 609509df6d97530fead1cf70b3ba7e90d0326b63 Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Wed, 7 Aug 2024 16:28:08 +0200 Subject: [PATCH 4/5] linter fix --- web/src/lib/components/TransactionCard.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/lib/components/TransactionCard.svelte b/web/src/lib/components/TransactionCard.svelte index ea0dd57..469d32a 100644 --- a/web/src/lib/components/TransactionCard.svelte +++ b/web/src/lib/components/TransactionCard.svelte @@ -51,12 +51,12 @@ // @ts-expect-error // chainId is missing in web3js call options type const callOptions: NonPayableCallOptions = { chainId: quotaRecord.sourceChain }; - console.info('Quote', quotaRecord) + console.info('Quote', quotaRecord); // Approval sniff etc...\ if (quotaRecord.approvals?.length > 0) { for (const approval in quotaRecord.approvals) { - console.log('Requesting approval:', approval) + console.log('Requesting approval:', approval); const receipt = await web3.eth.sendTransaction(approval); console.warn(`Approval receipt: `, receipt); } From d9111fdd3d7b4c7d8a38617c40e3811c5f0c0771 Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Wed, 7 Aug 2024 16:33:16 +0200 Subject: [PATCH 5/5] fix iterating approvals --- web/src/lib/components/TransactionCard.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/lib/components/TransactionCard.svelte b/web/src/lib/components/TransactionCard.svelte index 469d32a..c15077d 100644 --- a/web/src/lib/components/TransactionCard.svelte +++ b/web/src/lib/components/TransactionCard.svelte @@ -55,7 +55,7 @@ // Approval sniff etc...\ if (quotaRecord.approvals?.length > 0) { - for (const approval in quotaRecord.approvals) { + for (const approval of quotaRecord.approvals) { console.log('Requesting approval:', approval); const receipt = await web3.eth.sendTransaction(approval); console.warn(`Approval receipt: `, receipt);