UNPKG

rubic-sdk

Version:
75 lines 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IzumiTrade = void 0; const base_1 = require("iziswap-sdk/lib/base"); const swap_1 = require("iziswap-sdk/lib/swap"); const blockchain_id_1 = require("../../../../../../../core/blockchain/utils/blockchains-info/constants/blockchain-id"); const injector_1 = require("../../../../../../../core/injector/injector"); const on_chain_trade_type_1 = require("../../../common/models/on-chain-trade-type"); const evm_on_chain_trade_1 = require("../../../common/on-chain-trade/evm-on-chain-trade/evm-on-chain-trade"); const get_gas_price_info_1 = require("../../../common/utils/get-gas-price-info"); class IzumiTrade extends evm_on_chain_trade_1.EvmOnChainTrade { static async getGasLimit(tradeStruct, providerAddress) { const fromBlockchain = tradeStruct.from.blockchain; const walletAddress = injector_1.Injector.web3PrivateService.getWeb3PrivateByBlockchain(fromBlockchain).address; if (!walletAddress) { return null; } try { const transactionConfig = await new IzumiTrade(tradeStruct, providerAddress).encode({ fromAddress: walletAddress }); const web3Public = injector_1.Injector.web3PublicService.getWeb3Public(fromBlockchain); const gasLimit = await web3Public.getEstimatedGasByData(walletAddress, transactionConfig.to, { data: transactionConfig.data, value: transactionConfig.value }); if (!gasLimit?.isFinite()) { return null; } return gasLimit; } catch (err) { console.debug(err); return null; } } get type() { return on_chain_trade_type_1.ON_CHAIN_TRADE_TYPE.IZUMI; } async getTransactionConfigAndAmount(options) { const tokenChain = blockchain_id_1.blockchainId[this.from.blockchain]; const swapParams = { feeChain: this.swapConfig.feeChain, tokenChain: this.swapConfig.tokenChain.map(token => ({ address: token, chainId: tokenChain })), inputAmount: this.fromWithoutFee.stringWeiAmount, minOutputAmount: this.toTokenAmountMin.stringWeiAmount, recipient: options?.receiverAddress || this.walletAddress, strictERC20Token: this.strictERC20Token }; const chainId = blockchain_id_1.blockchainId[this.from.blockchain]; const chain = base_1.initialChainTable[chainId]; const web3 = injector_1.Injector.web3PublicService.getWeb3Public(this.from.blockchain).web3Provider; const swapContract = (0, swap_1.getSwapContract)(this.dexContractAddress, web3); const gasPriceInfo = await (0, get_gas_price_info_1.getGasPriceInfo)(this.from.blockchain); const { swapCalling, options: data } = (0, swap_1.getSwapChainWithExactInputCall)(swapContract, this.walletAddress, chain ?? chainId, swapParams, gasPriceInfo.gasPrice.toFixed()); const config = { to: this.dexContractAddress, value: data.value, data: swapCalling.encodeABI() }; return { tx: config, toAmount: this.to.stringWeiAmount }; } constructor(tradeStruct, providerAddress) { super(tradeStruct, providerAddress); this.strictERC20Token = false; this.dexContractAddress = tradeStruct.dexContractAddress; this.swapConfig = tradeStruct.swapConfig; this.strictERC20Token = tradeStruct.strictERC20Token; } } exports.IzumiTrade = IzumiTrade; //# sourceMappingURL=izumi-trade.js.map