@1inch/fusion-sdk 2.4.6-rc.0 → 2.4.6-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/dist/cjs/api/quoter/quote/quote.js +6 -20
- package/dist/cjs/api/quoter/quoter.api.spec.js +5 -101
- package/dist/cjs/api/quoter/quoter.request.js +4 -1
- package/dist/cjs/api/quoter/quoter.request.spec.js +8 -2
- package/dist/cjs/fusion-order/fusion-extension.js +9 -3
- package/dist/cjs/fusion-order/fusion-order.js +5 -0
- package/dist/cjs/fusion-order/fusion-order.spec.js +131 -0
- 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 +5 -101
- package/dist/esm/api/quoter/quoter.request.js +4 -1
- package/dist/esm/api/quoter/quoter.request.spec.js +8 -2
- package/dist/esm/fusion-order/fusion-extension.js +9 -3
- package/dist/esm/fusion-order/fusion-order.js +5 -0
- package/dist/esm/fusion-order/fusion-order.spec.js +132 -1
- package/dist/esm/fusion-order/types.js +5 -0
- package/dist/esm/package.json +1 -1
- 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/fusion-order/fusion-extension.d.ts +2 -0
- package/dist/types/src/fusion-order/types.d.ts +1 -0
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/sdk/types.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -27,58 +27,6 @@ function _async_to_generator(fn) {
|
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
function _define_property(obj, key, value) {
|
|
31
|
-
if (key in obj) {
|
|
32
|
-
Object.defineProperty(obj, key, {
|
|
33
|
-
value: value,
|
|
34
|
-
enumerable: true,
|
|
35
|
-
configurable: true,
|
|
36
|
-
writable: true
|
|
37
|
-
});
|
|
38
|
-
} else {
|
|
39
|
-
obj[key] = value;
|
|
40
|
-
}
|
|
41
|
-
return obj;
|
|
42
|
-
}
|
|
43
|
-
function _object_spread(target) {
|
|
44
|
-
for(var i = 1; i < arguments.length; i++){
|
|
45
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
46
|
-
var ownKeys = Object.keys(source);
|
|
47
|
-
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
48
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
49
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
ownKeys.forEach(function(key) {
|
|
53
|
-
_define_property(target, key, source[key]);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
return target;
|
|
57
|
-
}
|
|
58
|
-
function ownKeys(object, enumerableOnly) {
|
|
59
|
-
var keys = Object.keys(object);
|
|
60
|
-
if (Object.getOwnPropertySymbols) {
|
|
61
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
62
|
-
if (enumerableOnly) {
|
|
63
|
-
symbols = symbols.filter(function(sym) {
|
|
64
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
keys.push.apply(keys, symbols);
|
|
68
|
-
}
|
|
69
|
-
return keys;
|
|
70
|
-
}
|
|
71
|
-
function _object_spread_props(target, source) {
|
|
72
|
-
source = source != null ? source : {};
|
|
73
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
74
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
75
|
-
} else {
|
|
76
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
77
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return target;
|
|
81
|
-
}
|
|
82
30
|
function _ts_generator(thisArg, body) {
|
|
83
31
|
var f, y, t, g, _ = {
|
|
84
32
|
label: 0,
|
|
@@ -314,7 +262,7 @@ describe('Quoter API', function() {
|
|
|
314
262
|
case 1:
|
|
315
263
|
res = _state.sent();
|
|
316
264
|
expect(res).toStrictEqual(QuoterResponseMock);
|
|
317
|
-
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&surplus=true');
|
|
265
|
+
expect(httpProvider.get).toHaveBeenCalledWith('https://test.com/quoter/v2.0/1/quote/receive/?fromTokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&toTokenAddress=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&amount=1000000000000000000000&walletAddress=0x00000000219ab540356cbb839cbe05303d7705fa&source=sdk&surplus=true');
|
|
318
266
|
return [
|
|
319
267
|
2
|
|
320
268
|
];
|
|
@@ -336,6 +284,7 @@ describe('Quoter API', function() {
|
|
|
336
284
|
amount: '1000000000000000000000',
|
|
337
285
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
338
286
|
integratorFee: {
|
|
287
|
+
share: Bps.fromPercent(50),
|
|
339
288
|
receiver: Address.fromBigInt(10n),
|
|
340
289
|
value: new Bps(1n)
|
|
341
290
|
},
|
|
@@ -371,6 +320,7 @@ describe('Quoter API', function() {
|
|
|
371
320
|
amount: '1000000000000000000000',
|
|
372
321
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
373
322
|
integratorFee: {
|
|
323
|
+
share: Bps.fromPercent(50),
|
|
374
324
|
receiver: Address.fromBigInt(10n),
|
|
375
325
|
value: new Bps(1n)
|
|
376
326
|
},
|
|
@@ -407,6 +357,7 @@ describe('Quoter API', function() {
|
|
|
407
357
|
amount: '1000000000000000000000',
|
|
408
358
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
409
359
|
integratorFee: {
|
|
360
|
+
share: Bps.fromPercent(50),
|
|
410
361
|
receiver: Address.fromBigInt(10n),
|
|
411
362
|
value: new Bps(1n)
|
|
412
363
|
},
|
|
@@ -459,6 +410,7 @@ describe('Quoter API', function() {
|
|
|
459
410
|
amount: '1000000000000000000000',
|
|
460
411
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
461
412
|
integratorFee: {
|
|
413
|
+
share: Bps.fromPercent(50),
|
|
462
414
|
receiver: Address.fromBigInt(10n),
|
|
463
415
|
value: new Bps(1n)
|
|
464
416
|
},
|
|
@@ -497,52 +449,4 @@ describe('Quoter API', function() {
|
|
|
497
449
|
}
|
|
498
450
|
});
|
|
499
451
|
}));
|
|
500
|
-
describe('parseIntegratorFee', function() {
|
|
501
|
-
it('should use response receiver when provided', function() {
|
|
502
|
-
var _quote_integratorFeeParams, _quote_integratorFeeParams1, _quote_integratorFeeParams2;
|
|
503
|
-
var responseWithFee = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
504
|
-
integratorFee: 100,
|
|
505
|
-
integratorFeeReceiver: '0x1234567890123456789012345678901234567890',
|
|
506
|
-
integratorFeeShare: 50
|
|
507
|
-
});
|
|
508
|
-
var quote = new Quote(params, responseWithFee);
|
|
509
|
-
expect(quote.integratorFeeParams).toBeDefined();
|
|
510
|
-
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0x1234567890123456789012345678901234567890');
|
|
511
|
-
expect(Number((_quote_integratorFeeParams1 = quote.integratorFeeParams) === null || _quote_integratorFeeParams1 === void 0 ? void 0 : _quote_integratorFeeParams1.value.value)).toBe(100);
|
|
512
|
-
expect(Number((_quote_integratorFeeParams2 = quote.integratorFeeParams) === null || _quote_integratorFeeParams2 === void 0 ? void 0 : _quote_integratorFeeParams2.share.value)).toBe(5000);
|
|
513
|
-
});
|
|
514
|
-
it('should fallback to request receiver when response receiver is missing', function() {
|
|
515
|
-
var _quote_integratorFeeParams;
|
|
516
|
-
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
517
|
-
integratorFee: 100,
|
|
518
|
-
integratorFeeShare: 50
|
|
519
|
-
});
|
|
520
|
-
var paramsWithFee = QuoterRequest.new({
|
|
521
|
-
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
522
|
-
toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
523
|
-
amount: '1000000000000000000000',
|
|
524
|
-
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
525
|
-
integratorFee: {
|
|
526
|
-
receiver: new Address('0xabcdef0123456789abcdef0123456789abcdef01'),
|
|
527
|
-
value: new Bps(100n)
|
|
528
|
-
},
|
|
529
|
-
source: 'test-source'
|
|
530
|
-
});
|
|
531
|
-
var quote = new Quote(paramsWithFee, responseWithFeeNoReceiver);
|
|
532
|
-
expect(quote.integratorFeeParams).toBeDefined();
|
|
533
|
-
expect((_quote_integratorFeeParams = quote.integratorFeeParams) === null || _quote_integratorFeeParams === void 0 ? void 0 : _quote_integratorFeeParams.receiver.toString()).toBe('0xabcdef0123456789abcdef0123456789abcdef01');
|
|
534
|
-
});
|
|
535
|
-
it('should return undefined when no receiver available', function() {
|
|
536
|
-
var responseWithFeeNoReceiver = _object_spread_props(_object_spread({}, ResponseMock), {
|
|
537
|
-
integratorFee: 100,
|
|
538
|
-
integratorFeeShare: 50
|
|
539
|
-
});
|
|
540
|
-
var quote = new Quote(params, responseWithFeeNoReceiver);
|
|
541
|
-
expect(quote.integratorFeeParams).toBeUndefined();
|
|
542
|
-
});
|
|
543
|
-
it('should return undefined when no integratorFee in response', function() {
|
|
544
|
-
var quote = new Quote(params, ResponseMock);
|
|
545
|
-
expect(quote.integratorFeeParams).toBeUndefined();
|
|
546
|
-
});
|
|
547
|
-
});
|
|
548
452
|
});
|
|
@@ -53,7 +53,7 @@ export var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
53
53
|
this.enableEstimate = params.enableEstimate || false;
|
|
54
54
|
this.permit = params.permit;
|
|
55
55
|
this.integratorFee = params.integratorFee;
|
|
56
|
-
this.source = params.source;
|
|
56
|
+
this.source = params.source || 'sdk';
|
|
57
57
|
var _params_isPermit2;
|
|
58
58
|
this.isPermit2 = (_params_isPermit2 = params.isPermit2) !== null && _params_isPermit2 !== void 0 ? _params_isPermit2 : false;
|
|
59
59
|
this.slippage = params.slippage;
|
|
@@ -66,6 +66,9 @@ export var QuoterRequest = /*#__PURE__*/ function() {
|
|
|
66
66
|
if (!isValidAmount(this.amount)) {
|
|
67
67
|
throw new Error("".concat(this.amount, " is invalid amount"));
|
|
68
68
|
}
|
|
69
|
+
if (this.integratorFee && this.source === 'sdk') {
|
|
70
|
+
throw new Error('cannot use fee without source');
|
|
71
|
+
}
|
|
69
72
|
}
|
|
70
73
|
_create_class(QuoterRequest, [
|
|
71
74
|
{
|
|
@@ -9,6 +9,7 @@ describe(__filename, function() {
|
|
|
9
9
|
amount: '1000000000000000000000',
|
|
10
10
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
11
11
|
integratorFee: {
|
|
12
|
+
share: Bps.fromPercent(50),
|
|
12
13
|
receiver: Address.fromBigInt(10n),
|
|
13
14
|
value: new Bps(1n)
|
|
14
15
|
}
|
|
@@ -21,6 +22,7 @@ describe(__filename, function() {
|
|
|
21
22
|
amount: '1000000000000000000000',
|
|
22
23
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
23
24
|
integratorFee: {
|
|
25
|
+
share: Bps.fromPercent(50),
|
|
24
26
|
receiver: Address.fromBigInt(10n),
|
|
25
27
|
value: new Bps(1n)
|
|
26
28
|
}
|
|
@@ -35,6 +37,7 @@ describe(__filename, function() {
|
|
|
35
37
|
amount: '1000000000000000000000',
|
|
36
38
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
37
39
|
integratorFee: {
|
|
40
|
+
share: Bps.fromPercent(50),
|
|
38
41
|
receiver: Address.fromBigInt(10n),
|
|
39
42
|
value: new Bps(1n)
|
|
40
43
|
}
|
|
@@ -49,6 +52,7 @@ describe(__filename, function() {
|
|
|
49
52
|
amount: '1000000000000000000000',
|
|
50
53
|
walletAddress: '0x0000000019ab540356cbb839be05303d7705fa1',
|
|
51
54
|
integratorFee: {
|
|
55
|
+
share: Bps.fromPercent(50),
|
|
52
56
|
receiver: Address.fromBigInt(10n),
|
|
53
57
|
value: new Bps(1n)
|
|
54
58
|
}
|
|
@@ -63,13 +67,14 @@ describe(__filename, function() {
|
|
|
63
67
|
amount: 'dasdad',
|
|
64
68
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
65
69
|
integratorFee: {
|
|
70
|
+
share: Bps.fromPercent(50),
|
|
66
71
|
receiver: Address.fromBigInt(10n),
|
|
67
72
|
value: new Bps(1n)
|
|
68
73
|
}
|
|
69
74
|
});
|
|
70
75
|
}).toThrow(/is invalid amount/);
|
|
71
76
|
});
|
|
72
|
-
it('
|
|
77
|
+
it('returns error if fee is provided and source not', function() {
|
|
73
78
|
expect(function() {
|
|
74
79
|
return QuoterRequest.new({
|
|
75
80
|
fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
@@ -77,10 +82,11 @@ describe(__filename, function() {
|
|
|
77
82
|
amount: '1000000',
|
|
78
83
|
walletAddress: '0x00000000219ab540356cbb839cbe05303d7705fa',
|
|
79
84
|
integratorFee: {
|
|
85
|
+
share: Bps.fromPercent(50),
|
|
80
86
|
receiver: Address.fromBigInt(10n),
|
|
81
87
|
value: new Bps(1n)
|
|
82
88
|
}
|
|
83
89
|
});
|
|
84
|
-
}).
|
|
90
|
+
}).toThrow(/cannot use fee without source/);
|
|
85
91
|
});
|
|
86
92
|
});
|
|
@@ -57,12 +57,15 @@ export var FusionExtension = /*#__PURE__*/ function() {
|
|
|
57
57
|
{
|
|
58
58
|
key: "build",
|
|
59
59
|
value: function build() {
|
|
60
|
-
var _this_extra;
|
|
60
|
+
var _this_extra, _this_extra1;
|
|
61
61
|
var amountData = this.buildAmountGetterData(true);
|
|
62
62
|
var builder = new ExtensionBuilder().withMakingAmountData(this.address, amountData).withTakingAmountData(this.address, amountData).withPostInteraction(new Interaction(this.address, this.buildInteractionData()));
|
|
63
63
|
if ((_this_extra = this.extra) === null || _this_extra === void 0 ? void 0 : _this_extra.makerPermit) {
|
|
64
|
-
var
|
|
65
|
-
builder.withMakerPermit((
|
|
64
|
+
var _this_extra2, _this_extra3;
|
|
65
|
+
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);
|
|
66
|
+
}
|
|
67
|
+
if ((_this_extra1 = this.extra) === null || _this_extra1 === void 0 ? void 0 : _this_extra1.preInteraction) {
|
|
68
|
+
builder.withPreInteraction(this.extra.preInteraction);
|
|
66
69
|
}
|
|
67
70
|
return builder.build();
|
|
68
71
|
}
|
|
@@ -213,6 +216,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
|
|
|
213
216
|
}
|
|
214
217
|
//endregion Parse amount data
|
|
215
218
|
var makerPermit = extension.hasMakerPermit ? Interaction.decode(extension.makerPermit) : undefined;
|
|
219
|
+
var preInteraction = extension.hasPreInteraction ? Interaction.decode(extension.preInteraction) : undefined;
|
|
216
220
|
assert(amountData.fees.integratorFee.value === interactionData.fees.integratorFee.value, "invalid extension: integrator fee must be same in interaction data and in amount data");
|
|
217
221
|
assert(amountData.fees.resolverFee.value === interactionData.fees.resolverFee.value, "invalid extension: resolver fee must be same in interaction data and in amount data");
|
|
218
222
|
assert(amountData.fees.whitelistDiscount.equal(interactionData.fees.whitelistDiscount), "invalid extension: whitelistDiscount must be same in interaction data and in amount data");
|
|
@@ -225,6 +229,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
|
|
|
225
229
|
if (!hasFees) {
|
|
226
230
|
return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
|
|
227
231
|
makerPermit: makerPermit,
|
|
232
|
+
preInteraction: preInteraction,
|
|
228
233
|
customReceiver: customReceiver,
|
|
229
234
|
fees: undefined
|
|
230
235
|
});
|
|
@@ -232,6 +237,7 @@ export var FusionExtension = /*#__PURE__*/ function() {
|
|
|
232
237
|
var fees = new Fees(new ResolverFee(protocolFeeRecipient, interactionData.fees.resolverFee, interactionData.fees.whitelistDiscount), interactionData.fees.integratorFee.isZero() ? IntegratorFee.ZERO : new IntegratorFee(integratorFeeRecipient, protocolFeeRecipient, interactionData.fees.integratorFee, interactionData.fees.integratorShare));
|
|
233
238
|
return new FusionExtension(settlementContract, auctionDetails, whitelist, surplusParams, {
|
|
234
239
|
makerPermit: makerPermit,
|
|
240
|
+
preInteraction: preInteraction,
|
|
235
241
|
fees: fees,
|
|
236
242
|
customReceiver: customReceiver
|
|
237
243
|
});
|
|
@@ -87,6 +87,7 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
87
87
|
*/ settlementExtensionContract, orderInfo, auctionDetails, whitelist) {
|
|
88
88
|
var surplusParams = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 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(settlementExtensionContract, auctionDetails, whitelist, surplusParams, {
|
|
89
89
|
makerPermit: extra.permit ? new Interaction(orderInfo.makerAsset, extra.permit) : undefined,
|
|
90
|
+
preInteraction: extra.preInteraction ? Interaction.decode(extra.preInteraction) : undefined,
|
|
90
91
|
customReceiver: orderInfo.receiver,
|
|
91
92
|
fees: extra === null || extra === void 0 ? void 0 : extra.fees
|
|
92
93
|
});
|
|
@@ -116,6 +117,9 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
116
117
|
if (enablePermit2) {
|
|
117
118
|
makerTraits.enablePermit2();
|
|
118
119
|
}
|
|
120
|
+
if (extra.preInteraction) {
|
|
121
|
+
makerTraits.enablePreInteraction();
|
|
122
|
+
}
|
|
119
123
|
if (extra.nonce !== undefined) {
|
|
120
124
|
makerTraits.withNonce(extra.nonce);
|
|
121
125
|
}
|
|
@@ -527,6 +531,7 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
527
531
|
enablePermit2: makerTraits.isPermit2(),
|
|
528
532
|
nonce: makerTraits.nonceOrEpoch(),
|
|
529
533
|
permit: extension.makerPermit === ZX ? undefined : Interaction.decode(extension.makerPermit).data,
|
|
534
|
+
preInteraction: extension.preInteraction === ZX ? undefined : extension.preInteraction,
|
|
530
535
|
unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
|
|
531
536
|
orderExpirationDelay: orderExpirationDelay,
|
|
532
537
|
fees: extra === null || extra === void 0 ? void 0 : extra.fees,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Address, Bps, MakerTraits, Extension, ProxyFactory } from '@1inch/limit-order-sdk';
|
|
1
|
+
import { Address, Bps, MakerTraits, Extension, Interaction, ProxyFactory } from '@1inch/limit-order-sdk';
|
|
2
2
|
import { parseEther, parseUnits } from 'ethers';
|
|
3
3
|
import { FusionOrder } from './fusion-order.js';
|
|
4
4
|
import { AuctionDetails } from './auction-details/index.js';
|
|
@@ -462,3 +462,134 @@ describe('FusionOrder Native', function() {
|
|
|
462
462
|
expect(nativeOrder.build().receiver).toEqual(settlementExt.toString());
|
|
463
463
|
});
|
|
464
464
|
});
|
|
465
|
+
describe('FusionOrder preInteraction', function() {
|
|
466
|
+
it('should create order with preInteraction and set PRE_INTERACTION_CALL_FLAG in makerTraits', function() {
|
|
467
|
+
var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
468
|
+
var preInteraction = new Interaction(new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1'), '0xdeadbeef01020304');
|
|
469
|
+
var order = FusionOrder.new(extensionContract, {
|
|
470
|
+
makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
471
|
+
takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
472
|
+
makingAmount: 1983000000000000n,
|
|
473
|
+
takingAmount: 79052953622246027n,
|
|
474
|
+
maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
475
|
+
}, {
|
|
476
|
+
auction: new AuctionDetails({
|
|
477
|
+
duration: 180n,
|
|
478
|
+
startTime: 1673548149n,
|
|
479
|
+
initialRateBump: 50000,
|
|
480
|
+
points: [
|
|
481
|
+
{
|
|
482
|
+
coefficient: 20000,
|
|
483
|
+
delay: 12
|
|
484
|
+
}
|
|
485
|
+
]
|
|
486
|
+
}),
|
|
487
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
488
|
+
{
|
|
489
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
490
|
+
allowFrom: 0n
|
|
491
|
+
}
|
|
492
|
+
]),
|
|
493
|
+
surplus: SurplusParams.NO_FEE
|
|
494
|
+
}, {
|
|
495
|
+
preInteraction: preInteraction.encode()
|
|
496
|
+
});
|
|
497
|
+
var makerTraits = new MakerTraits(BigInt(order.build().makerTraits));
|
|
498
|
+
expect(makerTraits.hasPreInteraction()).toBe(true);
|
|
499
|
+
});
|
|
500
|
+
it('should not set PRE_INTERACTION_CALL_FLAG when no preInteraction', function() {
|
|
501
|
+
var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
502
|
+
var order = FusionOrder.new(extensionContract, {
|
|
503
|
+
makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
504
|
+
takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
505
|
+
makingAmount: 1983000000000000n,
|
|
506
|
+
takingAmount: 79052953622246027n,
|
|
507
|
+
maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
508
|
+
}, {
|
|
509
|
+
auction: new AuctionDetails({
|
|
510
|
+
duration: 180n,
|
|
511
|
+
startTime: 1673548149n,
|
|
512
|
+
initialRateBump: 50000,
|
|
513
|
+
points: [
|
|
514
|
+
{
|
|
515
|
+
coefficient: 20000,
|
|
516
|
+
delay: 12
|
|
517
|
+
}
|
|
518
|
+
]
|
|
519
|
+
}),
|
|
520
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
521
|
+
{
|
|
522
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
523
|
+
allowFrom: 0n
|
|
524
|
+
}
|
|
525
|
+
]),
|
|
526
|
+
surplus: SurplusParams.NO_FEE
|
|
527
|
+
});
|
|
528
|
+
var makerTraits = new MakerTraits(BigInt(order.build().makerTraits));
|
|
529
|
+
expect(makerTraits.hasPreInteraction()).toBe(false);
|
|
530
|
+
});
|
|
531
|
+
it('should round-trip order with preInteraction via fromDataAndExtension', function() {
|
|
532
|
+
var extensionContract = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
533
|
+
var preInteractionTarget = new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1');
|
|
534
|
+
var preInteractionCalldata = '0x0599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a491';
|
|
535
|
+
var preInteraction = new Interaction(preInteractionTarget, preInteractionCalldata);
|
|
536
|
+
var order = FusionOrder.new(extensionContract, {
|
|
537
|
+
makerAsset: new Address('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'),
|
|
538
|
+
takerAsset: new Address('0xda7ad9dea9397cffddae2f8a052b82f1484252b3'),
|
|
539
|
+
makingAmount: 1983000000000000n,
|
|
540
|
+
takingAmount: 79052953622246027n,
|
|
541
|
+
maker: new Address('0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1')
|
|
542
|
+
}, {
|
|
543
|
+
auction: new AuctionDetails({
|
|
544
|
+
duration: 180n,
|
|
545
|
+
startTime: 1673548149n,
|
|
546
|
+
initialRateBump: 50000,
|
|
547
|
+
points: [
|
|
548
|
+
{
|
|
549
|
+
coefficient: 20000,
|
|
550
|
+
delay: 12
|
|
551
|
+
}
|
|
552
|
+
]
|
|
553
|
+
}),
|
|
554
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
555
|
+
{
|
|
556
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
557
|
+
allowFrom: 0n
|
|
558
|
+
}
|
|
559
|
+
]),
|
|
560
|
+
surplus: SurplusParams.NO_FEE
|
|
561
|
+
}, {
|
|
562
|
+
preInteraction: preInteraction.encode()
|
|
563
|
+
});
|
|
564
|
+
var built = order.build();
|
|
565
|
+
var extension = order.extension;
|
|
566
|
+
var restored = FusionOrder.fromDataAndExtension({
|
|
567
|
+
salt: built.salt,
|
|
568
|
+
maker: built.maker,
|
|
569
|
+
receiver: built.receiver,
|
|
570
|
+
makerAsset: built.makerAsset,
|
|
571
|
+
takerAsset: built.takerAsset,
|
|
572
|
+
makerTraits: built.makerTraits,
|
|
573
|
+
makingAmount: built.makingAmount,
|
|
574
|
+
takingAmount: built.takingAmount
|
|
575
|
+
}, extension);
|
|
576
|
+
expect(restored.build().salt).toEqual(built.salt);
|
|
577
|
+
expect(restored.extension.encode()).toEqual(extension.encode());
|
|
578
|
+
});
|
|
579
|
+
it('should validate OKX order with preInteraction (real customer data)', function() {
|
|
580
|
+
var extensionHex = '0x000002b800000207000000d2000000d2000000d20000006900000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d952ad5004c60e16e54d5007c80ce329adde5b51ef50000000000000069c930cb0000b403e4e400000000000064062324dfe7924cb4f3257d000000000000000000006ea9a11ae13b29f5c555d18bd45f0b94f54a968faa848f727be12534f24895770895ad27ad6b0d953a617c2fbaf8d7c58c793fbbd2d14eb4927876c10100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b872a96f0000000000000000000000000000000000000000000000000006715eae5b898683d0000000000000000000000000000000000000000000000000000000069c931e800000000000000000000000000000000000000000000000000000000000000410599a1fd1975848548e5b765925a935093a96ecc6f2ca216f77dcfd328b8a4917028648ec3e33d048184f9877d4892fb829ddc5d75a19c1c2ef064d2a38c012b1b000000000000000000000000000000000000000000000000000000000000002ad5004c60e16e54d5007c80ce329adde5b51ef500000000000000000000000000000000000000000090cbe4bdd538d6e9b379bff5fe72c3d67a521de500000000006469c930cb062324dfe7924cb4f3257d000c0000000000000000000000006ea9a11ae13b29f5c5550000d18bd45f0b94f54a968f0000aa848f727be12534f248000095770895ad27ad6b0d950000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00';
|
|
581
|
+
var extension = Extension.decode(extensionHex);
|
|
582
|
+
expect(function() {
|
|
583
|
+
FusionOrder.fromDataAndExtension({
|
|
584
|
+
maker: '0x3a617c2fbaf8d7c58c793fbbd2d14eb4927876c1',
|
|
585
|
+
makerAsset: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c',
|
|
586
|
+
makerTraits: '69656178681823023809491920669288819567982727296017585526061607372909138935808',
|
|
587
|
+
makingAmount: '1983000000000000',
|
|
588
|
+
receiver: '0xb698362cc878094c406115efeeb13089b544e6c8',
|
|
589
|
+
salt: '1084071965642925953405739669729447852001208220133',
|
|
590
|
+
takerAsset: '0xda7ad9dea9397cffddae2f8a052b82f1484252b3',
|
|
591
|
+
takingAmount: '79052953622246027'
|
|
592
|
+
}, extension);
|
|
593
|
+
}).not.toThrow();
|
|
594
|
+
});
|
|
595
|
+
});
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
* Required if `allowPartialFills` or `allowMultipleFills` is false
|
|
3
3
|
* Max size is 40bit
|
|
4
4
|
*/ /**
|
|
5
|
+
* Encoded pre-interaction: target address (20 bytes) followed by calldata.
|
|
6
|
+
* Format matches `Interaction.encode()`: `0x{target}{calldata}`.
|
|
7
|
+
* When set, the PRE_INTERACTION_CALL_FLAG is enabled in makerTraits
|
|
8
|
+
* and the LOP contract calls IPreInteraction on the target before the swap.
|
|
9
|
+
*/ /**
|
|
5
10
|
* Default is true
|
|
6
11
|
*/ /**
|
|
7
12
|
* Default is true
|
package/dist/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@1inch/fusion-sdk","version":"2.4.6-rc.
|
|
1
|
+
{"name":"@1inch/fusion-sdk","version":"2.4.6-rc.3","type":"module"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Address, ProxyFactory } from '@1inch/limit-order-sdk';
|
|
2
|
-
import { FusionOrderParamsData,
|
|
2
|
+
import { FusionOrderParamsData, IntegratorFeeParams, ResolverFeePreset } from './types.js';
|
|
3
3
|
import { Cost, PresetEnum, QuoterResponse } from '../types.js';
|
|
4
4
|
import { Preset } from '../preset.js';
|
|
5
5
|
import { FusionOrder } from '../../../fusion-order/index.js';
|
|
@@ -25,11 +25,10 @@ export declare class Quote {
|
|
|
25
25
|
readonly slippage: number;
|
|
26
26
|
readonly resolverFeePreset: ResolverFeePreset;
|
|
27
27
|
readonly surplusFee?: number;
|
|
28
|
-
readonly integratorFeeParams?:
|
|
28
|
+
readonly integratorFeeParams?: IntegratorFeeParams;
|
|
29
29
|
constructor(params: QuoterRequest, response: QuoterResponse);
|
|
30
30
|
createFusionOrder(paramsData: Omit<FusionOrderParamsData, 'permit' | 'isPermit2'>): FusionOrder;
|
|
31
31
|
getPreset(type?: PresetEnum): Preset;
|
|
32
32
|
private getWhitelist;
|
|
33
33
|
private _createOrder;
|
|
34
|
-
private parseIntegratorFee;
|
|
35
34
|
}
|
|
@@ -13,16 +13,11 @@ export type FusionOrderParamsData = {
|
|
|
13
13
|
delayAuctionStartTimeBy?: bigint;
|
|
14
14
|
orderExpirationDelay?: bigint;
|
|
15
15
|
};
|
|
16
|
-
export type
|
|
17
|
-
receiver: Address;
|
|
18
|
-
value: Bps;
|
|
19
|
-
};
|
|
20
|
-
export type IntegratorFeeResponse = {
|
|
16
|
+
export type IntegratorFeeParams = {
|
|
21
17
|
receiver: Address;
|
|
22
18
|
value: Bps;
|
|
23
19
|
share: Bps;
|
|
24
20
|
};
|
|
25
|
-
export type IntegratorFeeParams = IntegratorFeeResponse;
|
|
26
21
|
export type ResolverFeePreset = {
|
|
27
22
|
receiver: Address;
|
|
28
23
|
bps: Bps;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Address } from '@1inch/limit-order-sdk';
|
|
2
2
|
import { QuoterRequestParams, QuoterRequestParamsRaw } from './types.js';
|
|
3
|
-
import {
|
|
3
|
+
import { IntegratorFeeParams } from './quote/index.js';
|
|
4
4
|
export declare class QuoterRequest {
|
|
5
5
|
readonly fromTokenAddress: Address;
|
|
6
6
|
readonly toTokenAddress: Address;
|
|
@@ -8,8 +8,8 @@ export declare class QuoterRequest {
|
|
|
8
8
|
readonly walletAddress: Address;
|
|
9
9
|
readonly enableEstimate: boolean;
|
|
10
10
|
readonly permit: string | undefined;
|
|
11
|
-
readonly integratorFee?:
|
|
12
|
-
readonly source
|
|
11
|
+
readonly integratorFee?: IntegratorFeeParams;
|
|
12
|
+
readonly source: string;
|
|
13
13
|
readonly isPermit2: boolean;
|
|
14
14
|
readonly slippage?: number;
|
|
15
15
|
constructor(params: QuoterRequestParams);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IntegratorFeeParams } from './quote/index.js';
|
|
2
2
|
import { NetworkEnum } from '../../constants.js';
|
|
3
3
|
export type QuoterRequestParams = {
|
|
4
4
|
fromTokenAddress: string;
|
|
@@ -7,7 +7,7 @@ export type QuoterRequestParams = {
|
|
|
7
7
|
walletAddress: string;
|
|
8
8
|
enableEstimate?: boolean;
|
|
9
9
|
permit?: string;
|
|
10
|
-
integratorFee?:
|
|
10
|
+
integratorFee?: IntegratorFeeParams;
|
|
11
11
|
source?: string;
|
|
12
12
|
isPermit2?: boolean;
|
|
13
13
|
slippage?: number;
|
|
@@ -10,12 +10,14 @@ export declare class FusionExtension {
|
|
|
10
10
|
readonly surplus: SurplusParams;
|
|
11
11
|
readonly extra?: {
|
|
12
12
|
makerPermit?: Interaction;
|
|
13
|
+
preInteraction?: Interaction;
|
|
13
14
|
customReceiver?: Address;
|
|
14
15
|
fees?: Fees;
|
|
15
16
|
} | undefined;
|
|
16
17
|
private static CUSTOM_RECEIVER_FLAG_BIT;
|
|
17
18
|
constructor(address: Address, auctionDetails: AuctionDetails, whitelist: Whitelist, surplus: SurplusParams, extra?: {
|
|
18
19
|
makerPermit?: Interaction;
|
|
20
|
+
preInteraction?: Interaction;
|
|
19
21
|
customReceiver?: Address;
|
|
20
22
|
fees?: Fees;
|
|
21
23
|
} | undefined);
|
|
@@ -10,4 +10,4 @@ export * from './utils/time.js';
|
|
|
10
10
|
export * from './validations.js';
|
|
11
11
|
export * from './ws-api/index.js';
|
|
12
12
|
export * from './errors.js';
|
|
13
|
-
export { QuoterRequest, type QuoterResponse, RelayerRequest, QuoterCustomPresetRequest, PresetEnum, Preset, Quote, type OrderStatusResponse, OrderStatus
|
|
13
|
+
export { QuoterRequest, type QuoterResponse, RelayerRequest, QuoterCustomPresetRequest, PresetEnum, Preset, Quote, type OrderStatusResponse, OrderStatus } from './api/index.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Address, LimitOrderV4Struct } from '@1inch/limit-order-sdk';
|
|
2
2
|
import { BlockchainProviderConnector, HttpProviderConnector } from '../connector/index.js';
|
|
3
3
|
import { NetworkEnum } from '../constants.js';
|
|
4
|
-
import { CustomPreset,
|
|
4
|
+
import { CustomPreset, IntegratorFeeParams, PresetEnum } from '../api/index.js';
|
|
5
5
|
import { FusionOrder } from '../fusion-order/index.js';
|
|
6
6
|
export type FusionSDKConfigParams = {
|
|
7
7
|
url: string;
|
|
@@ -17,7 +17,7 @@ export type QuoteParams = {
|
|
|
17
17
|
walletAddress?: string;
|
|
18
18
|
enableEstimate?: boolean;
|
|
19
19
|
permit?: string;
|
|
20
|
-
integratorFee?:
|
|
20
|
+
integratorFee?: IntegratorFeeParams;
|
|
21
21
|
source?: string;
|
|
22
22
|
isPermit2?: boolean;
|
|
23
23
|
slippage?: number;
|
|
@@ -40,7 +40,7 @@ export type OrderParams = {
|
|
|
40
40
|
orderExpirationDelay?: bigint;
|
|
41
41
|
allowPartialFills?: boolean;
|
|
42
42
|
allowMultipleFills?: boolean;
|
|
43
|
-
integratorFee?:
|
|
43
|
+
integratorFee?: IntegratorFeeParams;
|
|
44
44
|
slippage?: number;
|
|
45
45
|
};
|
|
46
46
|
export type OrderInfo = {
|