@uniswap/universal-router-sdk 3.3.0 → 4.0.0
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/index.d.ts +2 -1
- package/dist/test/utils/addresses.d.ts +1 -1
- package/dist/universal-router-sdk.cjs.development.js +261 -5
- 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 +261 -5
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/commandParser.d.ts +26 -0
- package/dist/utils/constants.d.ts +0 -1
- package/dist/utils/routerCommands.d.ts +14 -2
- package/package.json +1 -1
|
@@ -74,7 +74,7 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
|
74
74
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
var
|
|
77
|
+
var _COMMAND_ABI_DEFINITI;
|
|
78
78
|
/**
|
|
79
79
|
* CommandTypes
|
|
80
80
|
* @description Flags that modify a command's execution
|
|
@@ -102,13 +102,170 @@ var CommandType;
|
|
|
102
102
|
CommandType[CommandType["V4_POSITION_CALL"] = 19] = "V4_POSITION_CALL";
|
|
103
103
|
CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
|
|
104
104
|
})(CommandType || (CommandType = {}));
|
|
105
|
+
var Subparser;
|
|
106
|
+
(function (Subparser) {
|
|
107
|
+
Subparser[Subparser["V3PathExactIn"] = 0] = "V3PathExactIn";
|
|
108
|
+
Subparser[Subparser["V3PathExactOut"] = 1] = "V3PathExactOut";
|
|
109
|
+
})(Subparser || (Subparser = {}));
|
|
105
110
|
var ALLOW_REVERT_FLAG = 0x80;
|
|
106
111
|
var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.EXECUTE_SUB_PLAN]);
|
|
107
112
|
var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
|
|
108
113
|
var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
|
|
109
114
|
var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
|
|
110
115
|
var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
|
|
111
|
-
var
|
|
116
|
+
var COMMAND_ABI_DEFINITION = (_COMMAND_ABI_DEFINITI = {}, _COMMAND_ABI_DEFINITI[CommandType.EXECUTE_SUB_PLAN] = [{
|
|
117
|
+
name: 'commands',
|
|
118
|
+
type: 'bytes'
|
|
119
|
+
}, {
|
|
120
|
+
name: 'inputs',
|
|
121
|
+
type: 'bytes[]'
|
|
122
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.PERMIT2_PERMIT] = [{
|
|
123
|
+
name: 'permit',
|
|
124
|
+
type: PERMIT_STRUCT
|
|
125
|
+
}, {
|
|
126
|
+
name: 'signature',
|
|
127
|
+
type: 'bytes'
|
|
128
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.PERMIT2_PERMIT_BATCH] = [{
|
|
129
|
+
name: 'permit',
|
|
130
|
+
type: PERMIT_BATCH_STRUCT
|
|
131
|
+
}, {
|
|
132
|
+
name: 'signature',
|
|
133
|
+
type: 'bytes'
|
|
134
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.PERMIT2_TRANSFER_FROM] = [{
|
|
135
|
+
name: 'token',
|
|
136
|
+
type: 'address'
|
|
137
|
+
}, {
|
|
138
|
+
name: 'recipient',
|
|
139
|
+
type: 'address'
|
|
140
|
+
}, {
|
|
141
|
+
name: 'amount',
|
|
142
|
+
type: 'uint160'
|
|
143
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [{
|
|
144
|
+
name: 'transferFrom',
|
|
145
|
+
type: PERMIT2_TRANSFER_FROM_BATCH_STRUCT
|
|
146
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V3_SWAP_EXACT_IN] = [{
|
|
147
|
+
name: 'recipient',
|
|
148
|
+
type: 'address'
|
|
149
|
+
}, {
|
|
150
|
+
name: 'amountIn',
|
|
151
|
+
type: 'uint256'
|
|
152
|
+
}, {
|
|
153
|
+
name: 'amountOutMin',
|
|
154
|
+
type: 'uint256'
|
|
155
|
+
}, {
|
|
156
|
+
name: 'path',
|
|
157
|
+
subparser: Subparser.V3PathExactIn,
|
|
158
|
+
type: 'bytes'
|
|
159
|
+
}, {
|
|
160
|
+
name: 'payerIsUser',
|
|
161
|
+
type: 'bool'
|
|
162
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V3_SWAP_EXACT_OUT] = [{
|
|
163
|
+
name: 'recipient',
|
|
164
|
+
type: 'address'
|
|
165
|
+
}, {
|
|
166
|
+
name: 'amountOut',
|
|
167
|
+
type: 'uint256'
|
|
168
|
+
}, {
|
|
169
|
+
name: 'amountInMax',
|
|
170
|
+
type: 'uint256'
|
|
171
|
+
}, {
|
|
172
|
+
name: 'path',
|
|
173
|
+
subparser: Subparser.V3PathExactOut,
|
|
174
|
+
type: 'bytes'
|
|
175
|
+
}, {
|
|
176
|
+
name: 'payerIsUser',
|
|
177
|
+
type: 'bool'
|
|
178
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V2_SWAP_EXACT_IN] = [{
|
|
179
|
+
name: 'recipient',
|
|
180
|
+
type: 'address'
|
|
181
|
+
}, {
|
|
182
|
+
name: 'amountIn',
|
|
183
|
+
type: 'uint256'
|
|
184
|
+
}, {
|
|
185
|
+
name: 'amountOutMin',
|
|
186
|
+
type: 'uint256'
|
|
187
|
+
}, {
|
|
188
|
+
name: 'path',
|
|
189
|
+
type: 'address[]'
|
|
190
|
+
}, {
|
|
191
|
+
name: 'payerIsUser',
|
|
192
|
+
type: 'bool'
|
|
193
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V2_SWAP_EXACT_OUT] = [{
|
|
194
|
+
name: 'recipient',
|
|
195
|
+
type: 'address'
|
|
196
|
+
}, {
|
|
197
|
+
name: 'amountOut',
|
|
198
|
+
type: 'uint256'
|
|
199
|
+
}, {
|
|
200
|
+
name: 'amountInMax',
|
|
201
|
+
type: 'uint256'
|
|
202
|
+
}, {
|
|
203
|
+
name: 'path',
|
|
204
|
+
type: 'address[]'
|
|
205
|
+
}, {
|
|
206
|
+
name: 'payerIsUser',
|
|
207
|
+
type: 'bool'
|
|
208
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V4_SWAP] = [{
|
|
209
|
+
name: 'command',
|
|
210
|
+
type: 'bytes'
|
|
211
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.WRAP_ETH] = [{
|
|
212
|
+
name: 'recipient',
|
|
213
|
+
type: 'address'
|
|
214
|
+
}, {
|
|
215
|
+
name: 'amount',
|
|
216
|
+
type: 'uint256'
|
|
217
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.UNWRAP_WETH] = [{
|
|
218
|
+
name: 'recipient',
|
|
219
|
+
type: 'address'
|
|
220
|
+
}, {
|
|
221
|
+
name: 'amountMin',
|
|
222
|
+
type: 'uint256'
|
|
223
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.SWEEP] = [{
|
|
224
|
+
name: 'token',
|
|
225
|
+
type: 'address'
|
|
226
|
+
}, {
|
|
227
|
+
name: 'recipient',
|
|
228
|
+
type: 'address'
|
|
229
|
+
}, {
|
|
230
|
+
name: 'amountMin',
|
|
231
|
+
type: 'uint256'
|
|
232
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.TRANSFER] = [{
|
|
233
|
+
name: 'token',
|
|
234
|
+
type: 'address'
|
|
235
|
+
}, {
|
|
236
|
+
name: 'recipient',
|
|
237
|
+
type: 'address'
|
|
238
|
+
}, {
|
|
239
|
+
name: 'value',
|
|
240
|
+
type: 'uint256'
|
|
241
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.PAY_PORTION] = [{
|
|
242
|
+
name: 'token',
|
|
243
|
+
type: 'address'
|
|
244
|
+
}, {
|
|
245
|
+
name: 'recipient',
|
|
246
|
+
type: 'address'
|
|
247
|
+
}, {
|
|
248
|
+
name: 'bips',
|
|
249
|
+
type: 'uint256'
|
|
250
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.BALANCE_CHECK_ERC20] = [{
|
|
251
|
+
name: 'owner',
|
|
252
|
+
type: 'address'
|
|
253
|
+
}, {
|
|
254
|
+
name: 'token',
|
|
255
|
+
type: 'address'
|
|
256
|
+
}, {
|
|
257
|
+
name: 'minBalance',
|
|
258
|
+
type: 'uint256'
|
|
259
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V3_POSITION_MANAGER_PERMIT] = [{
|
|
260
|
+
name: 'calldata',
|
|
261
|
+
type: 'bytes'
|
|
262
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V3_POSITION_MANAGER_CALL] = [{
|
|
263
|
+
name: 'calldata',
|
|
264
|
+
type: 'bytes'
|
|
265
|
+
}], _COMMAND_ABI_DEFINITI[CommandType.V4_POSITION_CALL] = [{
|
|
266
|
+
name: 'calldata',
|
|
267
|
+
type: 'bytes'
|
|
268
|
+
}], _COMMAND_ABI_DEFINITI);
|
|
112
269
|
var RoutePlanner = /*#__PURE__*/function () {
|
|
113
270
|
function RoutePlanner() {
|
|
114
271
|
this.commands = '0x';
|
|
@@ -117,6 +274,7 @@ var RoutePlanner = /*#__PURE__*/function () {
|
|
|
117
274
|
var _proto = RoutePlanner.prototype;
|
|
118
275
|
_proto.addSubPlan = function addSubPlan(subplan) {
|
|
119
276
|
this.addCommand(CommandType.EXECUTE_SUB_PLAN, [subplan.commands, subplan.inputs], true);
|
|
277
|
+
return this;
|
|
120
278
|
};
|
|
121
279
|
_proto.addCommand = function addCommand(type, parameters, allowRevert) {
|
|
122
280
|
if (allowRevert === void 0) {
|
|
@@ -131,6 +289,7 @@ var RoutePlanner = /*#__PURE__*/function () {
|
|
|
131
289
|
command.type = command.type | ALLOW_REVERT_FLAG;
|
|
132
290
|
}
|
|
133
291
|
this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'));
|
|
292
|
+
return this;
|
|
134
293
|
};
|
|
135
294
|
return RoutePlanner;
|
|
136
295
|
}();
|
|
@@ -141,7 +300,9 @@ function createCommand(type, parameters) {
|
|
|
141
300
|
encodedInput: parameters[0]
|
|
142
301
|
};
|
|
143
302
|
}
|
|
144
|
-
var encodedInput = defaultAbiCoder.encode(
|
|
303
|
+
var encodedInput = defaultAbiCoder.encode(COMMAND_ABI_DEFINITION[type].map(function (abi) {
|
|
304
|
+
return abi.type;
|
|
305
|
+
}), parameters);
|
|
145
306
|
return {
|
|
146
307
|
type: type,
|
|
147
308
|
encodedInput: encodedInput
|
|
@@ -356,7 +517,6 @@ var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
|
|
|
356
517
|
if (CHAIN_CONFIGS[chainId].weth == WETH_NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have WETH");
|
|
357
518
|
return CHAIN_CONFIGS[chainId].weth;
|
|
358
519
|
};
|
|
359
|
-
var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
|
|
360
520
|
var CONTRACT_BALANCE = /*#__PURE__*/BigNumber.from(2).pow(255);
|
|
361
521
|
var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
362
522
|
var E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
@@ -830,5 +990,101 @@ RouterTradeAdapter.toPair = function (_ref2) {
|
|
|
830
990
|
return new Pair(CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve1.token), reserve1.quotient));
|
|
831
991
|
};
|
|
832
992
|
|
|
833
|
-
|
|
993
|
+
// Parses UniversalRouter commands
|
|
994
|
+
var CommandParser = /*#__PURE__*/function () {
|
|
995
|
+
function CommandParser() {}
|
|
996
|
+
CommandParser.parseCalldata = function parseCalldata(calldata) {
|
|
997
|
+
var txDescription = CommandParser.INTERFACE.parseTransaction({
|
|
998
|
+
data: calldata
|
|
999
|
+
});
|
|
1000
|
+
var _txDescription$args = txDescription.args,
|
|
1001
|
+
commands = _txDescription$args.commands,
|
|
1002
|
+
inputs = _txDescription$args.inputs;
|
|
1003
|
+
var commandTypes = CommandParser.getCommands(commands);
|
|
1004
|
+
return {
|
|
1005
|
+
commands: commandTypes.map(function (commandType, i) {
|
|
1006
|
+
var abiDef = COMMAND_ABI_DEFINITION[commandType];
|
|
1007
|
+
var rawParams = ethers.utils.defaultAbiCoder.decode(abiDef.map(function (command) {
|
|
1008
|
+
return command.type;
|
|
1009
|
+
}), inputs[i]);
|
|
1010
|
+
var params = rawParams.map(function (param, j) {
|
|
1011
|
+
switch (abiDef[j].subparser) {
|
|
1012
|
+
case Subparser.V3PathExactIn:
|
|
1013
|
+
return {
|
|
1014
|
+
name: abiDef[j].name,
|
|
1015
|
+
value: parseV3PathExactIn(param)
|
|
1016
|
+
};
|
|
1017
|
+
case Subparser.V3PathExactOut:
|
|
1018
|
+
return {
|
|
1019
|
+
name: abiDef[j].name,
|
|
1020
|
+
value: parseV3PathExactOut(param)
|
|
1021
|
+
};
|
|
1022
|
+
default:
|
|
1023
|
+
return {
|
|
1024
|
+
name: abiDef[j].name,
|
|
1025
|
+
value: param
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
});
|
|
1029
|
+
return {
|
|
1030
|
+
commandName: CommandType[commandType],
|
|
1031
|
+
commandType: commandType,
|
|
1032
|
+
params: params
|
|
1033
|
+
};
|
|
1034
|
+
})
|
|
1035
|
+
};
|
|
1036
|
+
}
|
|
1037
|
+
// parse command types from bytes string
|
|
1038
|
+
;
|
|
1039
|
+
CommandParser.getCommands = function getCommands(commands) {
|
|
1040
|
+
var commandTypes = [];
|
|
1041
|
+
for (var i = 2; i < commands.length; i += 2) {
|
|
1042
|
+
var _byte = commands.substring(i, i + 2);
|
|
1043
|
+
commandTypes.push(parseInt(_byte, 16));
|
|
1044
|
+
}
|
|
1045
|
+
return commandTypes;
|
|
1046
|
+
};
|
|
1047
|
+
return CommandParser;
|
|
1048
|
+
}();
|
|
1049
|
+
CommandParser.INTERFACE = /*#__PURE__*/new Interface(abi);
|
|
1050
|
+
function parseV3PathExactIn(path) {
|
|
1051
|
+
var strippedPath = path.replace('0x', '');
|
|
1052
|
+
var tokenIn = ethers.utils.getAddress(strippedPath.substring(0, 40));
|
|
1053
|
+
var loc = 40;
|
|
1054
|
+
var res = [];
|
|
1055
|
+
while (loc < strippedPath.length) {
|
|
1056
|
+
var feeAndTokenOut = strippedPath.substring(loc, loc + 46);
|
|
1057
|
+
var fee = parseInt(feeAndTokenOut.substring(0, 6), 16);
|
|
1058
|
+
var tokenOut = ethers.utils.getAddress(feeAndTokenOut.substring(6, 46));
|
|
1059
|
+
res.push({
|
|
1060
|
+
tokenIn: tokenIn,
|
|
1061
|
+
tokenOut: tokenOut,
|
|
1062
|
+
fee: fee
|
|
1063
|
+
});
|
|
1064
|
+
tokenIn = tokenOut;
|
|
1065
|
+
loc += 46;
|
|
1066
|
+
}
|
|
1067
|
+
return res;
|
|
1068
|
+
}
|
|
1069
|
+
function parseV3PathExactOut(path) {
|
|
1070
|
+
var strippedPath = path.replace('0x', '');
|
|
1071
|
+
var tokenIn = ethers.utils.getAddress(strippedPath.substring(strippedPath.length - 40));
|
|
1072
|
+
var loc = strippedPath.length - 86; // 86 = (20 addr + 3 fee + 20 addr) * 2 (for hex characters)
|
|
1073
|
+
var res = [];
|
|
1074
|
+
while (loc >= 0) {
|
|
1075
|
+
var feeAndTokenOut = strippedPath.substring(loc, loc + 46);
|
|
1076
|
+
var tokenOut = ethers.utils.getAddress(feeAndTokenOut.substring(0, 40));
|
|
1077
|
+
var fee = parseInt(feeAndTokenOut.substring(40, 46), 16);
|
|
1078
|
+
res.push({
|
|
1079
|
+
tokenIn: tokenIn,
|
|
1080
|
+
tokenOut: tokenOut,
|
|
1081
|
+
fee: fee
|
|
1082
|
+
});
|
|
1083
|
+
tokenIn = tokenOut;
|
|
1084
|
+
loc -= 46;
|
|
1085
|
+
}
|
|
1086
|
+
return res;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
export { CommandParser, CommandType, PoolType, ROUTER_AS_RECIPIENT, RoutePlanner, RouterActionType, RouterTradeAdapter, SwapRouter, UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, UniswapTrade, UniversalRouterVersion, UnwrapWETH, WETH_ADDRESS, isNativeCurrency };
|
|
834
1090
|
//# sourceMappingURL=universal-router-sdk.esm.js.map
|