@1inch/fusion-sdk 2.4.7-rc.1 → 2.4.7-rc.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.
Files changed (51) hide show
  1. package/README.md +174 -25
  2. package/dist/cjs/api/quoter/quote/quote.js +6 -20
  3. package/dist/cjs/api/quoter/quoter.api.spec.js +6 -103
  4. package/dist/cjs/api/quoter/quoter.request.js +4 -1
  5. package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
  6. package/dist/cjs/constants.js +19 -1
  7. package/dist/cjs/fusion-order/fusion-order.js +120 -0
  8. package/dist/cjs/fusion-order/fusion-order.spec.js +100 -0
  9. package/dist/cjs/fusion-order/index.js +1 -0
  10. package/dist/cjs/fusion-order/permit/constants.js +98 -0
  11. package/dist/cjs/fusion-order/permit/index.js +34 -0
  12. package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
  13. package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
  14. package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +61 -0
  15. package/dist/cjs/fusion-order/permit/utils.js +35 -0
  16. package/dist/cjs/index.js +0 -3
  17. package/dist/cjs/sdk/README.md +14 -18
  18. package/dist/esm/api/quoter/quote/quote.js +6 -20
  19. package/dist/esm/api/quoter/quote/types.js +3 -15
  20. package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
  21. package/dist/esm/api/quoter/quoter.request.js +4 -1
  22. package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
  23. package/dist/esm/constants.js +16 -1
  24. package/dist/esm/fusion-order/fusion-order.js +121 -1
  25. package/dist/esm/fusion-order/fusion-order.spec.js +100 -0
  26. package/dist/esm/fusion-order/index.js +1 -0
  27. package/dist/esm/fusion-order/permit/constants.js +71 -0
  28. package/dist/esm/fusion-order/permit/index.js +3 -0
  29. package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
  30. package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
  31. package/dist/esm/fusion-order/permit/transfer-from-suffix.js +38 -0
  32. package/dist/esm/fusion-order/permit/utils.js +12 -0
  33. package/dist/esm/index.js +1 -1
  34. package/dist/esm/package.json +1 -1
  35. package/dist/esm/sdk/README.md +14 -18
  36. package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
  37. package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
  38. package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
  39. package/dist/types/src/api/quoter/types.d.ts +2 -2
  40. package/dist/types/src/constants.d.ts +1 -0
  41. package/dist/types/src/fusion-order/fusion-order.d.ts +6 -0
  42. package/dist/types/src/fusion-order/index.d.ts +1 -0
  43. package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
  44. package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
  45. package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
  46. package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
  47. package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
  48. package/dist/types/src/index.d.ts +2 -2
  49. package/dist/types/src/sdk/types.d.ts +3 -3
  50. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  51. package/package.json +3 -3
@@ -9,10 +9,14 @@ Object.defineProperty(exports, "FusionOrder", {
9
9
  }
10
10
  });
11
11
  var _limitordersdk = require("@1inch/limit-order-sdk");
12
+ var _byteutils = require("@1inch/byte-utils");
12
13
  var _assert = /*#__PURE__*/ _interop_require_default(require("assert"));
13
14
  var _fusionextension = require("./fusion-extension.js");
14
15
  var _sourcetrack = require("./source-track.js");
15
16
  var _surplusparams = require("./surplus-params.js");
17
+ var _permittransferfrom = require("./permit/permit-transfer-from.js");
18
+ var _utils = require("./permit/utils.js");
19
+ var _transferfromsuffix = require("./permit/transfer-from-suffix.js");
16
20
  var _index = require("../amount-calculator/auction-calculator/index.js");
17
21
  var _constants = require("../constants.js");
18
22
  var _amounts = require("../utils/amounts.js");
@@ -50,6 +54,13 @@ function _define_property(obj, key, value) {
50
54
  }
51
55
  return obj;
52
56
  }
