UNPKG

rubic-sdk

Version:
118 lines 5.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OwlToBridgeProvider = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const errors_1 = require("../../../../../common/errors"); const tokens_1 = require("../../../../../common/tokens"); const blockchain_id_1 = require("../../../../../core/blockchain/utils/blockchains-info/constants/blockchain-id"); const fake_wallet_address_1 = require("../../../../common/constants/fake-wallet-address"); const get_from_without_fee_1 = require("../../../../common/utils/get-from-without-fee"); const cross_chain_provider_1 = require("../common/cross-chain-provider"); const bridge_type_1 = require("../common/models/bridge-type"); const proxy_cross_chain_evm_trade_1 = require("../common/proxy-cross-chain-evm-facade/proxy-cross-chain-evm-trade"); const owl_to_supported_chains_1 = require("./constants/owl-to-supported-chains"); const owl_to_bridge_trade_1 = require("./owl-to-bridge-trade"); const owl_to_api_service_1 = require("./services/owl-to-api-service"); class OwlToBridgeProvider extends cross_chain_provider_1.CrossChainProvider { constructor() { super(...arguments); this.type = bridge_type_1.BRIDGE_TYPE.OWL_TO_BRIDGE; } isSupportedBlockchain(blockchain) { return owl_to_supported_chains_1.owlToSupportedBlockchains.some(chain => chain === blockchain); } async calculate(from, toToken, options) { const fromBlockchain = from.blockchain; const useProxy = options?.useProxy?.[this.type] ?? true; const walletAddress = this.getWalletAddress(fromBlockchain) || fake_wallet_address_1.FAKE_WALLET_ADDRESS; try { const feeInfo = await this.getFeeInfo(fromBlockchain, options.providerAddress, from, useProxy); const fromWithoutFee = (0, get_from_without_fee_1.getFromWithoutFee)(from, feeInfo.rubicProxy?.platformFee?.percent); const pairInfo = await owl_to_api_service_1.OwlToApiService.getPairInfo(blockchain_id_1.blockchainId[from.blockchain], from.address, blockchain_id_1.blockchainId[toToken.blockchain], toToken.address); const minAmountBN = new bignumber_js_1.default(pairInfo.min_value.ui_value); const maxAmountBN = new bignumber_js_1.default(pairInfo.max_value.ui_value); const swapParams = { amount: fromWithoutFee.tokenAmount.toFixed(), dstChainName: pairInfo.to_chain_name, srcChainName: pairInfo.from_chain_name, receiverAddress: options.receiverAddress || walletAddress, tokenSymbol: pairInfo.token_name, walletAddress }; if (fromWithoutFee.tokenAmount.lt(minAmountBN)) { return { trade: this.getEmptyTrade(fromWithoutFee, toToken, feeInfo, swapParams), error: new errors_1.MinAmountError(minAmountBN, from.symbol), tradeType: this.type }; } if (fromWithoutFee.tokenAmount.gt(maxAmountBN)) { return { trade: this.getEmptyTrade(fromWithoutFee, toToken, feeInfo, swapParams), error: new errors_1.MaxAmountError(maxAmountBN, from.symbol), tradeType: this.type }; } const { receive_value, txs } = await owl_to_api_service_1.OwlToApiService.getSwapInfo(swapParams); const to = new tokens_1.PriceTokenAmount({ ...toToken.asStruct, weiAmount: new bignumber_js_1.default(receive_value.raw_value) }); const trade = new owl_to_bridge_trade_1.OwlToBridgeTrade({ crossChainTrade: { feeInfo, from, to, gasData: await this.getGasData(from), priceImpact: from.calculatePriceImpactPercent(to), swapParams, approveAddress: txs.transfer_body.to }, providerAddress: options.providerAddress, routePath: await this.getRoutePath(from, to), useProxy }); return { trade, tradeType: this.type }; } catch (err) { const rubicSdkError = cross_chain_provider_1.CrossChainProvider.parseError(err); return { trade: null, error: rubicSdkError, tradeType: this.type }; } } async getFeeInfo(fromBlockchain, providerAddress, percentFeeToken, useProxy) { return proxy_cross_chain_evm_trade_1.ProxyCrossChainEvmTrade.getFeeInfo(fromBlockchain, providerAddress, percentFeeToken, useProxy); } async getRoutePath(fromToken, toToken) { return [{ type: 'cross-chain', provider: this.type, path: [fromToken, toToken] }]; } getEmptyTrade(from, toToken, feeInfo, swapParams) { const to = new tokens_1.PriceTokenAmount({ ...toToken.asStruct, tokenAmount: new bignumber_js_1.default(0) }); const trade = new owl_to_bridge_trade_1.OwlToBridgeTrade({ crossChainTrade: { from, feeInfo, to, gasData: null, priceImpact: 0, swapParams, approveAddress: '' }, providerAddress: '', routePath: [], useProxy: false }); return trade; } } exports.OwlToBridgeProvider = OwlToBridgeProvider; //# sourceMappingURL=owl-to-bridge-provider.js.map