Skip to content

Commit

Permalink
Merge branch 'master' into rubic-2434
Browse files Browse the repository at this point in the history
  • Loading branch information
PseudoElement committed Aug 2, 2024
2 parents 81241a1 + 40f20ce commit c70c29d
Show file tree
Hide file tree
Showing 86 changed files with 2,421 additions and 128 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.29.2-alpha.tron.2",
"version": "5.32.7",
"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
Binary file modified src/.DS_Store
Binary file not shown.
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);
}
}
7 changes: 7 additions & 0 deletions src/common/tokens/constants/native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -474,5 +474,12 @@ export const nativeTokensList: Record<BlockchainName, Token> = {
name: 'CORE',
symbol: 'CORE',
decimals: 18
}),
[BLOCKCHAIN_NAME.BAHAMUT]: new Token({
blockchain: BLOCKCHAIN_NAME.BAHAMUT,
address: EvmWeb3Pure.nativeTokenAddress,
name: 'FTN',
symbol: 'FTN',
decimals: 18
})
};
3 changes: 2 additions & 1 deletion src/common/tokens/constants/wrapped-addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,13 @@ export const wrappedAddress: Partial<Record<EvmBlockchainName, string>> = {
[BLOCKCHAIN_NAME.TAIKO]: '0xa51894664a773981c6c112c43ce576f315d5b1b6',
[BLOCKCHAIN_NAME.SEI]: '0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7',
[BLOCKCHAIN_NAME.CORE]: '0x191e94fa59739e188dce837f7f6978d84727ad01',
[BLOCKCHAIN_NAME.BAHAMUT]: '0x4084ab20f8ffca76c19aaf854fb5fe9de6217fbb',
// Testnet
[BLOCKCHAIN_NAME.GOERLI]: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
[BLOCKCHAIN_NAME.SCROLL_SEPOLIA]: '0x5300000000000000000000000000000000000004',
[BLOCKCHAIN_NAME.ARTHERA]: '0xC7A183Ad373301d68f7E0Ee824c8c727C7D5B21d',
[BLOCKCHAIN_NAME.SEPOLIA]: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
[BLOCKCHAIN_NAME.BERACHAIN]: '0x5806E416dA447b267cEA759358cF22Cc41FAE80F',
[BLOCKCHAIN_NAME.BERACHAIN]: '0x7507c1dc16935B82698e4C63f2746A2fCf994dF8',
[BLOCKCHAIN_NAME.BLAST_TESTNET]: '0x4200000000000000000000000000000000000023',
[BLOCKCHAIN_NAME.HOLESKY]: ''
};
9 changes: 8 additions & 1 deletion src/common/tokens/constants/wrapped-native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ export const wrappedNativeTokensList: Partial<Record<EvmBlockchainName, Token>>
}),
[BLOCKCHAIN_NAME.BERACHAIN]: new Token({
blockchain: BLOCKCHAIN_NAME.BERACHAIN,
address: '0x5806E416dA447b267cEA759358cF22Cc41FAE80F',
address: '0x7507c1dc16935B82698e4C63f2746A2fCf994dF8',
name: 'Wrapped BERA',
symbol: 'WBERA',
decimals: 18
Expand Down Expand Up @@ -457,5 +457,12 @@ export const wrappedNativeTokensList: Partial<Record<EvmBlockchainName, Token>>
name: 'Wrapped CORE',
symbol: 'WCORE',
decimals: 18
}),
[BLOCKCHAIN_NAME.BAHAMUT]: new Token({
blockchain: BLOCKCHAIN_NAME.BAHAMUT,
address: '0x4084ab20f8ffca76c19aaf854fb5fe9de6217fbb',
name: 'Wrapped FTN',
symbol: 'WFTN',
decimals: 18
})
};
5 changes: 3 additions & 2 deletions src/core/blockchain/models/backend-blockchains.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ const BLOCKCHAINS_MAPPING = {
[BLOCKCHAIN_NAME.SEPOLIA]: 'sepolia',
[BLOCKCHAIN_NAME.MANTA_PACIFIC]: 'manta-pacific',
[BLOCKCHAIN_NAME.SCROLL]: 'scroll',
[BLOCKCHAIN_NAME.BERACHAIN]: 'berachain',
[BLOCKCHAIN_NAME.BERACHAIN]: 'berachain-bartio',
[BLOCKCHAIN_NAME.BLAST_TESTNET]: 'blast',
[BLOCKCHAIN_NAME.BLAST]: 'blast',
[BLOCKCHAIN_NAME.HOLESKY]: 'holesky',
Expand All @@ -142,7 +142,8 @@ const BLOCKCHAINS_MAPPING = {
[BLOCKCHAIN_NAME.XLAYER]: 'xlayer',
[BLOCKCHAIN_NAME.TAIKO]: 'taiko',
[BLOCKCHAIN_NAME.SEI]: 'sei',
[BLOCKCHAIN_NAME.CORE]: 'core'
[BLOCKCHAIN_NAME.CORE]: 'core',
[BLOCKCHAIN_NAME.BAHAMUT]: 'bahamut'
} as const;

export const TO_BACKEND_BLOCKCHAINS: Record<BlockchainName, BackendBlockchain> = {
Expand Down
3 changes: 2 additions & 1 deletion src/core/blockchain/models/blockchain-name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ export const EVM_BLOCKCHAIN_NAME = {
XLAYER: 'XLAYER',
TAIKO: 'TAIKO',
SEI: 'SEI',
CORE: 'CORE'
CORE: 'CORE',
BAHAMUT: 'BAHAMUT'
} as const;

export const BLOCKCHAIN_NAME = {
Expand Down
1 change: 1 addition & 0 deletions src/core/blockchain/models/web3-primitive-type.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { BigNumber as EthersBigNumber } from 'ethers';

export type Web3PrimitiveType =
| number
| string
| boolean
| Web3PrimitiveType[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export const blockchainId: Record<BlockchainName, number> = {
[BLOCKCHAIN_NAME.TAIKO]: 167000,
[BLOCKCHAIN_NAME.SEI]: 1329,
[BLOCKCHAIN_NAME.CORE]: 1116,
[BLOCKCHAIN_NAME.BAHAMUT]: 5165,
// Tesnents
[BLOCKCHAIN_NAME.GOERLI]: 5,
[BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN_TESTNET]: 87,
Expand All @@ -75,7 +76,7 @@ export const blockchainId: Record<BlockchainName, number> = {
[BLOCKCHAIN_NAME.SCROLL_SEPOLIA]: 534351,
[BLOCKCHAIN_NAME.ARTHERA]: 10243,
[BLOCKCHAIN_NAME.SEPOLIA]: 11155111,
[BLOCKCHAIN_NAME.BERACHAIN]: 80085,
[BLOCKCHAIN_NAME.BERACHAIN]: 80084,
[BLOCKCHAIN_NAME.BLAST_TESTNET]: 168587773,
[BLOCKCHAIN_NAME.HOLESKY]: 17000,
// Non EVN blockchains
Expand Down
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 @@ -146,7 +146,7 @@ export class EvmWeb3Private extends Web3Private {
*/
public async trySendTransaction(
toAddress: string,
options: EvmTransactionOptions = {}
options: EvmTransactionOptions
): Promise<TransactionReceipt> {
try {
const gaslessParams = {
Expand All @@ -162,7 +162,7 @@ export class EvmWeb3Private extends Web3Private {
const gasfulParams = {
...gaslessParams,
...getGasOptions(options),
gas: Web3Private.stringifyAmount(gas, 1.05)
gas: Web3Private.stringifyAmount(gas, options?.gasLimitRatio || 1.05)
};

try {
Expand All @@ -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 @@ -16,4 +16,9 @@ export interface EvmTransactionOptions extends EvmBasicTransactionOptions {
* Use in case of eip-155
*/
chainId?: string;

/**
* gasLimit multiplier (to change ratio for specific chain)
*/
gasLimitRatio?: number;
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,6 @@ export const MULTICALL_ADDRESSES: Record<Web3PublicSupportedBlockchain, string>
[BLOCKCHAIN_NAME.XLAYER]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.TAIKO]: '0x74F689bb9f86BD24d370BE2a2B9C74446ce08843',
[BLOCKCHAIN_NAME.SEI]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.CORE]: '0xcA11bde05977b3631167028862bE2a173976CA11'
[BLOCKCHAIN_NAME.CORE]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.BAHAMUT]: '0xa385B1436fD2A6a1c6865E22c522A1aA40CaDCC6'
};
3 changes: 2 additions & 1 deletion src/features/common/constants/proxy-supported-blockchain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ export const proxySupportedBlockchains = [
BLOCKCHAIN_NAME.XLAYER,
BLOCKCHAIN_NAME.TAIKO,
BLOCKCHAIN_NAME.SEI,
BLOCKCHAIN_NAME.CORE
BLOCKCHAIN_NAME.CORE,
BLOCKCHAIN_NAME.BAHAMUT
// BLOCKCHAIN_NAME.OKE_X_CHAIN,
// BLOCKCHAIN_NAME.GNOSIS,
// BLOCKCHAIN_NAME.FUSE,
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,22 +6,25 @@ 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';

import { EddyBridgeProvider } from '../providers/eddy-bridge/eddy-bridge-provider';
import { LayerZeroBridgeProvider } from '../providers/layerzero-bridge/layerzero-bridge-provider';
import { MesonCrossChainProvider } from '../providers/meson-provider/meson-cross-chain-provider';
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 All @@ -31,7 +34,8 @@ const proxyProviders = [
OrbiterBridgeProvider,
ArchonBridgeProvider,
MesonCrossChainProvider,
OwlToBridgeProvider
OwlToBridgeProvider,
EddyBridgeProvider
] as const;

const nonProxyProviders = [
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 All @@ -18,7 +19,8 @@ export const CROSS_CHAIN_TRADE_TYPE = {
OWL_TO_BRIDGE: 'owl_to_bridge',
LAYERZERO: 'layerzero',
ARCHON_BRIDGE: 'archon_bridge',
MESON: 'meson'
MESON: 'meson',
EDDY_BRIDGE: 'eddy_bridge'
} as const;

export type CrossChainTradeType =
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
Loading

0 comments on commit c70c29d

Please sign in to comment.