57
+ function _instanceof(left, right) {
58
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
59
+ return !!right[Symbol.hasInstance](left);
60
+ } else {
61
+ return left instanceof right;
62
+ }
63
+ }
53
64
  function _interop_require_default(obj) {
54
65
  return obj && obj.__esModule ? obj : {
55
66
  default: obj
@@ -177,6 +188,9 @@ var FusionOrder = /*#__PURE__*/ function() {
177
188
  {
178
189
  key: "makerAsset",
179
190
  get: function get() {
191
+ if (this.isTransferPermit()) {
192
+ return this.decodeTransferPermitSuffix().token;
193
+ }
180
194
  return this.inner.makerAsset;
181
195
  }
182
196
  },
@@ -273,6 +287,48 @@ var FusionOrder = /*#__PURE__*/ function() {
273
287
  return this.inner.salt;
274
288
  }
275
289
  },
290
+ {
291
+ key: "isTransferPermit",
292
+ value: /**
293
+ * Returns true if the order uses a Permit2 transfer permit via Permit2Proxy.
294
+ * Decodes `makerAssetSuffix` and validates the Permit2 ABI structure.
295
+ *
296
+ * @see FusionOrder.withTransferPermit
297
+ * @see FusionOrder.createTransferPermit
298
+ */ function isTransferPermit() {
299
+ try {
300
+ this.decodeTransferPermitSuffix();
301
+ return true;
302
+ } catch (e) {
303
+ return false;
304
+ }
305
+ }
306
+ },
307
+ {
308
+ key: "withTransferPermit",
309
+ value: function withTransferPermit(permit, signature) {
310
+ var suffix = permit.getTransferFromSuffix(signature);
311
+ var currentExtension = this.inner.extension;
312
+ var newExtension = new _limitordersdk.Extension(_object_spread_props(_object_spread({}, currentExtension), {
313
+ makerAssetSuffix: suffix
314
+ }));
315
+ this.inner.makerTraits.disablePermit2();
316
+ var baseSalt = this.inner.salt >> 160n;
317
+ var newSalt = _limitordersdk.LimitOrder.buildSalt(newExtension, baseSalt);
318
+ this.inner = new _limitordersdk.LimitOrder({
319
+ maker: this.inner.maker,
320
+ makerAsset: permit.spender,
321
+ takerAsset: this.inner.takerAsset,
322
+ makingAmount: this.inner.makingAmount,
323
+ takingAmount: this.inner.takingAmount,
324
+ receiver: this.inner.receiver,
325
+ salt: newSalt
326
+ }, this.inner.makerTraits, newExtension, {
327
+ optimizeReceiverAddress: false
328
+ });
329
+ return this;
330
+ }
331
+ },
276
332
  {
277
333
  key: "build",
278
334
  value: function build() {
@@ -468,6 +524,67 @@ var FusionOrder = /*#__PURE__*/ function() {
468
524
  */ function nativeSignature(maker) {
469
525
  return this.inner.nativeSignature(maker);
470
526
  }
527
+ },
528
+ {
529
+ key: "createTransferPermit",
530
+ value: /**
531
+ * Creates a Permit2 `PermitTransferFrom` object for the order's maker asset.
532
+ *
533
+ * Can only be used for orders where `multipleFillsAllowed` is `false`.
534
+ *
535
+ * The returned permit authorizes the `permit2Proxy` address (as spender)
536
+ * to transfer up to `makingAmount` of the `makerAsset` token,
537
+ * with a random 256-bit nonce and the order's deadline.
538
+ *
539
+ * The resulting permit can be signed and then attached to the order
540
+ * via {@link FusionOrder.withTransferPermit}.
541
+ *
542
+ * @param chainId - The chain ID used to resolve the default Permit2Proxy address
543
+ * @param permit2Proxy - Optional address of the Permit2Proxy contract that will act as spender.
544
+ * Defaults to the built-in address for the given `chainId`.
545
+ * @returns A {@link PermitTransferFrom} instance that can be signed and attached to the order
546
+ *
547
+ * @throws If `multipleFillsAllowed` is `true`
548
+ *
549
+ * @see FusionOrder.withTransferPermit
550
+ */ function createTransferPermit(chainIdOrPermit2Proxy, permit2Proxy) {
551
+ (0, _assert.default)(!this.multipleFillsAllowed, 'transfer permit can be used only for orders where multipleFillsAllowed=false');
552
+ var spender = _instanceof(chainIdOrPermit2Proxy, _limitordersdk.Address) ? chainIdOrPermit2Proxy : permit2Proxy !== null && permit2Proxy !== void 0 ? permit2Proxy : (0, _utils.getPermit2ProxyAddress)(chainIdOrPermit2Proxy);
553
+ return new _permittransferfrom.PermitTransferFrom(this.makerAsset, this.makingAmount, spender, (0, _limitordersdk.randBigInt)(_byteutils.UINT_256_MAX), this.deadline);
554
+ }
555
+ },
556
+ {
557
+ key: "restoreMakerAssetSuffix",
558
+ value: /**
559
+ * Restores the original `makerAssetSuffix` that `FusionExtension.build()` does not preserve.
560
+ * Recomputes the salt to match the patched extension hash.
561
+ */ function restoreMakerAssetSuffix(makerAssetSuffix) {
562
+ var patchedExtension = new _limitordersdk.Extension(_object_spread_props(_object_spread({}, this.inner.extension), {
563
+ makerAssetSuffix: makerAssetSuffix
564
+ }));
565
+ var baseSalt = this.inner.salt >> 160n;
566
+ this.inner = new _limitordersdk.LimitOrder({
567
+ maker: this.inner.maker,
568
+ makerAsset: this.inner.makerAsset,
569
+ takerAsset: this.inner.takerAsset,
570
+ makingAmount: this.inner.makingAmount,
571
+ takingAmount: this.inner.takingAmount,
572
+ receiver: this.inner.receiver,
573
+ salt: _limitordersdk.LimitOrder.buildSalt(patchedExtension, baseSalt)
574
+ }, this.inner.makerTraits, patchedExtension, {
575
+ optimizeReceiverAddress: false
576
+ });
577
+ }
578
+ },
579
+ {
580
+ key: "decodeTransferPermitSuffix",
581
+ value: function decodeTransferPermitSuffix() {
582
+ var suffix = this.inner.extension.makerAssetSuffix;
583
+ if (suffix === _constants.ZX) {
584
+ throw new Error('no makerAssetSuffix');
585
+ }
586
+ return (0, _transferfromsuffix.decodeTransferFromSuffix)(suffix);
587
+ }
471
588
  }
472
589
  ], [
473
590
  {
@@ -547,6 +664,9 @@ var FusionOrder = /*#__PURE__*/ function() {
547
664
  fees: extra === null || extra === void 0 ? void 0 : extra.fees,
548
665
  optimizeReceiverAddress: true
549
666
  });
667
+ if (extension.makerAssetSuffix !== _constants.ZX) {
668
+ fusionOrder.restoreMakerAssetSuffix(extension.makerAssetSuffix);
669
+ }
550
670
  (0, _assert.default)(providedSalt === fusionOrder.salt, 'invalid salt for passed extension');
551
671
  return fusionOrder;
552
672
  }
@@ -465,4 +465,104 @@ describe('FusionOrder Native', function() {
465
465
  });
466
466
  expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
467
467
  });
468
+ describe('isTransferPermit', function() {
469
+ var extensionContract = new _limitordersdk.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
470
+ var permit2Proxy = new _limitordersdk.Address('0x1234567890abcdef1234567890abcdef12345678');
471
+ var baseOrder = function() {
472
+ return _fusionorder.FusionOrder.new(extensionContract, {
473
+ makerAsset: new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
474
+ takerAsset: new _limitordersdk.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
475
+ makingAmount: (0, _ethers.parseEther)('1'),
476
+ takingAmount: (0, _ethers.parseUnits)('1000', 6),
477
+ maker: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa')
478
+ }, {
479
+ auction: new _index.AuctionDetails({
480
+ duration: 180n,
481
+ startTime: 1673548149n,
482
+ initialRateBump: 0,
483
+ points: []
484
+ }),
485
+ whitelist: _index1.Whitelist.new(1673548139n, [
486
+ {
487
+ address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
488
+ allowFrom: 0n
489
+ }
490
+ ]),
491
+ surplus: _surplusparams.SurplusParams.NO_FEE
492
+ }, {
493
+ allowPartialFills: false,
494
+ allowMultipleFills: false,
495
+ nonce: 1n
496
+ });
497
+ };
498
+ it('should return false for regular order', function() {
499
+ var order = _fusionorder.FusionOrder.new(extensionContract, {
500
+ makerAsset: new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
501
+ takerAsset: new _limitordersdk.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
502
+ makingAmount: (0, _ethers.parseEther)('1'),
503
+ takingAmount: (0, _ethers.parseUnits)('1000', 6),
504
+ maker: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa')
505
+ }, {
506
+ auction: new _index.AuctionDetails({
507
+ duration: 180n,
508
+ startTime: 1673548149n,
509
+ initialRateBump: 0,
510
+ points: []
511
+ }),
512
+ whitelist: _index1.Whitelist.new(1673548139n, [
513
+ {
514
+ address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
515
+ allowFrom: 0n
516
+ }
517
+ ]),
518
+ surplus: _surplusparams.SurplusParams.NO_FEE
519
+ });
520
+ expect(order.isTransferPermit()).toBe(false);
521
+ });
522
+ it('should return true after withTransferPermit', function() {
523
+ var order = baseOrder();
524
+ var permit = order.createTransferPermit(permit2Proxy);
525
+ var fakeSignature = '0x' + 'ab'.repeat(65);
526
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
527
+ expect(orderWithPermit.isTransferPermit()).toBe(true);
528
+ });
529
+ it('should return real token as makerAsset after withTransferPermit', function() {
530
+ var weth = new _limitordersdk.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');
531
+ var order = baseOrder();
532
+ var permit = order.createTransferPermit(permit2Proxy);
533
+ var fakeSignature = '0x' + 'ab'.repeat(65);
534
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
535
+ expect(orderWithPermit.makerAsset).toEqual(weth);
536
+ });
537
+ it('should round-trip Permit2 order through fromDataAndExtension', function() {
538
+ var order = baseOrder();
539
+ var permit = order.createTransferPermit(permit2Proxy);
540
+ var fakeSignature = '0x' + 'ab'.repeat(65);
541
+ var orderWithPermit = order.withTransferPermit(permit, fakeSignature);
542
+ var built = orderWithPermit.build();
543
+ var rebuilt = _fusionorder.FusionOrder.fromDataAndExtension(built, orderWithPermit.extension);
544
+ expect(rebuilt.isTransferPermit()).toBe(true);
545
+ expect(rebuilt.makerAsset).toEqual(orderWithPermit.makerAsset);
546
+ expect(rebuilt.salt).toEqual(orderWithPermit.salt);
547
+ expect(rebuilt.build()).toEqual(built);
548
+ });
549
+ it('should reject tampered makerAssetSuffix via salt check', function() {
550
+ var order = baseOrder();
551
+ var ext = order.extension;
552
+ var tampered = new _limitordersdk.Extension({
553
+ makerAssetSuffix: '0xdeadbeef',
554
+ takerAssetSuffix: ext.takerAssetSuffix,
555
+ makingAmountData: ext.makingAmountData,
556
+ takingAmountData: ext.takingAmountData,
557
+ predicate: ext.predicate,
558
+ makerPermit: ext.makerPermit,
559
+ preInteraction: ext.preInteraction,
560
+ postInteraction: ext.postInteraction,
561
+ customData: ext.customData
562
+ });
563
+ expect(function() {
564
+ return _fusionorder.FusionOrder.fromDataAndExtension(order.build(), tampered);
565
+ }).toThrow('invalid salt for passed extension');
566
+ });
567
+ });
468
568
  });
