From 5cf8321a01db2ff1659a92d49088919dacc85c8d Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 29 Aug 2024 16:03:46 +0300 Subject: [PATCH 1/2] add minAmountError nandling for changeNow --- .../changenow-cross-chain-provider.ts | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-provider.ts b/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-provider.ts index 51797840683..6eb465b199f 100644 --- a/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-provider.ts +++ b/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-provider.ts @@ -1,5 +1,10 @@ import BigNumber from 'bignumber.js'; -import { MaxAmountError, MinAmountError, NotSupportedTokensError } from 'src/common/errors'; +import { + MaxAmountError, + MinAmountError, + NotSupportedTokensError, + RubicSdkError +} from 'src/common/errors'; import { PriceToken, PriceTokenAmount, Token } from 'src/common/tokens'; import { nativeTokensList } from 'src/common/tokens/constants/native-tokens'; import { compareAddresses } from 'src/common/utils/blockchain'; @@ -145,7 +150,12 @@ export class ChangenowCrossChainProvider extends CrossChainProvider { const transit = onChainTrade ? transitCurrency! || nativeCurrency! : fromCurrency!; try { - const toAmount = await this.getToAmount(transit, toCurrency, transitMinAmount); + const { toAmount, quoteError } = await this.getToAmount( + transit, + toCurrency, + transitMinAmount, + from.symbol + ); const to = new PriceTokenAmount({ ...toToken.asStruct, @@ -174,7 +184,13 @@ export class ChangenowCrossChainProvider extends CrossChainProvider { options.providerAddress, await this.getRoutePath(from, to) ); - + if (quoteError) { + return { + trade, + error: quoteError, + tradeType: this.type + }; + } const error = await this.checkMinMaxAmounts(transitFromToken, transit, toCurrency); if (error) { return { @@ -256,17 +272,33 @@ export class ChangenowCrossChainProvider extends CrossChainProvider { private async getToAmount( fromCurrency: ChangenowCurrency, toCurrency: ChangenowCurrency, - fromAmount: BigNumber - ): Promise { - const res = await ChangeNowCrossChainApiService.getQuoteTx({ - fromCurrency: fromCurrency.ticker, - toCurrency: toCurrency.ticker, - fromAmount: fromAmount.toFixed(), - fromNetwork: fromCurrency.network, - toNetwork: toCurrency.network - }); - - return new BigNumber(res.toAmount); + fromAmount: BigNumber, + fromSymbol: string + ): Promise<{ + toAmount: BigNumber; + quoteError?: RubicSdkError; + }> { + try { + const res = await ChangeNowCrossChainApiService.getQuoteTx({ + fromCurrency: fromCurrency.ticker, + toCurrency: toCurrency.ticker, + fromAmount: fromAmount.toFixed(), + fromNetwork: fromCurrency.network, + toNetwork: toCurrency.network + }); + + return { toAmount: new BigNumber(res.toAmount) }; + } catch (err) { + const error = err?.error; + if (error?.message?.includes('Out of min amount')) { + const minAmount = new BigNumber(error?.payload?.range?.minAmount); + return { + toAmount: new BigNumber(0), + quoteError: new MinAmountError(minAmount, fromSymbol) + }; + } + throw new RubicSdkError(error?.message); + } } private async getMinMaxRange( From 92f2f41f6eb2e0ee7edcc2410b22029dab75f972 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 2 Sep 2024 15:26:51 +0300 Subject: [PATCH 2/2] set sdk release version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 027ec95f359..934abb91942 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rubic-sdk", - "version": "5.36.1", + "version": "5.36.3", "description": "Simplify dApp creation", "main": "lib/index.js", "types": "lib/index.d.ts",