diff --git a/package.json b/package.json index d05dea71a5..f513a736b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rubic-sdk", - "version": "4.55.2", + "version": "4.55.3", "description": "Simplify dApp creation", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/evm-bridgers-trade/evm-bridgers-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/evm-bridgers-trade/evm-bridgers-cross-chain-trade.ts index 1106931647..2dee602650 100644 --- a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/evm-bridgers-trade/evm-bridgers-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/evm-bridgers-trade/evm-bridgers-cross-chain-trade.ts @@ -63,7 +63,7 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { }, providerAddress || EvmWeb3Pure.EMPTY_ADDRESS, [] - ).getContractParams({ receiverAddress }); + ).getContractParams({ receiverAddress }, true); const [proxyGasLimit, proxyGasDetails] = await Promise.all([ web3Public.getEstimatedGas( @@ -93,7 +93,8 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { toTokenAmountMin, walletAddress, providerAddress, - { receiverAddress, fromAddress: walletAddress } + { receiverAddress, fromAddress: walletAddress }, + true ); const defaultGasLimit = await web3Public.getEstimatedGasByData( @@ -242,7 +243,8 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { } protected async getContractParams( - options: MarkRequired + options: MarkRequired, + skipAmountChangeCheck: boolean = false ): Promise { const fromWithoutFee = getFromWithoutFee( this.from, @@ -256,7 +258,8 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { this.toTokenAmountMin, this.walletAddress, this.providerAddress, - options + options, + skipAmountChangeCheck ); const encodedData = transactionData.data; diff --git a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-method-arguments-and-transaction-data.ts b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-method-arguments-and-transaction-data.ts index 07c63498dd..e3d59ccb6f 100644 --- a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-method-arguments-and-transaction-data.ts +++ b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-method-arguments-and-transaction-data.ts @@ -7,6 +7,10 @@ import { Web3Pure } from 'src/core/blockchain/web3-pure/web3-pure'; import { Injector } from 'src/core/injector/injector'; import { bridgersNativeAddress } from 'src/features/common/providers/bridgers/constants/bridgers-native-address'; import { toBridgersBlockchain } from 'src/features/common/providers/bridgers/constants/to-bridgers-blockchain'; +import { + BridgersQuoteRequest, + BridgersQuoteResponse +} from 'src/features/common/providers/bridgers/models/bridgers-quote-api'; import { BridgersSwapRequest, BridgersSwapResponse @@ -15,6 +19,7 @@ import { createTokenNativeAddressProxy } from 'src/features/common/utils/token-n import { BridgersCrossChainSupportedBlockchain } from 'src/features/cross-chain/calculation-manager/providers/bridgers-provider/constants/bridgers-cross-chain-supported-blockchain'; import { EvmBridgersTransactionData } from 'src/features/cross-chain/calculation-manager/providers/bridgers-provider/evm-bridgers-trade/models/evm-bridgers-transaction-data'; import { TronBridgersTransactionData } from 'src/features/cross-chain/calculation-manager/providers/bridgers-provider/tron-bridgers-trade/models/tron-bridgers-transaction-data'; +import { EvmCrossChainTrade } from 'src/features/cross-chain/calculation-manager/providers/common/emv-cross-chain-trade/evm-cross-chain-trade'; import { GetContractParamsOptions } from 'src/features/cross-chain/calculation-manager/providers/common/models/get-contract-params-options'; import { MarkRequired } from 'ts-essentials'; @@ -27,7 +32,8 @@ export async function getMethodArgumentsAndTransactionData< toTokenAmountMin: BigNumber, walletAddress: string, providerAddress: string, - options: MarkRequired + options: MarkRequired, + skipAmountChangeCheck: boolean = false ): Promise<{ methodArguments: unknown[]; transactionData: T; @@ -58,6 +64,29 @@ export async function getMethodArgumentsAndTransactionData< ); const transactionData = swapData.data.txData; + if (!skipAmountChangeCheck) { + const quoteRequest: BridgersQuoteRequest = { + fromTokenAddress, + toTokenAddress, + fromTokenAmount: fromWithoutFee.stringWeiAmount, + fromTokenChain: toBridgersBlockchain[from.blockchain], + toTokenChain: toBridgersBlockchain[to.blockchain] + }; + const quoteResponse = await Injector.httpClient.post( + 'https://sswap.swft.pro/api/sswap/quote', + quoteRequest + ); + const transactionQuoteData = quoteResponse.data?.txData; + + if (transactionQuoteData?.amountOutMin) { + EvmCrossChainTrade.checkAmountChange( + 'value' in transactionData ? transactionData : { data: '', to: '', value: '' }, + transactionQuoteData.amountOutMin, + Web3Pure.toWei(toTokenAmountMin, to.decimals) + ); + } + } + const dstTokenAddress = BlockchainsInfo.isTronBlockchainName(to.blockchain) ? TronWeb3Pure.addressToHex(to.address) : to.address; diff --git a/src/features/on-chain/calculation-manager/providers/aggregators/lifi/lifi-provider.ts b/src/features/on-chain/calculation-manager/providers/aggregators/lifi/lifi-provider.ts index eaf483fa52..77cfad82e4 100644 --- a/src/features/on-chain/calculation-manager/providers/aggregators/lifi/lifi-provider.ts +++ b/src/features/on-chain/calculation-manager/providers/aggregators/lifi/lifi-provider.ts @@ -75,6 +75,7 @@ export class LifiProvider extends AggregatorOnChainProvider { const routeOptions: RouteOptions = { order: 'RECOMMENDED', slippage: fullOptions.slippageTolerance, + maxPriceImpact: 0.5, exchanges: { deny: lifiDisabledProviders.concat('openocean') }