@1inch/fusion-sdk 2.4.7-rc.3 → 2.4.8-rc.0
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 +25 -174
- package/dist/cjs/api/quoter/quote/quote.js +20 -6
- package/dist/cjs/api/quoter/quoter.api.spec.js +103 -6
- package/dist/cjs/api/quoter/quoter.request.js +1 -4
- package/dist/cjs/api/quoter/quoter.request.spec.js +2 -8
- package/dist/cjs/constants.js +1 -19
- package/dist/cjs/fusion-order/fusion-extension.js +10 -3
- package/dist/cjs/fusion-order/fusion-order.js +5 -120
- package/dist/cjs/fusion-order/fusion-order.spec.js +124 -93
- package/dist/cjs/fusion-order/index.js +0 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/sdk/README.md +18 -14
- package/dist/esm/api/quoter/quote/quote.js +20 -6
- package/dist/esm/api/quoter/quote/types.js +15 -3
- package/dist/esm/api/quoter/quoter.api.spec.js +103 -6
- package/dist/esm/api/quoter/quoter.request.js +1 -4
- package/dist/esm/api/quoter/quoter.request.spec.js +2 -8
- package/dist/esm/constants.js +1 -16
- package/dist/esm/fusion-order/fusion-extension.js +10 -3
- package/dist/esm/fusion-order/fusion-order.js +6 -121
- package/dist/esm/fusion-order/fusion-order.spec.js +125 -94
- package/dist/esm/fusion-order/index.js +0 -1
- package/dist/esm/fusion-order/types.js +5 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/README.md +18 -14
- package/dist/types/src/api/quoter/quote/quote.d.ts +3 -2
- package/dist/types/src/api/quoter/quote/types.d.ts +6 -1
- 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 +0 -1
- package/dist/types/src/fusion-order/fusion-extension.d.ts +2 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +0 -6
- package/dist/types/src/fusion-order/index.d.ts +0 -1
- package/dist/types/src/fusion-order/types.d.ts +1 -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 +4 -4
- package/dist/cjs/fusion-order/permit/constants.js +0 -98
- package/dist/cjs/fusion-order/permit/index.js +0 -34
- package/dist/cjs/fusion-order/permit/permit-transfer-from.js +0 -115
- package/dist/cjs/fusion-order/permit/permit-transfer-from.spec.js +0 -232
- package/dist/cjs/fusion-order/permit/transfer-from-suffix.js +0 -61
- package/dist/cjs/fusion-order/permit/utils.js +0 -35
- package/dist/esm/fusion-order/permit/constants.js +0 -71
- package/dist/esm/fusion-order/permit/index.js +0 -3
- package/dist/esm/fusion-order/permit/permit-transfer-from.js +0 -105
- package/dist/esm/fusion-order/permit/permit-transfer-from.spec.js +0 -228
- package/dist/esm/fusion-order/permit/transfer-from-suffix.js +0 -38
- package/dist/esm/fusion-order/permit/utils.js +0 -12
- package/dist/types/src/fusion-order/permit/constants.d.ts +0 -7
- package/dist/types/src/fusion-order/permit/index.d.ts +0 -3
- package/dist/types/src/fusion-order/permit/permit-transfer-from.d.ts +0 -11
- package/dist/types/src/fusion-order/permit/transfer-from-suffix.d.ts +0 -10
- package/dist/types/src/fusion-order/permit/utils.d.ts +0 -3
|
@@ -16,6 +16,7 @@ var _whitelist = require("./whitelist/whitelist.js");
|
|
|
16
16
|
var _surplusparams = require("./surplus-params.js");
|
|
17
17
|
var _index1 = require("./fees/index.js");
|
|
18
18
|
var _utils = require("../utils.js");
|
|
19
|
+
var _constants = require("../constants.js");
|
|
19
20
|
function _class_call_check(instance, Constructor) {
|
|
20
21
|
if (!(instance instanceof Constructor)) {
|
|
21
22
|
throw new TypeError("Cannot call a class as a function");
|
|
@@ -72,12 +73,15 @@ var FusionExtension = /*#__PURE__*/ function() {
|
|
|
72
73
|
{
|
|
73
74
|
key: "build",
|
|
74
75
|
value: function build() {
|
|
75
|
-
var _this_extra;
|
|
76
|
+
var _this_extra, _this_extra1;
|
|
76
77
|
var amountData = this.buildAmountGetterData(true);
|
|
77
78
|
var builder = new _limitordersdk.ExtensionBuilder().withMakingAmountData(this.address, amountData).withTakingAmountData(this.address, amountData).withPostInteraction(new _limitordersdk.Interaction(this.address, this.buildInteractionData()));
|
|
78
79
|
if ((_this_extra = this.extra) === null || _this_extra === void 0 ? void 0 : _this_extra.makerPermit) {
|
|
79
|
-
var
|
|
80
|
-
builder.withMakerPermit((
|
|
80
|
+
var _this_extra2, _this_extra3;
|
|
81
|
+
builder.withMakerPermit((_this_extra2 = this.extra) === null || _this_extra2 === void 0 ? void 0 : _this_extra2.makerPermit.target, (_this_extra3 = this.extra) === null || _this_extra3 === void 0 ? void 0 : _this_extra3.makerPermit.data);
|
|
82
|
+
}
|
|
83
|
+
if ((_this_extra1 = this.extra) === null || _this_extra1 === void 0 ? void 0 : _this_extra1.preInteraction) {
|
|
84
|
+
builder.withPreInteraction(this.extra.preInteraction);
|
|
81
85
|
}
|
|
82
86
|
return builder.build();
|
|
83
87
|
}
|
|
@@ -228,6 +232,7 @@ var FusionExtension = /*#__PURE__*/ function() {
|
|
|
228
232
|
}
|
|
229
233
|
//endregion Parse amount data
|
|
230
234
|
var makerPermit = extension.hasMakerPermit ? _limitordersdk.Interaction.decode(extension.makerPermit) : undefined;
|
|
235
|
+
var preInteraction = extension.preInteraction !== _constants.ZX ? _limitordersdk.Interaction.decode(extension.preInteraction) : undefined;
|
|
231
236
|
(0, _assert.default)(amountData.fees.integratorFee.value === interactionData.fees.integratorFee.value, "invalid extension: integrator fee must be same in interaction data and in amount data");
|
|
232
237
|
(0, _assert.default)(amountData.fees.resolverFee.value === interactionData.fees.resolverFee.value, "invalid extension: resolver fee must be same in interaction data and in amount data");
|
|
233
238
|
(0, _assert.default)(amountData.fees.whitelistDiscount.equal(interactionData.fees.whitelistDiscount), "invalid extension: whitelistDiscount must be same in interaction data and in amount data");
|
|
@@ -240,6 +245,7 @@ var FusionExtension = /*#__PURE__*/ function() {
|
|
|
240
245
|
if (!hasFees) {
|
|
241
246
|
return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
|
|
242
247
|
makerPermit: makerPermit,
|
|
248
|
+
preInteraction: preInteraction,
|
|
243
249
|
customReceiver: customReceiver,
|
|
244
250
|
fees: undefined
|
|
245
251
|
});
|
|
@@ -247,6 +253,7 @@ var FusionExtension = /*#__PURE__*/ function() {
|
|
|
247
253
|
var fees = new _index1.Fees(new _index1.ResolverFee(protocolFeeRecipient, interactionData.fees.resolverFee, interactionData.fees.whitelistDiscount), interactionData.fees.integratorFee.isZero() ? _index1.IntegratorFee.ZERO : new _index1.IntegratorFee(integratorFeeRecipient, protocolFeeRecipient, interactionData.fees.integratorFee, interactionData.fees.integratorShare));
|
|
248
254
|
return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
|
|
249
255
|
makerPermit: makerPermit,
|
|
256
|
+
preInteraction: preInteraction,
|
|
250
257
|
fees: fees,
|
|
251
258
|
customReceiver: customReceiver
|
|
252
259
|
});
|
|
@@ -9,14 +9,10 @@ Object.defineProperty(exports, "FusionOrder", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _limitordersdk = require("@1inch/limit-order-sdk");
|
|
12
|
-
var _byteutils = require("@1inch/byte-utils");
|
|
13
12
|
var _assert = /*#__PURE__*/ _interop_require_default(require("assert"));
|
|
14
13
|
var _fusionextension = require("./fusion-extension.js");
|
|
15
14
|
var _sourcetrack = require("./source-track.js");
|
|
16
15
|
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");
|
|
20
16
|
var _index = require("../amount-calculator/auction-calculator/index.js");
|
|
21
17
|
var _constants = require("../constants.js");
|
|
22
18
|
var _amounts = require("../utils/amounts.js");
|
|
@@ -54,13 +50,6 @@ function _define_property(obj, key, value) {
|
|
|
54
50
|
}
|
|
55
51
|
return obj;
|
|
56
52
|
}
|
|
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
|
-
}
|
|
64
53
|
function _interop_require_default(obj) {
|
|
65
54
|
return obj && obj.__esModule ? obj : {
|
|
66
55
|
default: obj
|
|
@@ -113,6 +102,7 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
113
102
|
*/ settlementExtensionContract, orderInfo, auctionDetails, whitelist) {
|
|
114
103
|
var surplusParams = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _surplusparams.SurplusParams.NO_FEE, extra = arguments.length > 5 && arguments[5] !== void 0 ? arguments[5] : FusionOrder.defaultExtra, extension = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : new _fusionextension.FusionExtension(settlementExtensionContract, auctionDetails, whitelist, surplusParams, {
|
|
115
104
|
makerPermit: extra.permit ? new _limitordersdk.Interaction(orderInfo.makerAsset, extra.permit) : undefined,
|
|
105
|
+
preInteraction: extra.preInteraction ? _limitordersdk.Interaction.decode(extra.preInteraction) : undefined,
|
|
116
106
|
customReceiver: orderInfo.receiver,
|
|
117
107
|
fees: extra === null || extra === void 0 ? void 0 : extra.fees
|
|
118
108
|
});
|
|
@@ -142,6 +132,9 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
142
132
|
if (enablePermit2) {
|
|
143
133
|
makerTraits.enablePermit2();
|
|
144
134
|
}
|
|
135
|
+
if (extra.preInteraction) {
|
|
136
|
+
makerTraits.enablePreInteraction();
|
|
137
|
+
}
|
|
145
138
|
if (extra.nonce !== undefined) {
|
|
146
139
|
makerTraits.withNonce(extra.nonce);
|
|
147
140
|
}
|
|
@@ -188,9 +181,6 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
188
181
|
{
|
|
189
182
|
key: "makerAsset",
|
|
190
183
|
get: function get() {
|
|
191
|
-
if (this.isTransferPermit()) {
|
|
192
|
-
return this.decodeTransferPermitSuffix().token;
|
|
193
|
-
}
|
|
194
184
|
return this.inner.makerAsset;
|
|
195
185
|
}
|
|
196
186
|
},
|
|
@@ -287,48 +277,6 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
287
277
|
return this.inner.salt;
|
|
288
278
|
}
|
|
289
279
|
},
|
|
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
|
-
},
|
|
332
280
|
{
|
|
333
281
|
key: "build",
|
|
334
282
|
value: function build() {
|
|
@@ -524,67 +472,6 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
524
472
|
*/ function nativeSignature(maker) {
|
|
525
473
|
return this.inner.nativeSignature(maker);
|
|
526
474
|
}
|
|
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
|
-
}
|
|
588
475
|
}
|
|
589
476
|
], [
|
|
590
477
|
{
|
|
@@ -659,14 +546,12 @@ var FusionOrder = /*#__PURE__*/ function() {
|
|
|
659
546
|
enablePermit2: makerTraits.isPermit2(),
|
|
660
547
|
nonce: makerTraits.nonceOrEpoch(),
|
|
661
548
|
permit: extension.makerPermit === _constants.ZX ? undefined : _limitordersdk.Interaction.decode(extension.makerPermit).data,
|
|
549
|
+
preInteraction: extension.preInteraction === _constants.ZX ? undefined : extension.preInteraction,
|
|
662
550
|
unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
|
|
663
551
|
orderExpirationDelay: orderExpirationDelay,
|
|
664
552
|
fees: extra === null || extra === void 0 ? void 0 : extra.fees,
|
|
665
553
|
optimizeReceiverAddress: true
|
|
666
554
|
});
|
|
667
|
-
if (extension.makerAssetSuffix !== _constants.ZX) {
|
|
668
|
-
fusionOrder.restoreMakerAssetSuffix(extension.makerAssetSuffix);
|
|
669
|
-
}
|
|
670
555
|
(0, _assert.default)(providedSalt === fusionOrder.salt, 'invalid salt for passed extension');
|
|
671
556
|
return fusionOrder;
|
|
672
557
|
}
|
|
@@ -465,104 +465,135 @@ describe('FusionOrder Native', function() {
|
|
|
465
465
|
});
|
|
466
466
|
expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
|
|
467
467
|
});
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
var
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
whitelist: _index1.Whitelist.new(1673548139n, [
|
|
468
|
+
});
|
|
469
|
+
describe('FusionOrder preInteraction', function() {
|
|
470
|
+
it('should create order with preInteraction and set PRE_INTERACTION_CALL_FLAG in makerTraits', function() {
|
|
471
|
+
var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
472
|
+
var preInteraction = new _limitordersdk.Interaction(new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1'), '0xdeadbeef01020304');
|
|
473
|
+
var order = _fusionorder.FusionOrder.new(extensionContract, {
|
|
474
|
+
makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
475
|
+
takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
476
|
+
makingAmount: 1983000000000000n,
|
|
477
|
+
takingAmount: 79052953622246027n,
|
|
478
|
+
maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
479
|
+
}, {
|
|
480
|
+
auction: new _index.AuctionDetails({
|
|
481
|
+
duration: 180n,
|
|
482
|
+
startTime: 1673548149n,
|
|
483
|
+
initialRateBump: 50000,
|
|
484
|
+
points: [
|
|
486
485
|
{
|
|
487
|
-
|
|
488
|
-
|
|
486
|
+
coefficient: 20000,
|
|
487
|
+
delay: 12
|
|
489
488
|
}
|
|
490
|
-
]
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
489
|
+
]
|
|
490
|
+
}),
|
|
491
|
+
whitelist: _index1.Whitelist.new(1673548139n, [
|
|
492
|
+
{
|
|
493
|
+
address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
494
|
+
allowFrom: 0n
|
|
495
|
+
}
|
|
496
|
+
]),
|
|
497
|
+
surplus: _surplusparams.SurplusParams.NO_FEE
|
|
498
|
+
}, {
|
|
499
|
+
preInteraction: preInteraction.encode()
|
|
500
|
+
});
|
|
501
|
+
var makerTraits = new _limitordersdk.MakerTraits(BigInt(order.build().makerTraits));
|
|
502
|
+
expect(makerTraits.hasPreInteraction()).toBe(true);
|
|
503
|
+
});
|
|
504
|
+
it('should not set PRE_INTERACTION_CALL_FLAG when no preInteraction', function() {
|
|
505
|
+
var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
506
|
+
var order = _fusionorder.FusionOrder.new(extensionContract, {
|
|
507
|
+
makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
508
|
+
takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
509
|
+
makingAmount: 1983000000000000n,
|
|
510
|
+
takingAmount: 79052953622246027n,
|
|
511
|
+
maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
512
|
+
}, {
|
|
513
|
+
auction: new _index.AuctionDetails({
|
|
514
|
+
duration: 180n,
|
|
515
|
+
startTime: 1673548149n,
|
|
516
|
+
initialRateBump: 50000,
|
|
517
|
+
points: [
|
|
513
518
|
{
|
|
514
|
-
|
|
515
|
-
|
|
519
|
+
coefficient: 20000,
|
|
520
|
+
delay: 12
|
|
516
521
|
}
|
|
517
|
-
]
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
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);
|
|
522
|
+
]
|
|
523
|
+
}),
|
|
524
|
+
whitelist: _index1.Whitelist.new(1673548139n, [
|
|
525
|
+
{
|
|
526
|
+
address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
527
|
+
allowFrom: 0n
|
|
528
|
+
}
|
|
529
|
+
]),
|
|
530
|
+
surplus: _surplusparams.SurplusParams.NO_FEE
|
|
548
531
|
});
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
532
|
+
var makerTraits = new _limitordersdk.MakerTraits(BigInt(order.build().makerTraits));
|
|
533
|
+
expect(makerTraits.hasPreInteraction()).toBe(false);
|
|
534
|
+
});
|
|
535
|
+
it('should round-trip order with preInteraction via fromDataAndExtension', function() {
|
|
536
|
+
var extensionContract = new _limitordersdk.Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
537
|
+
var preInteractionTarget = new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1');
|
|
538
|
+
var preInteractionCalldata = '0x0599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a491';
|
|
539
|
+
var preInteraction = new _limitordersdk.Interaction(preInteractionTarget, preInteractionCalldata);
|
|
540
|
+
var order = _fusionorder.FusionOrder.new(extensionContract, {
|
|
541
|
+
makerAsset: new _limitordersdk.Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
542
|
+
takerAsset: new _limitordersdk.Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
543
|
+
makingAmount: 1983000000000000n,
|
|
544
|
+
takingAmount: 79052953622246027n,
|
|
545
|
+
maker: new _limitordersdk.Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
546
|
+
}, {
|
|
547
|
+
auction: new _index.AuctionDetails({
|
|
548
|
+
duration: 180n,
|
|
549
|
+
startTime: 1673548149n,
|
|
550
|
+
initialRateBump: 50000,
|
|
551
|
+
points: [
|
|
552
|
+
{
|
|
553
|
+
coefficient: 20000,
|
|
554
|
+
delay: 12
|
|
555
|
+
}
|
|
556
|
+
]
|
|
557
|
+
}),
|
|
558
|
+
whitelist: _index1.Whitelist.new(1673548139n, [
|
|
559
|
+
{
|
|
560
|
+
address: new _limitordersdk.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
561
|
+
allowFrom: 0n
|
|
562
|
+
}
|
|
563
|
+
]),
|
|
564
|
+
surplus: _surplusparams.SurplusParams.NO_FEE
|
|
565
|
+
}, {
|
|
566
|
+
preInteraction: preInteraction.encode()
|
|
566
567
|
});
|
|
568
|
+
var built = order.build();
|
|
569
|
+
var extension = order.extension;
|
|
570
|
+
var restored = _fusionorder.FusionOrder.fromDataAndExtension({
|
|
571
|
+
salt: built.salt,
|
|
572
|
+
maker: built.maker,
|
|
573
|
+
receiver: built.receiver,
|
|
574
|
+
makerAsset: built.makerAsset,
|
|
575
|
+
takerAsset: built.takerAsset,
|
|
576
|
+
makerTraits: built.makerTraits,
|
|
577
|
+
makingAmount: built.makingAmount,
|
|
578
|
+
takingAmount: built.takingAmount
|
|
579
|
+
}, extension);
|
|
580
|
+
expect(restored.build().salt).toEqual(built.salt);
|
|
581
|
+
expect(restored.extension.encode()).toEqual(extension.encode());
|
|
582
|
+
});
|
|
583
|
+
it('should validate OKX order with preInteraction (real customer data)', function() {
|
|
584
|
+
var extensionHex = '0x000002b800000207000000d2000000d2000000d20000006900000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d952ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d953a617c2fbaf8d7c58c793fbbd2d14eb4927876c10100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b872a96f0000000000000000000000000000000000000000000000000006715eae5b898683d0000000000000000000000000000000000000000000000000000000069c931e800000000000000000000000000000000000000000000000000000000000000410599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a4917028648ec3e33d048184f9877d4892fb829ddc5d75a19c1c2ef064d2a38c012b1b000000000000000000000000000000000000000000000000000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef500000000000000000000000000000000000000000090cbe4bdd538d6e9b379bff5fe72c3d67a521de500000000006469c930cb062324dfe7924cb4f3257d000c0000000000000000000000006ea9a11ae13b29f5c5550000d18bd45f0b94f54a968f0000aa848f727be12534f248000095770895ad27ad6b0d950000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00';
|
|
585
|
+
var extension = _limitordersdk.Extension.decode(extensionHex);
|
|
586
|
+
expect(function() {
|
|
587
|
+
_fusionorder.FusionOrder.fromDataAndExtension({
|
|
588
|
+
maker: '0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1',
|
|
589
|
+
makerAsset: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
|
|
590
|
+
makerTraits: '69656178681823023809491920669288819567982727296017585526061607372909138935808',
|
|
591
|
+
makingAmount: '1983000000000000',
|
|
592
|
+
receiver: '0xb698362cc878094c406115efeeb13089b544e6c8',
|
|
593
|
+
salt: '1084071965642925953405739669729447852001208220133',
|
|
594
|
+
takerAsset: '0xda7ad9dea9397cffddae2f8a052b82f1484252b3',
|
|
595
|
+
takingAmount: '79052953622246027'
|
|
596
|
+
}, extension);
|
|
597
|
+
}).not.toThrow();
|
|
567
598
|
});
|
|
568
599
|
});
|
|
@@ -16,7 +16,6 @@ _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);
|
|
20
19
|
function _export_star(from, to) {
|
|
21
20
|
Object.keys(from).forEach(function(k) {
|
|
22
21
|
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
package/dist/cjs/index.js
CHANGED
package/dist/cjs/sdk/README.md
CHANGED
|
@@ -204,12 +204,11 @@ sdk.placeOrder({
|
|
|
204
204
|
toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
205
205
|
amount: '50000000000000000', // 0.05 ETH
|
|
206
206
|
walletAddress: makerAddress,
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
source: 'platform-name'
|
|
207
|
+
// integratorFee is an optional field
|
|
208
|
+
integratorFee: {
|
|
209
|
+
receiver: new Address('0x0000000000000000000000000000000000000000'), // fee receiver address
|
|
210
|
+
value: new Bps(100n) // 1% as we use bps format, 1% is equal to 100bps
|
|
211
|
+
}
|
|
213
212
|
}).then(console.log)
|
|
214
213
|
```
|
|
215
214
|
|
|
@@ -224,6 +223,15 @@ type PaginationParams = {
|
|
|
224
223
|
}
|
|
225
224
|
```
|
|
226
225
|
|
|
226
|
+
### IntegratorFeeRequest
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
type IntegratorFeeRequest = {
|
|
230
|
+
receiver: Address // fee receiver address
|
|
231
|
+
value: Bps // 100 == 1%
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
227
235
|
### QuoteParams
|
|
228
236
|
|
|
229
237
|
```typescript
|
|
@@ -231,8 +239,9 @@ type QuoteParams = {
|
|
|
231
239
|
fromTokenAddress: string
|
|
232
240
|
toTokenAddress: string
|
|
233
241
|
amount: string
|
|
242
|
+
walletAddress?: string
|
|
234
243
|
permit?: string // a permit (EIP-2612) call data, user approval sign
|
|
235
|
-
|
|
244
|
+
integratorFee?: IntegratorFeeRequest
|
|
236
245
|
}
|
|
237
246
|
```
|
|
238
247
|
|
|
@@ -253,12 +262,7 @@ type OrderParams = {
|
|
|
253
262
|
permit?: string // a permit (EIP-2612) call data, user approval sign
|
|
254
263
|
receiver?: string // address
|
|
255
264
|
preset?: PresetEnum
|
|
256
|
-
nonce?:
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export type TakingFeeInfo = {
|
|
261
|
-
takingFeeBps: number // 100 == 1%
|
|
262
|
-
takingFeeReceiver: string
|
|
265
|
+
nonce?: bigint // allows to batch cancel orders
|
|
266
|
+
integratorFee?: IntegratorFeeRequest
|
|
263
267
|
}
|
|
264
268
|
```
|
|
@@ -87,11 +87,7 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
87
87
|
bps: new Bps(BigInt(response.fee.bps))
|
|
88
88
|
};
|
|
89
89
|
this.surplusFee = response.surplusFee;
|
|
90
|
-
this.integratorFeeParams =
|
|
91
|
-
receiver: new Address(response.integratorFeeReceiver),
|
|
92
|
-
value: new Bps(BigInt(response.integratorFee)),
|
|
93
|
-
share: Bps.fromPercent(response.integratorFeeShare || 0)
|
|
94
|
-
} : undefined;
|
|
90
|
+
this.integratorFeeParams = this.parseIntegratorFee(response);
|
|
95
91
|
}
|
|
96
92
|
_create_class(Quote, [
|
|
97
93
|
{
|
|
@@ -138,7 +134,7 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
138
134
|
orderExpirationDelay: paramsData === null || paramsData === void 0 ? void 0 : paramsData.orderExpirationDelay,
|
|
139
135
|
source: this.params.source,
|
|
140
136
|
enablePermit2: params.isPermit2,
|
|
141
|
-
fees: buildFees(this.resolverFeePreset, this.
|
|
137
|
+
fees: buildFees(this.resolverFeePreset, this.integratorFeeParams, this.surplusFee)
|
|
142
138
|
};
|
|
143
139
|
return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
|
|
144
140
|
}
|
|
@@ -179,6 +175,24 @@ export var Quote = /*#__PURE__*/ function() {
|
|
|
179
175
|
}
|
|
180
176
|
return FusionOrder.new(settlementExtension, orderInfo, details, extra);
|
|
181
177
|
}
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
key: "parseIntegratorFee",
|
|
181
|
+
value: function parseIntegratorFee(response) {
|
|
182
|
+
var _this_params_integratorFee_receiver, _this_params_integratorFee;
|
|
183
|
+
if (!response.integratorFee) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
var receiver = response.integratorFeeReceiver || ((_this_params_integratorFee = this.params.integratorFee) === null || _this_params_integratorFee === void 0 ? void 0 : (_this_params_integratorFee_receiver = _this_params_integratorFee.receiver) === null || _this_params_integratorFee_receiver === void 0 ? void 0 : _this_params_integratorFee_receiver.toString());
|
|
187
|
+
if (!receiver) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
receiver: new Address(receiver),
|
|
192
|
+
value: new Bps(BigInt(response.integratorFee)),
|
|
193
|
+
share: Bps.fromPercent(response.integratorFeeShare || 0)
|
|
194
|
+
};
|
|
195
|
+
}
|
|
182
196
|
}
|
|
183
197
|
]);
|
|
184
198
|
return Quote;
|
|
@@ -2,11 +2,23 @@
|
|
|
2
2
|
* Order will expire in `orderExpirationDelay` after auction ends
|
|
3
3
|
* Default 12s
|
|
4
4
|
*/ /**
|
|
5
|
+
* Integrator fee parameters for SDK requests.
|
|
6
|
+
* Used when calling getQuote() or createOrder().
|
|
7
|
+
*/ /**
|
|
8
|
+
* Address which will receive integrator's portion of the fee.
|
|
9
|
+
*/ /**
|
|
10
|
+
* How much to charge in basis points (1% = 100 bps)
|
|
11
|
+
*/ /**
|
|
12
|
+
* Integrator fee parameters from API response.
|
|
13
|
+
* Contains authoritative values calculated by backend.
|
|
14
|
+
*/ /**
|
|
5
15
|
* Address which will receive `share` of `value` fee, other part will be sent to protocol
|
|
6
16
|
*/ /**
|
|
7
|
-
* How much to charge
|
|
17
|
+
* How much to charge in basis points
|
|
18
|
+
*/ /**
|
|
19
|
+
* Integrator will receive only `share` part from charged fee (rest goes to protocol)
|
|
8
20
|
*/ /**
|
|
9
|
-
|
|
10
|
-
|
|
21
|
+
* @deprecated Use IntegratorFeeRequest for requests or IntegratorFeeResponse for responses
|
|
22
|
+
*/ export { }; /**
|
|
11
23
|
* protocol address
|
|
12
24
|
*/
|