diff --git a/package.json b/package.json index 2e9572fa08..81f2aedb72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rubic-sdk", - "version": "5.32.4", + "version": "5.32.5", "description": "Simplify dApp creation", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/common/errors/swap/not-supported-region.ts b/src/common/errors/swap/not-supported-region.ts new file mode 100644 index 0000000000..3ec774dc0d --- /dev/null +++ b/src/common/errors/swap/not-supported-region.ts @@ -0,0 +1,11 @@ +import { RubicSdkError } from 'src/common/errors/rubic-sdk.error'; + +/** + * Thrown, when provider does not support region. + */ +export class NotSupportedRegionError extends RubicSdkError { + constructor() { + super('Bridgers does not provide services for your current country/region.'); + Object.setPrototypeOf(this, NotSupportedRegionError.prototype); + } +} diff --git a/src/core/blockchain/web3-private-service/web3-private/evm-web3-private/evm-web3-private.ts b/src/core/blockchain/web3-private-service/web3-private/evm-web3-private/evm-web3-private.ts index eca74899e8..64c0a9bd5e 100644 --- a/src/core/blockchain/web3-private-service/web3-private/evm-web3-private/evm-web3-private.ts +++ b/src/core/blockchain/web3-private-service/web3-private/evm-web3-private/evm-web3-private.ts @@ -11,7 +11,7 @@ import { } from 'src/common/errors'; import { parseError } from 'src/common/utils/errors'; import { getGasOptions } from 'src/common/utils/options'; -import { BlockchainName } from 'src/core/blockchain/models/blockchain-name'; +import { BLOCKCHAIN_NAME, BlockchainName } from 'src/core/blockchain/models/blockchain-name'; import { BlockchainsInfo } from 'src/core/blockchain/utils/blockchains-info/blockchains-info'; import { EvmTransactionOptions } from 'src/core/blockchain/web3-private-service/web3-private/evm-web3-private/models/evm-transaction-options'; import { Web3Error } from 'src/core/blockchain/web3-private-service/web3-private/models/web3.error'; @@ -179,7 +179,7 @@ export class EvmWeb3Private extends Web3Private { return this.sendTransaction(toAddress, sendParams); } catch (err) { console.debug('Call tokens transfer error', err); - const shouldIgnore = this.shouldIgnoreError(err); + const shouldIgnore = await this.shouldIgnoreError(err); if (shouldIgnore) { return this.sendTransaction(toAddress, options); } @@ -282,7 +282,10 @@ export class EvmWeb3Private extends Web3Private { sendParams ); } catch (err) { - if ((allowError && allowError(err as Web3Error)) || this.shouldIgnoreError(err)) { + if ( + (allowError && allowError(err as Web3Error)) || + (await this.shouldIgnoreError(err)) + ) { return this.executeContractMethod( contractAddress, contractAbi, @@ -296,7 +299,14 @@ export class EvmWeb3Private extends Web3Private { } } - private shouldIgnoreError(error: Web3Error): boolean { + private async shouldIgnoreError(error: Web3Error): Promise { + if ( + error.message === 'Low native value' && + (await this.getBlockchainName()) === BLOCKCHAIN_NAME.MANTLE + ) { + return true; + } + const ignoreCallErrors = [ 'STF', 'execution reverted: ERC20: transfer amount exceeds allowance', diff --git a/src/features/common/providers/bridgers/models/bridgers-swap-api.ts b/src/features/common/providers/bridgers/models/bridgers-swap-api.ts index e6c6465c76..3d5707a1a9 100644 --- a/src/features/common/providers/bridgers/models/bridgers-swap-api.ts +++ b/src/features/common/providers/bridgers/models/bridgers-swap-api.ts @@ -21,4 +21,5 @@ export interface BridgersSwapResponse< data: { txData: T; }; + resCode: number; } diff --git a/src/features/common/providers/rango/utils/rango-utils.ts b/src/features/common/providers/rango/utils/rango-utils.ts index b4cbcc904c..a153605f1c 100644 --- a/src/features/common/providers/rango/utils/rango-utils.ts +++ b/src/features/common/providers/rango/utils/rango-utils.ts @@ -10,7 +10,10 @@ import { } from 'src/core/blockchain/web3-public-service/web3-public/models/tx-status'; import { CROSS_CHAIN_TRADE_TYPE } from 'src/features/cross-chain/calculation-manager/models/cross-chain-trade-type'; import { BridgeType } from 'src/features/cross-chain/calculation-manager/providers/common/models/bridge-type'; -import { OnChainTradeType } from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type'; +import { + ON_CHAIN_TRADE_TYPE, + OnChainTradeType +} from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type'; import { rangoApiBlockchainNames, RangoBlockchainName } from '../models/rango-api-blockchain-names'; import { RANGO_SWAP_STATUS, RangoSwapStatus } from '../models/rango-api-status-types'; @@ -63,8 +66,12 @@ export class RangoUtils { } public static getTradeTypeForRubic( - rangoTradeType: RangoTradeType + rangoTradeType: RangoTradeType, + type: 'cross-chain' | 'on-chain' ): BridgeType | OnChainTradeType { - return RANGO_TO_RUBIC_PROVIDERS[rangoTradeType] || CROSS_CHAIN_TRADE_TYPE.RANGO; + if (type === 'cross-chain') { + return RANGO_TO_RUBIC_PROVIDERS[rangoTradeType] || CROSS_CHAIN_TRADE_TYPE.RANGO; + } + return RANGO_TO_RUBIC_PROVIDERS[rangoTradeType] || ON_CHAIN_TRADE_TYPE.RANGO; } } diff --git a/src/features/cross-chain/calculation-manager/providers/archon-bridge/archon-bridge-trade.ts b/src/features/cross-chain/calculation-manager/providers/archon-bridge/archon-bridge-trade.ts index 1aa59d769e..64ce555d72 100644 --- a/src/features/cross-chain/calculation-manager/providers/archon-bridge/archon-bridge-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/archon-bridge/archon-bridge-trade.ts @@ -94,7 +94,7 @@ export class ArchonBridgeTrade extends EvmCrossChainTrade { await this.checkTradeErrors(); await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -115,7 +115,6 @@ export class ArchonBridgeTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); 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 5979a4beb2..8380c240c8 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 @@ -104,7 +104,7 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { this.slippage = crossChainTrade.slippage; } - protected async swapDirect( + protected override async swapDirect( options: MarkRequired ): Promise { await this.checkTradeErrors(); @@ -112,7 +112,7 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -144,7 +144,6 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade { data: transactionData.data, value: transactionData.value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-proxy-method-arguments-and-transaction-data.ts b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-proxy-method-arguments-and-transaction-data.ts index 65924ff185..81a72e04d6 100644 --- a/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-proxy-method-arguments-and-transaction-data.ts +++ b/src/features/cross-chain/calculation-manager/providers/bridgers-provider/utils/get-proxy-method-arguments-and-transaction-data.ts @@ -1,4 +1,6 @@ import BigNumber from 'bignumber.js'; +import { NotSupportedTokensError } from 'src/common/errors'; +import { NotSupportedRegionError } from 'src/common/errors/swap/not-supported-region'; import { PriceTokenAmount } from 'src/common/tokens'; import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name'; import { BlockchainsInfo } from 'src/core/blockchain/utils/blockchains-info/blockchains-info'; @@ -69,6 +71,13 @@ export async function getProxyMethodArgumentsAndTransactionData< 'https://sswap.swft.pro/api/sswap/swap', swapRequest ); + if (swapData.resCode === 1146) { + throw new NotSupportedRegionError(); + } + if (!swapData.data?.txData) { + throw new NotSupportedTokensError(); + } + const transactionData = swapData.data?.txData; const quoteRequest: BridgersQuoteRequest = { diff --git a/src/features/cross-chain/calculation-manager/providers/cbridge/cbridge-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/cbridge/cbridge-cross-chain-trade.ts index b6e95fc054..86207a2fb5 100644 --- a/src/features/cross-chain/calculation-manager/providers/cbridge/cbridge-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/cbridge/cbridge-cross-chain-trade.ts @@ -145,7 +145,7 @@ export class CbridgeCrossChainTrade extends EvmCrossChainTrade { await this.checkTradeErrors(); await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -166,7 +166,6 @@ export class CbridgeCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-trade.ts index d9d6e3d7b1..fca459091a 100644 --- a/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/changenow-provider/changenow-cross-chain-trade.ts @@ -198,7 +198,7 @@ export class ChangenowCrossChainTrade extends EvmCrossChainTrade { CROSS_CHAIN_TRADE_TYPE.CHANGENOW ); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -231,7 +231,6 @@ export class ChangenowCrossChainTrade extends EvmCrossChainTrade { [this.paymentInfo.payinAddress, this.from.stringWeiAmount], { onTransactionHash, - gas: gasLimit, gasPriceOptions } ); diff --git a/src/features/cross-chain/calculation-manager/providers/common/emv-cross-chain-trade/evm-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/common/emv-cross-chain-trade/evm-cross-chain-trade.ts index b7b0121b82..ab95fa6884 100644 --- a/src/features/cross-chain/calculation-manager/providers/common/emv-cross-chain-trade/evm-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/common/emv-cross-chain-trade/evm-cross-chain-trade.ts @@ -127,7 +127,7 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade { if (onConfirm) { @@ -148,7 +148,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade { if (onConfirm) { @@ -193,7 +192,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade { if (onConfirm) { @@ -241,7 +239,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade { if (onConfirm) { @@ -120,7 +120,6 @@ export class LayerZeroBridgeTrade extends EvmCrossChainTrade { const tx = await this.web3Private.trySendTransaction(to, { data, value, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/lifi-provider/lifi-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/lifi-provider/lifi-cross-chain-trade.ts index 763189efee..0cda58a78f 100644 --- a/src/features/cross-chain/calculation-manager/providers/lifi-provider/lifi-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/lifi-provider/lifi-cross-chain-trade.ts @@ -154,7 +154,7 @@ export class LifiCrossChainTrade extends EvmCrossChainTrade { await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -175,7 +175,6 @@ export class LifiCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/orbiter-bridge/orbiter-bridge-trade.ts b/src/features/cross-chain/calculation-manager/providers/orbiter-bridge/orbiter-bridge-trade.ts index 9c37d741bc..407a0ee969 100644 --- a/src/features/cross-chain/calculation-manager/providers/orbiter-bridge/orbiter-bridge-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/orbiter-bridge/orbiter-bridge-trade.ts @@ -109,7 +109,7 @@ export class OrbiterBridgeTrade extends EvmCrossChainTrade { await this.checkTradeErrors(); await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -130,7 +130,6 @@ export class OrbiterBridgeTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/pulse-chain-bridge/pulse-chain-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/pulse-chain-bridge/pulse-chain-cross-chain-trade.ts index 58eeca1add..b35527504a 100644 --- a/src/features/cross-chain/calculation-manager/providers/pulse-chain-bridge/pulse-chain-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/pulse-chain-bridge/pulse-chain-cross-chain-trade.ts @@ -173,7 +173,7 @@ export class PulseChainCrossChainTrade extends EvmCrossChainTrade { await this.checkAllowanceAndApprove(options); } - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -194,7 +194,6 @@ export class PulseChainCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-provider.ts b/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-provider.ts index 6c1c0f0762..689507d908 100644 --- a/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-provider.ts +++ b/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-provider.ts @@ -147,7 +147,8 @@ export class RangoCrossChainProvider extends CrossChainProvider { const type = rangoPath.swapperType === 'DEX' ? 'on-chain' : 'cross-chain'; const provider = RangoUtils.getTradeTypeForRubic( - rangoPath.swapper.swapperGroup as RangoTradeType + rangoPath.swapper.swapperGroup as RangoTradeType, + type ); const fromBlockchain = RangoUtils.getRubicBlockchainByRangoBlockchain( diff --git a/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-trade.ts index 7ff6b7b716..2cf2500949 100644 --- a/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/rango-provider/rango-cross-chain-trade.ts @@ -187,7 +187,7 @@ export class RangoCrossChainTrade extends EvmCrossChainTrade { await this.checkTradeErrors(); await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { @@ -210,7 +210,6 @@ export class RangoCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/squidrouter-provider/squidrouter-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/squidrouter-provider/squidrouter-cross-chain-trade.ts index 73928c31bf..396332a0ab 100644 --- a/src/features/cross-chain/calculation-manager/providers/squidrouter-provider/squidrouter-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/squidrouter-provider/squidrouter-cross-chain-trade.ts @@ -184,7 +184,6 @@ export class SquidrouterCrossChainTrade extends EvmCrossChainTrade { onTransactionHash, data, value, - gas: options.gasLimit, gasPriceOptions: options.gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/stargate-provider/stargate-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/stargate-provider/stargate-cross-chain-trade.ts index da00684a76..d1cb1b0369 100644 --- a/src/features/cross-chain/calculation-manager/providers/stargate-provider/stargate-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/stargate-provider/stargate-cross-chain-trade.ts @@ -166,7 +166,7 @@ export class StargateCrossChainTrade extends EvmCrossChainTrade { await this.checkTradeErrors(); await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -197,7 +197,6 @@ export class StargateCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/symbiosis-provider/symbiosis-cross-chain-trade.ts b/src/features/cross-chain/calculation-manager/providers/symbiosis-provider/symbiosis-cross-chain-trade.ts index 89d7becefa..90ad2b2d68 100644 --- a/src/features/cross-chain/calculation-manager/providers/symbiosis-provider/symbiosis-cross-chain-trade.ts +++ b/src/features/cross-chain/calculation-manager/providers/symbiosis-provider/symbiosis-cross-chain-trade.ts @@ -251,7 +251,7 @@ export class SymbiosisCrossChainTrade extends EvmCrossChainTrade { await this.checkAllowanceAndApprove(options); - const { onConfirm, gasLimit, gasPriceOptions } = options; + const { onConfirm, gasPriceOptions } = options; let transactionHash: string; const onTransactionHash = (hash: string) => { if (onConfirm) { @@ -271,7 +271,6 @@ export class SymbiosisCrossChainTrade extends EvmCrossChainTrade { data, value, onTransactionHash, - gas: gasLimit, gasPriceOptions }); diff --git a/src/features/cross-chain/calculation-manager/providers/xy-provider/xy-cross-chain-provider.ts b/src/features/cross-chain/calculation-manager/providers/xy-provider/xy-cross-chain-provider.ts index bbd1f7bc2a..7c3bbd7f7b 100644 --- a/src/features/cross-chain/calculation-manager/providers/xy-provider/xy-cross-chain-provider.ts +++ b/src/features/cross-chain/calculation-manager/providers/xy-provider/xy-cross-chain-provider.ts @@ -221,8 +221,7 @@ export class XyCrossChainProvider extends CrossChainProvider { if (transitFromAddress) { routePath.push({ type: 'on-chain', - // @TODO provider: ON_CHAIN_TRADE_TYPE.XY_DEX, - provider: ON_CHAIN_TRADE_TYPE.ONE_INCH, + provider: ON_CHAIN_TRADE_TYPE.XY_DEX, path: [fromToken, fromTokenAmount] }); } @@ -234,8 +233,7 @@ export class XyCrossChainProvider extends CrossChainProvider { if (transitToAddress) { routePath.push({ type: 'on-chain', - // @TODO provider: ON_CHAIN_TRADE_TYPE.XY_DEX, - provider: ON_CHAIN_TRADE_TYPE.ONE_INCH, + provider: ON_CHAIN_TRADE_TYPE.XY_DEX, path: [toTokenAmount, toToken] }); } diff --git a/src/features/on-chain/calculation-manager/providers/common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade.ts b/src/features/on-chain/calculation-manager/providers/common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade.ts index b360b8798a..41a802624e 100644 --- a/src/features/on-chain/calculation-manager/providers/common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade.ts +++ b/src/features/on-chain/calculation-manager/providers/common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade.ts @@ -258,7 +258,6 @@ export abstract class EvmOnChainTrade extends OnChainTrade { data, value, onTransactionHash, - gas: options.gasLimit, gasPriceOptions: options.gasPriceOptions, ...(options?.useEip155 && { chainId: `0x${blockchainId[this.from.blockchain].toString(16)}`