@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.
- package/README.md +174 -25
- package/dist/cjs/api/quoter/quote/quote.js +6 -20
- package/dist/cjs/api/quoter/quoter.api.spec.js +6 -103
- package/dist/cjs/api/quoter/quoter.request.js +4 -1
- package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
- package/dist/cjs/constants.js +19 -1
- package/dist/cjs/fusion-order/fusion-order.js +120 -0
- package/dist/cjs/fusion-order/fusion-order.spec.js +100 -0
- package/dist/cjs/fusion-order/index.js +1 -0
- package/dist/cjs/fusion-order/permit/constants.js +98 -0
- package/dist/cjs/fusion-order/permit/index.js +34 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.js +115 -0
- package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +232 -0
- package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +61 -0
- package/dist/cjs/fusion-order/permit/utils.js +35 -0
- package/dist/cjs/index.js +0 -3
- package/dist/cjs/sdk/README.md +14 -18
- package/dist/esm/api/quoter/quote/quote.js +6 -20
- package/dist/esm/api/quoter/quote/types.js +3 -15
- package/dist/esm/api/quoter/quoter.api.spec.js +6 -103
- package/dist/esm/api/quoter/quoter.request.js +4 -1
- package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
- package/dist/esm/constants.js +16 -1
- package/dist/esm/fusion-order/fusion-order.js +121 -1
- package/dist/esm/fusion-order/fusion-order.spec.js +100 -0
- package/dist/esm/fusion-order/index.js +1 -0
- package/dist/esm/fusion-order/permit/constants.js +71 -0
- package/dist/esm/fusion-order/permit/index.js +3 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.js +105 -0
- package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +228 -0
- package/dist/esm/fusion-order/permit/transfer-from-suffix.js +38 -0
- package/dist/esm/fusion-order/permit/utils.js +12 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/README.md +14 -18
- package/dist/types/src/api/quoter/quote/quote.d.ts +2 -3
- package/dist/types/src/api/quoter/quote/types.d.ts +1 -6
- package/dist/types/src/api/quoter/quoter.request.d.ts +3 -3
- package/dist/types/src/api/quoter/types.d.ts +2 -2
- package/dist/types/src/constants.d.ts +1 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +6 -0
- package/dist/types/src/fusion-order/index.d.ts +1 -0
- package/dist/types/src/fusion-order/permit/constants.d.ts +7 -0
- package/dist/types/src/fusion-order/permit/index.d.ts +3 -0
- package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +11 -0
- package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +10 -0
- package/dist/types/src/fusion-order/permit/utils.d.ts +3 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/sdk/types.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- 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
|
+
}();
|