@uniswap/universal-router-sdk 1.5.0-beta.2 → 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.
@@ -74,6 +74,31 @@ var RouterTradeType;
74
74
  RouterTradeType["UnwrapWETH"] = "UnwrapWETH";
75
75
  })(RouterTradeType || (RouterTradeType = {}));
76
76
 
77
+ var NFTTrade = function NFTTrade(market, orders) {
78
+ this.tradeType = RouterTradeType.NFTTrade;
79
+ !(orders.length > 0) ? process.env.NODE_ENV !== "production" ? invariant(false, 'no buy Items') : invariant(false) : void 0;
80
+ this.market = market;
81
+ this.orders = orders;
82
+ };
83
+ var Market;
84
+ (function (Market) {
85
+ Market["Foundation"] = "foundation";
86
+ Market["LooksRareV2"] = "looksrareV2";
87
+ Market["NFT20"] = "nft20";
88
+ Market["NFTX"] = "nftx";
89
+ Market["Seaport"] = "seaport";
90
+ Market["Sudoswap"] = "Sudoswap";
91
+ Market["Cryptopunks"] = "cryptopunks";
92
+ Market["X2Y2"] = "x2y2";
93
+ Market["Element"] = "element";
94
+ })(Market || (Market = {}));
95
+ var TokenType;
96
+ (function (TokenType) {
97
+ TokenType["ERC721"] = "ERC721";
98
+ TokenType["ERC1155"] = "ERC1155";
99
+ TokenType["Cryptopunk"] = "Cryptopunk";
100
+ })(TokenType || (TokenType = {}));
101
+
77
102
  var _ABI_DEFINITION;
78
103
  /**
79
104
  * CommandTypes
@@ -431,7 +456,7 @@ function encodeInputTokenOptions(planner, options) {
431
456
  }
432
457
  function mapApprovalProtocol(protocolAddress) {
433
458
  switch (protocolAddress.toLowerCase()) {
434
- case '0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC':
459
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
435
460
  // Seaport v1.5
436
461
  return OPENSEA_CONDUIT_SPENDER_ID;
437
462
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
@@ -460,6 +485,8 @@ var SwapRouter = /*#__PURE__*/function () {
460
485
  // track value flow to require the right amount of native value
461
486
  var currentNativeValueInRouter = BigNumber.from(0);
462
487
  var transactionValue = BigNumber.from(0);
488
+ // tracks the input tokens (and ETH) used to buy NFTs to allow us to sweep
489
+ var nftInputTokens = new Set();
463
490
  for (var _iterator = _createForOfIteratorHelperLoose(trades), _step; !(_step = _iterator()).done;) {
464
491
  var trade = _step.value;
465
492
  /**
@@ -471,6 +498,15 @@ var SwapRouter = /*#__PURE__*/function () {
471
498
  allowRevert: allowRevert
472
499
  });
473
500
  var tradePrice = nftTrade.getTotalPrice();
501
+ if (nftTrade.market == Market.Seaport) {
502
+ var seaportTrade = nftTrade;
503
+ var seaportInputTokens = seaportTrade.getInputTokens();
504
+ seaportInputTokens.forEach(function (inputToken) {
505
+ nftInputTokens.add(inputToken);
506
+ });
507
+ } else {
508
+ nftInputTokens.add(ETH_ADDRESS);
509
+ }
474
510
  // send enough native value to contract for NFT purchase
475
511
  if (currentNativeValueInRouter.lt(tradePrice)) {
476
512
  transactionValue = transactionValue.add(tradePrice.sub(currentNativeValueInRouter));
@@ -519,11 +555,14 @@ var SwapRouter = /*#__PURE__*/function () {
519
555
  // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades
520
556
  // or NFT trades with potential slippage (i.e. sudo).
521
557
  // Note: NFTXV2 sends excess ETH to the caller (router), not the specified recipient
522
- if (nftTrades.length > 0) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0]);
558
+ nftInputTokens.forEach(function (inputToken) {
559
+ planner.addCommand(CommandType.SWEEP, [inputToken, SENDER_AS_RECIPIENT, 0]);
560
+ });
523
561
  return SwapRouter.encodePlan(planner, transactionValue, config);
524
562
  }
