From a0964d5096d4df5b6d0c9bf6ca1c1bedb4e2f265 Mon Sep 17 00:00:00 2001 From: Bogdan Fazakas Date: Fri, 15 Dec 2023 13:39:39 +0200 Subject: [PATCH] Fix provider fee approval in order helper (#1795) * fix provider fee approval in order helper * fix lint * undo hardcode --- src/utils/OrderUtils.ts | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/utils/OrderUtils.ts b/src/utils/OrderUtils.ts index 53384ad0..132d81e1 100644 --- a/src/utils/OrderUtils.ts +++ b/src/utils/OrderUtils.ts @@ -10,7 +10,9 @@ import { approve, FixedRateExchange, ConsumeMarketFee, - ProviderFees + ProviderFees, + ZERO_ADDRESS, + approveWei } from '../index' import Decimal from 'decimal.js' @@ -88,13 +90,32 @@ export async function orderAsset( ) ).providerFee + if ( + fees && + fees.providerFeeAddress !== ZERO_ADDRESS && + fees.providerFeeAmount && + parseInt(fees.providerFeeAmount) > 0 + ) { + try { + await approveWei( + consumerAccount, + config, + await consumerAccount.getAddress(), + fees.providerFeeToken, + asset.services[0].datatokenAddress, + fees.providerFeeAmount + ) + } catch (error) { + throw new Error(`Failed to approve provider fee token ${fees.providerFeeToken}`) + } + } + const orderParams = { consumer: consumerAddress || (await consumerAccount.getAddress()), serviceIndex, _providerFee: fees, _consumeMarketFee: consumeMarketOrderFee } as OrderParams - switch (pricingType) { case 'free': { if (templateIndex === 1) { @@ -105,8 +126,9 @@ export async function orderAsset( await consumerAccount.getAddress() ) if (!dispenserTx) { - return + throw new Error(`Failed to dispense !`) } + await dispenserTx.wait() return await datatoken.startOrder( asset.datatokens[datatokenIndex].address, orderParams.consumer, @@ -133,6 +155,7 @@ export async function orderAsset( ) const fees = await fre.getFeesInfo(fixedRates[fixedRateIndex].id) const exchange = await fre.getExchange(fixedRates[fixedRateIndex].id) + const { baseTokenAmount } = await fre.calcBaseInGivenDatatokensOut( fees.exchangeId, '1', @@ -166,7 +189,7 @@ export async function orderAsset( ) const txApprove = typeof tx !== 'number' ? await tx.wait() : tx if (!txApprove) { - return + throw new Error(`Failed to appove ${exchange.baseToken} !`) } const freTx = await fre.buyDatatokens( exchange.exchangeId, @@ -177,7 +200,7 @@ export async function orderAsset( ) const buyDtTx = await freTx.wait() if (!buyDtTx) { - return + throw new Error(`Failed to buy datatoken from fixed rate!`) } return await datatoken.startOrder( asset.datatokens[datatokenIndex].address, @@ -202,11 +225,12 @@ export async function orderAsset( if (!txApprove) { return } - return await datatoken.buyFromFreAndOrder( + const txBuy = await datatoken.buyFromFreAndOrder( asset.datatokens[datatokenIndex].address, orderParams, freParams ) + return txBuy } break }