@1inch/fusion-sdk 2.3.9-rc.0 → 2.3.9-rc.10
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/abi/NativeOrderFactory.abi.json +217 -0
- package/dist/cjs/abi/{ETHOrders.abi.json → NativeOrderImpl.abi.json} +110 -255
- package/dist/cjs/api/quoter/quote/quote.js +6 -4
- package/dist/cjs/api/quoter/quoter.request.js +0 -3
- package/dist/cjs/api/quoter/quoter.request.spec.js +0 -15
- package/dist/cjs/api/quoter/types.js +0 -2
- package/dist/cjs/contracts/index.js +21 -0
- package/dist/cjs/contracts/native-order-factory.js +115 -0
- package/dist/cjs/contracts/native-order-impl.js +130 -0
- package/dist/cjs/contracts/proxy-factory.js +87 -0
- package/dist/cjs/fusion-order/fusion-order.js +81 -5
- package/dist/cjs/fusion-order/fusion-order.spec.js +106 -0
- package/dist/cjs/fusion-order/index.js +0 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/sdk/sdk.js +79 -40
- package/dist/esm/abi/NativeOrderFactory.abi.json +217 -0
- package/dist/esm/abi/{ETHOrders.abi.json → NativeOrderImpl.abi.json} +110 -255
- package/dist/esm/api/quoter/quote/quote.js +7 -5
- package/dist/esm/api/quoter/quoter.request.js +0 -3
- package/dist/esm/api/quoter/quoter.request.spec.js +0 -15
- package/dist/esm/api/quoter/types.js +0 -2
- package/dist/esm/contracts/index.js +4 -0
- package/dist/esm/contracts/native-order-factory.js +100 -0
- package/dist/esm/contracts/native-order-impl.js +115 -0
- package/dist/esm/contracts/proxy-factory.js +72 -0
- package/dist/esm/fusion-order/fusion-order.js +79 -3
- package/dist/esm/fusion-order/fusion-order.spec.js +106 -0
- package/dist/esm/fusion-order/index.js +0 -1
- package/dist/esm/fusion-order/types.js +4 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/sdk.js +79 -40
- package/dist/types/src/api/quoter/quote/quote.d.ts +4 -3
- package/dist/types/src/api/quoter/types.d.ts +2 -1
- package/dist/types/src/contracts/index.d.ts +4 -0
- package/dist/types/src/contracts/native-order-factory.d.ts +9 -0
- package/dist/types/src/contracts/native-order-impl.d.ts +9 -0
- package/dist/types/src/contracts/proxy-factory.d.ts +8 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +6 -0
- 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 +1 -0
- package/dist/types/src/sdk/sdk.d.ts +4 -0
- package/dist/types/src/sdk/types.d.ts +2 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/cjs/contracts/eth-orders.extension.js +0 -105
- package/dist/cjs/fusion-order/fusion-order-from-native.js +0 -183
- package/dist/esm/contracts/eth-orders.extension.js +0 -90
- package/dist/esm/fusion-order/fusion-order-from-native.js +0 -173
- package/dist/types/src/contracts/eth-orders.extension.d.ts +0 -11
- package/dist/types/src/fusion-order/fusion-order-from-native.d.ts +0 -13
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
function _class_call_check(instance, Constructor) {
|
|
2
|
+
if (!(instance instanceof Constructor)) {
|
|
3
|
+
throw new TypeError("Cannot call a class as a function");
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function _defineProperties(target, props) {
|
|
7
|
+
for(var i = 0; i < props.length; i++){
|
|
8
|
+
var descriptor = props[i];
|
|
9
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
10
|
+
descriptor.configurable = true;
|
|
11
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
12
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
16
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
+
return Constructor;
|
|
19
|
+
}
|
|
20
|
+
function _define_property(obj, key, value) {
|
|
21
|
+
if (key in obj) {
|
|
22
|
+
Object.defineProperty(obj, key, {
|
|
23
|
+
value: value,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
obj[key] = value;
|
|
30
|
+
}
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
function _object_spread(target) {
|
|
34
|
+
for(var i = 1; i < arguments.length; i++){
|
|
35
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
36
|
+
var ownKeys = Object.keys(source);
|
|
37
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
38
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
39
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
ownKeys.forEach(function(key) {
|
|
43
|
+
_define_property(target, key, source[key]);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return target;
|
|
47
|
+
}
|
|
48
|
+
function ownKeys(object, enumerableOnly) {
|
|
49
|
+
var keys = Object.keys(object);
|
|
50
|
+
if (Object.getOwnPropertySymbols) {
|
|
51
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
52
|
+
if (enumerableOnly) {
|
|
53
|
+
symbols = symbols.filter(function(sym) {
|
|
54
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
keys.push.apply(keys, symbols);
|
|
58
|
+
}
|
|
59
|
+
return keys;
|
|
60
|
+
}
|
|
61
|
+
function _object_spread_props(target, source) {
|
|
62
|
+
source = source != null ? source : {};
|
|
63
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
64
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
65
|
+
} else {
|
|
66
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
67
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return target;
|
|
71
|
+
}
|
|
72
|
+
import { Interface } from 'ethers';
|
|
73
|
+
import ABI from '../abi/NativeOrderImpl.abi.json';
|
|
74
|
+
export var NativeOrdersImpl = /*#__PURE__*/ function() {
|
|
75
|
+
"use strict";
|
|
76
|
+
function NativeOrdersImpl(address) {
|
|
77
|
+
_class_call_check(this, NativeOrdersImpl);
|
|
78
|
+
_define_property(this, "address", void 0);
|
|
79
|
+
_define_property(this, "iface", void 0);
|
|
80
|
+
this.address = address;
|
|
81
|
+
this.iface = new Interface(ABI);
|
|
82
|
+
}
|
|
83
|
+
_create_class(NativeOrdersImpl, [
|
|
84
|
+
{
|
|
85
|
+
key: "cancel",
|
|
86
|
+
value: function cancel(maker, order) {
|
|
87
|
+
return {
|
|
88
|
+
to: this.address,
|
|
89
|
+
value: 0n,
|
|
90
|
+
data: this.iface.encodeFunctionData('cancelOrder', [
|
|
91
|
+
_object_spread_props(_object_spread({}, order), {
|
|
92
|
+
maker: maker.toString()
|
|
93
|
+
})
|
|
94
|
+
])
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
key: "cancelExpiredOrderByResolver",
|
|
100
|
+
value: function cancelExpiredOrderByResolver(maker, order, rewardLimit) {
|
|
101
|
+
return {
|
|
102
|
+
to: this.address,
|
|
103
|
+
value: 0n,
|
|
104
|
+
data: this.iface.encodeFunctionData('cancelExpiredOrderByResolver', [
|
|
105
|
+
_object_spread_props(_object_spread({}, order), {
|
|
106
|
+
maker: maker.toString()
|
|
107
|
+
}),
|
|
108
|
+
rewardLimit
|
|
109
|
+
])
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]);
|
|
114
|
+
return NativeOrdersImpl;
|
|
115
|
+
}();
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
function _class_call_check(instance, Constructor) {
|
|
2
|
+
if (!(instance instanceof Constructor)) {
|
|
3
|
+
throw new TypeError("Cannot call a class as a function");
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function _defineProperties(target, props) {
|
|
7
|
+
for(var i = 0; i < props.length; i++){
|
|
8
|
+
var descriptor = props[i];
|
|
9
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
10
|
+
descriptor.configurable = true;
|
|
11
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
12
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
16
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
+
return Constructor;
|
|
19
|
+
}
|
|
20
|
+
function _define_property(obj, key, value) {
|
|
21
|
+
if (key in obj) {
|
|
22
|
+
Object.defineProperty(obj, key, {
|
|
23
|
+
value: value,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
obj[key] = value;
|
|
30
|
+
}
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
import { isHexBytes, trim0x } from '@1inch/byte-utils';
|
|
34
|
+
import { Address } from '@1inch/limit-order-sdk';
|
|
35
|
+
import { getCreate2Address, keccak256 } from 'ethers';
|
|
36
|
+
import assert from 'assert';
|
|
37
|
+
export var ProxyFactory = /*#__PURE__*/ function() {
|
|
38
|
+
"use strict";
|
|
39
|
+
function ProxyFactory(factory, implementation) {
|
|
40
|
+
_class_call_check(this, ProxyFactory);
|
|
41
|
+
_define_property(this, "factory", void 0);
|
|
42
|
+
_define_property(this, "implementation", void 0);
|
|
43
|
+
this.factory = factory;
|
|
44
|
+
this.implementation = implementation;
|
|
45
|
+
}
|
|
46
|
+
_create_class(ProxyFactory, [
|
|
47
|
+
{
|
|
48
|
+
key: "getProxyAddress",
|
|
49
|
+
value: /**
|
|
50
|
+
* Calculates deterministic address of proxy contract
|
|
51
|
+
*
|
|
52
|
+
* @see https://github.com/OpenZeppelin/openzeppelin-contracts/blob/69c8def5f222ff96f2b5beff05dfba996368aa79/contracts/proxy/Clones.sol#L60
|
|
53
|
+
*
|
|
54
|
+
* @param salt must be valid hex string
|
|
55
|
+
* @returns address of proxy contract
|
|
56
|
+
*/ function getProxyAddress(salt) {
|
|
57
|
+
assert(isHexBytes(salt), 'invalid salt');
|
|
58
|
+
return new Address(getCreate2Address(this.factory.toString(), salt, ProxyFactory.calcProxyBytecodeHash(this.implementation)));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
], [
|
|
62
|
+
{
|
|
63
|
+
key: "calcProxyBytecodeHash",
|
|
64
|
+
value: /**
|
|
65
|
+
* See https://github.com/1inch/cross-chain-swap/blob/03d99b9604d8f7a5a396720fbe1059f7d94db762/contracts/libraries/ProxyHashLib.sol#L14
|
|
66
|
+
*/ function calcProxyBytecodeHash(impl) {
|
|
67
|
+
return keccak256("0x3d602d80600a3d3981f3363d3d373d3d3d363d73".concat(trim0x(impl.toString()), "5af43d82803e903d91602b57fd5bf3"));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]);
|
|
71
|
+
return ProxyFactory;
|
|
72
|
+
}();
|
|
@@ -74,6 +74,7 @@ import assert from 'assert';
|
|
|
74
74
|
import { FusionExtension } from './fusion-extension.js';
|
|
75
75
|
import { injectTrackCode } from './source-track.js';
|
|
76
76
|
import { SurplusParams } from './surplus-params.js';
|
|
77
|
+
import { CHAIN_TO_WRAPPER } from './constants.js';
|
|
77
78
|
import { AuctionCalculator } from '../amount-calculator/auction-calculator/index.js';
|
|
78
79
|
import { ZX } from '../constants.js';
|
|
79
80
|
import { calcTakingAmount } from '../utils/amounts.js';
|
|
@@ -128,10 +129,13 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
128
129
|
if (orderInfo.makerAsset.isNative()) {
|
|
129
130
|
throw new Error('use FusionOrder.fromNative to create order from native asset');
|
|
130
131
|
}
|
|
132
|
+
var optimizeReceiverAddress = extra.optimizeReceiverAddress !== undefined ? extra.optimizeReceiverAddress : FusionOrder.defaultExtra.optimizeReceiverAddress;
|
|
131
133
|
this.inner = new LimitOrder(_object_spread_props(_object_spread({}, orderInfo), {
|
|
132
134
|
receiver: receiver,
|
|
133
135
|
salt: saltWithInjectedTrackCode
|
|
134
|
-
}), makerTraits, builtExtension
|
|
136
|
+
}), makerTraits, builtExtension, {
|
|
137
|
+
optimizeReceiverAddress: optimizeReceiverAddress
|
|
138
|
+
});
|
|
135
139
|
this.fusionExtension = extension;
|
|
136
140
|
}
|
|
137
141
|
_create_class(FusionOrder, [
|
|
@@ -429,6 +433,34 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
429
433
|
value: function getAmountCalculator() {
|
|
430
434
|
return AmountCalculator.fromExtension(this.fusionExtension);
|
|
431
435
|
}
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
key: "isNative",
|
|
439
|
+
value: function isNative(chainId, ethOrderFactory, signature) {
|
|
440
|
+
return FusionOrder.isNativeOrder(chainId, ethOrderFactory, this.build(), signature);
|
|
441
|
+
}
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
key: "nativeSignature",
|
|
445
|
+
value: /**
|
|
446
|
+
* Returns signature for submitting native order on-chain
|
|
447
|
+
* Only valid if order is native
|
|
448
|
+
*
|
|
449
|
+
* @see FusionOrder.isNative
|
|
450
|
+
* @see FusionOrder.fromNative
|
|
451
|
+
*/ function nativeSignature(maker) {
|
|
452
|
+
return new LimitOrder({
|
|
453
|
+
maker: maker,
|
|
454
|
+
makerAsset: this.makerAsset,
|
|
455
|
+
makingAmount: this.makingAmount,
|
|
456
|
+
takingAmount: this.takingAmount,
|
|
457
|
+
takerAsset: this.takerAsset,
|
|
458
|
+
receiver: this.receiver,
|
|
459
|
+
salt: this.salt
|
|
460
|
+
}, this.inner.makerTraits, undefined, {
|
|
461
|
+
optimizeReceiverAddress: false
|
|
462
|
+
}).toCalldata();
|
|
463
|
+
}
|
|
432
464
|
}
|
|
433
465
|
], [
|
|
434
466
|
{
|
|
@@ -440,6 +472,48 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
440
472
|
return new FusionOrder(settlementExtension, orderInfo, details.auction, details.whitelist, details.surplus, extra);
|
|
441
473
|
}
|
|
442
474
|
},
|
|
475
|
+
{
|
|
476
|
+
key: "isNativeOrder",
|
|
477
|
+
value: function isNativeOrder(chainId, ethOrderFactory, order, signature) {
|
|
478
|
+
try {
|
|
479
|
+
var orderWithRealMaker = LimitOrder.fromCalldata(signature);
|
|
480
|
+
var expectedAddress = ethOrderFactory.getProxyAddress(orderWithRealMaker.getOrderHash(chainId));
|
|
481
|
+
return expectedAddress.equal(new Address(order.maker));
|
|
482
|
+
} catch (e) {
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
key: "fromNative",
|
|
489
|
+
value: /**
|
|
490
|
+
* Create new order from native asset
|
|
491
|
+
*
|
|
492
|
+
*
|
|
493
|
+
* Note, that such order should be submitted on-chain through `ETHOrders.depositForOrder` AND off-chain through submit to relayer
|
|
494
|
+
* // todo: update link
|
|
495
|
+
* @see ETHOrders.depositForOrder https://github.com/1inch/limit-order-protocol/blob/c100474444cd71cf7989cd8a63f375e72656b8b4/contracts/extensions/ETHOrders.sol#L89
|
|
496
|
+
*/ function fromNative(chainId, ethOrdersFactory, /**
|
|
497
|
+
* Fusion extension address
|
|
498
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
499
|
+
*/ settlementExtension, orderInfo, details, extra) {
|
|
500
|
+
var _orderInfo = _object_spread_props(_object_spread({}, orderInfo), {
|
|
501
|
+
makerAsset: CHAIN_TO_WRAPPER[chainId],
|
|
502
|
+
receiver: orderInfo.receiver && !orderInfo.receiver.isZero() ? orderInfo.receiver : orderInfo.maker
|
|
503
|
+
});
|
|
504
|
+
// create temp order to calc order hash
|
|
505
|
+
var _order = FusionOrder.new(settlementExtension, _orderInfo, details, _object_spread_props(_object_spread({}, extra), {
|
|
506
|
+
optimizeReceiverAddress: false
|
|
507
|
+
}));
|
|
508
|
+
var finalOrderInfo = _object_spread_props(_object_spread({}, _orderInfo), {
|
|
509
|
+
maker: ethOrdersFactory.getProxyAddress(_order.getOrderHash(chainId))
|
|
510
|
+
});
|
|
511
|
+
return new FusionOrder(settlementExtension, // use same salt to have same order hash. Remove extension hash from it
|
|
512
|
+
_object_spread_props(_object_spread({}, finalOrderInfo), {
|
|
513
|
+
salt: _order.salt >> 160n
|
|
514
|
+
}), details.auction, details.whitelist, details.surplus, extra);
|
|
515
|
+
}
|
|
516
|
+
},
|
|
443
517
|
{
|
|
444
518
|
key: "fromDataAndExtension",
|
|
445
519
|
value: /**
|
|
@@ -472,7 +546,8 @@ export var FusionOrder = /*#__PURE__*/ function() {
|
|
|
472
546
|
permit: extension.makerPermit === ZX ? undefined : Interaction.decode(extension.makerPermit).data,
|
|
473
547
|
unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
|
|
474
548
|
orderExpirationDelay: orderExpirationDelay,
|
|
475
|
-
fees: extra === null || extra === void 0 ? void 0 : extra.fees
|
|
549
|
+
fees: extra === null || extra === void 0 ? void 0 : extra.fees,
|
|
550
|
+
optimizeReceiverAddress: true
|
|
476
551
|
});
|
|
477
552
|
assert(providedSalt === fusionOrder.salt, 'invalid salt for passed extension');
|
|
478
553
|
return fusionOrder;
|
|
@@ -486,5 +561,6 @@ _define_property(FusionOrder, "defaultExtra", {
|
|
|
486
561
|
allowMultipleFills: true,
|
|
487
562
|
unwrapWETH: false,
|
|
488
563
|
enablePermit2: false,
|
|
489
|
-
orderExpirationDelay: 12n
|
|
564
|
+
orderExpirationDelay: 12n,
|
|
565
|
+
optimizeReceiverAddress: true
|
|
490
566
|
});
|
|
@@ -5,6 +5,8 @@ import { AuctionDetails } from './auction-details/index.js';
|
|
|
5
5
|
import { Whitelist } from './whitelist/index.js';
|
|
6
6
|
import { SurplusParams } from './surplus-params.js';
|
|
7
7
|
import { Fees, IntegratorFee, ResolverFee } from './fees/index.js';
|
|
8
|
+
import { ProxyFactory } from '../contracts/proxy-factory.js';
|
|
9
|
+
import { NetworkEnum } from '../constants.js';
|
|
8
10
|
import { AuctionCalculator } from '../amount-calculator/index.js';
|
|
9
11
|
import { now } from '../utils/time.js';
|
|
10
12
|
describe('Fusion Order', function() {
|
|
@@ -292,3 +294,107 @@ describe('Fusion Order', function() {
|
|
|
292
294
|
expect(surplus).toEqual(25000000n);
|
|
293
295
|
});
|
|
294
296
|
});
|
|
297
|
+
describe('FusionOrder Native', function() {
|
|
298
|
+
it('should correct detect that order is from native asset', function() {
|
|
299
|
+
var ethOrderFactory = new ProxyFactory(Address.fromBigInt(1n), Address.fromBigInt(2n));
|
|
300
|
+
var chainId = NetworkEnum.ETHEREUM;
|
|
301
|
+
var settlementExt = Address.fromBigInt(3n);
|
|
302
|
+
var maker = new Address('0x00000000219ab540356cbb839cbe05303d7705fa');
|
|
303
|
+
var nativeOrder = FusionOrder.fromNative(chainId, ethOrderFactory, settlementExt, {
|
|
304
|
+
takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
305
|
+
makingAmount: 1000000000000000000n,
|
|
306
|
+
takingAmount: 1420000000n,
|
|
307
|
+
maker: maker,
|
|
308
|
+
salt: 10n
|
|
309
|
+
}, {
|
|
310
|
+
auction: new AuctionDetails({
|
|
311
|
+
duration: 180n,
|
|
312
|
+
startTime: 1673548149n,
|
|
313
|
+
initialRateBump: 50000,
|
|
314
|
+
points: [
|
|
315
|
+
{
|
|
316
|
+
coefficient: 20000,
|
|
317
|
+
delay: 12
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
}),
|
|
321
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
322
|
+
{
|
|
323
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
324
|
+
allowFrom: 0n
|
|
325
|
+
}
|
|
326
|
+
]),
|
|
327
|
+
surplus: SurplusParams.NO_FEE
|
|
328
|
+
});
|
|
329
|
+
expect(nativeOrder.isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(true);
|
|
330
|
+
expect(FusionOrder.fromDataAndExtension(nativeOrder.build(), nativeOrder.extension).isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(true);
|
|
331
|
+
});
|
|
332
|
+
it('should correct detect that order is from native asset (no salt)', function() {
|
|
333
|
+
var ethOrderFactory = new ProxyFactory(new Address('0x62c650084e97a0fba2ecf365cc6d8a7722425363'), new Address('0xe8773a43fce4eedb18d0edbaf319059e1ae786af'));
|
|
334
|
+
var chainId = NetworkEnum.ETHEREUM;
|
|
335
|
+
var settlementExt = new Address('0x2ad5004c60e16e54d5007c80ce329adde5b51ef5');
|
|
336
|
+
var maker = new Address('0x962a836519109e162754161000d65d9dc027fa0f');
|
|
337
|
+
var nativeOrder = FusionOrder.fromNative(chainId, ethOrderFactory, settlementExt, {
|
|
338
|
+
takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
339
|
+
makingAmount: 1000000000000000000n,
|
|
340
|
+
takingAmount: 1420000000n,
|
|
341
|
+
maker: maker
|
|
342
|
+
}, {
|
|
343
|
+
auction: new AuctionDetails({
|
|
344
|
+
duration: 180n,
|
|
345
|
+
startTime: 1673548149n,
|
|
346
|
+
initialRateBump: 50000,
|
|
347
|
+
points: [
|
|
348
|
+
{
|
|
349
|
+
coefficient: 20000,
|
|
350
|
+
delay: 12
|
|
351
|
+
}
|
|
352
|
+
]
|
|
353
|
+
}),
|
|
354
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
355
|
+
{
|
|
356
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
357
|
+
allowFrom: 0n
|
|
358
|
+
}
|
|
359
|
+
]),
|
|
360
|
+
surplus: SurplusParams.NO_FEE
|
|
361
|
+
});
|
|
362
|
+
expect(nativeOrder.isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(true);
|
|
363
|
+
expect(FusionOrder.fromDataAndExtension(nativeOrder.build(), Extension.decode(nativeOrder.extension.encode())).isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(true);
|
|
364
|
+
});
|
|
365
|
+
it('should correct detect that order is NOT from native asset', function() {
|
|
366
|
+
var ethOrderFactory = new ProxyFactory(Address.fromBigInt(1n), Address.fromBigInt(2n));
|
|
367
|
+
var chainId = NetworkEnum.ETHEREUM;
|
|
368
|
+
var settlementExt = Address.fromBigInt(3n);
|
|
369
|
+
var maker = new Address('0x00000000219ab540356cbb839cbe05303d7705fa');
|
|
370
|
+
var nativeOrder = FusionOrder.new(settlementExt, {
|
|
371
|
+
makerAsset: new Address('0x1000000000000000000000000000000000000000'),
|
|
372
|
+
takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
373
|
+
makingAmount: 1000000000000000000n,
|
|
374
|
+
takingAmount: 1420000000n,
|
|
375
|
+
maker: maker,
|
|
376
|
+
salt: 10n
|
|
377
|
+
}, {
|
|
378
|
+
auction: new AuctionDetails({
|
|
379
|
+
duration: 180n,
|
|
380
|
+
startTime: 1673548149n,
|
|
381
|
+
initialRateBump: 50000,
|
|
382
|
+
points: [
|
|
383
|
+
{
|
|
384
|
+
coefficient: 20000,
|
|
385
|
+
delay: 12
|
|
386
|
+
}
|
|
387
|
+
]
|
|
388
|
+
}),
|
|
389
|
+
whitelist: Whitelist.new(1673548139n, [
|
|
390
|
+
{
|
|
391
|
+
address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
392
|
+
allowFrom: 0n
|
|
393
|
+
}
|
|
394
|
+
]),
|
|
395
|
+
surplus: SurplusParams.NO_FEE
|
|
396
|
+
});
|
|
397
|
+
expect(nativeOrder.isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(false);
|
|
398
|
+
expect(FusionOrder.fromDataAndExtension(nativeOrder.build(), nativeOrder.extension).isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(false);
|
|
399
|
+
});
|
|
400
|
+
});
|
package/dist/esm/index.js
CHANGED
|
@@ -10,4 +10,5 @@ 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 * from './contracts/index.js';
|
|
13
14
|
export { QuoterRequest, RelayerRequest, QuoterCustomPresetRequest, PresetEnum, Preset, Quote, OrderStatus } from './api/index.js';
|
package/dist/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@1inch/fusion-sdk","version":"2.3.9-rc.
|
|
1
|
+
{"name":"@1inch/fusion-sdk","version":"2.3.9-rc.10","type":"module"}
|
package/dist/esm/sdk/sdk.js
CHANGED
|
@@ -59,13 +59,6 @@ function _define_property(obj, key, value) {
|
|
|
59
59
|
}
|
|
60
60
|
return obj;
|
|
61
61
|
}
|
|
62
|
-
function _instanceof(left, right) {
|
|
63
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
64
|
-
return !!right[Symbol.hasInstance](left);
|
|
65
|
-
} else {
|
|
66
|
-
return left instanceof right;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
62
|
function _ts_generator(thisArg, body) {
|
|
70
63
|
var f, y, t, g, _ = {
|
|
71
64
|
label: 0,
|
|
@@ -165,7 +158,6 @@ import { Address, MakerTraits } from '@1inch/limit-order-sdk';
|
|
|
165
158
|
import { encodeCancelOrder } from './encoders/index.js';
|
|
166
159
|
import { FusionApi, QuoterRequest, RelayerRequest, QuoterCustomPresetRequest } from '../api/index.js';
|
|
167
160
|
import { ActiveOrdersRequest, OrdersByMakerRequest, OrderStatusRequest } from '../api/orders/index.js';
|
|
168
|
-
import { FusionOrderFromNative } from '../fusion-order/index.js';
|
|
169
161
|
export var FusionSDK = /*#__PURE__*/ function() {
|
|
170
162
|
"use strict";
|
|
171
163
|
function FusionSDK(config) {
|
|
@@ -301,7 +293,7 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
301
293
|
value: function createOrder(params) {
|
|
302
294
|
var _this = this;
|
|
303
295
|
return _async_to_generator(function() {
|
|
304
|
-
var quote, order, hash;
|
|
296
|
+
var _quote_nativeOrderFactory, quote, order, hash;
|
|
305
297
|
return _ts_generator(this, function(_state) {
|
|
306
298
|
switch(_state.label){
|
|
307
299
|
case 0:
|
|
@@ -329,7 +321,8 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
329
321
|
{
|
|
330
322
|
order: order,
|
|
331
323
|
hash: hash,
|
|
332
|
-
quoteId: quote.quoteId
|
|
324
|
+
quoteId: quote.quoteId,
|
|
325
|
+
nativeOrderFactory: (_quote_nativeOrderFactory = quote.nativeOrderFactory) === null || _quote_nativeOrderFactory === void 0 ? void 0 : _quote_nativeOrderFactory.factory
|
|
333
326
|
}
|
|
334
327
|
];
|
|
335
328
|
}
|
|
@@ -342,12 +335,13 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
342
335
|
value: /**
|
|
343
336
|
* Submit order to relayer
|
|
344
337
|
*
|
|
345
|
-
* Note, that orders from native assets must be submitted
|
|
346
|
-
*
|
|
338
|
+
* Note, that orders from native assets must be submitted with `submitNativeOrder`
|
|
339
|
+
*
|
|
340
|
+
* @see FusionSDK.submitNativeOrder
|
|
347
341
|
*/ function submitOrder(order, quoteId) {
|
|
348
342
|
var _this = this;
|
|
349
343
|
return _async_to_generator(function() {
|
|
350
|
-
var signature
|
|
344
|
+
var signature;
|
|
351
345
|
return _ts_generator(this, function(_state) {
|
|
352
346
|
switch(_state.label){
|
|
353
347
|
case 0:
|
|
@@ -357,34 +351,36 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
357
351
|
];
|
|
358
352
|
case 1:
|
|
359
353
|
signature = _state.sent();
|
|
360
|
-
orderStruct = order.build();
|
|
361
|
-
relayerRequest = RelayerRequest.new({
|
|
362
|
-
order: orderStruct,
|
|
363
|
-
signature: signature,
|
|
364
|
-
quoteId: quoteId,
|
|
365
|
-
extension: order.extension.encode()
|
|
366
|
-
});
|
|
367
|
-
return [
|
|
368
|
-
4,
|
|
369
|
-
_this.api.submitOrder(relayerRequest)
|
|
370
|
-
];
|
|
371
|
-
case 2:
|
|
372
|
-
_state.sent();
|
|
373
354
|
return [
|
|
374
355
|
2,
|
|
375
|
-
|
|
376
|
-
order: orderStruct,
|
|
377
|
-
signature: signature,
|
|
378
|
-
quoteId: quoteId,
|
|
379
|
-
orderHash: order.getOrderHash(_this.config.network),
|
|
380
|
-
extension: relayerRequest.extension
|
|
381
|
-
}
|
|
356
|
+
_this._submitOrder(order, quoteId, signature)
|
|
382
357
|
];
|
|
383
358
|
}
|
|
384
359
|
});
|
|
385
360
|
})();
|
|
386
361
|
}
|
|
387
362
|
},
|
|
363
|
+
{
|
|
364
|
+
key: "submitNativeOrder",
|
|
365
|
+
value: /**
|
|
366
|
+
* Submit order to relayer
|
|
367
|
+
*
|
|
368
|
+
* Note, that orders from native assets must be submitted on-chain as well
|
|
369
|
+
* @see NativeOrdersFactory.create
|
|
370
|
+
*/ function submitNativeOrder(order, maker, quoteId) {
|
|
371
|
+
var _this = this;
|
|
372
|
+
return _async_to_generator(function() {
|
|
373
|
+
var signature;
|
|
374
|
+
return _ts_generator(this, function(_state) {
|
|
375
|
+
signature = _this.signNativeOrder(order, maker);
|
|
376
|
+
return [
|
|
377
|
+
2,
|
|
378
|
+
_this._submitOrder(order, quoteId, signature)
|
|
379
|
+
];
|
|
380
|
+
});
|
|
381
|
+
})();
|
|
382
|
+
}
|
|
383
|
+
},
|
|
388
384
|
{
|
|
389
385
|
key: "placeOrder",
|
|
390
386
|
value: function placeOrder(params) {
|
|
@@ -442,17 +438,17 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
442
438
|
},
|
|
443
439
|
{
|
|
444
440
|
key: "signOrder",
|
|
445
|
-
value:
|
|
441
|
+
value: /**
|
|
442
|
+
* Sign order using `blockchainProvider` from config
|
|
443
|
+
*
|
|
444
|
+
* Use FusionSDK.signNativeOrder for signing orders from native asset
|
|
445
|
+
*
|
|
446
|
+
* @see FusionSDK.signNativeOrder
|
|
447
|
+
*/ function signOrder(order) {
|
|
446
448
|
var _this = this;
|
|
447
449
|
return _async_to_generator(function() {
|
|
448
450
|
var orderStruct, data;
|
|
449
451
|
return _ts_generator(this, function(_state) {
|
|
450
|
-
if (_instanceof(order, FusionOrderFromNative)) {
|
|
451
|
-
return [
|
|
452
|
-
2,
|
|
453
|
-
order.realMaker.toString()
|
|
454
|
-
];
|
|
455
|
-
}
|
|
456
452
|
if (!_this.config.blockchainProvider) {
|
|
457
453
|
throw new Error('blockchainProvider has not set to config');
|
|
458
454
|
}
|
|
@@ -466,6 +462,49 @@ export var FusionSDK = /*#__PURE__*/ function() {
|
|
|
466
462
|
})();
|
|
467
463
|
}
|
|
468
464
|
},
|
|
465
|
+
{
|
|
466
|
+
key: "signNativeOrder",
|
|
467
|
+
value: function signNativeOrder(order, maker) {
|
|
468
|
+
return order.nativeSignature(maker);
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
key: "_submitOrder",
|
|
473
|
+
value: function _submitOrder(order, quoteId, signature) {
|
|
474
|
+
var _this = this;
|
|
475
|
+
return _async_to_generator(function() {
|
|
476
|
+
var orderStruct, relayerRequest;
|
|
477
|
+
return _ts_generator(this, function(_state) {
|
|
478
|
+
switch(_state.label){
|
|
479
|
+
case 0:
|
|
480
|
+
orderStruct = order.build();
|
|
481
|
+
relayerRequest = RelayerRequest.new({
|
|
482
|
+
order: orderStruct,
|
|
483
|
+
signature: signature,
|
|
484
|
+
quoteId: quoteId,
|
|
485
|
+
extension: order.extension.encode()
|
|
486
|
+
});
|
|
487
|
+
return [
|
|
488
|
+
4,
|
|
489
|
+
_this.api.submitOrder(relayerRequest)
|
|
490
|
+
];
|
|
491
|
+
case 1:
|
|
492
|
+
_state.sent();
|
|
493
|
+
return [
|
|
494
|
+
2,
|
|
495
|
+
{
|
|
496
|
+
order: orderStruct,
|
|
497
|
+
signature: signature,
|
|
498
|
+
quoteId: quoteId,
|
|
499
|
+
orderHash: order.getOrderHash(_this.config.network),
|
|
500
|
+
extension: relayerRequest.extension
|
|
501
|
+
}
|
|
502
|
+
];
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
})();
|
|
506
|
+
}
|
|
507
|
+
},
|
|
469
508
|
{
|
|
470
509
|
key: "getQuoteResult",
|
|
471
510
|
value: function getQuoteResult(params) {
|
|
@@ -2,12 +2,13 @@ import { Address } from '@1inch/limit-order-sdk';
|
|
|
2
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
|
-
import { FusionOrder
|
|
5
|
+
import { FusionOrder } from '../../../fusion-order/index.js';
|
|
6
6
|
import { QuoterRequest } from '../quoter.request.js';
|
|
7
|
+
import { ProxyFactory } from '../../../index.js';
|
|
7
8
|
export declare class Quote {
|
|
8
9
|
private readonly params;
|
|
9
10
|
readonly settlementAddress: Address;
|
|
10
|
-
readonly
|
|
11
|
+
readonly nativeOrderFactory?: ProxyFactory;
|
|
11
12
|
readonly fromTokenAmount: bigint;
|
|
12
13
|
readonly presets: {
|
|
13
14
|
[PresetEnum.fast]: Preset;
|
|
@@ -27,7 +28,7 @@ export declare class Quote {
|
|
|
27
28
|
readonly surplusFee?: number;
|
|
28
29
|
readonly integratorFeeParams?: IntegratorFeeParams;
|
|
29
30
|
constructor(params: QuoterRequest, response: QuoterResponse);
|
|
30
|
-
createFusionOrder(paramsData: Omit<FusionOrderParamsData, 'permit' | 'isPermit2'>): FusionOrder
|
|
31
|
+
createFusionOrder(paramsData: Omit<FusionOrderParamsData, 'permit' | 'isPermit2'>): FusionOrder;
|
|
31
32
|
getPreset(type?: PresetEnum): Preset;
|
|
32
33
|
private getWhitelist;
|
|
33
34
|
private _createOrder;
|