@uniswap/universal-router-sdk 4.19.2 → 4.19.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs/src/entities → entities}/Command.d.ts +12 -12
- package/dist/{types/src/entities → entities}/actions/index.d.ts +2 -2
- package/dist/{cjs/src/entities → entities}/actions/uniswap.d.ts +30 -30
- package/dist/{esm/src/entities → entities}/actions/unwrapWETH.d.ts +12 -12
- package/dist/{cjs/src/entities → entities}/index.d.ts +2 -2
- package/dist/{esm/src/index.d.ts → index.d.ts} +10 -9
- package/dist/index.js +8 -0
- package/dist/{esm/src/swapRouter.d.ts → swapRouter.d.ts} +37 -37
- package/dist/test/forge/writeInterop.d.ts +2 -0
- package/dist/test/utils/addresses.d.ts +5 -0
- package/dist/test/utils/hexToDecimalString.d.ts +2 -0
- package/dist/test/utils/permit2.d.ts +7 -0
- package/dist/test/utils/uniswapData.d.ts +24 -0
- package/dist/universal-router-sdk.cjs.development.js +1424 -0
- package/dist/universal-router-sdk.cjs.development.js.map +1 -0
- package/dist/universal-router-sdk.cjs.production.min.js +2 -0
- package/dist/universal-router-sdk.cjs.production.min.js.map +1 -0
- package/dist/universal-router-sdk.esm.js +1417 -0
- package/dist/universal-router-sdk.esm.js.map +1 -0
- package/dist/{esm/src/utils → utils}/commandParser.d.ts +34 -34
- package/dist/{types/src/utils → utils}/constants.d.ts +30 -30
- package/dist/{cjs/src/utils → utils}/getCurrencyAddress.d.ts +2 -2
- package/dist/{types/src/utils → utils}/inputTokens.d.ts +23 -23
- package/dist/{cjs/src/utils → utils}/numbers.d.ts +6 -6
- package/dist/{types/src/utils → utils}/pathCurrency.d.ts +3 -3
- package/dist/{cjs/src/utils → utils}/routerCommands.d.ts +64 -64
- package/dist/{types/src/utils → utils}/routerTradeAdapter.d.ts +73 -73
- package/package.json +10 -21
- package/dist/cjs/src/entities/Command.js +0 -9
- package/dist/cjs/src/entities/Command.js.map +0 -1
- package/dist/cjs/src/entities/actions/index.d.ts +0 -2
- package/dist/cjs/src/entities/actions/index.js +0 -6
- package/dist/cjs/src/entities/actions/index.js.map +0 -1
- package/dist/cjs/src/entities/actions/uniswap.js +0 -365
- package/dist/cjs/src/entities/actions/uniswap.js.map +0 -1
- package/dist/cjs/src/entities/actions/unwrapWETH.d.ts +0 -12
- package/dist/cjs/src/entities/actions/unwrapWETH.js +0 -33
- package/dist/cjs/src/entities/actions/unwrapWETH.js.map +0 -1
- package/dist/cjs/src/entities/index.js +0 -6
- package/dist/cjs/src/entities/index.js.map +0 -1
- package/dist/cjs/src/index.d.ts +0 -9
- package/dist/cjs/src/index.js +0 -24
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/swapRouter.d.ts +0 -37
- package/dist/cjs/src/swapRouter.js +0 -120
- package/dist/cjs/src/swapRouter.js.map +0 -1
- package/dist/cjs/src/utils/commandParser.d.ts +0 -34
- package/dist/cjs/src/utils/commandParser.js +0 -144
- package/dist/cjs/src/utils/commandParser.js.map +0 -1
- package/dist/cjs/src/utils/constants.d.ts +0 -30
- package/dist/cjs/src/utils/constants.js +0 -373
- package/dist/cjs/src/utils/constants.js.map +0 -1
- package/dist/cjs/src/utils/getCurrencyAddress.js +0 -9
- package/dist/cjs/src/utils/getCurrencyAddress.js.map +0 -1
- package/dist/cjs/src/utils/inputTokens.d.ts +0 -23
- package/dist/cjs/src/utils/inputTokens.js +0 -58
- package/dist/cjs/src/utils/inputTokens.js.map +0 -1
- package/dist/cjs/src/utils/numbers.js +0 -22
- package/dist/cjs/src/utils/numbers.js.map +0 -1
- package/dist/cjs/src/utils/pathCurrency.d.ts +0 -3
- package/dist/cjs/src/utils/pathCurrency.js +0 -27
- package/dist/cjs/src/utils/pathCurrency.js.map +0 -1
- package/dist/cjs/src/utils/routerCommands.js +0 -231
- package/dist/cjs/src/utils/routerCommands.js.map +0 -1
- package/dist/cjs/src/utils/routerTradeAdapter.d.ts +0 -73
- package/dist/cjs/src/utils/routerTradeAdapter.js +0 -139
- package/dist/cjs/src/utils/routerTradeAdapter.js.map +0 -1
- package/dist/esm/src/entities/Command.d.ts +0 -12
- package/dist/esm/src/entities/Command.js +0 -6
- package/dist/esm/src/entities/Command.js.map +0 -1
- package/dist/esm/src/entities/actions/index.d.ts +0 -2
- package/dist/esm/src/entities/actions/index.js +0 -3
- package/dist/esm/src/entities/actions/index.js.map +0 -1
- package/dist/esm/src/entities/actions/uniswap.d.ts +0 -30
- package/dist/esm/src/entities/actions/uniswap.js +0 -361
- package/dist/esm/src/entities/actions/uniswap.js.map +0 -1
- package/dist/esm/src/entities/actions/unwrapWETH.js +0 -28
- package/dist/esm/src/entities/actions/unwrapWETH.js.map +0 -1
- package/dist/esm/src/entities/index.d.ts +0 -2
- package/dist/esm/src/entities/index.js +0 -3
- package/dist/esm/src/entities/index.js.map +0 -1
- package/dist/esm/src/index.js +0 -7
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/swapRouter.js +0 -115
- package/dist/esm/src/swapRouter.js.map +0 -1
- package/dist/esm/src/utils/commandParser.js +0 -137
- package/dist/esm/src/utils/commandParser.js.map +0 -1
- package/dist/esm/src/utils/constants.d.ts +0 -30
- package/dist/esm/src/utils/constants.js +0 -367
- package/dist/esm/src/utils/constants.js.map +0 -1
- package/dist/esm/src/utils/getCurrencyAddress.d.ts +0 -2
- package/dist/esm/src/utils/getCurrencyAddress.js +0 -5
- package/dist/esm/src/utils/getCurrencyAddress.js.map +0 -1
- package/dist/esm/src/utils/inputTokens.d.ts +0 -23
- package/dist/esm/src/utils/inputTokens.js +0 -51
- package/dist/esm/src/utils/inputTokens.js.map +0 -1
- package/dist/esm/src/utils/numbers.d.ts +0 -6
- package/dist/esm/src/utils/numbers.js +0 -15
- package/dist/esm/src/utils/numbers.js.map +0 -1
- package/dist/esm/src/utils/pathCurrency.d.ts +0 -3
- package/dist/esm/src/utils/pathCurrency.js +0 -23
- package/dist/esm/src/utils/pathCurrency.js.map +0 -1
- package/dist/esm/src/utils/routerCommands.d.ts +0 -64
- package/dist/esm/src/utils/routerCommands.js +0 -226
- package/dist/esm/src/utils/routerCommands.js.map +0 -1
- package/dist/esm/src/utils/routerTradeAdapter.d.ts +0 -73
- package/dist/esm/src/utils/routerTradeAdapter.js +0 -134
- package/dist/esm/src/utils/routerTradeAdapter.js.map +0 -1
- package/dist/types/src/entities/Command.d.ts +0 -12
- package/dist/types/src/entities/actions/uniswap.d.ts +0 -30
- package/dist/types/src/entities/actions/unwrapWETH.d.ts +0 -12
- package/dist/types/src/entities/index.d.ts +0 -2
- package/dist/types/src/index.d.ts +0 -9
- package/dist/types/src/swapRouter.d.ts +0 -37
- package/dist/types/src/utils/commandParser.d.ts +0 -34
- package/dist/types/src/utils/getCurrencyAddress.d.ts +0 -2
- package/dist/types/src/utils/numbers.d.ts +0 -6
- package/dist/types/src/utils/routerCommands.d.ts +0 -64
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
import { CommandType } from '../../utils/routerCommands';
|
|
2
|
-
import { Trade as V2Trade, Pair } from '@uniswap/v2-sdk';
|
|
3
|
-
import { Trade as V3Trade, Pool as V3Pool, encodeRouteToPath } from '@uniswap/v3-sdk';
|
|
4
|
-
import { Route as V4Route, Trade as V4Trade, Pool as V4Pool, V4Planner, encodeRouteToPath as encodeV4RouteToPath, Actions, } from '@uniswap/v4-sdk';
|
|
5
|
-
import { MixedRouteTrade, Protocol, MixedRouteSDK, MixedRoute, getOutputOfPools, encodeMixedRouteToPath, partitionMixedRouteByProtocol, } from '@uniswap/router-sdk';
|
|
6
|
-
import { getPathCurrency } from '../../utils/pathCurrency';
|
|
7
|
-
import { TradeType, Percent } from '@uniswap/sdk-core';
|
|
8
|
-
import { RouterActionType } from '../Command';
|
|
9
|
-
import { SENDER_AS_RECIPIENT, ROUTER_AS_RECIPIENT, CONTRACT_BALANCE, ETH_ADDRESS } from '../../utils/constants';
|
|
10
|
-
import { getCurrencyAddress } from '../../utils/getCurrencyAddress';
|
|
11
|
-
import { encodeFeeBips } from '../../utils/numbers';
|
|
12
|
-
import { BigNumber } from 'ethers';
|
|
13
|
-
const REFUND_ETH_PRICE_IMPACT_THRESHOLD = new Percent(50, 100);
|
|
14
|
-
// Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router
|
|
15
|
-
// also translates trade objects from previous (v2, v3) SDKs
|
|
16
|
-
export class UniswapTrade {
|
|
17
|
-
constructor(trade, options) {
|
|
18
|
-
this.trade = trade;
|
|
19
|
-
this.options = options;
|
|
20
|
-
this.tradeType = RouterActionType.UniswapTrade;
|
|
21
|
-
if (!!options.fee && !!options.flatFee)
|
|
22
|
-
throw new Error('Only one fee option permitted');
|
|
23
|
-
if (this.inputRequiresWrap || this.inputRequiresUnwrap || this.options.useRouterBalance) {
|
|
24
|
-
this.payerIsUser = false;
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
this.payerIsUser = true;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
get isAllV4() {
|
|
31
|
-
let result = true;
|
|
32
|
-
for (const swap of this.trade.swaps) {
|
|
33
|
-
result = result && swap.route.protocol == Protocol.V4;
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
get inputRequiresWrap() {
|
|
38
|
-
if (this.isAllV4) {
|
|
39
|
-
return (this.trade.inputAmount.currency.isNative &&
|
|
40
|
-
!this.trade.swaps[0].route.pathInput.isNative);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return this.trade.inputAmount.currency.isNative;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
get inputRequiresUnwrap() {
|
|
47
|
-
if (this.isAllV4) {
|
|
48
|
-
return (!this.trade.inputAmount.currency.isNative &&
|
|
49
|
-
this.trade.swaps[0].route.pathInput.isNative);
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
get outputRequiresWrap() {
|
|
54
|
-
if (this.isAllV4) {
|
|
55
|
-
return (!this.trade.outputAmount.currency.isNative &&
|
|
56
|
-
this.trade.swaps[0].route.pathOutput.isNative);
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
get outputRequiresUnwrap() {
|
|
61
|
-
if (this.isAllV4) {
|
|
62
|
-
return (this.trade.outputAmount.currency.isNative &&
|
|
63
|
-
!this.trade.swaps[0].route.pathOutput.isNative);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
return this.trade.outputAmount.currency.isNative;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
get outputRequiresTransition() {
|
|
70
|
-
return this.outputRequiresWrap || this.outputRequiresUnwrap;
|
|
71
|
-
}
|
|
72
|
-
encode(planner, _config) {
|
|
73
|
-
var _a;
|
|
74
|
-
// If the input currency is the native currency, we need to wrap it with the router as the recipient
|
|
75
|
-
if (this.inputRequiresWrap) {
|
|
76
|
-
// TODO: optimize if only one v2 pool we can directly send this to the pool
|
|
77
|
-
planner.addCommand(CommandType.WRAP_ETH, [
|
|
78
|
-
ROUTER_AS_RECIPIENT,
|
|
79
|
-
this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString(),
|
|
80
|
-
]);
|
|
81
|
-
}
|
|
82
|
-
else if (this.inputRequiresUnwrap) {
|
|
83
|
-
// send wrapped token to router to unwrap
|
|
84
|
-
planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [
|
|
85
|
-
this.trade.inputAmount.currency.address,
|
|
86
|
-
ROUTER_AS_RECIPIENT,
|
|
87
|
-
this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString(),
|
|
88
|
-
]);
|
|
89
|
-
planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, 0]);
|
|
90
|
-
}
|
|
91
|
-
// The overall recipient at the end of the trade, SENDER_AS_RECIPIENT uses the msg.sender
|
|
92
|
-
this.options.recipient = (_a = this.options.recipient) !== null && _a !== void 0 ? _a : SENDER_AS_RECIPIENT;
|
|
93
|
-
// flag for whether we want to perform slippage check on aggregate output of multiple routes
|
|
94
|
-
// 1. when there are >2 exact input trades. this is only a heuristic,
|
|
95
|
-
// as it's still more gas-expensive even in this case, but has benefits
|
|
96
|
-
// in that the reversion probability is lower
|
|
97
|
-
const performAggregatedSlippageCheck = this.trade.tradeType === TradeType.EXACT_INPUT && this.trade.routes.length > 2;
|
|
98
|
-
const routerMustCustody = performAggregatedSlippageCheck || this.outputRequiresTransition || hasFeeOption(this.options);
|
|
99
|
-
for (const swap of this.trade.swaps) {
|
|
100
|
-
switch (swap.route.protocol) {
|
|
101
|
-
case Protocol.V2:
|
|
102
|
-
addV2Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
103
|
-
break;
|
|
104
|
-
case Protocol.V3:
|
|
105
|
-
addV3Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
106
|
-
break;
|
|
107
|
-
case Protocol.V4:
|
|
108
|
-
addV4Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
109
|
-
break;
|
|
110
|
-
case Protocol.MIXED:
|
|
111
|
-
addMixedSwap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
112
|
-
break;
|
|
113
|
-
default:
|
|
114
|
-
throw new Error('UNSUPPORTED_TRADE_PROTOCOL');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
let minimumAmountOut = BigNumber.from(this.trade.minimumAmountOut(this.options.slippageTolerance).quotient.toString());
|
|
118
|
-
// The router custodies for 3 reasons: to unwrap, to take a fee, and/or to do a slippage check
|
|
119
|
-
if (routerMustCustody) {
|
|
120
|
-
const pools = this.trade.swaps[0].route.pools;
|
|
121
|
-
const pathOutputCurrencyAddress = getCurrencyAddress(getPathCurrency(this.trade.outputAmount.currency, pools[pools.length - 1]));
|
|
122
|
-
// If there is a fee, that percentage is sent to the fee recipient
|
|
123
|
-
// In the case where ETH is the output currency, the fee is taken in WETH (for gas reasons)
|
|
124
|
-
if (!!this.options.fee) {
|
|
125
|
-
const feeBips = encodeFeeBips(this.options.fee.fee);
|
|
126
|
-
planner.addCommand(CommandType.PAY_PORTION, [pathOutputCurrencyAddress, this.options.fee.recipient, feeBips]);
|
|
127
|
-
// If the trade is exact output, and a fee was taken, we must adjust the amount out to be the amount after the fee
|
|
128
|
-
// Otherwise we continue as expected with the trade's normal expected output
|
|
129
|
-
if (this.trade.tradeType === TradeType.EXACT_OUTPUT) {
|
|
130
|
-
minimumAmountOut = minimumAmountOut.sub(minimumAmountOut.mul(feeBips).div(10000));
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// If there is a flat fee, that absolute amount is sent to the fee recipient
|
|
134
|
-
// In the case where ETH is the output currency, the fee is taken in WETH (for gas reasons)
|
|
135
|
-
if (!!this.options.flatFee) {
|
|
136
|
-
const feeAmount = this.options.flatFee.amount;
|
|
137
|
-
if (minimumAmountOut.lt(feeAmount))
|
|
138
|
-
throw new Error('Flat fee amount greater than minimumAmountOut');
|
|
139
|
-
planner.addCommand(CommandType.TRANSFER, [pathOutputCurrencyAddress, this.options.flatFee.recipient, feeAmount]);
|
|
140
|
-
// If the trade is exact output, and a fee was taken, we must adjust the amount out to be the amount after the fee
|
|
141
|
-
// Otherwise we continue as expected with the trade's normal expected output
|
|
142
|
-
if (this.trade.tradeType === TradeType.EXACT_OUTPUT) {
|
|
143
|
-
minimumAmountOut = minimumAmountOut.sub(feeAmount);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// The remaining tokens that need to be sent to the user after the fee is taken will be caught
|
|
147
|
-
// by this if-else clause.
|
|
148
|
-
if (this.outputRequiresUnwrap) {
|
|
149
|
-
planner.addCommand(CommandType.UNWRAP_WETH, [this.options.recipient, minimumAmountOut]);
|
|
150
|
-
}
|
|
151
|
-
else if (this.outputRequiresWrap) {
|
|
152
|
-
planner.addCommand(CommandType.WRAP_ETH, [this.options.recipient, CONTRACT_BALANCE]);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
planner.addCommand(CommandType.SWEEP, [
|
|
156
|
-
getCurrencyAddress(this.trade.outputAmount.currency),
|
|
157
|
-
this.options.recipient,
|
|
158
|
-
minimumAmountOut,
|
|
159
|
-
]);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// for exactOutput swaps with native input or that perform an inputToken transition (wrap or unwrap)
|
|
163
|
-
// we need to send back the change to the user
|
|
164
|
-
if (this.trade.tradeType === TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade)) {
|
|
165
|
-
if (this.inputRequiresWrap) {
|
|
166
|
-
planner.addCommand(CommandType.UNWRAP_WETH, [this.options.recipient, 0]);
|
|
167
|
-
}
|
|
168
|
-
else if (this.inputRequiresUnwrap) {
|
|
169
|
-
planner.addCommand(CommandType.WRAP_ETH, [this.options.recipient, CONTRACT_BALANCE]);
|
|
170
|
-
}
|
|
171
|
-
else if (this.trade.inputAmount.currency.isNative) {
|
|
172
|
-
// must refund extra native currency sent along for native v4 trades (no input transition)
|
|
173
|
-
planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
if (this.options.safeMode)
|
|
177
|
-
planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
// encode a uniswap v2 swap
|
|
181
|
-
function addV2Swap(planner, { route, inputAmount, outputAmount }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
182
|
-
const trade = new V2Trade(route, tradeType == TradeType.EXACT_INPUT ? inputAmount : outputAmount, tradeType);
|
|
183
|
-
if (tradeType == TradeType.EXACT_INPUT) {
|
|
184
|
-
planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [
|
|
185
|
-
// if native, we have to unwrap so keep in the router for now
|
|
186
|
-
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,
|
|
187
|
-
trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
188
|
-
// if router will custody funds, we do aggregated slippage check from router
|
|
189
|
-
routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),
|
|
190
|
-
route.path.map((token) => token.wrapped.address),
|
|
191
|
-
payerIsUser,
|
|
192
|
-
]);
|
|
193
|
-
}
|
|
194
|
-
else if (tradeType == TradeType.EXACT_OUTPUT) {
|
|
195
|
-
planner.addCommand(CommandType.V2_SWAP_EXACT_OUT, [
|
|
196
|
-
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,
|
|
197
|
-
trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),
|
|
198
|
-
trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
199
|
-
route.path.map((token) => token.wrapped.address),
|
|
200
|
-
payerIsUser,
|
|
201
|
-
]);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// encode a uniswap v3 swap
|
|
205
|
-
function addV3Swap(planner, { route, inputAmount, outputAmount }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
206
|
-
const trade = V3Trade.createUncheckedTrade({
|
|
207
|
-
route: route,
|
|
208
|
-
inputAmount,
|
|
209
|
-
outputAmount,
|
|
210
|
-
tradeType,
|
|
211
|
-
});
|
|
212
|
-
const path = encodeRouteToPath(route, trade.tradeType === TradeType.EXACT_OUTPUT);
|
|
213
|
-
if (tradeType == TradeType.EXACT_INPUT) {
|
|
214
|
-
planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [
|
|
215
|
-
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,
|
|
216
|
-
trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
217
|
-
routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),
|
|
218
|
-
path,
|
|
219
|
-
payerIsUser,
|
|
220
|
-
]);
|
|
221
|
-
}
|
|
222
|
-
else if (tradeType == TradeType.EXACT_OUTPUT) {
|
|
223
|
-
planner.addCommand(CommandType.V3_SWAP_EXACT_OUT, [
|
|
224
|
-
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient,
|
|
225
|
-
trade.minimumAmountOut(options.slippageTolerance).quotient.toString(),
|
|
226
|
-
trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
227
|
-
path,
|
|
228
|
-
payerIsUser,
|
|
229
|
-
]);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
function addV4Swap(planner, { inputAmount, outputAmount, route }, tradeType, options, payerIsUser, routerMustCustody) {
|
|
233
|
-
var _a;
|
|
234
|
-
// create a deep copy of pools since v4Planner encoding tampers with array
|
|
235
|
-
const pools = route.pools.map((p) => p);
|
|
236
|
-
const v4Route = new V4Route(pools, inputAmount.currency, outputAmount.currency);
|
|
237
|
-
const trade = V4Trade.createUncheckedTrade({
|
|
238
|
-
route: v4Route,
|
|
239
|
-
inputAmount,
|
|
240
|
-
outputAmount,
|
|
241
|
-
tradeType,
|
|
242
|
-
});
|
|
243
|
-
const slippageToleranceOnSwap = routerMustCustody && tradeType == TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
|
|
244
|
-
const v4Planner = new V4Planner();
|
|
245
|
-
v4Planner.addTrade(trade, slippageToleranceOnSwap);
|
|
246
|
-
v4Planner.addSettle(trade.route.pathInput, payerIsUser);
|
|
247
|
-
v4Planner.addTake(trade.route.pathOutput, routerMustCustody ? ROUTER_AS_RECIPIENT : (_a = options.recipient) !== null && _a !== void 0 ? _a : SENDER_AS_RECIPIENT);
|
|
248
|
-
planner.addCommand(CommandType.V4_SWAP, [v4Planner.finalize()]);
|
|
249
|
-
}
|
|
250
|
-
// encode a mixed route swap, i.e. including both v2 and v3 pools
|
|
251
|
-
function addMixedSwap(planner, swap, tradeType, options, payerIsUser, routerMustCustody) {
|
|
252
|
-
var _a;
|
|
253
|
-
const route = swap.route;
|
|
254
|
-
const inputAmount = swap.inputAmount;
|
|
255
|
-
const outputAmount = swap.outputAmount;
|
|
256
|
-
const tradeRecipient = routerMustCustody ? ROUTER_AS_RECIPIENT : (_a = options.recipient) !== null && _a !== void 0 ? _a : SENDER_AS_RECIPIENT;
|
|
257
|
-
// single hop, so it can be reduced to plain swap logic for one protocol version
|
|
258
|
-
if (route.pools.length === 1) {
|
|
259
|
-
if (route.pools[0] instanceof V4Pool) {
|
|
260
|
-
return addV4Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
261
|
-
}
|
|
262
|
-
else if (route.pools[0] instanceof V3Pool) {
|
|
263
|
-
return addV3Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
264
|
-
}
|
|
265
|
-
else if (route.pools[0] instanceof Pair) {
|
|
266
|
-
return addV2Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
throw new Error('Invalid route type');
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
const trade = MixedRouteTrade.createUncheckedTrade({
|
|
273
|
-
route: route,
|
|
274
|
-
inputAmount,
|
|
275
|
-
outputAmount,
|
|
276
|
-
tradeType,
|
|
277
|
-
});
|
|
278
|
-
const amountIn = trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient.toString();
|
|
279
|
-
const amountOut = routerMustCustody
|
|
280
|
-
? 0
|
|
281
|
-
: trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient.toString();
|
|
282
|
-
// logic from
|
|
283
|
-
// https://github.com/Uniswap/router-sdk/blob/d8eed164e6c79519983844ca8b6a3fc24ebcb8f8/src/swapRouter.ts#L276
|
|
284
|
-
const sections = partitionMixedRouteByProtocol(route);
|
|
285
|
-
const isLastSectionInRoute = (i) => {
|
|
286
|
-
return i === sections.length - 1;
|
|
287
|
-
};
|
|
288
|
-
let inputToken = route.pathInput;
|
|
289
|
-
for (let i = 0; i < sections.length; i++) {
|
|
290
|
-
const section = sections[i];
|
|
291
|
-
const routePool = section[0];
|
|
292
|
-
const outputToken = getOutputOfPools(section, inputToken);
|
|
293
|
-
const subRoute = new MixedRoute(new MixedRouteSDK([...section], inputToken, outputToken));
|
|
294
|
-
let nextInputToken;
|
|
295
|
-
let swapRecipient;
|
|
296
|
-
if (isLastSectionInRoute(i)) {
|
|
297
|
-
nextInputToken = outputToken;
|
|
298
|
-
swapRecipient = tradeRecipient;
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
const nextPool = sections[i + 1][0];
|
|
302
|
-
nextInputToken = getPathCurrency(outputToken, nextPool);
|
|
303
|
-
const v2PoolIsSwapRecipient = nextPool instanceof Pair && outputToken.equals(nextInputToken);
|
|
304
|
-
swapRecipient = v2PoolIsSwapRecipient ? nextPool.liquidityToken.address : ROUTER_AS_RECIPIENT;
|
|
305
|
-
}
|
|
306
|
-
if (routePool instanceof V4Pool) {
|
|
307
|
-
const v4Planner = new V4Planner();
|
|
308
|
-
const v4SubRoute = new V4Route(section, subRoute.input, subRoute.output);
|
|
309
|
-
v4Planner.addSettle(inputToken, payerIsUser && i === 0, (i == 0 ? amountIn : CONTRACT_BALANCE));
|
|
310
|
-
v4Planner.addAction(Actions.SWAP_EXACT_IN, [
|
|
311
|
-
{
|
|
312
|
-
currencyIn: inputToken.isNative ? ETH_ADDRESS : inputToken.address,
|
|
313
|
-
path: encodeV4RouteToPath(v4SubRoute),
|
|
314
|
-
amountIn: 0,
|
|
315
|
-
amountOutMinimum: !isLastSectionInRoute(i) ? 0 : amountOut,
|
|
316
|
-
},
|
|
317
|
-
]);
|
|
318
|
-
v4Planner.addTake(outputToken, swapRecipient);
|
|
319
|
-
planner.addCommand(CommandType.V4_SWAP, [v4Planner.finalize()]);
|
|
320
|
-
}
|
|
321
|
-
else if (routePool instanceof V3Pool) {
|
|
322
|
-
planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [
|
|
323
|
-
swapRecipient,
|
|
324
|
-
i == 0 ? amountIn : CONTRACT_BALANCE,
|
|
325
|
-
!isLastSectionInRoute(i) ? 0 : amountOut,
|
|
326
|
-
encodeMixedRouteToPath(subRoute),
|
|
327
|
-
payerIsUser && i === 0, // payerIsUser
|
|
328
|
-
]);
|
|
329
|
-
}
|
|
330
|
-
else if (routePool instanceof Pair) {
|
|
331
|
-
planner.addCommand(CommandType.V2_SWAP_EXACT_IN, [
|
|
332
|
-
swapRecipient,
|
|
333
|
-
i === 0 ? amountIn : CONTRACT_BALANCE,
|
|
334
|
-
!isLastSectionInRoute(i) ? 0 : amountOut,
|
|
335
|
-
subRoute.path.map((token) => token.wrapped.address),
|
|
336
|
-
payerIsUser && i === 0,
|
|
337
|
-
]);
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
throw new Error('Unexpected Pool Type');
|
|
341
|
-
}
|
|
342
|
-
// perform a token transition (wrap/unwrap if necessary)
|
|
343
|
-
if (!isLastSectionInRoute(i)) {
|
|
344
|
-
if (outputToken.isNative && !nextInputToken.isNative) {
|
|
345
|
-
planner.addCommand(CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, CONTRACT_BALANCE]);
|
|
346
|
-
}
|
|
347
|
-
else if (!outputToken.isNative && nextInputToken.isNative) {
|
|
348
|
-
planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, 0]);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
inputToken = nextInputToken;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
// if price impact is very high, there's a chance of hitting max/min prices resulting in a partial fill of the swap
|
|
355
|
-
function riskOfPartialFill(trade) {
|
|
356
|
-
return trade.priceImpact.greaterThan(REFUND_ETH_PRICE_IMPACT_THRESHOLD);
|
|
357
|
-
}
|
|
358
|
-
function hasFeeOption(swapOptions) {
|
|
359
|
-
return !!swapOptions.fee || !!swapOptions.flatFee;
|
|
360
|
-
}
|
|
361
|
-
//# sourceMappingURL=uniswap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uniswap.js","sourceRoot":"","sources":["../../../../../src/entities/actions/uniswap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import invariant from 'tiny-invariant';
|
|
2
|
-
import { CommandType } from '../../utils/routerCommands';
|
|
3
|
-
import { encodeInputTokenOptions } from '../../utils/inputTokens';
|
|
4
|
-
import { RouterActionType } from '../Command';
|
|
5
|
-
import { ROUTER_AS_RECIPIENT, WETH_ADDRESS } from '../../utils/constants';
|
|
6
|
-
export class UnwrapWETH {
|
|
7
|
-
constructor(amount, chainId, permit2) {
|
|
8
|
-
this.tradeType = RouterActionType.UnwrapWETH;
|
|
9
|
-
this.wethAddress = WETH_ADDRESS(chainId);
|
|
10
|
-
this.amount = amount;
|
|
11
|
-
if (!!permit2) {
|
|
12
|
-
invariant(permit2.details.token.toLowerCase() === this.wethAddress.toLowerCase(), `must be permitting WETH address: ${this.wethAddress}`);
|
|
13
|
-
invariant(permit2.details.amount >= amount, `Did not permit enough WETH for unwrapWETH transaction`);
|
|
14
|
-
this.permit2Data = permit2;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
encode(planner, _) {
|
|
18
|
-
encodeInputTokenOptions(planner, {
|
|
19
|
-
permit2Permit: this.permit2Data,
|
|
20
|
-
permit2TransferFrom: {
|
|
21
|
-
token: this.wethAddress,
|
|
22
|
-
amount: this.amount.toString(),
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, this.amount]);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=unwrapWETH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unwrapWETH.js","sourceRoot":"","sources":["../../../../../src/entities/actions/unwrapWETH.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAEtC,OAAO,EAAgB,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAiB,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAW,gBAAgB,EAAe,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzE,MAAM,OAAO,UAAU;IAMrB,YAAY,MAAoB,EAAE,OAAe,EAAE,OAAuB;QALjE,cAAS,GAAqB,gBAAgB,CAAC,UAAU,CAAA;QAMhE,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,CAAC,OAAO,EAAE;YACb,SAAS,CACP,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EACtE,oCAAoC,IAAI,CAAC,WAAW,EAAE,CACvD,CAAA;YACD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE,uDAAuD,CAAC,CAAA;YACpG,IAAI,CAAC,WAAW,GAAG,OAAO,CAAA;SAC3B;IACH,CAAC;IAED,MAAM,CAAC,OAAqB,EAAE,CAAc;QAC1C,uBAAuB,CAAC,OAAO,EAAE;YAC/B,aAAa,EAAE,IAAI,CAAC,WAAW;YAC/B,mBAAmB,EAAE;gBACnB,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;aAC/B;SACF,CAAC,CAAA;QACF,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACjF,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
package/dist/esm/src/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { SwapRouter } from './swapRouter';
|
|
2
|
-
export * from './entities';
|
|
3
|
-
export * from './utils/routerTradeAdapter';
|
|
4
|
-
export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
|
|
5
|
-
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, } from './utils/constants';
|
|
6
|
-
export { CommandParser, GenericCommandParser } from './utils/commandParser';
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,cAAc,YAAY,CAAA;AAC1B,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEzG,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import invariant from 'tiny-invariant';
|
|
2
|
-
import { abi } from '@uniswap/universal-router/artifacts/contracts/UniversalRouter.sol/UniversalRouter.json';
|
|
3
|
-
import { Interface } from '@ethersproject/abi';
|
|
4
|
-
import { BigNumber } from 'ethers';
|
|
5
|
-
import { Multicall, NonfungiblePositionManager as V3PositionManager, } from '@uniswap/v3-sdk';
|
|
6
|
-
import { V4PositionManager, Pool as V4Pool, } from '@uniswap/v4-sdk';
|
|
7
|
-
import { Percent, CHAIN_TO_ADDRESSES_MAP } from '@uniswap/sdk-core';
|
|
8
|
-
import { UniswapTrade } from './entities/actions/uniswap';
|
|
9
|
-
import { RoutePlanner, CommandType } from './utils/routerCommands';
|
|
10
|
-
import { encodePermit, encodeV3PositionPermit } from './utils/inputTokens';
|
|
11
|
-
import { UNIVERSAL_ROUTER_ADDRESS, UniversalRouterVersion } from './utils/constants';
|
|
12
|
-
function isMint(options) {
|
|
13
|
-
return Object.keys(options).some((k) => k === 'recipient');
|
|
14
|
-
}
|
|
15
|
-
export class SwapRouter {
|
|
16
|
-
static swapCallParameters(trades, options) {
|
|
17
|
-
// TODO: use permit if signature included in swapOptions
|
|
18
|
-
const planner = new RoutePlanner();
|
|
19
|
-
const trade = new UniswapTrade(trades, options);
|
|
20
|
-
const inputCurrency = trade.trade.inputAmount.currency;
|
|
21
|
-
invariant(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
|
|
22
|
-
if (options.inputTokenPermit) {
|
|
23
|
-
encodePermit(planner, options.inputTokenPermit);
|
|
24
|
-
}
|
|
25
|
-
const nativeCurrencyValue = inputCurrency.isNative
|
|
26
|
-
? BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())
|
|
27
|
-
: BigNumber.from(0);
|
|
28
|
-
trade.encode(planner, { allowRevert: false });
|
|
29
|
-
return SwapRouter.encodePlan(planner, nativeCurrencyValue, {
|
|
30
|
-
deadline: options.deadlineOrPreviousBlockhash ? BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Builds the call parameters for a migration from a V3 position to a V4 position.
|
|
35
|
-
* Some requirements of the parameters:
|
|
36
|
-
* - v3RemoveLiquidityOptions.collectOptions.recipient must equal v4PositionManager
|
|
37
|
-
* - v3RemoveLiquidityOptions.liquidityPercentage must be 100%
|
|
38
|
-
* - input pool and output pool must have the same tokens
|
|
39
|
-
* - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
|
|
40
|
-
*/
|
|
41
|
-
static migrateV3ToV4CallParameters(options, positionManagerOverride) {
|
|
42
|
-
const v4Pool = options.outputPosition.pool;
|
|
43
|
-
const v3Token0 = options.inputPosition.pool.token0;
|
|
44
|
-
const v3Token1 = options.inputPosition.pool.token1;
|
|
45
|
-
const v4PositionManagerAddress = positionManagerOverride !== null && positionManagerOverride !== void 0 ? positionManagerOverride : CHAIN_TO_ADDRESSES_MAP[v4Pool.chainId].v4PositionManagerAddress;
|
|
46
|
-
// owner of the v3 nft must be the receiver of the v4 nft
|
|
47
|
-
// validate the parameters
|
|
48
|
-
if (v4Pool.currency0.isNative) {
|
|
49
|
-
invariant((v4Pool.currency0.wrapped.equals(v3Token0) && v4Pool.currency1.equals(v3Token1)) ||
|
|
50
|
-
(v4Pool.currency0.wrapped.equals(v3Token1) && v4Pool.currency1.equals(v3Token0)), 'TOKEN_MISMATCH');
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
invariant(v3Token0 === v4Pool.token0, 'TOKEN0_MISMATCH');
|
|
54
|
-
invariant(v3Token1 === v4Pool.token1, 'TOKEN1_MISMATCH');
|
|
55
|
-
}
|
|
56
|
-
invariant(options.v3RemoveLiquidityOptions.liquidityPercentage.equalTo(new Percent(100, 100)), 'FULL_REMOVAL_REQUIRED');
|
|
57
|
-
invariant(options.v3RemoveLiquidityOptions.burnToken == true, 'BURN_TOKEN_REQUIRED');
|
|
58
|
-
invariant(options.v3RemoveLiquidityOptions.collectOptions.recipient === v4PositionManagerAddress, 'RECIPIENT_NOT_POSITION_MANAGER');
|
|
59
|
-
invariant(isMint(options.v4AddLiquidityOptions), 'MINT_REQUIRED');
|
|
60
|
-
invariant(options.v4AddLiquidityOptions.migrate, 'MIGRATE_REQUIRED');
|
|
61
|
-
const planner = new RoutePlanner();
|
|
62
|
-
// to prevent reentrancy by the pool hook, we initialize the v4 pool before moving funds
|
|
63
|
-
if (options.v4AddLiquidityOptions.createPool) {
|
|
64
|
-
const poolKey = V4Pool.getPoolKey(v4Pool.currency0, v4Pool.currency1, v4Pool.fee, v4Pool.tickSpacing, v4Pool.hooks);
|
|
65
|
-
planner.addCommand(CommandType.V4_INITIALIZE_POOL, [poolKey, v4Pool.sqrtRatioX96.toString()]);
|
|
66
|
-
// remove createPool setting, so that it doesnt get encoded again later
|
|
67
|
-
delete options.v4AddLiquidityOptions.createPool;
|
|
68
|
-
}
|
|
69
|
-
// add position permit to the universal router planner
|
|
70
|
-
if (options.v3RemoveLiquidityOptions.permit) {
|
|
71
|
-
// permit spender should be UR
|
|
72
|
-
const universalRouterAddress = UNIVERSAL_ROUTER_ADDRESS(UniversalRouterVersion.V2_0, options.inputPosition.pool.chainId);
|
|
73
|
-
invariant(universalRouterAddress == options.v3RemoveLiquidityOptions.permit.spender, 'INVALID_SPENDER');
|
|
74
|
-
// don't need to transfer it because v3posm uses isApprovedOrOwner()
|
|
75
|
-
encodeV3PositionPermit(planner, options.v3RemoveLiquidityOptions.permit, options.v3RemoveLiquidityOptions.tokenId);
|
|
76
|
-
// remove permit so that multicall doesnt add it again
|
|
77
|
-
delete options.v3RemoveLiquidityOptions.permit;
|
|
78
|
-
}
|
|
79
|
-
// encode v3 withdraw
|
|
80
|
-
const v3RemoveParams = V3PositionManager.removeCallParameters(options.inputPosition, options.v3RemoveLiquidityOptions);
|
|
81
|
-
const v3Calls = Multicall.decodeMulticall(v3RemoveParams.calldata);
|
|
82
|
-
for (const v3Call of v3Calls) {
|
|
83
|
-
// slice selector - 0x + 4 bytes = 10 characters
|
|
84
|
-
const selector = v3Call.slice(0, 10);
|
|
85
|
-
invariant(selector == V3PositionManager.INTERFACE.getSighash('collect') ||
|
|
86
|
-
selector == V3PositionManager.INTERFACE.getSighash('decreaseLiquidity') ||
|
|
87
|
-
selector == V3PositionManager.INTERFACE.getSighash('burn'), 'INVALID_V3_CALL: ' + selector);
|
|
88
|
-
planner.addCommand(CommandType.V3_POSITION_MANAGER_CALL, [v3Call]);
|
|
89
|
-
}
|
|
90
|
-
// encode v4 mint
|
|
91
|
-
const v4AddParams = V4PositionManager.addCallParameters(options.outputPosition, options.v4AddLiquidityOptions);
|
|
92
|
-
// only modifyLiquidities can be called by the UniversalRouter
|
|
93
|
-
const selector = v4AddParams.calldata.slice(0, 10);
|
|
94
|
-
invariant(selector == V4PositionManager.INTERFACE.getSighash('modifyLiquidities'), 'INVALID_V4_CALL: ' + selector);
|
|
95
|
-
planner.addCommand(CommandType.V4_POSITION_MANAGER_CALL, [v4AddParams.calldata]);
|
|
96
|
-
return SwapRouter.encodePlan(planner, BigNumber.from(0), {
|
|
97
|
-
deadline: BigNumber.from(options.v4AddLiquidityOptions.deadline),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
102
|
-
* @param planner the planned route
|
|
103
|
-
* @param nativeCurrencyValue the native currency value of the planned route
|
|
104
|
-
* @param config the router config
|
|
105
|
-
*/
|
|
106
|
-
static encodePlan(planner, nativeCurrencyValue, config = {}) {
|
|
107
|
-
const { commands, inputs } = planner;
|
|
108
|
-
const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])';
|
|
109
|
-
const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs];
|
|
110
|
-
const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters);
|
|
111
|
-
return { calldata, value: nativeCurrencyValue.toHexString() };
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
SwapRouter.INTERFACE = new Interface(abi);
|
|
115
|
-
//# sourceMappingURL=swapRouter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../../src/swapRouter.ts"],"names":[],"mappings":"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"}
|