@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.
@@ -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
@@ -436,7 +459,7 @@ function encodeInputTokenOptions(planner, options) {
436
459
  }
437
460
  function mapApprovalProtocol(protocolAddress) {
438
461
  switch (protocolAddress.toLowerCase()) {
439
- case '0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC':
462
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
440
463
  // Seaport v1.5
441
464
  return OPENSEA_CONDUIT_SPENDER_ID;
442
465
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
@@ -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));
@@ -524,11 +558,14 @@ var SwapRouter = /*#__PURE__*/function () {
524
558
  // TODO: matches current logic for now, but should eventually only sweep for multiple NFT trades
525
559
  // or NFT trades with potential slippage (i.e. sudo).
526
560
  // Note: NFTXV2 sends excess ETH to the caller (router), not the specified recipient
527
- if (nftTrades.length > 0) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, SENDER_AS_RECIPIENT, 0]);
561
+ nftInputTokens.forEach(function (inputToken) {
562
+ planner.addCommand(CommandType.SWEEP, [inputToken, SENDER_AS_RECIPIENT, 0]);
563
+ });
528
564
  return SwapRouter.encodePlan(planner, transactionValue, config);
529
565
  }
530
566
  /**
531
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
532
569
  * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given swap.
533
570
  * @param trades to produce call parameters for
534
571
  */;
@@ -596,29 +633,6 @@ var SwapRouter = /*#__PURE__*/function () {
596
633
  }();
597
634
  SwapRouter.INTERFACE = /*#__PURE__*/new abi$7.Interface(UniversalRouter_json.abi);
598
635
 
599
- var NFTTrade = function NFTTrade(market, orders) {
600
- this.tradeType = exports.RouterTradeType.NFTTrade;
601
- !(orders.length > 0) ? invariant(false, 'no buy Items') : void 0;
602
- this.market = market;
603
- this.orders = orders;
604
- };
605
- (function (Market) {
606
- Market["Foundation"] = "foundation";
607
- Market["LooksRareV2"] = "looksrareV2";
608
- Market["NFT20"] = "nft20";
609
- Market["NFTX"] = "nftx";
610
- Market["Seaport"] = "seaport";
611
- Market["Sudoswap"] = "Sudoswap";
612
- Market["Cryptopunks"] = "cryptopunks";
613
- Market["X2Y2"] = "x2y2";
614
- Market["Element"] = "element";
615
- })(exports.Market || (exports.Market = {}));
616
- (function (TokenType) {
617
- TokenType["ERC721"] = "ERC721";
618
- TokenType["ERC1155"] = "ERC1155";
619
- TokenType["Cryptopunk"] = "Cryptopunk";
620
- })(exports.TokenType || (exports.TokenType = {}));
621
-
622
636
  var CryptopunkTrade = /*#__PURE__*/function (_NFTTrade) {
623
637
  _inheritsLoose(CryptopunkTrade, _NFTTrade);
624
638
  function CryptopunkTrade(orders) {
@@ -4321,26 +4335,28 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4321
4335
  }
4322
4336
  var _proto = LooksRareV2Trade.prototype;
4323
4337
  _proto.encode = function encode(planner, config) {
4324
- for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4325
- var item = _step.value;
4326
- var _this$refactorAPIData = this.refactorAPIData(item),
4327
- takerBid = _this$refactorAPIData.takerBid,
4328
- makerOrder = _this$refactorAPIData.makerOrder,
4329
- makerSignature = _this$refactorAPIData.makerSignature,
4330
- value = _this$refactorAPIData.value,
4331
- merkleTree = _this$refactorAPIData.merkleTree;
4332
- var calldata = LooksRareV2Trade.INTERFACE.encodeFunctionData('executeTakerBid', [takerBid, makerOrder, makerSignature, merkleTree, ZERO_ADDRESS]);
4333
- 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]);
4334
4349
  }
4350
+ planner.addCommand(CommandType.LOOKS_RARE_V2, [totalValue, calldata], config.allowRevert);
4335
4351
  };
