@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
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { SwapRouter } from './swapRouter';
|
|
|
2
2
|
export * from './entities';
|
|
3
3
|
export * from './utils/routerTradeAdapter';
|
|
4
4
|
export { RoutePlanner, CommandType } from './utils/routerCommands';
|
|
5
|
-
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS,
|
|
5
|
+
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, } from './utils/constants';
|
|
6
|
+
export { CommandParser, UniversalRouterCommand, UniversalRouterCall, Param } from './utils/commandParser';
|
|
@@ -4,5 +4,5 @@ export declare const FORGE_PERMIT2_ADDRESS = "0x4a873bdd49f7f9cc0a5458416a12973f
|
|
|
4
4
|
export declare const FORGE_SENDER_ADDRESS = "0xcf03dd0a894ef79cb5b601a43c4b25e3ae4c67ed";
|
|
5
5
|
export declare const TEST_RECIPIENT_ADDRESS = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
6
6
|
export declare const TEST_FEE_RECIPIENT_ADDRESS = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
|
|
7
|
-
export declare const PERMIT2_ADDRESS:
|
|
7
|
+
export declare const PERMIT2_ADDRESS: any;
|
|
8
8
|
export declare const ROUTER_ADDRESS: string;
|
|
@@ -80,7 +80,7 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
|
80
80
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
var
|
|
83
|
+
var _COMMAND_ABI_DEFINITI;
|
|
84
84
|
(function (CommandType) {
|
|
85
85
|
CommandType[CommandType["V3_SWAP_EXACT_IN"] = 0] = "V3_SWAP_EXACT_IN";
|
|
86
86
|
CommandType[CommandType["V3_SWAP_EXACT_OUT"] = 1] = "V3_SWAP_EXACT_OUT";
|
|
@@ -102,13 +102,170 @@ var _ABI_DEFINITION;
|
|
|
102
102
|
CommandType[CommandType["V4_POSITION_CALL"] = 19] = "V4_POSITION_CALL";
|
|
103
103
|
CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
|
|
104
104
|
})(exports.CommandType || (exports.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([exports.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[exports.CommandType.EXECUTE_SUB_PLAN] = [{
|
|
117
|
+
name: 'commands',
|
|
118
|
+
type: 'bytes'
|
|
119
|
+
}, {
|
|
120
|
+
name: 'inputs',
|
|
121
|
+
type: 'bytes[]'
|
|
122
|
+
}], _COMMAND_ABI_DEFINITI[exports.CommandType.PERMIT2_PERMIT] = [{
|
|
123
|
+
name: 'permit',
|
|
124
|
+
type: PERMIT_STRUCT
|
|
125
|
+
}, {
|
|
126
|
+
name: 'signature',
|
|
127
|
+
type: 'bytes'
|
|
128
|
+
}], _COMMAND_ABI_DEFINITI[exports.CommandType.PERMIT2_PERMIT_BATCH] = [{
|
|
129
|
+
name: 'permit',
|
|
130
|
+
type: PERMIT_BATCH_STRUCT
|
|
131
|
+
}, {
|
|
132
|
+
name: 'signature',
|
|
133
|
+
type: 'bytes'
|
|
134
|
+
}], _COMMAND_ABI_DEFINITI[exports.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[exports.CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [{
|
|
144
|
+
name: 'transferFrom',
|
|
145
|
+
type: PERMIT2_TRANSFER_FROM_BATCH_STRUCT
|
|
146
|
+
}], _COMMAND_ABI_DEFINITI[exports.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[exports.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[exports.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[exports.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[exports.CommandType.V4_SWAP] = [{
|
|
209
|
+
name: 'command',
|
|
210
|
+
type: 'bytes'
|
|
211
|
+
}], _COMMAND_ABI_DEFINITI[exports.CommandType.WRAP_ETH] = [{
|
|
212
|
+
name: 'recipient',
|
|
213
|
+
type: 'address'
|
|
214
|
+
}, {
|
|
215
|
+
name: 'amount',
|
|
216
|
+
type: 'uint256'
|
|
217
|
+
}], _COMMAND_ABI_DEFINITI[exports.CommandType.UNWRAP_WETH] = [{
|
|
218
|
+
name: 'recipient',
|
|
219
|
+
type: 'address'
|
|
220
|
+
}, {
|
|
221
|
+
name: 'amountMin',
|
|
222
|
+
type: 'uint256'
|
|
223
|
+
}], _COMMAND_ABI_DEFINITI[exports.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[exports.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[exports.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[exports.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[exports.CommandType.V3_POSITION_MANAGER_PERMIT] = [{
|
|
260
|
+
name: 'calldata',
|
|
261
|
+
type: 'bytes'
|
|
262
|
+
}], _COMMAND_ABI_DEFINITI[exports.CommandType.V3_POSITION_MANAGER_CALL] = [{
|
|
263
|
+
name: 'calldata',
|
|
264
|
+
type: 'bytes'
|
|
265
|
+
}], _COMMAND_ABI_DEFINITI[exports.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(exports.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 = utils.defaultAbiCoder.encode(
|
|
303
|
+
var encodedInput = utils.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
|
|
@@ -354,7 +515,6 @@ var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
|
|
|
354
515
|
if (CHAIN_CONFIGS[chainId].weth == WETH_NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have WETH");
|
|
355
516
|
return CHAIN_CONFIGS[chainId].weth;
|
|
356
517
|
};
|
|
357
|
-
var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
|
|
358
518
|
var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
|
|
359
519
|
var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
360
520
|
var E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
@@ -827,7 +987,103 @@ RouterTradeAdapter.toPair = function (_ref2) {
|
|
|
827
987
|
return new v2Sdk.Pair(sdkCore.CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve0.token), reserve0.quotient), sdkCore.CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve1.token), reserve1.quotient));
|
|
828
988
|
};
|
|
829
989
|
|
|
830
|
-
|
|
990
|
+
// Parses UniversalRouter commands
|
|
991
|
+
var CommandParser = /*#__PURE__*/function () {
|
|
992
|
+
function CommandParser() {}
|
|
993
|
+
CommandParser.parseCalldata = function parseCalldata(calldata) {
|
|
994
|
+
var txDescription = CommandParser.INTERFACE.parseTransaction({
|
|
995
|
+
data: calldata
|
|
996
|
+
});
|
|
997
|
+
var _txDescription$args = txDescription.args,
|
|
998
|
+
commands = _txDescription$args.commands,
|
|
999
|
+
inputs = _txDescription$args.inputs;
|
|
1000
|
+
var commandTypes = CommandParser.getCommands(commands);
|
|
1001
|
+
return {
|
|
1002
|
+
commands: commandTypes.map(function (commandType, i) {
|
|
1003
|
+
var abiDef = COMMAND_ABI_DEFINITION[commandType];
|
|
1004
|
+
var rawParams = ethers.ethers.utils.defaultAbiCoder.decode(abiDef.map(function (command) {
|
|
1005
|
+
return command.type;
|
|
1006
|
+
}), inputs[i]);
|
|
1007
|
+
var params = rawParams.map(function (param, j) {
|
|
1008
|
+
switch (abiDef[j].subparser) {
|
|
1009
|
+
case Subparser.V3PathExactIn:
|
|
1010
|
+
return {
|
|
1011
|
+
name: abiDef[j].name,
|
|
1012
|
+
value: parseV3PathExactIn(param)
|
|
1013
|
+
};
|
|
1014
|
+
case Subparser.V3PathExactOut:
|
|
1015
|
+
return {
|
|
1016
|
+
name: abiDef[j].name,
|
|
1017
|
+
value: parseV3PathExactOut(param)
|
|
1018
|
+
};
|
|
1019
|
+
default:
|
|
1020
|
+
return {
|
|
1021
|
+
name: abiDef[j].name,
|
|
1022
|
+
value: param
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
});
|
|
1026
|
+
return {
|
|
1027
|
+
commandName: exports.CommandType[commandType],
|
|
1028
|
+
commandType: commandType,
|
|
1029
|
+
params: params
|
|
1030
|
+
};
|
|
1031
|
+
})
|
|
1032
|
+
};
|
|
1033
|
+
}
|
|
1034
|
+
// parse command types from bytes string
|
|
1035
|
+
;
|
|
1036
|
+
CommandParser.getCommands = function getCommands(commands) {
|
|
1037
|
+
var commandTypes = [];
|
|
1038
|
+
for (var i = 2; i < commands.length; i += 2) {
|
|
1039
|
+
var _byte = commands.substring(i, i + 2);
|
|
1040
|
+
commandTypes.push(parseInt(_byte, 16));
|
|
1041
|
+
}
|
|
1042
|
+
return commandTypes;
|
|
1043
|
+
};
|
|
1044
|
+
return CommandParser;
|
|
1045
|
+
}();
|
|
1046
|
+
CommandParser.INTERFACE = /*#__PURE__*/new abi.Interface(UniversalRouter_json.abi);
|
|
1047
|
+
function parseV3PathExactIn(path) {
|
|
1048
|
+
var strippedPath = path.replace('0x', '');
|
|
1049
|
+
var tokenIn = ethers.ethers.utils.getAddress(strippedPath.substring(0, 40));
|
|
1050
|
+
var loc = 40;
|
|
1051
|
+
var res = [];
|
|
1052
|
+
while (loc < strippedPath.length) {
|
|
1053
|
+
var feeAndTokenOut = strippedPath.substring(loc, loc + 46);
|
|
1054
|
+
var fee = parseInt(feeAndTokenOut.substring(0, 6), 16);
|
|
1055
|
+
var tokenOut = ethers.ethers.utils.getAddress(feeAndTokenOut.substring(6, 46));
|
|
1056
|
+
res.push({
|
|
1057
|
+
tokenIn: tokenIn,
|
|
1058
|
+
tokenOut: tokenOut,
|
|
1059
|
+
fee: fee
|
|
1060
|
+
});
|
|
1061
|
+
tokenIn = tokenOut;
|
|
1062
|
+
loc += 46;
|
|
1063
|
+
}
|
|
1064
|
+
return res;
|
|
1065
|
+
}
|
|
1066
|
+
function parseV3PathExactOut(path) {
|
|
1067
|
+
var strippedPath = path.replace('0x', '');
|
|
1068
|
+
var tokenIn = ethers.ethers.utils.getAddress(strippedPath.substring(strippedPath.length - 40));
|
|
1069
|
+
var loc = strippedPath.length - 86; // 86 = (20 addr + 3 fee + 20 addr) * 2 (for hex characters)
|
|
1070
|
+
var res = [];
|
|
1071
|
+
while (loc >= 0) {
|
|
1072
|
+
var feeAndTokenOut = strippedPath.substring(loc, loc + 46);
|
|
1073
|
+
var tokenOut = ethers.ethers.utils.getAddress(feeAndTokenOut.substring(0, 40));
|
|
1074
|
+
var fee = parseInt(feeAndTokenOut.substring(40, 46), 16);
|
|
1075
|
+
res.push({
|
|
1076
|
+
tokenIn: tokenIn,
|
|
1077
|
+
tokenOut: tokenOut,
|
|
1078
|
+
fee: fee
|
|
1079
|
+
});
|
|
1080
|
+
tokenIn = tokenOut;
|
|
1081
|
+
loc -= 46;
|
|
1082
|
+
}
|
|
1083
|
+
return res;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
exports.CommandParser = CommandParser;
|
|
831
1087
|
exports.ROUTER_AS_RECIPIENT = ROUTER_AS_RECIPIENT;
|
|
832
1088
|
exports.RoutePlanner = RoutePlanner;
|
|
833
1089
|
exports.RouterTradeAdapter = RouterTradeAdapter;
|