Skip to content

Commit

Permalink
Merge branch 'master' into rubic-2476
Browse files Browse the repository at this point in the history
  • Loading branch information
PseudoElement committed Jul 26, 2024
2 parents 7a32b51 + 40f20ce commit 97ac3fd
Show file tree
Hide file tree
Showing 48 changed files with 1,300 additions and 95 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rubic-sdk",
"version": "5.31.7--alpha.new-chains.1",
"version": "5.33.0-alpha.aggregation.1",
"description": "Simplify dApp creation",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down Expand Up @@ -73,7 +73,7 @@
"@1inch/limit-order-protocol-utils": "3.0.1",
"@arbitrum/sdk": "^3.1.3",
"@debridge-finance/debridge-external-call": "^1.0.7",
"@layerzerolabs/scan-client": "^0.0.0-beta.6",
"@layerzerolabs/scan-client": "0.0.8",
"@noble/secp256k1": "^1.7.1",
"@pancakeswap/sdk": "^5.1.0",
"@pancakeswap/smart-router": "4.2.1",
Expand Down
11 changes: 11 additions & 0 deletions src/common/errors/swap/not-supported-region.ts
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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,
Expand All @@ -296,7 +299,14 @@ export class EvmWeb3Private extends Web3Private {
}
}

private shouldIgnoreError(error: Web3Error): boolean {
private async shouldIgnoreError(error: Web3Error): Promise<boolean> {
if (
error.message === 'Low native value' &&
(await this.getBlockchainName()) === BLOCKCHAIN_NAME.MANTLE
) {
return true;
}

const ignoreCallErrors = [
'STF',
'execution reverted: ERC20: transfer amount exceeds allowance',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name';
import { BridgersCrossChainSupportedBlockchain } from 'src/features/cross-chain/calculation-manager/providers/bridgers-provider/constants/bridgers-cross-chain-supported-blockchain';

export const bridgersContractAddresses: Record<BridgersCrossChainSupportedBlockchain, string> = {
[BLOCKCHAIN_NAME.ETHEREUM]: '0x92e929d8b2c8430bcaf4cd87654789578bb2b786',
[BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN]: '0x1ed5685f345b2fa564ea4a670de1fde39e484751',
[BLOCKCHAIN_NAME.POLYGON]: '0x242Ea2A8C4a3377A738ed8a0d8cC0Fe8B4D6C36E',
[BLOCKCHAIN_NAME.FANTOM]: '0x8f957ed3f969d7b6e5d6df81e61a5ff45f594dd1',
[BLOCKCHAIN_NAME.TRON]: 'TEorZTZ5MHx8SrvsYs1R3Ds5WvY1pVoMSA'
[BLOCKCHAIN_NAME.ETHEREUM]: '0xb685760ebd368a891f27ae547391f4e2a289895b',
[BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN]: '0xb685760ebd368a891f27ae547391f4e2a289895b',
[BLOCKCHAIN_NAME.POLYGON]: '0xb685760ebd368a891f27ae547391f4e2a289895b',
[BLOCKCHAIN_NAME.FANTOM]: '0xb685760ebd368a891f27ae547391f4e2a289895b',
[BLOCKCHAIN_NAME.TRON]: 'TPwezUWpEGmFBENNWJHwXHRG1D2NCEEt5s'
};
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ export interface BridgersSwapResponse<
data: {
txData: T;
};
resCode: number;
}
13 changes: 10 additions & 3 deletions src/features/common/providers/rango/utils/rango-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { ChangenowCrossChainProvider } from 'src/features/cross-chain/calculatio
import { DebridgeCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/debridge-provider/debridge-cross-chain-provider';
import { LifiCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/lifi-provider/lifi-cross-chain-provider';
import { PulseChainCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/pulse-chain-bridge/pulse-chain-cross-chain-provider';
//import { ScrollBridgeProvider } from 'src/features/cross-chain/calculation-manager/providers/scroll-bridge/scroll-bridge-provider';
// import { ScrollBridgeProvider } from 'src/features/cross-chain/calculation-manager/providers/scroll-bridge/scroll-bridge-provider';
import { SquidrouterCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/squidrouter-provider/squidrouter-cross-chain-provider';
import { SymbiosisCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/symbiosis-provider/symbiosis-cross-chain-provider';
import { XyCrossChainProvider } from 'src/features/cross-chain/calculation-manager/providers/xy-provider/xy-cross-chain-provider';
Expand All @@ -17,12 +17,14 @@ import { MesonCrossChainProvider } from '../providers/meson-provider/meson-cross
import { OrbiterBridgeProvider } from '../providers/orbiter-bridge/orbiter-bridge-provider';
import { OwlToBridgeProvider } from '../providers/owl-to-bridge/owl-to-bridge-provider';
import { RangoCrossChainProvider } from '../providers/rango-provider/rango-cross-chain-provider';
// import { StargateCrossChainProvider } from '../providers/stargate-provider/stargate-cross-chain-provider';
import { StargateV2CrossChainProvider } from '../providers/stargate-v2-provider/stargate-v2-cross-chain-provider';
//import { StargateCrossChainProvider } from '../providers/stargate-provider/stargate-cross-chain-provider';
import { TaikoBridgeProvider } from '../providers/taiko-bridge/taiko-bridge-provider';

const proxyProviders = [
SymbiosisCrossChainProvider,
// StargateCrossChainProvider,
StargateV2CrossChainProvider,
//StargateCrossChainProvider,
XyCrossChainProvider,
CbridgeCrossChainProvider,
LifiCrossChainProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export const CROSS_CHAIN_TRADE_TYPE = {
CELER_BRIDGE: 'celer_bridge',
CHANGENOW: 'changenow',
STARGATE: 'stargate',
STARGATE_V2: 'stargate_v2',
ARBITRUM: 'arbitrum',
SQUIDROUTER: 'squidrouter',
SCROLL_BRIDGE: 'scroll_bridge',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -115,7 +115,6 @@ export class ArchonBridgeTrade extends EvmCrossChainTrade {
data,
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,15 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade {
this.slippage = crossChainTrade.slippage;
}

protected async swapDirect(
protected override async swapDirect(
options: MarkRequired<SwapTransactionOptions, 'receiverAddress'>
): Promise<string | never> {
await this.checkTradeErrors();
await this.checkReceiverAddress(options.receiverAddress, true);

await this.checkAllowanceAndApprove(options);

const { onConfirm, gasLimit, gasPriceOptions } = options;
const { onConfirm, gasPriceOptions } = options;
let transactionHash: string;
const onTransactionHash = (hash: string) => {
if (onConfirm) {
Expand Down Expand Up @@ -144,7 +144,6 @@ export class EvmBridgersCrossChainTrade extends EvmCrossChainTrade {
data: transactionData.data,
value: transactionData.value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions
});

Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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 = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -166,7 +166,6 @@ export class CbridgeCrossChainTrade extends EvmCrossChainTrade {
data,
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { FailedToCheckForTransactionReceiptError, RubicSdkError } from 'src/comm
import { PriceTokenAmount } from 'src/common/tokens';
import { getGasOptions } from 'src/common/utils/options';
import { EvmBlockchainName } from 'src/core/blockchain/models/blockchain-name';
import { CHAIN_TYPE } from 'src/core/blockchain/models/chain-type';
import { BlockchainsInfo } from 'src/core/blockchain/utils/blockchains-info/blockchains-info';
import { EvmWeb3Private } from 'src/core/blockchain/web3-private-service/web3-private/evm-web3-private/evm-web3-private';
import { ERC20_TOKEN_ABI } from 'src/core/blockchain/web3-public-service/web3-public/evm-web3-public/constants/erc-20-token-abi';
Expand Down Expand Up @@ -197,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) {
Expand Down Expand Up @@ -230,7 +231,6 @@ export class ChangenowCrossChainTrade extends EvmCrossChainTrade {
[this.paymentInfo.payinAddress, this.from.stringWeiAmount],
{
onTransactionHash,
gas: gasLimit,
gasPriceOptions
}
);
Expand Down Expand Up @@ -288,16 +288,24 @@ export class ChangenowCrossChainTrade extends EvmCrossChainTrade {
config.data = '0x';
config.to = this.paymentInfo.payinAddress;
} else {
const encodedConfig = EvmWeb3Pure.encodeMethodCall(
this.from.address,
ERC20_TOKEN_ABI,
'transfer',
[this.paymentInfo.payinAddress, this.from.stringWeiAmount],
'0'
);
config.value = '0';
config.to = this.from.address;
config.data = encodedConfig.data;
const blockchainType = BlockchainsInfo.getChainType(this.from.blockchain);

if (blockchainType === CHAIN_TYPE.EVM) {
const encodedConfig = EvmWeb3Pure.encodeMethodCall(
this.from.address,
ERC20_TOKEN_ABI,
'transfer',
[this.paymentInfo.payinAddress, this.from.stringWeiAmount],
'0'
);
config.value = '0';
config.to = this.from.address;
config.data = encodedConfig.data;
} else {
config.value = '0';
config.data = '0x';
config.to = this.paymentInfo.payinAddress;
}
}

return { config, amount: toAmountWei };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig
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) {
Expand All @@ -148,7 +148,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig
data,
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions,
gasLimitRatio: this.gasLimitRatio
});
Expand Down Expand Up @@ -179,7 +178,7 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig

const { data, value, to } = await this.encode({ ...options, fromAddress });

const { onConfirm, gasLimit, gasPriceOptions } = options;
const { onConfirm, gasPriceOptions } = options;
let transactionHash: string;
const onTransactionHash = (hash: string) => {
if (onConfirm) {
Expand All @@ -193,7 +192,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig
data,
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions,
gasLimitRatio: this.gasLimitRatio,
...(options?.useEip155 && {
Expand All @@ -219,7 +217,7 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig

await this.checkAllowanceAndApprove(options);

const { onConfirm, gasLimit, gasPriceOptions } = options;
const { onConfirm, gasPriceOptions } = options;
let transactionHash: string;
const onTransactionHash = (hash: string) => {
if (onConfirm) {
Expand All @@ -241,7 +239,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig
methodName,
methodName,
value,
gasLimit,
gasPriceOptions
);
method = 'executeContractMethod';
Expand All @@ -255,7 +252,6 @@ export abstract class EvmCrossChainTrade extends CrossChainTrade<EvmEncodeConfig
{
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ export class DebridgeEvmCrossChainTrade extends EvmCrossChainTrade {
onTransactionHash,
data,
value,
gas: options.gasLimit,
gasPriceOptions: options.gasPriceOptions
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export class LayerZeroBridgeTrade 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) {
Expand All @@ -120,7 +120,6 @@ export class LayerZeroBridgeTrade extends EvmCrossChainTrade {
const tx = await this.web3Private.trySendTransaction(to, {
data,
value,
gas: gasLimit,
gasPriceOptions
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -175,7 +175,6 @@ export class LifiCrossChainTrade extends EvmCrossChainTrade {
data,
value,
onTransactionHash,
gas: gasLimit,
gasPriceOptions
});

Expand Down
Loading

0 comments on commit 97ac3fd

Please sign in to comment.