@uniswap/universal-router-sdk 1.4.2 → 1.5.0-beta.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.
Files changed (40) hide show
  1. package/dist/entities/Command.d.ts +13 -13
  2. package/dist/entities/NFTTrade.d.ts +44 -50
  3. package/dist/entities/index.d.ts +3 -3
  4. package/dist/entities/protocols/cryptopunk.d.ts +16 -16
  5. package/dist/entities/protocols/element-market.d.ts +44 -0
  6. package/dist/entities/protocols/foundation.d.ts +19 -19
  7. package/dist/entities/protocols/index.d.ts +10 -10
  8. package/dist/entities/protocols/looksRare.d.ts +44 -44
  9. package/dist/entities/protocols/nft20.d.ts +21 -21
  10. package/dist/entities/protocols/nftx.d.ts +20 -20
  11. package/dist/entities/protocols/seaport.d.ts +68 -63
  12. package/dist/entities/protocols/sudoswap.d.ts +27 -27
  13. package/dist/entities/protocols/uniswap.d.ts +15 -15
  14. package/dist/entities/protocols/unwrapWETH.d.ts +12 -13
  15. package/dist/entities/protocols/x2y2.d.ts +28 -28
  16. package/dist/index.d.ts +3 -3
  17. package/dist/swapRouter.d.ts +38 -41
  18. package/dist/test/forge/writeInterop.d.ts +1 -1
  19. package/dist/test/orders/element.d.ts +7 -0
  20. package/dist/test/orders/looksRare.d.ts +12 -15
  21. package/dist/test/orders/seaport.d.ts +5 -4
  22. package/dist/test/orders/seaportV1_4.d.ts +4 -4
  23. package/dist/test/orders/x2y2.d.ts +6 -6
  24. package/dist/test/utils/addresses.d.ts +7 -2
  25. package/dist/test/utils/hexToDecimalString.d.ts +2 -2
  26. package/dist/test/utils/permit2.d.ts +7 -17
  27. package/dist/test/utils/uniswapData.d.ts +23 -30
  28. package/dist/universal-router-sdk.cjs.development.js +124 -41
  29. package/dist/universal-router-sdk.cjs.development.js.map +1 -1
  30. package/dist/universal-router-sdk.cjs.production.min.js +1 -1
  31. package/dist/universal-router-sdk.cjs.production.min.js.map +1 -1
  32. package/dist/universal-router-sdk.esm.js +125 -43
  33. package/dist/universal-router-sdk.esm.js.map +1 -1
  34. package/dist/utils/constants.d.ts +13 -8
  35. package/dist/utils/expandTo18Decimals.d.ts +4 -4
  36. package/dist/utils/getNativeCurrencyValue.d.ts +2 -2
  37. package/dist/utils/inputTokens.d.ts +21 -0
  38. package/dist/utils/routerCommands.d.ts +51 -44
  39. package/package.json +4 -2
  40. package/dist/utils/permit2.d.ts +0 -6
@@ -82,11 +82,11 @@ var CommandType;
82
82
  CommandType[CommandType["PAY_PORTION"] = 6] = "PAY_PORTION";
83
83
  CommandType[CommandType["V2_SWAP_EXACT_IN"] = 8] = "V2_SWAP_EXACT_IN";
84
84
  CommandType[CommandType["V2_SWAP_EXACT_OUT"] = 9] = "V2_SWAP_EXACT_OUT";
85
- CommandType[CommandType["PERMIT"] = 10] = "PERMIT";
85
+ CommandType[CommandType["PERMIT2_PERMIT"] = 10] = "PERMIT2_PERMIT";
86
86
  CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
87
87
  CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
88
88
  CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
89
- CommandType[CommandType["SEAPORT_V1_4"] = 14] = "SEAPORT_V1_4";
89
+ CommandType[CommandType["BALANCE_CHECK_ERC20"] = 14] = "BALANCE_CHECK_ERC20";
90
90
  // NFT-related command types
91
91
  CommandType[CommandType["SEAPORT"] = 16] = "SEAPORT";
92
92
  CommandType[CommandType["LOOKS_RARE_721"] = 17] = "LOOKS_RARE_721";
@@ -95,23 +95,34 @@ var CommandType;
95
95
  CommandType[CommandType["LOOKS_RARE_1155"] = 20] = "LOOKS_RARE_1155";
96
96
  CommandType[CommandType["OWNER_CHECK_721"] = 21] = "OWNER_CHECK_721";
