rubic-sdk
Version:
Simplify dApp creation
83 lines • 4.28 kB
JavaScript
;
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