4336
4352
  _proto.getBuyItems = function getBuyItems() {
4337
4353
  var buyItems = [];
4338
- for (var _iterator2 = _createForOfIteratorHelperLoose(this.orders), _step2; !(_step2 = _iterator2()).done;) {
4339
- var item = _step2.value;
4354
+ for (var _iterator = _createForOfIteratorHelperLoose(this.orders), _step; !(_step = _iterator()).done;) {
4355
+ var item = _step.value;
4340
4356
  var tokenAddress = item.apiOrder.collection;
4341
4357
  var tokenType = item.apiOrder.collectionType == LooksRareV2Trade.ERC721_ORDER ? exports.TokenType.ERC721 : exports.TokenType.ERC1155;
4342
- for (var _iterator3 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step3; !(_step3 = _iterator3()).done;) {
4343
- var tokenId = _step3.value;
4358
+ for (var _iterator2 = _createForOfIteratorHelperLoose(item.apiOrder.itemIds), _step2; !(_step2 = _iterator2()).done;) {
4359
+ var tokenId = _step2.value;
4344
4360
  buyItems.push({
4345
4361
  tokenAddress: tokenAddress,
4346
4362
  tokenId: tokenId,
@@ -4352,30 +4368,38 @@ var LooksRareV2Trade = /*#__PURE__*/function (_NFTTrade) {
4352
4368
  };
4353
4369
  _proto.getTotalPrice = function getTotalPrice() {
4354
4370
  var total = ethers.BigNumber.from(0);
4355
- for (var _iterator4 = _createForOfIteratorHelperLoose(this.orders), _step4; !(_step4 = _iterator4()).done;) {
4356
- var item = _step4.value;
4371
+ for (var _iterator3 = _createForOfIteratorHelperLoose(this.orders), _step3; !(_step3 = _iterator3()).done;) {
4372
+ var item = _step3.value;
4357
4373
  total = total.add(item.apiOrder.price);
4358
4374
  }
4359
4375
  return total;
4360
4376
  };
4361
- _proto.refactorAPIData = function refactorAPIData(data) {
4362
- var makerOrder = _extends({}, data.apiOrder);
4363
- var makerSignature = data.apiOrder.signature;
4364
- var takerBid = {
4365
- recipient: data.taker,
4366
- additionalParameters: '0x'
4367
- };
4368
- var value = ethers.BigNumber.from(data.apiOrder.price);
4369
- var merkleTree = {
4370
- root: data.apiOrder.merkleRoot,
4371
- proof: data.apiOrder.merkleProof
4372
- };
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
+ });
4373
4397
  return {
4374
- takerBid: takerBid,
4375
- makerOrder: makerOrder,
4376
- makerSignature: makerSignature,
4377
- value: value,
4378
- merkleTree: merkleTree
4398
+ takerBids: takerBids,
4399
+ makerOrders: makerOrders,
4400
+ makerSignatures: makerSignatures,
4401
+ totalValue: totalValue,
4402
+ merkleTrees: merkleTrees
4379
4403
  };
4380
4404
  };
4381
4405
  return LooksRareV2Trade;
@@ -8035,13 +8059,28 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8035
8059
  }
8036
8060
  return buyItems;
8037
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
+ };
8038
8077
  _proto.getTotalOrderPrice = function getTotalOrderPrice(order, token) {
8039
8078
  if (token === void 0) {
8040
8079
  token = ETH_ADDRESS;
8041
8080
  }
8042
8081
  var totalOrderPrice = ethers.BigNumber.from(0);
8043
- for (var _iterator7 = _createForOfIteratorHelperLoose(order.items), _step7; !(_step7 = _iterator7()).done;) {
8044
- var item = _step7.value;
8082
+ for (var _iterator10 = _createForOfIteratorHelperLoose(order.items), _step10; !(_step10 = _iterator10()).done;) {
8083
+ var item = _step10.value;
8045
8084
  totalOrderPrice = totalOrderPrice.add(this.calculateValue(item.parameters.consideration, token));
8046
8085
  }
8047
8086
  return totalOrderPrice;
@@ -8051,10 +8090,10 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8051
8090
  token = ETH_ADDRESS;
8052
8091
  }
8053
8092
  var totalPrice = ethers.BigNumber.from(0);
8054
- for (var _iterator8 = _createForOfIteratorHelperLoose(this.orders), _step8; !(_step8 = _iterator8()).done;) {
8055
- var order = _step8.value;
8056
- for (var _iterator9 = _createForOfIteratorHelperLoose(order.items), _step9; !(_step9 = _iterator9()).done;) {
8057
- 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;
8058
8097
  totalPrice = totalPrice.add(this.calculateValue(item.parameters.consideration, token));
8059
8098
  }
8060
8099
  }
@@ -8062,7 +8101,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8062
8101
  };
8063
8102
  _proto.commandMap = function commandMap(protocolAddress) {
8064
8103
  switch (protocolAddress.toLowerCase()) {
8065
- case '0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC':
8104
+ case '0x00000000000000adc04c56bf30ac9d3c0aaf14dc':
8066
8105
  // Seaport v1.5
8067
8106
  return CommandType.SEAPORT_V1_5;
8068
8107
  case '0x00000000000001ad428e4906ae43d8f9852d0dd6':
@@ -8119,7 +8158,7 @@ var SeaportTrade = /*#__PURE__*/function (_NFTTrade) {
8119
8158
  };
8120
8159
  _proto.calculateValue = function calculateValue(considerations, token) {
8121
8160
  return considerations.reduce(function (amt, consideration) {
8122
- return consideration.token == token ? amt.add(consideration.startAmount) : amt;
8161
+ return consideration.token.toLowerCase() == token.toLowerCase() ? amt.add(consideration.startAmount) : amt;
8123
8162
  }, ethers.BigNumber.from(0));
8124
8163
  };
8125
8164
  return SeaportTrade;
@@ -10447,7 +10486,7 @@ var UnwrapWETH = /*#__PURE__*/function () {
10447
10486
  this.wethAddress = WETH_ADDRESS(chainId);
10448
10487
  this.amount = amount;
10449
10488
  if (!!permit2) {
10450
- !(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;
10451
10490
  !(permit2.details.amount >= amount) ? invariant(false, "Did not permit enough WETH for unwrapWETH transaction") : void 0;
10452
10491
  this.permit2Data = permit2;
10453
10492
  }