UNPKG

rubic-sdk

Version:
83 lines 4.28 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZrxProvider = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const tokens_1 = require("../../../../../../common/tokens"); const options_1 = require("../../../../../../common/utils/options"); const token_native_address_proxy_1 = require("../../../../../common/utils/token-native-address-proxy"); const constants_1 = require("./constants"); const zrx_supported_blockchains_1 = require("./constants/zrx-supported-blockchains"); const zrx_api_service_1 = require("./zrx-api-service"); const zrx_trade_1 = require("./zrx-trade"); const on_chain_trade_type_1 = require("../../common/models/on-chain-trade-type"); const aggregator_on_chain_provider_abstract_1 = require("../../common/on-chain-aggregator/aggregator-on-chain-provider-abstract"); const evm_provider_default_options_1 = require("../../dexes/common/on-chain-provider/evm-on-chain-provider/constants/evm-provider-default-options"); const get_gas_fee_info_1 = require("../../common/utils/get-gas-fee-info"); const get_gas_price_info_1 = require("../../common/utils/get-gas-price-info"); class ZrxProvider extends aggregator_on_chain_provider_abstract_1.AggregatorOnChainProvider { constructor() { super(...arguments); this.defaultOptions = evm_provider_default_options_1.evmProviderDefaultOptions; this.tradeType = on_chain_trade_type_1.ON_CHAIN_TRADE_TYPE.ZRX; } isSupportedBlockchain(blockchain) { return zrx_supported_blockchains_1.zeroXSupportedBlockchains.some(item => item === blockchain); } async calculate(from, toToken, options) { const fullOptions = (0, options_1.combineOptions)(options, this.defaultOptions); const { fromWithoutFee, proxyFeeInfo } = await this.handleProxyContract(from, fullOptions); const fromClone = (0, token_native_address_proxy_1.createTokenNativeAddressProxy)(fromWithoutFee, constants_1.zrxApiParams.nativeTokenAddress); const toClone = (0, token_native_address_proxy_1.createTokenNativeAddressProxy)(toToken, constants_1.zrxApiParams.nativeTokenAddress); const affiliateAddress = fullOptions.zrxAffiliateAddress; const quoteParams = { params: { sellToken: fromClone.address, buyToken: toClone.address, sellAmount: fromClone.stringWeiAmount, slippagePercentage: fullOptions.slippageTolerance.toString(), ...(affiliateAddress && { affiliateAddress }) } }; const apiTradeData = await zrx_api_service_1.ZrxApiService.getTradeData(quoteParams, from.blockchain); const to = new tokens_1.PriceTokenAmount({ ...toToken.asStruct, weiAmount: new bignumber_js_1.default(apiTradeData.buyAmount) }); const tradeStruct = { from, to, slippageTolerance: fullOptions.slippageTolerance, gasFeeInfo: await this.getGasFeeInfo(from, apiTradeData), path: [from, to], useProxy: fullOptions.useProxy, proxyFeeInfo, fromWithoutFee, withDeflation: fullOptions.withDeflation, usedForCrossChain: fullOptions.usedForCrossChain, ...(affiliateAddress && { affiliateAddress }), routerAddress: apiTradeData.to }; if (fullOptions.gasCalculation === 'disabled') { return new zrx_trade_1.ZrxTrade(tradeStruct, fullOptions.providerAddress); } return new zrx_trade_1.ZrxTrade(tradeStruct, fullOptions.providerAddress); } /** * Fetches zrx data from api. */ async getGasFeeInfo(from, quote) { try { const gasPriceInfo = await (0, get_gas_price_info_1.getGasPriceInfo)(from.blockchain); const gasLimit = new bignumber_js_1.default(quote.gas); return (0, get_gas_fee_info_1.getGasFeeInfo)(gasPriceInfo, { gasLimit }); } catch { return null; } } } exports.ZrxProvider = ZrxProvider; //# sourceMappingURL=zrx-provider.js.map