rubic-sdk
Version:
Simplify dApp creation
167 lines • 8.83 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BridgersCrossChainProvider = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const errors_1 = require("../../../../../common/errors");
const tokens_1 = require("../../../../../common/tokens");
const native_tokens_1 = require("../../../../../common/tokens/constants/native-tokens");
const blockchain_name_1 = require("../../../../../core/blockchain/models/blockchain-name");
const blockchains_info_1 = require("../../../../../core/blockchain/utils/blockchains-info/blockchains-info");
const web3_pure_1 = require("../../../../../core/blockchain/web3-pure/web3-pure");
const bridgers_native_address_1 = require("../../../../common/providers/bridgers/constants/bridgers-native-address");
const to_bridgers_blockchain_1 = require("../../../../common/providers/bridgers/constants/to-bridgers-blockchain");
const token_native_address_proxy_1 = require("../../../../common/utils/token-native-address-proxy");
const cross_chain_trade_type_1 = require("../../models/cross-chain-trade-type");
const bridgers_cross_chain_supported_blockchain_1 = require("./constants/bridgers-cross-chain-supported-blockchain");
const evm_bridgers_cross_chain_trade_1 = require("./evm-bridgers-trade/evm-bridgers-cross-chain-trade");
const tron_bridgers_cross_chain_trade_1 = require("./tron-bridgers-trade/tron-bridgers-cross-chain-trade");
const cross_chain_provider_1 = require("../common/cross-chain-provider");
const evm_common_cross_chain_abi_1 = require("../common/emv-cross-chain-trade/constants/evm-common-cross-chain-abi");
const tron_common_cross_chain_abi_1 = require("../common/tron-cross-chain-trade/constants/tron-common-cross-chain-abi");
class BridgersCrossChainProvider extends cross_chain_provider_1.CrossChainProvider {
constructor() {
super(...arguments);
this.type = cross_chain_trade_type_1.CROSS_CHAIN_TRADE_TYPE.BRIDGERS;
}
isSupportedBlockchain(blockchain) {
return bridgers_cross_chain_supported_blockchain_1.bridgersCrossChainSupportedBlockchains.some(supportedBlockchain => supportedBlockchain === blockchain);
}
areSupportedBlockchains(fromBlockchain, toBlockchain) {
return ((fromBlockchain === blockchain_name_1.BLOCKCHAIN_NAME.TRON && this.isSupportedBlockchain(toBlockchain)) ||
(this.isSupportedBlockchain(fromBlockchain) && toBlockchain === blockchain_name_1.BLOCKCHAIN_NAME.TRON));
}
async calculate(from, toToken, options) {
const fromBlockchain = from.blockchain;
const toBlockchain = toToken.blockchain;
if (!this.areSupportedBlockchains(fromBlockchain, toBlockchain)) {
return null;
}
try {
const contractAbi = blockchains_info_1.BlockchainsInfo.isTronBlockchainName(fromBlockchain)
? tron_common_cross_chain_abi_1.tronCommonCrossChainAbi
: evm_common_cross_chain_abi_1.evmCommonCrossChainAbi;
// await this.checkContractState(
// fromBlockchain,
// rubicProxyContractAddress[fromBlockchain],
// contractAbi
// );
let feeInfo = await this.getFeeInfo(fromBlockchain, options.providerAddress, from, contractAbi);
// const fromWithoutFee = getFromWithoutFee(
// from,
// feeInfo.rubicProxy?.platformFee?.percent
// );
const fromWithoutFee = from;
const fromTokenAddress = (0, token_native_address_proxy_1.createTokenNativeAddressProxy)(from, bridgers_native_address_1.bridgersNativeAddress).address;
const toTokenAddress = (0, token_native_address_proxy_1.createTokenNativeAddressProxy)(toToken, bridgers_native_address_1.bridgersNativeAddress).address;
const quoteRequest = {
fromTokenAddress,
toTokenAddress,
fromTokenAmount: fromWithoutFee.stringWeiAmount,
fromTokenChain: to_bridgers_blockchain_1.toBridgersBlockchain[fromBlockchain],
toTokenChain: to_bridgers_blockchain_1.toBridgersBlockchain[toBlockchain]
};
const quoteResponse = await this.httpClient.post('https://sswap.swft.pro/api/sswap/quote', quoteRequest);
const transactionData = quoteResponse.data?.txData;
if (quoteResponse.resCode !== 100 || !transactionData) {
return {
trade: null,
error: cross_chain_provider_1.CrossChainProvider.parseError(new errors_1.BridgersPairIsUnavailableError())
};
}
if (from.tokenAmount.lt(transactionData.depositMin)) {
return {
trade: null,
error: new errors_1.MinAmountError(new bignumber_js_1.default(transactionData.depositMin), from.symbol)
};
}
if (from.tokenAmount.gt(transactionData.depositMax)) {
return {
trade: null,
error: new errors_1.MaxAmountError(new bignumber_js_1.default(transactionData.depositMax), from.symbol)
};
}
const to = new tokens_1.PriceTokenAmount({
...toToken.asStruct,
blockchain: toBlockchain,
tokenAmount: new bignumber_js_1.default(transactionData.toTokenAmount)
});
const toTokenAmountMin = web3_pure_1.Web3Pure.fromWei(transactionData.amountOutMin, toToken.decimals);
feeInfo = {
...feeInfo,
provider: {
platformFee: {
percent: transactionData.fee * 100,
tokenSymbol: from.symbol
},
cryptoFee: {
amount: new bignumber_js_1.default(transactionData.chainFee),
tokenSymbol: toToken.symbol
}
}
};
if (blockchains_info_1.BlockchainsInfo.isEvmBlockchainName(fromBlockchain)) {
const gasData = options.gasCalculation === 'enabled' && options.receiverAddress
? await evm_bridgers_cross_chain_trade_1.EvmBridgersCrossChainTrade.getGasData(from, to, options.receiverAddress)
: null;
return {
trade: new evm_bridgers_cross_chain_trade_1.EvmBridgersCrossChainTrade({
from: from,
to: to,
toTokenAmountMin,
feeInfo,
gasData,
slippage: options.slippageTolerance,
contractAddress: transactionData.contractAddress
}, options.providerAddress)
};
}
return {
trade: new tron_bridgers_cross_chain_trade_1.TronBridgersCrossChainTrade({
from: from,
to: to,
toTokenAmountMin,
feeInfo,
slippage: options.slippageTolerance,
contractAddress: transactionData.contractAddress
}, options.providerAddress)
};
}
catch (err) {
return {
trade: null,
error: cross_chain_provider_1.CrossChainProvider.parseError(err)
};
}
}
async getFeeInfo(fromBlockchain, _providerAddress, percentFeeToken, _contractAbi) {
return {
rubicProxy: {
fixedFee: {
// amount: await this.getFixedFee(
// fromBlockchain,
// providerAddress,
// rubicProxyContractAddress[fromBlockchain],
// contractAbi
// ),
amount: new bignumber_js_1.default(0),
tokenSymbol: native_tokens_1.nativeTokensList[fromBlockchain].symbol
},
platformFee: {
// percent: await this.getFeePercent(
// fromBlockchain,
// providerAddress,
// rubicProxyContractAddress[fromBlockchain],
// contractAbi
// ),
percent: 0,
tokenSymbol: percentFeeToken.symbol
}
}
};
}
}
exports.BridgersCrossChainProvider = BridgersCrossChainProvider;
//# sourceMappingURL=bridgers-cross-chain-provider.js.map
;