rubic-sdk
Version:
Simplify dApp creation
76 lines • 3.95 kB
JavaScript
"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