@ring-protocol/universal-router-sdk 0.1.6 → 0.1.9
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/entities/actions/uniswap.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/universal-router-sdk.cjs.development.js +305 -38
- package/dist/universal-router-sdk.cjs.development.js.map +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js.map +1 -1
- package/dist/universal-router-sdk.esm.js +315 -49
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/routerCommands.d.ts +5 -1
- package/dist/utils/token.d.ts +4 -0
- package/package.json +3 -2
|
@@ -21,6 +21,7 @@ export declare class UniswapTrade implements Command {
|
|
|
21
21
|
readonly payerIsUser: boolean;
|
|
22
22
|
constructor(trade: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions);
|
|
23
23
|
get isAllV4(): boolean;
|
|
24
|
+
get hasFewV2(): boolean;
|
|
24
25
|
get inputRequiresWrap(): boolean;
|
|
25
26
|
get inputRequiresUnwrap(): boolean;
|
|
26
27
|
get outputRequiresWrap(): boolean;
|
package/dist/index.d.ts
CHANGED
|
@@ -8,3 +8,4 @@ export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, ROUTER_AS_RE
|
|
|
8
8
|
export { CommandParser, GenericCommandParser } from './utils/commandParser';
|
|
9
9
|
export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
|
|
10
10
|
export type { Permit2Permit } from './utils/inputTokens';
|
|
11
|
+
export { FEW_WRAPPED_NATIVE_CURRENCY } from './utils/token';
|
|
@@ -12,6 +12,7 @@ var v3Sdk = require('@ring-protocol/v3-sdk');
|
|
|
12
12
|
var v4Sdk = require('@ring-protocol/v4-sdk');
|
|
13
13
|
var sdkCore = require('@ring-protocol/sdk-core');
|
|
14
14
|
var utils = require('ethers/lib/utils');
|
|
15
|
+
var fewV2Sdk = require('@ring-protocol/few-v2-sdk');
|
|
15
16
|
var v2Sdk = require('@ring-protocol/v2-sdk');
|
|
16
17
|
var routerSdk = require('@ring-protocol/router-sdk');
|
|
17
18
|
require('jsbi');
|
|
@@ -94,6 +95,10 @@ var _COMMAND_DEFINITION;
|
|
|
94
95
|
CommandType[CommandType["V4_INITIALIZE_POOL"] = 19] = "V4_INITIALIZE_POOL";
|
|
95
96
|
CommandType[CommandType["V4_POSITION_MANAGER_CALL"] = 20] = "V4_POSITION_MANAGER_CALL";
|
|
96
97
|
CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
|
|
98
|
+
CommandType[CommandType["FEW_V2_SWAP_EXACT_IN"] = 35] = "FEW_V2_SWAP_EXACT_IN";
|
|
99
|
+
CommandType[CommandType["FEW_V2_SWAP_EXACT_OUT"] = 36] = "FEW_V2_SWAP_EXACT_OUT";
|
|
100
|
+
CommandType[CommandType["WRAP_FEW_TOKEN"] = 39] = "WRAP_FEW_TOKEN";
|
|
101
|
+
CommandType[CommandType["UNWRAP_FEW_TOKEN"] = 40] = "UNWRAP_FEW_TOKEN";
|
|
97
102
|
})(exports.CommandType || (exports.CommandType = {}));
|
|
98
103
|
(function (Subparser) {
|
|
99
104
|
Subparser[Subparser["V3PathExactIn"] = 0] = "V3PathExactIn";
|
|
@@ -230,8 +235,68 @@ var COMMAND_DEFINITION = (_COMMAND_DEFINITION = {}, _COMMAND_DEFINITION[exports.
|
|
|
230
235
|
name: 'payerIsUser',
|
|
231
236
|
type: 'bool'
|
|
232
237
|
}]
|
|
238
|
+
}, _COMMAND_DEFINITION[exports.CommandType.FEW_V2_SWAP_EXACT_IN] = {
|
|
239
|
+
parser: exports.Parser.Abi,
|
|
240
|
+
params: [{
|
|
241
|
+
name: 'recipient',
|
|
242
|
+
type: 'address'
|
|
243
|
+
}, {
|
|
244
|
+
name: 'amountIn',
|
|
245
|
+
type: 'uint256'
|
|
246
|
+
}, {
|
|
247
|
+
name: 'amountOutMin',
|
|
248
|
+
type: 'uint256'
|
|
249
|
+
}, {
|
|
250
|
+
name: 'path',
|
|
251
|
+
type: 'address[]'
|
|
252
|
+
}, {
|
|
253
|
+
name: 'payerIsUser',
|
|
254
|
+
type: 'bool'
|
|
255
|
+
}]
|
|
256
|
+
}, _COMMAND_DEFINITION[exports.CommandType.FEW_V2_SWAP_EXACT_OUT] = {
|
|
257
|
+
parser: exports.Parser.Abi,
|
|
258
|
+
params: [{
|
|
259
|
+
name: 'recipient',
|
|
260
|
+
type: 'address'
|
|
261
|
+
}, {
|
|
262
|
+
name: 'amountOut',
|
|
263
|
+
type: 'uint256'
|
|
264
|
+
}, {
|
|
265
|
+
name: 'amountInMax',
|
|
266
|
+
type: 'uint256'
|
|
267
|
+
}, {
|
|
268
|
+
name: 'path',
|
|
269
|
+
type: 'address[]'
|
|
270
|
+
}, {
|
|
271
|
+
name: 'payerIsUser',
|
|
272
|
+
type: 'bool'
|
|
273
|
+
}]
|
|
233
274
|
}, _COMMAND_DEFINITION[exports.CommandType.V4_SWAP] = {
|
|
234
275
|
parser: exports.Parser.V4Actions
|
|
276
|
+
}, _COMMAND_DEFINITION[exports.CommandType.WRAP_FEW_TOKEN] = {
|
|
277
|
+
parser: exports.Parser.Abi,
|
|
278
|
+
params: [{
|
|
279
|
+
name: 'token',
|
|
280
|
+
type: 'address'
|
|
281
|
+
}, {
|
|
282
|
+
name: 'recipient',
|
|
283
|
+
type: 'address'
|
|
284
|
+
}, {
|
|
285
|
+
name: 'amount',
|
|
286
|
+
type: 'uint256'
|
|
287
|
+
}]
|
|
288
|
+
}, _COMMAND_DEFINITION[exports.CommandType.UNWRAP_FEW_TOKEN] = {
|
|
289
|
+
parser: exports.Parser.Abi,
|
|
290
|
+
params: [{
|
|
291
|
+
name: 'wrappedToken',
|
|
292
|
+
type: 'address'
|
|
293
|
+
}, {
|
|
294
|
+
name: 'recipient',
|
|
295
|
+
type: 'address'
|
|
296
|
+
}, {
|
|
297
|
+
name: 'amountMin',
|
|
298
|
+
type: 'uint256'
|
|
299
|
+
}]
|
|
235
300
|
}, _COMMAND_DEFINITION[exports.CommandType.WRAP_ETH] = {
|
|
236
301
|
parser: exports.Parser.Abi,
|
|
237
302
|
params: [{
|
|
@@ -368,6 +433,9 @@ function createCommand(type, parameters) {
|
|
|
368
433
|
}
|
|
369
434
|
|
|
370
435
|
function getPathCurrency(currency, pool) {
|
|
436
|
+
if (fewV2Sdk.isFewToken(pool.token0.wrapped) || fewV2Sdk.isFewToken(pool.token1.wrapped)) {
|
|
437
|
+
return currency;
|
|
438
|
+
}
|
|
371
439
|
// return currency if the currency matches a currency of the pool
|
|
372
440
|
if (pool.involvesToken(currency)) {
|
|
373
441
|
return currency;
|
|
@@ -389,7 +457,7 @@ function getPathCurrency(currency, pool) {
|
|
|
389
457
|
RouterActionType["UnwrapWETH"] = "UnwrapWETH";
|
|
390
458
|
})(exports.RouterActionType || (exports.RouterActionType = {}));
|
|
391
459
|
|
|
392
|
-
var _routerConfigs, _routerConfigs2, _routerConfigs3, _routerConfigs4, _routerConfigs5, _routerConfigs6, _routerConfigs7, _routerConfigs8, _routerConfigs9, _routerConfigs0, _routerConfigs1, _routerConfigs10, _routerConfigs11, _routerConfigs12, _routerConfigs13, _routerConfigs14, _routerConfigs15, _routerConfigs16, _routerConfigs17, _routerConfigs18, _routerConfigs19, _routerConfigs20, _routerConfigs21, _routerConfigs22, _routerConfigs23, _CHAIN_CONFIGS;
|
|
460
|
+
var _routerConfigs, _routerConfigs2, _routerConfigs3, _routerConfigs4, _routerConfigs5, _routerConfigs6, _routerConfigs7, _routerConfigs8, _routerConfigs9, _routerConfigs0, _routerConfigs1, _routerConfigs10, _routerConfigs11, _routerConfigs12, _routerConfigs13, _routerConfigs14, _routerConfigs15, _routerConfigs16, _routerConfigs17, _routerConfigs18, _routerConfigs19, _routerConfigs20, _routerConfigs21, _routerConfigs22, _routerConfigs23, _routerConfigs24, _CHAIN_CONFIGS;
|
|
393
461
|
(function (UniversalRouterVersion) {
|
|
394
462
|
UniversalRouterVersion["V1_2"] = "1.2";
|
|
395
463
|
UniversalRouterVersion["V2_0"] = "2.0";
|
|
@@ -621,6 +689,15 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
|
|
|
621
689
|
address: '0x0d97dc33264bfc1c226207428a79b26757fb9dc3',
|
|
622
690
|
creationBlock: 29255937
|
|
623
691
|
}, _routerConfigs23)
|
|
692
|
+
}, _CHAIN_CONFIGS[999] = {
|
|
693
|
+
weth: '0x5555555555555555555555555555555555555555',
|
|
694
|
+
routerConfigs: (_routerConfigs24 = {}, _routerConfigs24[exports.UniversalRouterVersion.V1_2] = {
|
|
695
|
+
address: '0x7d3D28dee339C17452A4d6b53C71b2557278B530',
|
|
696
|
+
creationBlock: 9273064
|
|
697
|
+
}, _routerConfigs24[exports.UniversalRouterVersion.V2_0] = {
|
|
698
|
+
address: '0x7d3D28dee339C17452A4d6b53C71b2557278B530',
|
|
699
|
+
creationBlock: 9273064
|
|
700
|
+
}, _routerConfigs24)
|
|
624
701
|
}, _CHAIN_CONFIGS);
|
|
625
702
|
var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(version, chainId) {
|
|
626
703
|
if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
|
|
@@ -649,6 +726,11 @@ function encodeFeeBips(fee) {
|
|
|
649
726
|
return v3Sdk.toHex(fee.multiply(10000).quotient);
|
|
650
727
|
}
|
|
651
728
|
|
|
729
|
+
var _FEW_WRAPPED_NATIVE_C;
|
|
730
|
+
var FEW_WRAPPED_NATIVE_CURRENCY = (_FEW_WRAPPED_NATIVE_C = {}, _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.HYPER_MAINNET] = /*#__PURE__*/new sdkCore.Token(999, '0x9e1148bC3665a9f7C35F313d89c0432c34928AEf', 18, 'fwWHYPE', 'Few Wrapped Wrapped Hyper'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.MAINNET] = /*#__PURE__*/new sdkCore.Token(1, '0xa250CC729Bb3323e7933022a67B52200fE354767', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.BASE] = /*#__PURE__*/new sdkCore.Token(8453, '0xd38e4149df30AfFFEE13d771f3Ec9277c72333E4', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.ARBITRUM_ONE] = /*#__PURE__*/new sdkCore.Token(42161, '0x76CDff74222533Efa4BAa713BC3d14df81A460F7', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.ARBITRUM_SEPOLIA] = /*#__PURE__*/new sdkCore.Token(421614, '0x1fc632A9A9c99ae7C406f8565cd709b52BA0ed47', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.UNICHAIN] = /*#__PURE__*/new sdkCore.Token(130, '0x05e6c1B4Da05c41c86c35Ce42a8a222C1a450167', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.UNICHAIN_SEPOLIA] = /*#__PURE__*/new sdkCore.Token(1301, '0x1fc632A9A9c99ae7C406f8565cd709b52BA0ed47',
|
|
731
|
+
//TODO: replace to mainnet
|
|
732
|
+
18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.GOERLI] = /*#__PURE__*/new sdkCore.Token(5, '0x6b7e07C37a157d01D71012c36644907Ab5a7694e', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.BLAST] = /*#__PURE__*/new sdkCore.Token(81457, '0x66714DB8F3397c767d0A602458B5b4E3C0FE7dd1', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.SEPOLIA] = /*#__PURE__*/new sdkCore.Token(11155111, '0x98b902eF4f9fEB2F6982ceEB4E98761294854D61', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.BLAST_SEPOLIA] = /*#__PURE__*/new sdkCore.Token(sdkCore.ChainId.BLAST_SEPOLIA, '0x798dE0520497E28E8eBfF0DF1d791c2E942eA881', 18, 'fwWETH', 'Few Wrapped Wrapped Ether'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.STORY_ODYSSEY] = /*#__PURE__*/new sdkCore.Token(sdkCore.ChainId.STORY_ODYSSEY, '0xA67013F71AF4f21563BAf8C1d156F1Dc7ab681C6', 18, 'fwWIP', 'Few Wrapped Wrapped IP'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.STORY_MAINNET] = /*#__PURE__*/new sdkCore.Token(sdkCore.ChainId.STORY_MAINNET, '0x088dE218b725975E6285995C25Ce3706BAe0f4Ec', 18, 'fwWIP', 'Few Wrapped Wrapped IP'), _FEW_WRAPPED_NATIVE_C[sdkCore.ChainId.BNB] = /*#__PURE__*/new sdkCore.Token(56, '0x7f0172b75d3823D8aF04feE3A3f6a14aBD68EFE1', 18, 'fwWBNB', 'Few Wrapped Wrapped BNB'), _FEW_WRAPPED_NATIVE_C);
|
|
733
|
+
|
|
652
734
|
var REFUND_ETH_PRICE_IMPACT_THRESHOLD = /*#__PURE__*/new sdkCore.Percent(50, 100);
|
|
653
735
|
// Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router
|
|
654
736
|
// also translates trade objects from previous (v2, v3) SDKs
|
|
@@ -687,6 +769,9 @@ var UniswapTrade = /*#__PURE__*/function () {
|
|
|
687
769
|
for (var _iterator = _createForOfIteratorHelperLoose(this.trade.swaps), _step; !(_step = _iterator()).done;) {
|
|
688
770
|
var swap = _step.value;
|
|
689
771
|
switch (swap.route.protocol) {
|
|
772
|
+
case routerSdk.Protocol.FEWV2:
|
|
773
|
+
addRingV2Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
774
|
+
break;
|
|
690
775
|
case routerSdk.Protocol.V2:
|
|
691
776
|
addV2Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
692
777
|
break;
|
|
@@ -694,10 +779,10 @@ var UniswapTrade = /*#__PURE__*/function () {
|
|
|
694
779
|
addV3Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
695
780
|
break;
|
|
696
781
|
case routerSdk.Protocol.V4:
|
|
697
|
-
addV4Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
782
|
+
addV4Swap(this.trade.swaps, planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
698
783
|
break;
|
|
699
784
|
case routerSdk.Protocol.MIXED:
|
|
700
|
-
addMixedSwap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
785
|
+
addMixedSwap(this.trade.swaps, planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
|
|
701
786
|
break;
|
|
702
787
|
default:
|
|
703
788
|
throw new Error('UNSUPPORTED_TRADE_PROTOCOL');
|
|
@@ -734,24 +819,36 @@ var UniswapTrade = /*#__PURE__*/function () {
|
|
|
734
819
|
// The remaining tokens that need to be sent to the user after the fee is taken will be caught
|
|
735
820
|
// by this if-else clause.
|
|
736
821
|
if (this.outputRequiresUnwrap) {
|
|
737
|
-
planner.addCommand(exports.CommandType.UNWRAP_WETH, [this.options.recipient,
|
|
822
|
+
planner.addCommand(exports.CommandType.UNWRAP_WETH, [this.options.recipient, '0']);
|
|
823
|
+
planner.addCommand(exports.CommandType.SWEEP, [getCurrencyAddress(this.trade.outputAmount.currency), SENDER_AS_RECIPIENT, '0']);
|
|
738
824
|
} else if (this.outputRequiresWrap) {
|
|
739
825
|
planner.addCommand(exports.CommandType.WRAP_ETH, [this.options.recipient, CONTRACT_BALANCE]);
|
|
740
826
|
} else {
|
|
741
|
-
|
|
827
|
+
if (this.hasFewV2) {
|
|
828
|
+
planner.addCommand(exports.CommandType.SWEEP, [getCurrencyAddress(this.trade.outputAmount.currency), this.options.recipient, '0']);
|
|
829
|
+
} else {
|
|
830
|
+
planner.addCommand(exports.CommandType.SWEEP, [getCurrencyAddress(this.trade.outputAmount.currency), this.options.recipient, minimumAmountOut]);
|
|
831
|
+
}
|
|
742
832
|
}
|
|
743
833
|
}
|
|
834
|
+
var fwWETH = FEW_WRAPPED_NATIVE_CURRENCY[this.trade.inputAmount.currency.wrapped.chainId];
|
|
744
835
|
// for exactOutput swaps with native input or that perform an inputToken transition (wrap or unwrap)
|
|
745
836
|
// we need to send back the change to the user
|
|
746
837
|
if (this.trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade)) {
|
|
747
838
|
if (this.inputRequiresWrap) {
|
|
839
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fwWETH.address, ROUTER_AS_RECIPIENT, '0']);
|
|
748
840
|
planner.addCommand(exports.CommandType.UNWRAP_WETH, [this.options.recipient, 0]);
|
|
841
|
+
planner.addCommand(exports.CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
|
|
749
842
|
} else if (this.inputRequiresUnwrap) {
|
|
750
843
|
planner.addCommand(exports.CommandType.WRAP_ETH, [this.options.recipient, CONTRACT_BALANCE]);
|
|
751
844
|
} else if (this.trade.inputAmount.currency.isNative) {
|
|
845
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fwWETH.address, ROUTER_AS_RECIPIENT, '0']);
|
|
846
|
+
planner.addCommand(exports.CommandType.UNWRAP_WETH, [SENDER_AS_RECIPIENT, 0]);
|
|
752
847
|
// must refund extra native currency sent along for native v4 trades (no input transition)
|
|
753
848
|
planner.addCommand(exports.CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
|
|
754
849
|
}
|
|
850
|
+
planner.addCommand(exports.CommandType.SWEEP, [this.trade.inputAmount.currency.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
851
|
+
planner.addCommand(exports.CommandType.SWEEP, [this.trade.outputAmount.currency.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
755
852
|
}
|
|
756
853
|
if (this.options.safeMode) planner.addCommand(exports.CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
|
|
757
854
|
};
|
|
@@ -765,6 +862,16 @@ var UniswapTrade = /*#__PURE__*/function () {
|
|
|
765
862
|
}
|
|
766
863
|
return result;
|
|
767
864
|
}
|
|
865
|
+
}, {
|
|
866
|
+
key: "hasFewV2",
|
|
867
|
+
get: function get() {
|
|
868
|
+
var result = false;
|
|
869
|
+
for (var _iterator3 = _createForOfIteratorHelperLoose(this.trade.swaps), _step3; !(_step3 = _iterator3()).done;) {
|
|
870
|
+
var swap = _step3.value;
|
|
871
|
+
result = result || swap.route.protocol == routerSdk.Protocol.FEWV2;
|
|
872
|
+
}
|
|
873
|
+
return result;
|
|
874
|
+
}
|
|
768
875
|
// this.trade.swaps is an array of swaps / trades.
|
|
769
876
|
// we are iterating over one swap (trade) at a time so length is 1
|
|
770
877
|
// route is either v2, v3, v4, or mixed
|
|
@@ -834,14 +941,23 @@ var UniswapTrade = /*#__PURE__*/function () {
|
|
|
834
941
|
}
|
|
835
942
|
}]);
|
|
836
943
|
}();
|
|
837
|
-
// encode a
|
|
838
|
-
function
|
|
944
|
+
// encode a ring v2 swap
|
|
945
|
+
function addRingV2Swap(planner, _ref, tradeType, options, payerIsUser, routerMustCustody) {
|
|
839
946
|
var route = _ref.route,
|
|
840
947
|
inputAmount = _ref.inputAmount,
|
|
841
948
|
outputAmount = _ref.outputAmount;
|
|
842
|
-
var trade = new
|
|
949
|
+
var trade = new fewV2Sdk.Trade(route, tradeType == sdkCore.TradeType.EXACT_INPUT ? inputAmount : outputAmount, tradeType);
|
|
950
|
+
var pathInput = route.path[0];
|
|
951
|
+
var pathOutput = route.path[route.path.length - 1];
|
|
952
|
+
if (!trade.inputAmount.currency.isNative) {
|
|
953
|
+
// send wrapped token to router to unwrap
|
|
954
|
+
planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [trade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, trade.maximumAmountIn(options.slippageTolerance).quotient.toString()]);
|
|
955
|
+
}
|
|
956
|
+
planner.addCommand(exports.CommandType.WRAP_FEW_TOKEN, [trade.inputAmount.currency.wrapped.address, ROUTER_AS_RECIPIENT, trade.inputAmount.quotient.toString()]);
|
|
957
|
+
payerIsUser = false;
|
|
958
|
+
routerMustCustody = true; // TOTO, check again
|
|
843
959
|
if (tradeType == sdkCore.TradeType.EXACT_INPUT) {
|
|
844
|
-
planner.addCommand(exports.CommandType.
|
|
960
|
+
planner.addCommand(exports.CommandType.FEW_V2_SWAP_EXACT_IN, [
|
|
845
961
|
// if native, we have to unwrap so keep in the router for now
|
|
846
962
|
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
847
963
|
// if router will custody funds, we do aggregated slippage check from router
|
|
@@ -849,63 +965,213 @@ function addV2Swap(planner, _ref, tradeType, options, payerIsUser, routerMustCus
|
|
|
849
965
|
return token.wrapped.address;
|
|
850
966
|
}), payerIsUser]);
|
|
851
967
|
} else if (tradeType == sdkCore.TradeType.EXACT_OUTPUT) {
|
|
852
|
-
planner.addCommand(exports.CommandType.
|
|
968
|
+
planner.addCommand(exports.CommandType.FEW_V2_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), route.path.map(function (token) {
|
|
853
969
|
return token.wrapped.address;
|
|
854
970
|
}), payerIsUser]);
|
|
855
971
|
}
|
|
972
|
+
var fewOutputToken = fewV2Sdk.getFewTokenFromOriginalToken(trade.outputAmount.currency.wrapped, trade.outputAmount.currency.chainId);
|
|
973
|
+
var fwWETH = FEW_WRAPPED_NATIVE_CURRENCY[trade.inputAmount.currency.wrapped.chainId];
|
|
974
|
+
if (outputAmount.currency.isNative) {
|
|
975
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fwWETH.address, ROUTER_AS_RECIPIENT, trade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
976
|
+
} else {
|
|
977
|
+
if (fewV2Sdk.isFewToken(route.pathInput.wrapped) && fewV2Sdk.isFewToken(route.pathOutput.wrapped)) {
|
|
978
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, SENDER_AS_RECIPIENT, trade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
979
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathInput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
980
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathOutput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
981
|
+
}
|
|
982
|
+
}
|
|
856
983
|
}
|
|
857
|
-
// encode a uniswap
|
|
858
|
-
function
|
|
984
|
+
// encode a uniswap v2 swap
|
|
985
|
+
function addV2Swap(planner, _ref2, tradeType, options, payerIsUser, routerMustCustody) {
|
|
859
986
|
var route = _ref2.route,
|
|
860
987
|
inputAmount = _ref2.inputAmount,
|
|
861
988
|
outputAmount = _ref2.outputAmount;
|
|
989
|
+
var trade = new v2Sdk.Trade(route, tradeType == sdkCore.TradeType.EXACT_INPUT ? inputAmount : outputAmount, tradeType);
|
|
990
|
+
var pathInput = route.path[0];
|
|
991
|
+
var pathOutput = route.path[route.path.length - 1];
|
|
992
|
+
if (fewV2Sdk.isFewToken(route.pathInput.wrapped) && fewV2Sdk.isFewToken(route.pathOutput.wrapped)) {
|
|
993
|
+
if (!trade.inputAmount.currency.isNative) {
|
|
994
|
+
// send wrapped token to router to unwrap
|
|
995
|
+
planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [trade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, trade.maximumAmountIn(options.slippageTolerance).quotient.toString()]);
|
|
996
|
+
}
|
|
997
|
+
planner.addCommand(exports.CommandType.WRAP_FEW_TOKEN, [trade.inputAmount.currency.wrapped.address, ROUTER_AS_RECIPIENT, trade.inputAmount.currency.isNative ? CONTRACT_BALANCE : trade.inputAmount.quotient.toString()]);
|
|
998
|
+
payerIsUser = false;
|
|
999
|
+
routerMustCustody = true; // TOTO, check again
|
|
1000
|
+
if (tradeType == sdkCore.TradeType.EXACT_INPUT) {
|
|
1001
|
+
planner.addCommand(exports.CommandType.V2_SWAP_EXACT_IN, [
|
|
1002
|
+
// if native, we have to unwrap so keep in the router for now
|
|
1003
|
+
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
1004
|
+
// if router will custody funds, we do aggregated slippage check from router
|
|
1005
|
+
routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), route.path.map(function (token) {
|
|
1006
|
+
return token.wrapped.address;
|
|
1007
|
+
}), payerIsUser]);
|
|
1008
|
+
} else if (tradeType == sdkCore.TradeType.EXACT_OUTPUT) {
|
|
1009
|
+
planner.addCommand(exports.CommandType.V2_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), route.path.map(function (token) {
|
|
1010
|
+
return token.wrapped.address;
|
|
1011
|
+
}), payerIsUser]);
|
|
1012
|
+
}
|
|
1013
|
+
var fewOutputToken = fewV2Sdk.getFewTokenFromOriginalToken(trade.outputAmount.currency.wrapped, trade.outputAmount.currency.chainId);
|
|
1014
|
+
if (fewV2Sdk.isFewToken(pathInput.wrapped) && fewV2Sdk.isFewToken(pathOutput.wrapped)) {
|
|
1015
|
+
if (outputAmount.currency.isNative) {
|
|
1016
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, ROUTER_AS_RECIPIENT, trade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
1017
|
+
} else {
|
|
1018
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, SENDER_AS_RECIPIENT, trade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
1019
|
+
}
|
|
1020
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathInput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1021
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathOutput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1022
|
+
}
|
|
1023
|
+
} else {
|
|
1024
|
+
if (tradeType == sdkCore.TradeType.EXACT_INPUT) {
|
|
1025
|
+
planner.addCommand(exports.CommandType.V2_SWAP_EXACT_IN, [
|
|
1026
|
+
// if native, we have to unwrap so keep in the router for now
|
|
1027
|
+
routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.maximumAmountIn(options.slippageTolerance).quotient.toString(),
|
|
1028
|
+
// if router will custody funds, we do aggregated slippage check from router
|
|
1029
|
+
routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), route.path.map(function (token) {
|
|
1030
|
+
return token.wrapped.address;
|
|
1031
|
+
}), payerIsUser]);
|
|
1032
|
+
} else if (tradeType == sdkCore.TradeType.EXACT_OUTPUT) {
|
|
1033
|
+
planner.addCommand(exports.CommandType.V2_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), route.path.map(function (token) {
|
|
1034
|
+
return token.wrapped.address;
|
|
1035
|
+
}), payerIsUser]);
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
// encode a uniswap v3 swap
|
|
1040
|
+
function addV3Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCustody) {
|
|
1041
|
+
var route = _ref3.route,
|
|
1042
|
+
inputAmount = _ref3.inputAmount,
|
|
1043
|
+
outputAmount = _ref3.outputAmount;
|
|
862
1044
|
var trade = v3Sdk.Trade.createUncheckedTrade({
|
|
863
1045
|
route: route,
|
|
864
1046
|
inputAmount: inputAmount,
|
|
865
1047
|
outputAmount: outputAmount,
|
|
866
1048
|
tradeType: tradeType
|
|
867
1049
|
});
|
|
868
|
-
var
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
1050
|
+
var pathInput = route.path[0];
|
|
1051
|
+
var pathOutput = route.path[route.path.length - 1];
|
|
1052
|
+
// const fwWETH = FEW_WRAPPED_NATIVE_CURRENCY[trade.inputAmount.currency.wrapped.chainId]
|
|
1053
|
+
if (fewV2Sdk.isFewToken(route.pathInput.wrapped) && fewV2Sdk.isFewToken(route.pathOutput.wrapped)) {
|
|
1054
|
+
if (!trade.inputAmount.currency.isNative) {
|
|
1055
|
+
// send wrapped token to router to unwrap
|
|
1056
|
+
planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [trade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, trade.maximumAmountIn(options.slippageTolerance).quotient.toString()]);
|
|
1057
|
+
}
|
|
1058
|
+
planner.addCommand(exports.CommandType.WRAP_FEW_TOKEN, [trade.inputAmount.currency.wrapped.address, ROUTER_AS_RECIPIENT, trade.inputAmount.currency.isNative ? CONTRACT_BALANCE : trade.inputAmount.quotient.toString()]);
|
|
1059
|
+
payerIsUser = false;
|
|
1060
|
+
routerMustCustody = true; // TOTO, check again
|
|
1061
|
+
var fewCurrencyIn = fewV2Sdk.getFewTokenFromOriginalToken(route.input.wrapped, route.input.chainId);
|
|
1062
|
+
var fewCurrencyOut = fewV2Sdk.getFewTokenFromOriginalToken(route.output.wrapped, route.output.chainId);
|
|
1063
|
+
var v3Route = route;
|
|
1064
|
+
var newV3Route = new v3Sdk.Route(v3Route.pools, fewCurrencyIn, fewCurrencyOut);
|
|
1065
|
+
var path = v3Sdk.encodeRouteToPath(newV3Route, trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT);
|
|
1066
|
+
if (tradeType == sdkCore.TradeType.EXACT_INPUT) {
|
|
1067
|
+
planner.addCommand(exports.CommandType.V3_SWAP_EXACT_IN, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), path, payerIsUser]);
|
|
1068
|
+
} else if (tradeType == sdkCore.TradeType.EXACT_OUTPUT) {
|
|
1069
|
+
planner.addCommand(exports.CommandType.V3_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), path, payerIsUser]);
|
|
1070
|
+
}
|
|
1071
|
+
var fewInputToken = fewV2Sdk.getFewTokenFromOriginalToken(trade.inputAmount.currency.wrapped, trade.inputAmount.currency.chainId);
|
|
1072
|
+
var fewOutputToken = fewV2Sdk.getFewTokenFromOriginalToken(trade.outputAmount.currency.wrapped, trade.outputAmount.currency.chainId);
|
|
1073
|
+
if (fewV2Sdk.isFewToken(pathInput.wrapped) && fewV2Sdk.isFewToken(pathOutput.wrapped)) {
|
|
1074
|
+
if (outputAmount.currency.isNative) {
|
|
1075
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, ROUTER_AS_RECIPIENT, '0']);
|
|
1076
|
+
} else if (trade.inputAmount.currency.isNative) {
|
|
1077
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewInputToken.address, ROUTER_AS_RECIPIENT, '0']);
|
|
1078
|
+
planner.addCommand(exports.CommandType.UNWRAP_WETH, [SENDER_AS_RECIPIENT, '0']);
|
|
1079
|
+
} else {
|
|
1080
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, SENDER_AS_RECIPIENT, '0']);
|
|
1081
|
+
}
|
|
1082
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathInput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1083
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathOutput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1084
|
+
}
|
|
1085
|
+
} else {
|
|
1086
|
+
var _path = v3Sdk.encodeRouteToPath(route, trade.tradeType === sdkCore.TradeType.EXACT_OUTPUT);
|
|
1087
|
+
if (tradeType == sdkCore.TradeType.EXACT_INPUT) {
|
|
1088
|
+
planner.addCommand(exports.CommandType.V3_SWAP_EXACT_IN, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), routerMustCustody ? 0 : trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), _path, payerIsUser]);
|
|
1089
|
+
} else if (tradeType == sdkCore.TradeType.EXACT_OUTPUT) {
|
|
1090
|
+
planner.addCommand(exports.CommandType.V3_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), _path, payerIsUser]);
|
|
1091
|
+
}
|
|
873
1092
|
}
|
|
874
1093
|
}
|
|
875
|
-
function addV4Swap(planner,
|
|
876
|
-
var
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
route = _ref3.route;
|
|
1094
|
+
function addV4Swap(swaps, planner, _ref4, tradeType, options, payerIsUser, routerMustCustody) {
|
|
1095
|
+
var inputAmount = _ref4.inputAmount,
|
|
1096
|
+
outputAmount = _ref4.outputAmount,
|
|
1097
|
+
route = _ref4.route;
|
|
880
1098
|
// create a deep copy of pools since v4Planner encoding tampers with array
|
|
1099
|
+
var fewCurrencyIn = fewV2Sdk.getFewTokenFromOriginalToken(inputAmount.currency.wrapped, inputAmount.currency.chainId);
|
|
1100
|
+
var fewCurrencyOut = fewV2Sdk.getFewTokenFromOriginalToken(outputAmount.currency.wrapped, outputAmount.currency.chainId);
|
|
1101
|
+
var firstSwap = swaps[0];
|
|
1102
|
+
var lastSwap = swaps[swaps.length - 1];
|
|
1103
|
+
var pathInput = route.path[0];
|
|
1104
|
+
var pathOutput = route.path[route.path.length - 1];
|
|
881
1105
|
var pools = route.pools.map(function (p) {
|
|
882
1106
|
return p;
|
|
883
1107
|
});
|
|
884
1108
|
var v4Route = new v4Sdk.Route(pools, inputAmount.currency, outputAmount.currency);
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
1109
|
+
if (fewV2Sdk.isFewToken(route.pools[0].token0.wrapped) && fewV2Sdk.isFewToken(route.pools[0].token1.wrapped)) {
|
|
1110
|
+
var _options$recipient;
|
|
1111
|
+
var fewV4Route = new v4Sdk.Route(pools, fewCurrencyIn, fewCurrencyOut);
|
|
1112
|
+
var fewTrade = v4Sdk.Trade.createUncheckedTrade({
|
|
1113
|
+
route: fewV4Route,
|
|
1114
|
+
inputAmount: inputAmount,
|
|
1115
|
+
outputAmount: outputAmount,
|
|
1116
|
+
tradeType: tradeType
|
|
1117
|
+
});
|
|
1118
|
+
if (!fewTrade.inputAmount.currency.isNative) {
|
|
1119
|
+
// send wrapped token to router to unwrap
|
|
1120
|
+
planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [fewTrade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, fewTrade.maximumAmountIn(options.slippageTolerance).quotient.toString()]);
|
|
1121
|
+
}
|
|
1122
|
+
if (fewTrade.inputAmount.currency.isNative) {
|
|
1123
|
+
planner.addCommand(exports.CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, fewTrade.inputAmount.quotient.toString()]);
|
|
1124
|
+
}
|
|
1125
|
+
planner.addCommand(exports.CommandType.WRAP_FEW_TOKEN, [fewTrade.inputAmount.currency.wrapped.address, ROUTER_AS_RECIPIENT, fewTrade.inputAmount.currency.isNative ? CONTRACT_BALANCE : fewTrade.inputAmount.quotient.toString()]);
|
|
1126
|
+
payerIsUser = false;
|
|
1127
|
+
routerMustCustody = true; // TOTO, check again
|
|
1128
|
+
var slippageToleranceOnSwap = routerMustCustody && tradeType == sdkCore.TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
|
|
1129
|
+
var v4Planner = new v4Sdk.V4Planner();
|
|
1130
|
+
v4Planner.addTrade(fewTrade, slippageToleranceOnSwap);
|
|
1131
|
+
v4Planner.addSettle(fewTrade.route.pathInput, payerIsUser);
|
|
1132
|
+
v4Planner.addTake(fewTrade.route.pathOutput, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient = options.recipient) != null ? _options$recipient : SENDER_AS_RECIPIENT);
|
|
1133
|
+
planner.addCommand(exports.CommandType.V4_SWAP, [v4Planner.finalize()]);
|
|
1134
|
+
var fewOutputToken = fewV2Sdk.getFewTokenFromOriginalToken(fewTrade.outputAmount.currency.wrapped, fewTrade.outputAmount.currency.chainId);
|
|
1135
|
+
if (fewV2Sdk.isFewToken(pathInput.wrapped) && fewV2Sdk.isFewToken(pathOutput.wrapped)) {
|
|
1136
|
+
if (outputAmount.currency.isNative) {
|
|
1137
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, ROUTER_AS_RECIPIENT, fewTrade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
1138
|
+
planner.addCommand(exports.CommandType.UNWRAP_WETH, [SENDER_AS_RECIPIENT, 0]);
|
|
1139
|
+
} else {
|
|
1140
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [fewOutputToken.address, SENDER_AS_RECIPIENT, fewTrade.minimumAmountOut(options.slippageTolerance).quotient.toString()]);
|
|
1141
|
+
}
|
|
1142
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathInput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1143
|
+
planner.addCommand(exports.CommandType.UNWRAP_FEW_TOKEN, [pathOutput.wrapped.address, SENDER_AS_RECIPIENT, '0']);
|
|
1144
|
+
}
|
|
1145
|
+
} else {
|
|
1146
|
+
var _options$recipient2;
|
|
1147
|
+
var trade = v4Sdk.Trade.createUncheckedTrade({
|
|
1148
|
+
route: v4Route,
|
|
1149
|
+
inputAmount: inputAmount,
|
|
1150
|
+
outputAmount: outputAmount,
|
|
1151
|
+
tradeType: tradeType
|
|
1152
|
+
});
|
|
1153
|
+
var _slippageToleranceOnSwap = routerMustCustody && tradeType == sdkCore.TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
|
|
1154
|
+
var _v4Planner = new v4Sdk.V4Planner();
|
|
1155
|
+
_v4Planner.addTrade(trade, _slippageToleranceOnSwap);
|
|
1156
|
+
_v4Planner.addSettle(trade.route.pathInput, payerIsUser);
|
|
1157
|
+
_v4Planner.addTake(trade.route.pathOutput, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient2 = options.recipient) != null ? _options$recipient2 : SENDER_AS_RECIPIENT);
|
|
1158
|
+
if (firstSwap.route.protocol !== routerSdk.Protocol.V4 && lastSwap.route.protocol === routerSdk.Protocol.V4 && trade.route.pathInput.isNative) {
|
|
1159
|
+
planner.addCommand(exports.CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, 0]);
|
|
1160
|
+
}
|
|
1161
|
+
planner.addCommand(exports.CommandType.V4_SWAP, [_v4Planner.finalize()]);
|
|
1162
|
+
}
|
|
897
1163
|
}
|
|
898
1164
|
// encode a mixed route swap, i.e. including both v2 and v3 pools
|
|
899
|
-
function addMixedSwap(planner, swap, tradeType, options, payerIsUser, routerMustCustody) {
|
|
900
|
-
var _options$
|
|
1165
|
+
function addMixedSwap(swaps, planner, swap, tradeType, options, payerIsUser, routerMustCustody) {
|
|
1166
|
+
var _options$recipient3;
|
|
901
1167
|
var route = swap.route;
|
|
902
1168
|
var inputAmount = swap.inputAmount;
|
|
903
1169
|
var outputAmount = swap.outputAmount;
|
|
904
|
-
var tradeRecipient = routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$
|
|
1170
|
+
var tradeRecipient = routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient3 = options.recipient) != null ? _options$recipient3 : SENDER_AS_RECIPIENT;
|
|
905
1171
|
// single hop, so it can be reduced to plain swap logic for one protocol version
|
|
906
1172
|
if (route.pools.length === 1) {
|
|
907
1173
|
if (route.pools[0] instanceof v4Sdk.Pool) {
|
|
908
|
-
return addV4Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
1174
|
+
return addV4Swap(swaps, planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
909
1175
|
} else if (route.pools[0] instanceof v3Sdk.Pool) {
|
|
910
1176
|
return addV3Swap(planner, swap, tradeType, options, payerIsUser, routerMustCustody);
|
|
911
1177
|
} else if (route.pools[0] instanceof v2Sdk.Pair) {
|
|
@@ -1447,6 +1713,7 @@ function v4RouterCallToParams(actions) {
|
|
|
1447
1713
|
|
|
1448
1714
|
exports.COMMAND_DEFINITION = COMMAND_DEFINITION;
|
|
1449
1715
|
exports.CommandParser = CommandParser;
|
|
1716
|
+
exports.FEW_WRAPPED_NATIVE_CURRENCY = FEW_WRAPPED_NATIVE_CURRENCY;
|
|
1450
1717
|
exports.GenericCommandParser = GenericCommandParser;
|
|
1451
1718
|
exports.ROUTER_AS_RECIPIENT = ROUTER_AS_RECIPIENT;
|
|
1452
1719
|
exports.RoutePlanner = RoutePlanner;
|