@uniswap/universal-router-sdk 1.5.0-beta.1 → 1.5.0-beta.3

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/README.md CHANGED
@@ -98,13 +98,12 @@ Make sure you are running `node v16`
98
98
  Install dependencies and run typescript unit tests
99
99
  ```bash
100
100
  yarn install
101
- yarn test
101
+ yarn test:hardhat
102
102
  ```
103
103
 
104
104
  Run forge integration tests
105
105
  ```bash
106
106
  yarn symlink # must install git submodules
107
107
  forge install
108
- forge build
109
- forge test
108
+ yarn test:forge
110
109
  ```
@@ -37,8 +37,8 @@ export declare type LRV2APIOrder = MakerOrder & {
37
37
  hash: string;
38
38
  signature: string;
39
39
  createdAt: string;
40
- merkleRoot: string;
41
- merkleProof: MerkleProof[];
40
+ merkleRoot?: string;
41
+ merkleProof?: MerkleProof[];
42
42
  status: string;
43
43
  };
44
44
  export declare type LooksRareV2Data = {
@@ -58,6 +58,7 @@ export declare class SeaportTrade extends NFTTrade<SeaportData> {
58
58
  constructor(orders: SeaportData[]);
59
59
  encode(planner: RoutePlanner, config: TradeConfig): void;
60
60
  getBuyItems(): BuyItem[];
61
+ getInputTokens(): Set<string>;
61
62
  getTotalOrderPrice(order: SeaportData, token?: string): BigNumber;
62
63
  getTotalPrice(token?: string): BigNumber;
63
64
  private commandMap;
@@ -16,6 +16,7 @@ export declare abstract class SwapRouter {
16
16
  static swapCallParameters(trades: Command[] | Command, config?: SwapRouterConfig): MethodParameters;
17
17
  /**
18
18
  * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
19
+ * This version does not work correctly for Seaport ERC20->NFT purchases
19
20
  * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.
20
21
  * @param trades to produce call parameters for
21
22
  */
@@ -1,3 +1,4 @@
1
1
  import { SeaportData } from '../../src/entities/protocols/seaport';
2
2
  export declare const seaportV1_4DataETH: SeaportData;
3
3
  export declare const seaportV1_4DataETHRecent: SeaportData;
4
+ export declare const seaportV1_4DataERC20: SeaportData;
@@ -1,5 +1,4 @@
1
1
  import { ConsiderationItem, SeaportData } from '../../src/entities/protocols/seaport';
2
2
  import { BigNumber } from 'ethers';
3
- export declare const seaportDataETH: SeaportData;
4
- export declare const seaportDataERC20: SeaportData;
3
+ export declare const seaportV1_5DataETH: SeaportData;
5
4
  export declare function calculateSeaportValue(considerations: ConsiderationItem[], token: string): BigNumber;
@@ -79,6 +79,29 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
79
79
  RouterTradeType["UnwrapWETH"] = "UnwrapWETH";
80
80
  })(exports.RouterTradeType || (exports.RouterTradeType = {}));
81
81
 
82
+ var NFTTrade = function NFTTrade(market, orders) {
83
+ this.tradeType = exports.RouterTradeType.NFTTrade;
84
+ !(orders.length > 0) ? invariant(false, 'no buy Items') : void 0;
85
+ this.market = market;
86
+ this.orders = orders;
87
+ };
88
+ (function (Market) {
89
+ Market["Foundation"] = "foundation";
90
+ Market["LooksRareV2"] = "looksrareV2";
91
+ Market["NFT20"] = "nft20";
92
+ Market["NFTX"] = "nftx";
93
+ Market["Seaport"] = "seaport";
94
+ Market["Sudoswap"] = "Sudoswap";
95
+ Market["Cryptopunks"] = "cryptopunks";
96
+ Market["X2Y2"] = "x2y2";
97
+ Market["Element"] = "element";
98
+ })(exports.Market || (exports.Market = {}));
99
+ (function (TokenType) {
100
+ TokenType["ERC721"] = "ERC721";
101
+ TokenType["ERC1155"] = "ERC1155";
102
+ TokenType["Cryptopunk"] = "Cryptopunk";
103
+ })(exports.TokenType || (exports.TokenType = {}));
104
+
82
105
  var _ABI_DEFINITION;
83
106
  /**
84
107
  * CommandTypes
@@ -102,7 +125,7 @@ var CommandType;
102
125
  CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
103
126
  CommandType[CommandType["BALANCE_CHECK_ERC20"] = 14] = "BALANCE_CHECK_ERC20";
104
127
  // NFT-related command types
105
- CommandType[CommandType["SEAPORT"] = 16] = "SEAPORT";
128
+ CommandType[CommandType["SEAPORT_V1_5"] = 16] = "SEAPORT_V1_5";
106
129
  CommandType[CommandType["LOOKS_RARE_V2"] = 17] = "LOOKS_RARE_V2";
107
130
  CommandType[CommandType["NFTX"] = 18] = "NFTX";
108
131
  CommandType[CommandType["CRYPTOPUNKS"] = 19] = "CRYPTOPUNKS";
@@ -122,12 +145,12 @@ var CommandType;
122
145
  CommandType[CommandType["APPROVE_ERC20"] = 34] = "APPROVE_ERC20";
123
146
  })(CommandType || (CommandType = {}));
124
147
  var ALLOW_REVERT_FLAG = 0x80;
125
- var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_V2, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.EXECUTE_SUB_PLAN, CommandType.CRYPTOPUNKS, CommandType.ELEMENT_MARKET]);
148
+ var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([CommandType.SEAPORT_V1_5, CommandType.SEAPORT_V1_4, CommandType.NFTX, CommandType.LOOKS_RARE_V2, CommandType.X2Y2_721, CommandType.X2Y2_1155, CommandType.FOUNDATION, CommandType.SUDOSWAP, CommandType.NFT20, CommandType.EXECUTE_SUB_PLAN, CommandType.CRYPTOPUNKS, CommandType.ELEMENT_MARKET]);
126
149
  var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
127
150
  var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
128
151
  var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
129
152
  var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
130
- 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_V2] = ['uint256', 'bytes'], _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);
153
+ 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_V1_5] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.SEAPORT_V1_4] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.NFTX] = ['uint256', 'bytes'], _ABI_DEFINITION[CommandType.LOOKS_RARE_V2] = ['uint256', 'bytes'], _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);
131
154
  var RoutePlanner = /*#__PURE__*/function () {
132
155
  function RoutePlanner() {
133
156
  this.commands = '0x';
@@ -164,8 +187,8 @@ function createCommand(type, parameters) {
164
187
  var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
165
188
  switch (chainId) {
166
189
  case 1:
167
- // mainnet
168
- return '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5';
190
+ // mainnet. UR v1.2, all others are v1
191
+ return '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD';
169
192
  case 5:
170
193
  // goerli
171
194
  return '0x4648a43B2C14Da09FdF82B161150d3F634f40491';
@@ -436,8 +459,8 @@ function encodeInputTokenOptions(planner, options) {
436
459
  }
437
460
  function mapApprovalProtocol(protocolAddress) {
438
461
  switch (protocolAddress.toLowerCase()) {
439
- case '0x00000000006c3852cbef3e08e8df289169ede581':
440
- // Seaport v1.1
462
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
463
+ // Seaport v1.5
441
464
  return OPENSEA_CONDUIT_SPENDER_ID;
442
465
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
443
466
  // Seaport v1.4
@@ -465,6 +488,8 @@ var SwapRouter = /*#__PURE__*/function () {
465
488
  // track value flow to require the right amount of native value
466
489
  var currentNativeValueInRouter = ethers.BigNumber.from(0);
467
490
  var transactionValue = ethers.BigNumber.from(0);
491
+ // tracks the input tokens (and ETH) used to buy NFTs to allow us to sweep
492
+ var nftInputTokens = new Set();
468
493
  for (var _iterator = _createForOfIteratorHelperLoose(trades), _step; !(_step = _iterator()).done;) {
469
494
  var trade = _step.value;
470
495
  /**
@@ -476,6 +501,15 @@ var SwapRouter = /*#__PURE__*/function () {
476
501
  allowRevert: allowRevert
477
502
  });
478
503
  var tradePrice = nftTrade.getTotalPrice();
504
+ if (nftTrade.market == exports.Market.Seaport) {
505
+ var seaportTrade = nftTrade;
506
+ var seaportInputTokens = seaportTrade.getInputTokens();
507
+ seaportInputTokens.forEach(function (inputToken) {
508
+ nftInputTokens.add(inputToken);
509
+ });
510
+ } else {
511
+ nftInputTokens.add(ETH_ADDRESS);
512
+ }
479
513
  // send enough native value to contract for NFT purchase
480
514
  if (currentNativeValueInRouter.lt(tradePrice)) {
481
515
  transactionValue = transactionValue.add(tradePrice.sub(currentNativeValueInRouter));
@@ -522,12 +556,16 @@ var SwapRouter = /*#__PURE__*/function () {
522
556
  }
523
557
  }
524
558
  // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades
525
- // or NFT trades with potential slippage (i.e. sudo)
526
- if (nftTrades.length > 0) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0]);
559
+ // or NFT trades with potential slippage (i.e. sudo).
560
+ // Note: NFTXV2 sends excess ETH to the caller (router), not the specified recipient
561
+ nftInputTokens.forEach(function (inputToken) {
562
+ planner.addCommand(CommandType.SWEEP, [inputToken, SENDER_AS_RECIPIENT, 0]);
563
+ });
527
564
  return SwapRouter.encodePlan(planner, transactionValue, config);
528
565
  }
529
566
  /**
530
567
  * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
568
+ * This version does not work correctly for Seaport ERC20->NFT purchases
531
569
  * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.
532
570
  * @param trades to produce call parameters for
533
571
  */;
@@ -595,29 +633,6 @@ var SwapRouter = /*#__PURE__*/function () {
595
633
  }();
596
634
  SwapRouter.INTERFACE = /*#__PURE__*/new abi$7.Interface(UniversalRouter_json.abi);
597
635
 
598
- var NFTTrade = function NFTTrade(market, orders) {
599
- this.tradeType = exports.RouterTradeType.NFTTrade;
600
- !(orders.length > 0) ? invariant(false, 'no buy Items') : void 0;
601
- this.market = market;
602
- this.orders = orders;
603
- };
604
- (function (Market) {
605
- Market["Foundation"] = "foundation";
606
- Market["LooksRareV2"] = "looksrareV2";
607
- Market["NFT20"] = "nft20";
608
- Market["NFTX"] = "nftx";
609
- Market["Seaport"] = "seaport";
610
- Market["Sudoswap"] = "Sudoswap";
611
- Market["Cryptopunks"] = "cryptopunks";
612
- Market["X2Y2"] = "x2y2";
613
- Market["Element"] = "element";
614
- })(exports.Market || (exports.Market = {}));
615
- (function (TokenType) {
616
- TokenType["ERC721"] = "ERC721";
617
- TokenType["ERC1155"] = "ERC1155";
618
- TokenType["Cryptopunk"] = "Cryptopunk";
619
- })(exports.TokenType || (exports.TokenType = {}));
620
-
621
636
  var CryptopunkTrade = /*#__PURE__*/function (_NFTTrade) {
622
637
  _inheritsLoose(CryptopunkTrade, _NFTTrade);
623
638
  function CryptopunkTrade(orders) {
@@ -4320,26 +4335,28 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4320
4335
  }
4321
4336
  var _proto = LooksRareV2Trade.prototype;
4322
4337
  _proto.encode = function encode(planner, config) {
4323
- for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4324
- var item = _step.value;
4325
- var _this$refactorAPIData = this.refactorAPIData(item),
4326
- takerBid = _this$refactorAPIData.takerBid,
4327
- makerOrder = _this$refactorAPIData.makerOrder,
4328
- makerSignature = _this$refactorAPIData.makerSignature,
4329
- value = _this$refactorAPIData.value,
4330
- merkleTree = _this$refactorAPIData.merkleTree;
4331
- var calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeTakerBid', [takerBid, makerOrder, makerSignature, merkleTree, ZERO_ADDRESS]);
4332
- planner.addCommand(CommandType.LOOKS_RARE_V2, [value, calldata], config.allowRevert);
4338
+ var _this$refactorAPIData = this.refactorAPIData(this.orders),
4339
+ takerBids = _this$refactorAPIData.takerBids,
4340
+ makerOrders = _this$refactorAPIData.makerOrders,
4341
+ makerSignatures = _this$refactorAPIData.makerSignatures,
4342
+ totalValue = _this$refactorAPIData.totalValue,
4343
+ merkleTrees = _this$refactorAPIData.merkleTrees;
4344
+ var calldata;
4345
+ if (this.orders.length == 1) {
4346
+ calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeTakerBid', [takerBids[0], makerOrders[0], makerSignatures[0], merkleTrees[0], ZERO_ADDRESS]);
4347
+ } else {
4348
+ calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeMultipleTakerBids', [takerBids, makerOrders, makerSignatures, merkleTrees, ZERO_ADDRESS, false]);
4333
4349
  }
4350
+ planner.addCommand(CommandType.LOOKS_RARE_V2, [totalValue, calldata], config.allowRevert);
4334
4351
  };
4335
4352
  _proto.getBuyItems = function getBuyItems() {
4336
4353
  var buyItems = [];
4337
- for (var _iterator2 = _createForOfIteratorHelperLoose(this.orders), _step2; !(_step2 = _iterator2()).done;) {
4338
- var item = _step2.value;
4354
+ for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4355
+ var item = _step.value;
4339
4356
  var tokenAddress = item.apiOrder.collection;
4340
4357
  var tokenType = item.apiOrder.collectionType == LooksRareV2Trade.ERC721_ORDER ? exports.TokenType.ERC721 : exports.TokenType.ERC1155;
4341
- for (var _iterator3 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step3; !(_step3 = _iterator3()).done;) {
4342
- var tokenId = _step3.value;
4358
+ for (var _iterator2 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step2; !(_step2 = _iterator2()).done;) {
4359
+ var tokenId = _step2.value;
4343
4360
  buyItems.push({
4344
4361
  tokenAddress: tokenAddress,
4345
4362
  tokenId: tokenId,
@@ -4351,30 +4368,38 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4351
4368
  };
4352
4369
  _proto.getTotalPrice = function getTotalPrice() {
4353
4370
  var total = ethers.BigNumber.from(0);
4354
- for (var _iterator4 = _createForOfIteratorHelperLoose(this.orders), _step4; !(_step4 = _iterator4()).done;) {
4355
- var item = _step4.value;
4371
+ for (var _iterator3 = _createForOfIteratorHelperLoose(this.orders), _step3; !(_step3 = _iterator3()).done;) {
4372
+ var item = _step3.value;
4356
4373
  total = total.add(item.apiOrder.price);
4357
4374
  }
4358
4375
  return total;
4359
4376
  };
4360
- _proto.refactorAPIData = function refactorAPIData(data) {
4361
- var makerOrder = _extends({}, data.apiOrder);
4362
- var makerSignature = data.apiOrder.signature;
4363
- var takerBid = {
4364
- recipient: data.taker,
4365
- additionalParameters: '0x'
4366
- };
4367
- var value = ethers.BigNumber.from(data.apiOrder.price);
4368
- var merkleTree = {
4369
- root: data.apiOrder.merkleRoot,
4370
- proof: data.apiOrder.merkleProof
4371
- };
4377
+ _proto.refactorAPIData = function refactorAPIData(orders) {
4378
+ var takerBids = [];
4379
+ var makerOrders = [];
4380
+ var makerSignatures = [];
4381
+ var totalValue = ethers.BigNumber.from(0);
4382
+ var merkleTrees = [];
4383
+ orders.forEach(function (order) {
4384
+ var _order$apiOrder$merkl, _order$apiOrder$merkl2;
4385
+ makerOrders.push(_extends({}, order.apiOrder));
4386
+ makerSignatures.push(order.apiOrder.signature);
4387
+ takerBids.push({
4388
+ recipient: order.taker,
4389
+ additionalParameters: '0x'
4390
+ });
4391
+ totalValue = totalValue.add(ethers.BigNumber.from(order.apiOrder.price));
4392
+ merkleTrees.push({
4393
+ root: (_order$apiOrder$merkl = order.apiOrder.merkleRoot) != null ? _order$apiOrder$merkl : '0x0000000000000000000000000000000000000000000000000000000000000000',
4394
+ proof: (_order$apiOrder$merkl2 = order.apiOrder.merkleProof) != null ? _order$apiOrder$merkl2 : []
4395
+ });
4396
+ });
4372
4397
  return {
4373
- takerBid: takerBid,
4374
- makerOrder: makerOrder,
4375
- makerSignature: makerSignature,
4376
- value: value,
4377
- merkleTree: merkleTree
4398
+ takerBids: takerBids,
4399
+ makerOrders: makerOrders,
4400
+ makerSignatures: makerSignatures,
4401
+ totalValue: totalValue,
4402
+ merkleTrees: merkleTrees
4378
4403
  };
4379
4404
  };
4380
4405
  return LooksRareV2Trade;
@@ -8034,13 +8059,28 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8034
8059
  }
8035
8060
  return buyItems;
8036
8061
  };
8062
+ _proto.getInputTokens = function getInputTokens() {
8063
+ var inputTokens = new Set();
8064
+ for (var _iterator7 = _createForOfIteratorHelperLoose(this.orders), _step7; !(_step7 = _iterator7()).done;) {
8065
+ var order = _step7.value;
8066
+ for (var _iterator8 = _createForOfIteratorHelperLoose(order.items), _step8; !(_step8 = _iterator8()).done;) {
8067
+ var item = _step8.value;
8068
+ for (var _iterator9 = _createForOfIteratorHelperLoose(item.parameters.consideration), _step9; !(_step9 = _iterator9()).done;) {
8069
+ var consideration = _step9.value;
8070
+ var token = consideration.token.toLowerCase();
8071
+ inputTokens.add(token);
8072
+ }
8073
+ }
8074
+ }
8075
+ return inputTokens;
8076
+ };
8037
8077
  _proto.getTotalOrderPrice = function getTotalOrderPrice(order, token) {
8038
8078
  if (token === void 0) {
8039
8079
  token = ETH_ADDRESS;
8040
8080
  }
8041
8081
  var totalOrderPrice = ethers.BigNumber.from(0);
8042
- for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
8043
- var item = _step7.value;
8082
+ for (var _iterator10 = _createForOfIteratorHelperLoose(order.items), _step10; !(_step10 = _iterator10()).done;) {
8083
+ var item = _step10.value;
8044
8084
  totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration, token));
8045
8085
  }
8046
8086
  return totalOrderPrice;
@@ -8050,10 +8090,10 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8050
8090
  token = ETH_ADDRESS;
8051
8091
  }
8052
8092
  var totalPrice = ethers.BigNumber.from(0);
8053
- for (var _iterator8 = _createForOfIteratorHelperLoose(this.orders), _step8; !(_step8 = _iterator8()).done;) {
8054
- var order = _step8.value;
8055
- for (var _iterator9 = _createForOfIteratorHelperLoose(order.items), _step9; !(_step9 = _iterator9()).done;) {
8056
- var item = _step9.value;
8093
+ for (var _iterator11 = _createForOfIteratorHelperLoose(this.orders), _step11; !(_step11 = _iterator11()).done;) {
8094
+ var order = _step11.value;
8095
+ for (var _iterator12 = _createForOfIteratorHelperLoose(order.items), _step12; !(_step12 = _iterator12()).done;) {
8096
+ var item = _step12.value;
8057
8097
  totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration, token));
8058
8098
  }
8059
8099
  }
@@ -8061,9 +8101,9 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8061
8101
  };
8062
8102
  _proto.commandMap = function commandMap(protocolAddress) {
8063
8103
  switch (protocolAddress.toLowerCase()) {
8064
- case '0x00000000006c3852cbef3e08e8df289169ede581':
8065
- // Seaport v1.1
8066
- return CommandType.SEAPORT;
8104
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
8105
+ // Seaport v1.5
8106
+ return CommandType.SEAPORT_V1_5;
8067
8107
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
8068
8108
  // Seaport v1.4
8069
8109
  return CommandType.SEAPORT_V1_4;
@@ -8118,7 +8158,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8118
8158
  };
8119
8159
  _proto.calculateValue = function calculateValue(considerations, token) {
8120
8160
  return considerations.reduce(function (amt, consideration) {
8121
- return consideration.token == token ? amt.add(consideration.startAmount) : amt;
8161
+ return consideration.token.toLowerCase() == token.toLowerCase() ? amt.add(consideration.startAmount) : amt;
8122
8162
  }, ethers.BigNumber.from(0));
8123
8163
  };
8124
8164
  return SeaportTrade;
@@ -10446,7 +10486,7 @@ var UnwrapWETH = /*#__PURE__*/function () {
10446
10486
  this.wethAddress = WETH_ADDRESS(chainId);
10447
10487
  this.amount = amount;
10448
10488
  if (!!permit2) {
10449
- !(permit2.details.token === this.wethAddress) ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : void 0;
10489
+ !(permit2.details.token.toLowerCase() === this.wethAddress.toLowerCase()) ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : void 0;
10450
10490
  !(permit2.details.amount >= amount) ? invariant(false, "Did not permit enough WETH for unwrapWETH transaction") : void 0;
10451
10491
  this.permit2Data = permit2;
10452
10492
  }