97
97
  CommandType[CommandType["OWNER_CHECK_1155"] = 22] = "OWNER_CHECK_1155";
98
+ CommandType[CommandType["SWEEP_ERC721"] = 23] = "SWEEP_ERC721";
98
99
  CommandType[CommandType["X2Y2_721"] = 24] = "X2Y2_721";
99
100
  CommandType[CommandType["SUDOSWAP"] = 25] = "SUDOSWAP";
100
101
  CommandType[CommandType["NFT20"] = 26] = "NFT20";
101
102
  CommandType[CommandType["X2Y2_1155"] = 27] = "X2Y2_1155";
102
103
  CommandType[CommandType["FOUNDATION"] = 28] = "FOUNDATION";
104
+ CommandType[CommandType["SWEEP_ERC1155"] = 29] = "SWEEP_ERC1155";
105
+ CommandType[CommandType["ELEMENT_MARKET"] = 30] = "ELEMENT_MARKET";
106
+ CommandType[CommandType["EXECUTE_SUB_PLAN"] = 32] = "EXECUTE_SUB_PLAN";
107
+ CommandType[CommandType["SEAPORT_V1_4"] = 33] = "SEAPORT_V1_4";
108
+ CommandType[CommandType["APPROVE_ERC20"] = 34] = "APPROVE_ERC20";
103
109
  })(CommandType || (CommandType = {}));
104
- var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details, address spender, uint256 sigDeadline)';
105
- var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details, address spender, uint256 sigDeadline)';
106
110
  var ALLOW_REVERT_FLAG = 0x80;