@@ -16,6 +16,7 @@ _export_star(require("./fees/index.js"), exports);
16
16
  var _constants = require("./constants.js");
17
17
  _export_star(require("./surplus-params.js"), exports);
18
18
  _export_star(require("./cancellation-auction.js"), exports);
19
+ _export_star(require("./permit/index.js"), exports);
19
20
  function _export_star(from, to) {
20
21
  Object.keys(from).forEach(function(k) {
21
22
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ PERMIT2_ADDRESSES: function() {
13
+ return PERMIT2_ADDRESSES;
14
+ },
15
+ PERMIT2_DOMAIN_NAME: function() {
16
+ return PERMIT2_DOMAIN_NAME;
17
+ },
18
+ PERMIT2_PROXY_ADDRESSES: function() {
19
+ return PERMIT2_PROXY_ADDRESSES;
20
+ },
21
+ PERMIT_TRANSFER_FROM_TYPES: function() {
22
+ return PERMIT_TRANSFER_FROM_TYPES;
23
+ },
24
+ TOKEN_PERMISSIONS: function() {
25
+ return TOKEN_PERMISSIONS;
26
+ }
27
+ });
28
+ var _constants = require("../../constants.js");
29
+ function _define_property(obj, key, value) {
30
+ if (key in obj) {
31
+ Object.defineProperty(obj, key, {
32
+ value: value,
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true
36
+ });
37
+ } else {
38
+ obj[key] = value;
39
+ }
40
+ return obj;
41
+ }
42
+ function _object_spread(target) {
43
+ for(var i = 1; i < arguments.length; i++){
44
+ var source = arguments[i] != null ? arguments[i] : {};
45
+ var ownKeys = Object.keys(source);
46
+ if (typeof Object.getOwnPropertySymbols === "function") {
47
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
48
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
49
+ }));
50
+ }
51
+ ownKeys.forEach(function(key) {
52
+ _define_property(target, key, source[key]);
53
+ });
54
+ }
55
+ return target;
56
+ }
57
+ var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
58
+ var PERMIT2_ADDRESS_ZK = '0x0000000000225e31d15943971f47ad3022f714fa';
59
+ var _obj;
60
+ var PERMIT2_ADDRESSES = (_obj = {}, _define_property(_obj, _constants.NetworkEnum.ZKSYNC, PERMIT2_ADDRESS_ZK), _define_property(_obj, _constants.NetworkEnum.ARBITRUM, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.ETHEREUM, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.POLYGON, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.BINANCE, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.AVALANCHE, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.OPTIMISM, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.FANTOM, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.GNOSIS, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.COINBASE, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.LINEA, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.SONIC, PERMIT2_ADDRESS), _define_property(_obj, _constants.NetworkEnum.UNICHAIN, PERMIT2_ADDRESS), _obj);
61
+ // todo: update
62
+ var PERMIT2_PROXY_ADDRESS = '0xcf56da25062c954b252515244dfefb739c254c23';
63
+ var PERMIT2_PROXY_ADDRESS_ZK = '0x0000000000000000000000000000000000000000';
64
+ var _obj1;
65
+ var PERMIT2_PROXY_ADDRESSES = (_obj1 = {}, _define_property(_obj1, _constants.NetworkEnum.ZKSYNC, PERMIT2_PROXY_ADDRESS_ZK), _define_property(_obj1, _constants.NetworkEnum.ARBITRUM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.ETHEREUM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.POLYGON, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.BINANCE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.AVALANCHE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.OPTIMISM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.FANTOM, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.GNOSIS, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.COINBASE, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.LINEA, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.SONIC, PERMIT2_PROXY_ADDRESS), _define_property(_obj1, _constants.NetworkEnum.UNICHAIN, PERMIT2_PROXY_ADDRESS), _obj1);
66
+ var PERMIT2_DOMAIN_NAME = 'Permit2';
67
+ var TOKEN_PERMISSIONS = {
68
+ TokenPermissions: [
69
+ {
70
+ name: 'token',
71
+ type: 'address'
72
+ },
73
+ {
74
+ name: 'amount',
75
+ type: 'uint256'
76
+ }
77
+ ]
78
+ };
79
+ var PERMIT_TRANSFER_FROM_TYPES = _object_spread({
80
+ PermitTransferFrom: [
81
+ {
82
+ name: 'permitted',
83
+ type: 'TokenPermissions'
84
+ },
85
+ {
86
+ name: 'spender',
87
+ type: 'address'
88
+ },
89
+ {
90
+ name: 'nonce',
91
+ type: 'uint256'
92
+ },
93
+ {
94
+ name: 'deadline',
95
+ type: 'uint256'
96
+ }
97
+ ]
98
+ }, TOKEN_PERMISSIONS);
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ getPermit2Address: function() {
13
+ return _utils.getPermit2Address;
14
+ },
15
+ getPermit2ProxyAddress: function() {
16
+ return _utils.getPermit2ProxyAddress;
17
+ }
18
+ });
19
+ _export_star(require("./permit-transfer-from.js"), exports);
20
+ _export_star(require("./transfer-from-suffix.js"), exports);
21
+ var _utils = require("./utils.js");
22
+ function _export_star(from, to) {
23
+ Object.keys(from).forEach(function(k) {
24
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
25
+ Object.defineProperty(to, k, {
26
+ enumerable: true,
27
+ get: function() {
28
+ return from[k];
29
+ }
30
+ });
31
+ }
32
+ });
33
+ return from;
34
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PermitTransferFrom", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PermitTransferFrom;
9
+ }
10
+ });
11
+ var _constants = require("./constants.js");
12
+ var _utils = require("./utils.js");
13
+ var _transferfromsuffix = require("./transfer-from-suffix.js");
14
+ function _class_call_check(instance, Constructor) {
15
+ if (!(instance instanceof Constructor)) {
16
+ throw new TypeError("Cannot call a class as a function");
17
+ }
18
+ }
19
+ function _defineProperties(target, props) {
20
+ for(var i = 0; i < props.length; i++){
21
+ var descriptor = props[i];
22
+ descriptor.enumerable = descriptor.enumerable || false;
23
+ descriptor.configurable = true;
24
+ if ("value" in descriptor) descriptor.writable = true;
25
+ Object.defineProperty(target, descriptor.key, descriptor);
26
+ }
27
+ }
28
+ function _create_class(Constructor, protoProps, staticProps) {
29
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
30
+ if (staticProps) _defineProperties(Constructor, staticProps);
31
+ return Constructor;
32
+ }
33
+ function _define_property(obj, key, value) {
34
+ if (key in obj) {
35
+ Object.defineProperty(obj, key, {
36
+ value: value,
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true
40
+ });
41
+ } else {
42
+ obj[key] = value;
43
+ }
44
+ return obj;
45
+ }
46
+ function _object_spread(target) {
47
+ for(var i = 1; i < arguments.length; i++){
48
+ var source = arguments[i] != null ? arguments[i] : {};
49
+ var ownKeys = Object.keys(source);
50
+ if (typeof Object.getOwnPropertySymbols === "function") {
51
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
52
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
53
+ }));
54
+ }
55
+ ownKeys.forEach(function(key) {
56
+ _define_property(target, key, source[key]);
57
+ });
58
+ }
59
+ return target;
60
+ }
61
+ var PermitTransferFrom = /*#__PURE__*/ function() {
62
+ "use strict";
63
+ function PermitTransferFrom(token, maxSpendAmount, spender, nonce, deadline) {
64
+ _class_call_check(this, PermitTransferFrom);
65
+ _define_property(this, "token", void 0);
66
+ _define_property(this, "maxSpendAmount", void 0);
67
+ _define_property(this, "spender", void 0);
68
+ _define_property(this, "nonce", void 0);
69
+ _define_property(this, "deadline", void 0);
70
+ this.token = token;
71
+ this.maxSpendAmount = maxSpendAmount;
72
+ this.spender = spender;
73
+ this.nonce = nonce;
74
+ this.deadline = deadline;
75
+ }
76
+ _create_class(PermitTransferFrom, [
77
+ {
78
+ key: "getTypedData",
79
+ value: function getTypedData(chainId) {
80
+ var permit2Address = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : (0, _utils.getPermit2Address)(chainId);
81
+ return {
82
+ primaryType: 'PermitTransferFrom',
83
+ types: _object_spread({}, _constants.PERMIT_TRANSFER_FROM_TYPES),
84
+ domain: {
85
+ name: _constants.PERMIT2_DOMAIN_NAME,
86
+ chainId: chainId,
87
+ verifyingContract: permit2Address
88
+ },
89
+ message: {
90
+ permitted: {
91
+ token: this.token.toString(),
92
+ amount: this.maxSpendAmount
93
+ },
94
+ spender: this.spender.toString(),
95
+ nonce: this.nonce,
96
+ deadline: this.deadline
97
+ }
98
+ };
99
+ }
100
+ },
101
+ {
102
+ key: "getTransferFromSuffix",
103
+ value: /**
104
+ * ABI-encodes the Permit2 suffix appended to `transferFrom(from,to,amount)` calldata.
105
+ *
106
+ * The limit order protocol calls `_callTransferFromWithSuffix` on the Permit2Proxy,
107
+ * which has `func_nZHTch(address,address,uint256,((address,uint256),uint256,uint256),bytes)`
108
+ * with selector 0x23b872dd (same as transferFrom). The suffix is everything after (from,to,amount).
109
+ */ function getTransferFromSuffix(signature) {
110
+ return (0, _transferfromsuffix.encodeTransferFromSuffix)(this.token, this.maxSpendAmount, this.nonce, this.deadline, signature);
111
+ }
112
+ }
113
+ ]);
114
+ return PermitTransferFrom;
115
+ }();