525
563
  /**
526
564
  * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
565
+ * This version does not work correctly for Seaport ERC20->NFT purchases
527
566
  * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.
528
567
  * @param trades to produce call parameters for
529
568
  */;
@@ -591,31 +630,6 @@ var SwapRouter = /*#__PURE__*/function () {
591
630
  }();
592
631
  SwapRouter.INTERFACE = /*#__PURE__*/new Interface(abi$7);
593
632
 
594
- var NFTTrade = function NFTTrade(market, orders) {
595
- this.tradeType = RouterTradeType.NFTTrade;
596
- !(orders.length > 0) ? process.env.NODE_ENV !== "production" ? invariant(false, 'no buy Items') : invariant(false) : void 0;
597
- this.market = market;
598
- this.orders = orders;
599
- };
600
- var Market;
601
- (function (Market) {
602
- Market["Foundation"] = "foundation";
603
- Market["LooksRareV2"] = "looksrareV2";
604
- Market["NFT20"] = "nft20";
605
- Market["NFTX"] = "nftx";
606
- Market["Seaport"] = "seaport";
607
- Market["Sudoswap"] = "Sudoswap";
608
- Market["Cryptopunks"] = "cryptopunks";
609
- Market["X2Y2"] = "x2y2";
610
- Market["Element"] = "element";
611
- })(Market || (Market = {}));
612
- var TokenType;
613
- (function (TokenType) {
614
- TokenType["ERC721"] = "ERC721";
615
- TokenType["ERC1155"] = "ERC1155";
616
- TokenType["Cryptopunk"] = "Cryptopunk";
617
- })(TokenType || (TokenType = {}));
618
-
619
633
  var CryptopunkTrade = /*#__PURE__*/function (_NFTTrade) {
620
634
  _inheritsLoose(CryptopunkTrade, _NFTTrade);
621
635
  function CryptopunkTrade(orders) {
@@ -4318,26 +4332,28 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4318
4332
  }
4319
4333
  var _proto = LooksRareV2Trade.prototype;
4320
4334
  _proto.encode = function encode(planner, config) {
4321
- for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4322
- var item = _step.value;
4323
- var _this$refactorAPIData = this.refactorAPIData(item),
4324
- takerBid = _this$refactorAPIData.takerBid,
4325
- makerOrder = _this$refactorAPIData.makerOrder,
4326
- makerSignature = _this$refactorAPIData.makerSignature,
4327
- value = _this$refactorAPIData.value,
4328
- merkleTree = _this$refactorAPIData.merkleTree;
4329
- var calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeTakerBid', [takerBid, makerOrder, makerSignature, merkleTree, ZERO_ADDRESS]);
4330
- planner.addCommand(CommandType.LOOKS_RARE_V2, [value, calldata], config.allowRevert);
4335
+ var _this$refactorAPIData = this.refactorAPIData(this.orders),
4336
+ takerBids = _this$refactorAPIData.takerBids,
4337
+ makerOrders = _this$refactorAPIData.makerOrders,
4338
+ makerSignatures = _this$refactorAPIData.makerSignatures,
4339
+ totalValue = _this$refactorAPIData.totalValue,
4340
+ merkleTrees = _this$refactorAPIData.merkleTrees;
4341
+ var calldata;
4342
+ if (this.orders.length == 1) {
4343
+ calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeTakerBid', [takerBids[0], makerOrders[0], makerSignatures[0], merkleTrees[0], ZERO_ADDRESS]);
4344
+ } else {
4345
+ calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeMultipleTakerBids', [takerBids, makerOrders, makerSignatures, merkleTrees, ZERO_ADDRESS, false]);
4331
4346
  }
4347
+ planner.addCommand(CommandType.LOOKS_RARE_V2, [totalValue, calldata], config.allowRevert);
4332
4348
  };
4333
4349
  _proto.getBuyItems = function getBuyItems() {
4334
4350
  var buyItems = [];
4335
- for (var _iterator2 = _createForOfIteratorHelperLoose(this.orders), _step2; !(_step2 = _iterator2()).done;) {
4336
- var item = _step2.value;
4351
+ for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4352
+ var item = _step.value;
4337
4353
  var tokenAddress = item.apiOrder.collection;
4338
4354
  var tokenType = item.apiOrder.collectionType == LooksRareV2Trade.ERC721_ORDER ? TokenType.ERC721 : TokenType.ERC1155;
4339
- for (var _iterator3 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step3; !(_step3 = _iterator3()).done;) {
4340
- var tokenId = _step3.value;
4355
+ for (var _iterator2 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step2; !(_step2 = _iterator2()).done;) {
4356
+ var tokenId = _step2.value;
4341
4357
  buyItems.push({
4342
4358
  tokenAddress: tokenAddress,
4343
4359
  tokenId: tokenId,
@@ -4349,30 +4365,38 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4349
4365
  };
4350
4366
  _proto.getTotalPrice = function getTotalPrice() {
4351
4367
  var total = BigNumber.from(0);
4352
- for (var _iterator4 = _createForOfIteratorHelperLoose(this.orders), _step4; !(_step4 = _iterator4()).done;) {
4353
- var item = _step4.value;
4368
+ for (var _iterator3 = _createForOfIteratorHelperLoose(this.orders), _step3; !(_step3 = _iterator3()).done;) {
4369
+ var item = _step3.value;
4354
4370
  total = total.add(item.apiOrder.price);
4355
4371
  }
4356
4372
  return total;
4357
4373
  };
4358
- _proto.refactorAPIData = function refactorAPIData(data) {
4359
- var makerOrder = _extends({}, data.apiOrder);
4360
- var makerSignature = data.apiOrder.signature;
4361
- var takerBid = {
4362
- recipient: data.taker,
4363
- additionalParameters: '0x'
4364
- };
4365
- var value = BigNumber.from(data.apiOrder.price);
4366
- var merkleTree = {
4367
- root: data.apiOrder.merkleRoot,
4368
- proof: data.apiOrder.merkleProof
4369
- };
4374
+ _proto.refactorAPIData = function refactorAPIData(orders) {
4375
+ var takerBids = [];
4376
+ var makerOrders = [];
4377
+ var makerSignatures = [];
4378
+ var totalValue = BigNumber.from(0);
4379
+ var merkleTrees = [];
4380
+ orders.forEach(function (order) {
4381
+ var _order$apiOrder$merkl, _order$apiOrder$merkl2;
4382
+ makerOrders.push(_extends({}, order.apiOrder));
4383
+ makerSignatures.push(order.apiOrder.signature);
4384
+ takerBids.push({
4385
+ recipient: order.taker,
4386
+ additionalParameters: '0x'
4387
+ });
4388
+ totalValue = totalValue.add(BigNumber.from(order.apiOrder.price));
4389
+ merkleTrees.push({
4390
+ root: (_order$apiOrder$merkl = order.apiOrder.merkleRoot) != null ? _order$apiOrder$merkl : '0x0000000000000000000000000000000000000000000000000000000000000000',
4391
+ proof: (_order$apiOrder$merkl2 = order.apiOrder.merkleProof) != null ? _order$apiOrder$merkl2 : []
4392
+ });
4393
+ });
4370
4394
  return {
4371
- takerBid: takerBid,
4372
- makerOrder: makerOrder,
4373
- makerSignature: makerSignature,
4374
- value: value,
4375
- merkleTree: merkleTree
4395
+ takerBids: takerBids,
4396
+ makerOrders: makerOrders,
4397
+ makerSignatures: makerSignatures,
4398
+ totalValue: totalValue,
4399
+ merkleTrees: merkleTrees
4376
4400
  };
4377
4401
  };
4378
4402
  return LooksRareV2Trade;
@@ -8032,13 +8056,28 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8032
8056
  }
8033
8057
  return buyItems;
8034
8058
  };
8059
+ _proto.getInputTokens = function getInputTokens() {
8060
+ var inputTokens = new Set();
8061
+ for (var _iterator7 = _createForOfIteratorHelperLoose(this.orders), _step7; !(_step7 = _iterator7()).done;) {
8062
+ var order = _step7.value;
8063
+ for (var _iterator8 = _createForOfIteratorHelperLoose(order.items), _step8; !(_step8 = _iterator8()).done;) {
8064
+ var item = _step8.value;
8065
+ for (var _iterator9 = _createForOfIteratorHelperLoose(item.parameters.consideration), _step9; !(_step9 = _iterator9()).done;) {
8066
+ var consideration = _step9.value;
8067
+ var token = consideration.token.toLowerCase();
8068
+ inputTokens.add(token);
8069
+ }
8070
+ }
8071
+ }
8072
+ return inputTokens;
8073
+ };
8035
8074
  _proto.getTotalOrderPrice = function getTotalOrderPrice(order, token) {
8036
8075
  if (token === void 0) {
8037
8076
  token = ETH_ADDRESS;
8038
8077
  }
8039
8078
  var totalOrderPrice = BigNumber.from(0);
8040
- for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
8041
- var item = _step7.value;
8079
+ for (var _iterator10 = _createForOfIteratorHelperLoose(order.items), _step10; !(_step10 = _iterator10()).done;) {
8080
+ var item = _step10.value;
8042
8081
  totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration, token));
8043
8082
  }
8044
8083
  return totalOrderPrice;
@@ -8048,10 +8087,10 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8048
8087
  token = ETH_ADDRESS;
8049
8088
  }
8050
8089
  var totalPrice = BigNumber.from(0);
8051
- for (var _iterator8 = _createForOfIteratorHelperLoose(this.orders), _step8; !(_step8 = _iterator8()).done;) {
8052
- var order = _step8.value;
8053
- for (var _iterator9 = _createForOfIteratorHelperLoose(order.items), _step9; !(_step9 = _iterator9()).done;) {
8054
- var item = _step9.value;
8090
+ for (var _iterator11 = _createForOfIteratorHelperLoose(this.orders), _step11; !(_step11 = _iterator11()).done;) {
8091
+ var order = _step11.value;
8092
+ for (var _iterator12 = _createForOfIteratorHelperLoose(order.items), _step12; !(_step12 = _iterator12()).done;) {
8093
+ var item = _step12.value;
8055
8094
  totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration, token));
8056
8095
  }
8057
8096
  }
@@ -8059,7 +8098,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8059
8098
  };
8060
8099
  _proto.commandMap = function commandMap(protocolAddress) {
8061
8100
  switch (protocolAddress.toLowerCase()) {
8062
- case '0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC':
8101
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
8063
8102
  // Seaport v1.5
8064
8103
  return CommandType.SEAPORT_V1_5;
8065
8104
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
@@ -8116,7 +8155,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8116
8155
  };
8117
8156
  _proto.calculateValue = function calculateValue(considerations, token) {
8118
8157
  return considerations.reduce(function (amt, consideration) {
8119
- return consideration.token == token ? amt.add(consideration.startAmount) : amt;
8158
+ return consideration.token.toLowerCase() == token.toLowerCase() ? amt.add(consideration.startAmount) : amt;
8120
8159
  }, BigNumber.from(0));
8121
8160
  };
8122
8161
  return SeaportTrade;
@@ -10444,7 +10483,7 @@ var UnwrapWETH = /*#__PURE__*/function () {
10444
10483
  this.wethAddress = WETH_ADDRESS(chainId);
10445
10484
  this.amount = amount;
10446
10485
  if (!!permit2) {
10447
- !(permit2.details.token === this.wethAddress) ? process.env.NODE_ENV !== "production" ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : invariant(false) : void 0;
10486
+ !(permit2.details.token.toLowerCase() === this.wethAddress.toLowerCase()) ? process.env.NODE_ENV !== "production" ? invariant(false, "must be permitting WETH address: " + this.wethAddress) : invariant(false) : void 0;
10448
10487
  !(permit2.details.amount >= amount) ? process.env.NODE_ENV !== "production" ? invariant(false, "Did not permit enough WETH for unwrapWETH transaction") : invariant(false) : void 0;
10449
10488
  this.permit2Data = permit2;
10450
10489
  }