UNPKG

rubic-sdk

Version:
76 lines 3.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UniswapV3UnichainTrade = void 0; const errors_1 = require("../../../../../../../common/errors"); const blockchain_1 = require("../../../../../../../common/utils/blockchain"); const evm_web3_pure_1 = require("../../../../../../../core/blockchain/web3-pure/typed-web3-pure/evm-web3-pure/evm-web3-pure"); const uniswap_v3_abstract_trade_1 = require("../../common/uniswap-v3-abstract/uniswap-v3-abstract-trade"); const uniswap_v3_quoter_controller_1 = require("../../common/uniswap-v3-abstract/utils/quoter-controller/uniswap-v3-quoter-controller"); const contract_addresses_1 = require("./constants/contract-addresses"); const swap_router_abi_1 = require("./constants/swap-router-abi"); class UniswapV3UnichainTrade extends uniswap_v3_abstract_trade_1.UniswapV3AbstractTrade { constructor() { super(...arguments); this.dexContractAddress = contract_addresses_1.UNICHAIN_UNISWAP_V3_SWAP_ROUTER_CONTRACT_ADDRESS; this.contractAbi = swap_router_abi_1.UNICHAIN_UNISWAP_V3_SWAP_ROUTER_ABI; } /** * Returns swap `exactInput` or `exactInputSingle` method's name and arguments to use in Swap Router contract. */ getSwapRouterExactInputMethodData(walletAddress) { if (this.exact === 'output') { throw new errors_1.RubicSdkError('Exact "output" not supported in UniswapV3UnichainTrade!'); } const amountParams = this.getAmountParams(); if (this.route.poolsPath.length === 1) { const pool = this.route.poolsPath[0]; const toTokenAddress = (0, blockchain_1.compareAddresses)(pool.token0.address, this.route.initialTokenAddress) ? pool.token1.address : pool.token0.address; return { methodName: 'exactInputSingle', methodArguments: [ [ this.route.initialTokenAddress, toTokenAddress, this.route.poolsPath[0]?.fee, walletAddress, ...amountParams, 0 ] ] }; } return { methodName: 'exactInput', methodArguments: [ [ uniswap_v3_quoter_controller_1.UniswapV3QuoterController.getEncodedPoolsPath(this.route.poolsPath, this.route.initialTokenAddress), walletAddress, ...amountParams ] ] }; } getSwapRouterMethodData(receiverAddress) { if (!this.to.isNative) { const { methodName: exactInputMethodName, methodArguments: exactInputMethodArguments } = this.getSwapRouterExactInputMethodData(receiverAddress || this.walletAddress); return { methodName: exactInputMethodName, methodArguments: exactInputMethodArguments }; } const { methodName: exactInputMethodName, methodArguments: exactInputMethodArguments } = // recipient is SwapRouterV2 of uniswap this.getSwapRouterExactInputMethodData(this.dexContractAddress); const exactInputMethodEncoded = evm_web3_pure_1.EvmWeb3Pure.encodeFunctionCall(this.contractAbi, exactInputMethodName, exactInputMethodArguments); const amountOutMin = this.to.weiAmountMinusSlippage(this.slippageTolerance).toFixed(0); const unwrapWETHMethodEncoded = evm_web3_pure_1.EvmWeb3Pure.encodeFunctionCall(this.contractAbi, this.unwrapWethMethodName, [amountOutMin, receiverAddress || this.walletAddress]); return { methodName: 'multicall', methodArguments: [[exactInputMethodEncoded, unwrapWETHMethodEncoded]] }; } } exports.UniswapV3UnichainTrade = UniswapV3UnichainTrade; //# sourceMappingURL=unichain-uni-v3-trade.js.map