107
- var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.CRYPTOPUNKS]);
108
- var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = ['bytes'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.LOOKS_RARE_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION);
111
+ var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_721, CommandType.LOOKS_RARE_1155, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.EXECUTE_SUB_PLAN, CommandType.CRYPTOPUNKS, CommandType.ELEMENT_MARKET]);
112
+ var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
113
+ var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
114
+ var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
115
+ var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
116
+ var ABI_DEFINITION = (_ABI_DEFINITION = {}, _ABI_DEFINITION[CommandType.EXECUTE_SUB_PLAN] = ['bytes', 'bytes[]'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT] = [PERMIT_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_PERMIT_BATCH] = [PERMIT_BATCH_STRUCT, 'bytes'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM] = ['address', 'address', 'uint160'], _ABI_DEFINITION[CommandType.PERMIT2_TRANSFER_FROM_BATCH] = [PERMIT2_TRANSFER_FROM_BATCH_STRUCT], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V3_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'bytes', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_IN] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.V2_SWAP_EXACT_OUT] = ['address', 'uint256', 'uint256', 'address[]', 'bool'], _ABI_DEFINITION[CommandType.WRAP_ETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.UNWRAP_WETH] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP_ERC721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SWEEP_ERC1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.TRANSFER] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.PAY_PORTION] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.BALANCE_CHECK_ERC20] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_721] = ['address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.OWNER_CHECK_1155] = ['address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.APPROVE_ERC20] = ['address', 'uint256'], _ABI_DEFINITION[CommandType.SEAPORT] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.LOOKS_RARE_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_721] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.X2Y2_1155] = ['uint256', 'bytes', 'address', 'address', 'uint256', 'uint256'], _ABI_DEFINITION[CommandType.FOUNDATION] = ['uint256', 'bytes', 'address', 'address', 'uint256'], _ABI_DEFINITION[CommandType.SUDOSWAP] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.NFT20] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.CRYPTOPUNKS] = ['uint256', 'address', 'uint256'], _ABI_DEFINITION[CommandType.ELEMENT_MARKET] = ['uint256', 'bytes'], _ABI_DEFINITION);
109
117
  var RoutePlanner = /*#__PURE__*/function () {
110
118
  function RoutePlanner() {
111
119
  this.commands = '0x';
112
120
  this.inputs = [];
113
121
  }
114
122
  var _proto = RoutePlanner.prototype;
123
+ _proto.addSubPlan = function addSubPlan(subplan) {
124
+ this.addCommand(CommandType.EXECUTE_SUB_PLAN, [subplan.commands, subplan.inputs], true);
125
+ };
115
126
  _proto.addCommand = function addCommand(type, parameters, allowRevert) {
116
127
  if (allowRevert === void 0) {
117
128
  allowRevert = false;
@@ -213,6 +224,8 @@ var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
213
224
  var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
214
225
  var SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
215
226
  var ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
227
+ var OPENSEA_CONDUIT_SPENDER_ID = 0;
228
+ var SUDOSWAP_SPENDER_ID = 1;
216
229
 
217
230
  var REFUND_ETH_PRICE_IMPACT_THRESHOLD = /*#__PURE__*/new sdkCore.Percent( /*#__PURE__*/JSBI.BigInt(50), /*#__PURE__*/JSBI.BigInt(100));
218
231
  // Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router
@@ -374,15 +387,52 @@ function riskOfPartialFill(trade) {
374
387
 
375
388
  var SIGNATURE_LENGTH = 65;
376
389
  var EIP_2098_SIGNATURE_LENGTH = 64;
377
- function encodePermit(planner, permit) {
378
- var signature = permit.signature;
379
- var length = ethers.ethers.utils.arrayify(permit.signature).length;
390
+ function encodePermit(planner, permit2) {
391
+ var signature = permit2.signature;
392
+ var length = ethers.ethers.utils.arrayify(permit2.signature).length;
380
393
  // signature data provided for EIP-1271 may have length different from ECDSA signature
381
394
  if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {
382
395
  // sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id
383
- signature = ethers.ethers.utils.joinSignature(ethers.ethers.utils.splitSignature(permit.signature));
396
+ signature = ethers.ethers.utils.joinSignature(ethers.ethers.utils.splitSignature(permit2.signature));
397
+ }
398
+ planner.addCommand(CommandType.PERMIT2_PERMIT, [permit2, signature]);
399
+ }
400
+ // Handles the encoding of commands needed to gather input tokens for a trade
401
+ // Approval: The router approving another address to take tokens.
402
+ // note: Only seaport and sudoswap support this action. Approvals are left open.
403
+ // Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
404
+ // Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address
405
+ function encodeInputTokenOptions(planner, options) {
406
+ // first ensure that all tokens provided for encoding are the same
407
+ if (!!options.approval && !!options.permit2Permit) !(options.approval.token === options.permit2Permit.details.token) ? invariant(false, "inconsistent token") : void 0;
408
+ if (!!options.approval && !!options.permit2TransferFrom) !(options.approval.token === options.permit2TransferFrom.token) ? invariant(false, "inconsistent token") : void 0;
409
+ if (!!options.permit2TransferFrom && !!options.permit2Permit) !(options.permit2TransferFrom.token === options.permit2Permit.details.token) ? invariant(false, "inconsistent token") : void 0;
410
+ // if an options.approval is required, add it
411
+ if (!!options.approval) {
412
+ planner.addCommand(CommandType.APPROVE_ERC20, [options.approval.token, mapApprovalProtocol(options.approval.protocol)]);
413
+ }
414
+ // if this order has a options.permit2Permit, encode it
415
+ if (!!options.permit2Permit) {
416
+ encodePermit(planner, options.permit2Permit);
417
+ }
418
+ if (!!options.permit2TransferFrom) {
419
+ planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [options.permit2TransferFrom.token, options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : ROUTER_AS_RECIPIENT, options.permit2TransferFrom.amount]);
420
+ }
421
+ }
422
+ function mapApprovalProtocol(protocolAddress) {
423
+ switch (protocolAddress.toLowerCase()) {
424
+ case '0x00000000006c3852cbef3e08e8df289169ede581':
425
+ // Seaport v1.1
426
+ return OPENSEA_CONDUIT_SPENDER_ID;
427
+ case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
428
+ // Seaport v1.4
429
+ return OPENSEA_CONDUIT_SPENDER_ID;
430
+ case '0x2b2e8cda09bba9660dca5cb6233787738ad68329':
431
+ // Sudoswap
432
+ return SUDOSWAP_SPENDER_ID;
433
+ default:
434
+ throw new Error('unsupported protocol address');
384
435
  }
385
- planner.addCommand(CommandType.PERMIT, [permit, signature]);
386
436
  }
387
437
 
388
438
  var SwapRouter = /*#__PURE__*/function () {
@@ -419,7 +469,7 @@ var SwapRouter = /*#__PURE__*/function () {
419
469
  currentNativeValueInRouter = currentNativeValueInRouter.sub(tradePrice);
420
470
  }
421
471
  /**
422
- * is Uniswap Trade
472
+ * is UniswapTrade
423
473
  */
424
474
  } else if (trade.tradeType == exports.RouterTradeType.UniswapTrade) {
425
475
  var uniswapTrade = trade;
@@ -545,6 +595,7 @@ var NFTTrade = function NFTTrade(market, orders) {
545
595
  Market["Sudoswap"] = "Sudoswap";
546
596
  Market["Cryptopunks"] = "cryptopunks";
547
597
  Market["X2Y2"] = "x2y2";
598
+ Market["Element"] = "element";
548
599
  })(exports.Market || (exports.Market = {}));
549
600
  (function (TokenType) {
550
601
  TokenType["ERC721"] = "ERC721";
@@ -6986,10 +7037,6 @@ var abi$4 = [
6986
7037
  }
6987
7038
  ];
6988
7039
 
6989
- (function (SeaportVersion) {
6990
- SeaportVersion[SeaportVersion["V1_1"] = 0] = "V1_1";
6991
- SeaportVersion[SeaportVersion["V1_4"] = 1] = "V1_4";
6992
- })(exports.SeaportVersion || (exports.SeaportVersion = {}));
6993
7040
  var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
6994
7041
  _inheritsLoose(SeaportTrade, _NFTTrade);
6995
7042
  function SeaportTrade(orders) {
@@ -7019,17 +7066,33 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
7019
7066
  } else {
7020
7067
  calldata = SeaportTrade.INTERFACE.encodeFunctionData('fulfillAvailableAdvancedOrders', [advancedOrders, [], orderFulfillments, considerationFulFillments, SeaportTrade.OPENSEA_CONDUIT_KEY, order.recipient, 100]);
7021
7068
  }
7022
- planner.addCommand(this.commandMap(order.version), [this.getTotalPrice().toString(), calldata], config.allowRevert);
7069
+ if (!!order.inputTokenProcessing) {
7070
+ for (var _iterator3 = _createForOfIteratorHelperLoose(order.inputTokenProcessing), _step3; !(_step3 = _iterator3()).done;) {
7071
+ var inputToken = _step3.value;
7072
+ encodeInputTokenOptions(planner, {
7073
+ approval: inputToken.protocolApproval ? {
7074
+ token: inputToken.token,
7075
+ protocol: order.protocolAddress
7076
+ } : undefined,
7077
+ permit2Permit: inputToken.permit2Permit,
7078
+ permit2TransferFrom: inputToken.permit2TransferFrom ? {
7079
+ token: inputToken.token,
7080
+ amount: this.getTotalOrderPrice(order, inputToken.token).toString()
7081
+ } : undefined
7082
+ });
7083
+ }
7084
+ }
7085
+ planner.addCommand(this.commandMap(order.protocolAddress), [this.getTotalOrderPrice(order, ETH_ADDRESS).toString(), calldata], config.allowRevert);
7023
7086
  }
7024
7087
  };
7025
7088
  _proto.getBuyItems = function getBuyItems() {
7026
7089
  var buyItems = [];
7027
- for (var _iterator3 = _createForOfIteratorHelperLoose(this.orders), _step3; !(_step3 = _iterator3()).done;) {
7028
- var order = _step3.value;
7029
- for (var _iterator4 = _createForOfIteratorHelperLoose(order.items), _step4; !(_step4 = _iterator4()).done;) {
7030
- var item = _step4.value;
7031
- for (var _iterator5 = _createForOfIteratorHelperLoose(item.parameters.offer), _step5; !(_step5 = _iterator5()).done;) {
7032
- var offer = _step5.value;
7090
+ for (var _iterator4 = _createForOfIteratorHelperLoose(this.orders), _step4; !(_step4 = _iterator4()).done;) {
7091
+ var order = _step4.value;
7092
+ for (var _iterator5 = _createForOfIteratorHelperLoose(order.items), _step5; !(_step5 = _iterator5()).done;) {
7093
+ var item = _step5.value;
7094
+ for (var _iterator6 = _createForOfIteratorHelperLoose(item.parameters.offer), _step6; !(_step6 = _iterator6()).done;) {
7095
+ var offer = _step6.value;
7033
7096
  buyItems.push({
7034
7097
  tokenAddress: offer.token,
7035
7098
  tokenId: offer.identifierOrCriteria,
@@ -7040,23 +7103,41 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
7040
7103
  }
7041
7104
  return buyItems;
7042
7105
  };
7043
- _proto.getTotalPrice = function getTotalPrice() {
7106
+ _proto.getTotalOrderPrice = function getTotalOrderPrice(order, token) {
7107
+ if (token === void 0) {
7108
+ token = ETH_ADDRESS;
7109
+ }
7110
+ var totalOrderPrice = ethers.BigNumber.from(0);
7111
+ for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
7112
+ var item = _step7.value;
7113
+ totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration, token));
7114
+ }
7115
+ return totalOrderPrice;
7116
+ };
7117
+ _proto.getTotalPrice = function getTotalPrice(token) {
7118
+ if (token === void 0) {
7119
+ token = ETH_ADDRESS;
7120
+ }
7044
7121
  var totalPrice = ethers.BigNumber.from(0);
7045
- for (var _iterator6 = _createForOfIteratorHelperLoose(this.orders), _step6; !(_step6 = _iterator6()).done;) {
7046
- var order = _step6.value;
7047
- for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
7048
- var item = _step7.value;
7049
- totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration));
7122
+ for (var _iterator8 = _createForOfIteratorHelperLoose(this.orders), _step8; !(_step8 = _iterator8()).done;) {
7123
+ var order = _step8.value;
7124
+ for (var _iterator9 = _createForOfIteratorHelperLoose(order.items), _step9; !(_step9 = _iterator9()).done;) {
7125
+ var item = _step9.value;
7126
+ totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration, token));
7050
7127
  }
7051
7128
  }
7052
7129
  return totalPrice;
7053
7130
  };
7054
- _proto.commandMap = function commandMap(version) {
7055
- switch (version) {
7056
- case exports.SeaportVersion.V1_1:
7131
+ _proto.commandMap = function commandMap(protocolAddress) {
7132
+ switch (protocolAddress.toLowerCase()) {
7133
+ case '0x00000000006c3852cbef3e08e8df289169ede581':
7134
+ // Seaport v1.1
7057
7135
  return CommandType.SEAPORT;
7058
- case exports.SeaportVersion.V1_4:
7136
+ case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
7137
+ // Seaport v1.4
7059
7138
  return CommandType.SEAPORT_V1_4;
7139
+ default:
7140
+ throw new Error('unsupported Seaport address');
7060
7141
  }
7061
7142
  };
7062
7143
  _proto.getConsiderationFulfillments = function getConsiderationFulfillments(protocolDatas) {
@@ -7100,15 +7181,13 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
7100
7181
  signature: data.signature,
7101
7182
  extraData: '0x00'
7102
7183
  };
7103
- var value = this.calculateValue(data.parameters.consideration);
7104
7184
  return {
7105
- advancedOrder: advancedOrder,
7106
- value: value
7185
+ advancedOrder: advancedOrder
7107
7186
  };
7108
7187
  };
7109
- _proto.calculateValue = function calculateValue(considerations) {
7188
+ _proto.calculateValue = function calculateValue(considerations, token) {
7110
7189
  return considerations.reduce(function (amt, consideration) {
7111
- return amt.add(consideration.startAmount);
7190
+ return consideration.token == token ? amt.add(consideration.startAmount) : amt;
7112
7191
  }, ethers.BigNumber.from(0));
7113
7192
  };
7114
7193
  return SeaportTrade;
@@ -9434,7 +9513,6 @@ var UnwrapWETH = /*#__PURE__*/function () {
9434
9513
  function UnwrapWETH(amount, chainId, permit2) {
9435
9514
  this.tradeType = exports.RouterTradeType.UnwrapWETH;
9436
9515
  this.wethAddress = WETH_ADDRESS(chainId);
9437
- this.routerAddress = UNIVERSAL_ROUTER_ADDRESS(chainId);
9438
9516
  this.amount = amount;
9439
9517
  if (!!permit2) {
9440
9518
  !(permit2.details.token === this.wethAddress) ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : void 0;
@@ -9444,8 +9522,13 @@ var UnwrapWETH = /*#__PURE__*/function () {
9444
9522
  }
9445
9523
  var _proto = UnwrapWETH.prototype;
9446
9524
  _proto.encode = function encode(planner, _) {
9447
- if (!!this.permit2Data) encodePermit(planner, this.permit2Data);
9448
- planner.addCommand(CommandType.PERMIT2_TRANSFER_FROM, [this.wethAddress, this.routerAddress, this.amount]);
9525
+ encodeInputTokenOptions(planner, {
9526
+ permit2Permit: this.permit2Data,
9527
+ permit2TransferFrom: {
9528
+ token: this.wethAddress,
9529
+ amount: this.amount.toString()
9530
+ }
9531
+ });
9449
9532
  planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, this.amount]);
9450
9533
  };
9451
9534
  return UnwrapWETH;