@1inch/fusion-sdk 2.3.8 → 2.3.9-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/cjs/abi/NativeOrderFactory.abi.json +217 -0
  2. package/dist/cjs/abi/NativeOrderImpl.abi.json +281 -0
  3. package/dist/cjs/api/quoter/quote/quote.js +29 -4
  4. package/dist/cjs/contracts/index.js +20 -0
  5. package/dist/cjs/contracts/native-order-factory.js +115 -0
  6. package/dist/cjs/contracts/native-order-impl.js +129 -0
  7. package/dist/cjs/contracts/proxy-factory.js +87 -0
  8. package/dist/cjs/contracts/types.js +4 -0
  9. package/dist/cjs/fusion-order/cancellation-auction.js +81 -0
  10. package/dist/cjs/fusion-order/fusion-order.js +71 -25
  11. package/dist/cjs/fusion-order/fusion-order.spec.js +73 -0
  12. package/dist/cjs/fusion-order/index.js +1 -0
  13. package/dist/cjs/fusion-order/types.js +4 -0
  14. package/dist/cjs/index.js +1 -0
  15. package/dist/cjs/sdk/sdk.js +83 -28
  16. package/dist/esm/abi/NativeOrderFactory.abi.json +217 -0
  17. package/dist/esm/abi/NativeOrderImpl.abi.json +281 -0
  18. package/dist/esm/api/quoter/quote/quote.js +24 -4
  19. package/dist/esm/contracts/index.js +3 -0
  20. package/dist/esm/contracts/native-order-factory.js +100 -0
  21. package/dist/esm/contracts/native-order-impl.js +114 -0
  22. package/dist/esm/contracts/proxy-factory.js +72 -0
  23. package/dist/esm/contracts/types.js +1 -0
  24. package/dist/esm/fusion-order/cancellation-auction.js +66 -0
  25. package/dist/esm/fusion-order/fusion-order.js +69 -23
  26. package/dist/esm/fusion-order/fusion-order.spec.js +73 -0
  27. package/dist/esm/fusion-order/index.js +1 -0
  28. package/dist/esm/fusion-order/types.js +11 -0
  29. package/dist/esm/index.js +1 -0
  30. package/dist/esm/package.json +1 -1
  31. package/dist/esm/sdk/sdk.js +83 -28
  32. package/dist/types/src/api/quoter/quote/quote.d.ts +3 -0
  33. package/dist/types/src/api/quoter/types.d.ts +2 -0
  34. package/dist/types/src/contracts/index.d.ts +3 -0
  35. package/dist/types/src/contracts/native-order-factory.d.ts +9 -0
  36. package/dist/types/src/contracts/native-order-impl.d.ts +10 -0
  37. package/dist/types/src/contracts/proxy-factory.d.ts +8 -0
  38. package/dist/types/src/contracts/types.d.ts +6 -0
  39. package/dist/types/src/fusion-order/cancellation-auction.d.ts +7 -0
  40. package/dist/types/src/fusion-order/fusion-order.d.ts +9 -27
  41. package/dist/types/src/fusion-order/index.d.ts +1 -0
  42. package/dist/types/src/fusion-order/types.d.ts +20 -0
  43. package/dist/types/src/index.d.ts +1 -0
  44. package/dist/types/src/sdk/sdk.d.ts +4 -0
  45. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  46. package/package.json +1 -1
@@ -32,12 +32,14 @@ function _define_property(obj, key, value) {
32
32
  }
33
33
  import { Address, Bps, randBigInt } from '@1inch/limit-order-sdk';
34
34
  import { UINT_40_MAX } from '@1inch/byte-utils';
35
+ import assert from 'assert';
35
36
  import { FusionOrderParams } from './order-params.js';
36
37
  import { PresetEnum } from '../types.js';
37
38
  import { Preset } from '../preset.js';
38
39
  import { FusionOrder, SurplusParams, Whitelist } from '../../../fusion-order/index.js';
39
40
  import { CHAIN_TO_WRAPPER } from '../../../fusion-order/constants.js';
40
41
  import { Fees, ResolverFee, IntegratorFee } from '../../../fusion-order/fees/index.js';
42
+ import { ProxyFactory } from '../../../index.js';
41
43
  export var Quote = /*#__PURE__*/ function() {
42
44
  "use strict";
43
45
  function Quote(params, response) {
@@ -47,6 +49,10 @@ export var Quote = /*#__PURE__*/ function() {
47
49
  * Fusion extension address
48
50
  * @see https://github.com/1inch/limit-order-settlement
49
51
  */ _define_property(this, "settlementAddress", void 0);
52
+ /**
53
+ * Native asset extension address
54
+ * @see https://github.com/1inch/limit-order-settlement todo: update link
55
+ */ _define_property(this, "nativeOrderFactory", void 0);
50
56
  _define_property(this, "fromTokenAmount", void 0);
51
57
  _define_property(this, "presets", void 0);
52
58
  _define_property(this, "recommendedPreset", void 0);
@@ -75,6 +81,7 @@ export var Quote = /*#__PURE__*/ function() {
75
81
  this.recommendedPreset = response.recommended_preset;
76
82
  this.slippage = response.autoK;
77
83
  this.settlementAddress = new Address(response.settlementAddress);
84
+ this.nativeOrderFactory = response.nativeOrderFactoryAddress && response.nativeOrderImplAddress ? new ProxyFactory(new Address(response.nativeOrderFactoryAddress), new Address(response.nativeOrderImplAddress)) : undefined;
78
85
  this.resolverFeePreset = {
79
86
  receiver: new Address(response.fee.receiver),
80
87
  whitelistDiscountPercent: Bps.fromPercent(response.fee.whitelistDiscountPercent),
@@ -109,18 +116,20 @@ export var Quote = /*#__PURE__*/ function() {
109
116
  var _params_nonce;
110
117
  var nonce = isNonceRequired ? (_params_nonce = params.nonce) !== null && _params_nonce !== void 0 ? _params_nonce : randBigInt(UINT_40_MAX) : params.nonce;
111
118
  var takerAsset = this.params.toTokenAddress.isNative() ? CHAIN_TO_WRAPPER[paramsData.network] : this.params.toTokenAddress;
112
- return FusionOrder.new(this.settlementAddress, {
119
+ var orderInfo = {
113
120
  makerAsset: this.params.fromTokenAddress,
114
121
  takerAsset: takerAsset,
115
122
  makingAmount: this.fromTokenAmount,
116
123
  takingAmount: preset.auctionEndAmount,
117
124
  maker: this.params.walletAddress,
118
125
  receiver: params.receiver
119
- }, {
126
+ };
127
+ var details = {
120
128
  auction: auctionDetails,
121
129
  whitelist: this.getWhitelist(auctionDetails.startTime, preset.exclusiveResolver),
122
130
  surplus: new SurplusParams(this.marketReturn, Bps.fromPercent(this.surplusFee || 0))
123
- }, {
131
+ };
132
+ var extra = {
124
133
  nonce: nonce,
125
134
  unwrapWETH: this.params.toTokenAddress.isNative(),
126
135
  permit: params.permit,
@@ -130,7 +139,8 @@ export var Quote = /*#__PURE__*/ function() {
130
139
  source: this.params.source,
131
140
  enablePermit2: params.isPermit2,
132
141
  fees: buildFees(this.resolverFeePreset, this.params.integratorFee || this.integratorFeeParams, this.surplusFee)
133
- });
142
+ };
143
+ return this._createOrder(paramsData.network, this.settlementAddress, orderInfo, details, extra);
134
144
  }
135
145
  },
136
146
  {
@@ -159,6 +169,16 @@ export var Quote = /*#__PURE__*/ function() {
159
169
  };
160
170
  }));
161
171
  }
172
+ },
173
+ {
174
+ key: "_createOrder",
175
+ value: function _createOrder(chainId, settlementExtension, orderInfo, details, extra) {
176
+ if (this.params.fromTokenAddress.isNative()) {
177
+ assert(this.nativeOrderFactory, 'expected nativeOrderFactory to be set for order from native asset');
178
+ return FusionOrder.fromNative(chainId, this.nativeOrderFactory, settlementExtension, orderInfo, details, extra);
179
+ }
180
+ return FusionOrder.new(settlementExtension, orderInfo, details, extra);
181
+ }
162
182
  }
163
183
  ]);
164
184
  return Quote;
@@ -0,0 +1,3 @@
1
+ export * from './native-order-factory.js';
2
+ export * from './native-order-impl.js';
3
+ export * from './proxy-factory.js';
@@ -0,0 +1,100 @@
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/NativeOrderFactory.abi.json';
74
+ export var NativeOrdersFactory = /*#__PURE__*/ function() {
75
+ "use strict";
76
+ function NativeOrdersFactory(address) {
77
+ _class_call_check(this, NativeOrdersFactory);
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(NativeOrdersFactory, [
84
+ {
85
+ key: "create",
86
+ value: function create(maker, order) {
87
+ return {
88
+ to: this.address,
89
+ value: order.makingAmount,
90
+ data: this.iface.encodeFunctionData('create', [
91
+ _object_spread_props(_object_spread({}, order.build()), {
92
+ maker: maker.toString()
93
+ })
94
+ ])
95
+ };
96
+ }
97
+ }
98
+ ]);
99
+ return NativeOrdersFactory;
100
+ }();
@@ -0,0 +1,114 @@
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.build()), {
92
+ maker: maker.toString()
93
+ })
94
+ ])
95
+ };
96
+ }
97
+ },
98
+ {
99
+ key: "cancelExpiredOrderByResolver",
100
+ value: function cancelExpiredOrderByResolver(maker, order) {
101
+ return {
102
+ to: this.address,
103
+ value: 0n,
104
+ data: this.iface.encodeFunctionData('cancelExpiredOrderByResolver', [
105
+ _object_spread_props(_object_spread({}, order.build()), {
106
+ maker: maker.toString()
107
+ })
108
+ ])
109
+ };
110
+ }
111
+ }
112
+ ]);
113
+ return NativeOrdersImpl;
114
+ }();
@@ -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
+ }();
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,66 @@
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 { UINT_32_MAX, UINT_16_MAX } from '@1inch/byte-utils';
34
+ import assert from 'assert';
35
+ export var CancellationAuction = /*#__PURE__*/ function() {
36
+ "use strict";
37
+ function CancellationAuction(duration, /**
38
+ * Value in bps, i.e. 5000 for 50%
39
+ *
40
+ * Maximum reward (as percentage of gas cost) that resolver receives for cancelling an expired order.
41
+ * The reward is deducted from the order's making amount.
42
+ * To make order cancellation attractive to resolver max reward should be >= 100%
43
+ *
44
+ * @example Order: 1 ETH, Cancellation gas: 0.00001 ETH, Reward: 50%
45
+ * → Resolver gets: 0.000005 ETH (50% of gas cost)
46
+ * → User gets back: 0.999995 ETH
47
+ */ maxRewardBps) {
48
+ _class_call_check(this, CancellationAuction);
49
+ _define_property(this, "duration", void 0);
50
+ _define_property(this, "maxRewardBps", void 0);
51
+ this.duration = duration;
52
+ this.maxRewardBps = maxRewardBps;
53
+ assert(duration <= UINT_32_MAX, 'max cancellation auction duration must be <= UINT_32_MAX');
54
+ assert(maxRewardBps <= UINT_16_MAX, 'max cancellation auction maxRewardBps must be <= UINT_16_MAX');
55
+ }
56
+ _create_class(CancellationAuction, [
57
+ {
58
+ key: "build",
59
+ value: function build() {
60
+ return this.duration << 16n | this.maxRewardBps;
61
+ }
62
+ }
63
+ ]);
64
+ return CancellationAuction;
65
+ }();
66
+ _define_property(CancellationAuction, "ZERO", new CancellationAuction(0n, 0n));
@@ -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';
@@ -85,18 +86,7 @@ export var FusionOrder = /*#__PURE__*/ function() {
85
86
  * Fusion extension address
86
87
  * @see https://github.com/1inch/limit-order-settlement
87
88
  */ settlementExtensionContract, orderInfo, auctionDetails, whitelist) {
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] : /**
89
- * Required if `allowPartialFills` or `allowMultipleFills` is false
90
- */ /**
91
- * 0x prefixed without the token address
92
- */ /**
93
- * Default is true
94
- */ /**
95
- * Default is true
96
- */ /**
97
- * Order will expire in `orderExpirationDelay` after auction ends
98
- * Default 12s
99
- */ FusionOrder.defaultExtra, extension = arguments.length > 6 && arguments[6] !== void 0 ? arguments[6] : new FusionExtension(settlementExtensionContract, auctionDetails, whitelist, surplusParams, {
89
+ 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, {
100
90
  makerPermit: extra.permit ? new Interaction(orderInfo.makerAsset, extra.permit) : undefined,
101
91
  customReceiver: orderInfo.receiver,
102
92
  fees: extra === null || extra === void 0 ? void 0 : extra.fees
@@ -136,6 +126,9 @@ export var FusionOrder = /*#__PURE__*/ function() {
136
126
  var builtExtension = extension.build();
137
127
  var salt = LimitOrder.buildSalt(builtExtension, orderInfo.salt);
138
128
  var saltWithInjectedTrackCode = orderInfo.salt ? salt : injectTrackCode(salt, extra.source);
129
+ if (orderInfo.makerAsset.isNative()) {
130
+ throw new Error('use FusionOrder.fromNative to create order from native asset');
131
+ }
139
132
  this.inner = new LimitOrder(_object_spread_props(_object_spread({}, orderInfo), {
140
133
  receiver: receiver,
141
134
  salt: saltWithInjectedTrackCode
@@ -437,6 +430,32 @@ export var FusionOrder = /*#__PURE__*/ function() {
437
430
  value: function getAmountCalculator() {
438
431
  return AmountCalculator.fromExtension(this.fusionExtension);
439
432
  }
433
+ },
434
+ {
435
+ key: "isNative",
436
+ value: function isNative(chainId, ethOrderFactory, signature) {
437
+ return FusionOrder.isNativeOrder(chainId, ethOrderFactory, this.build(), signature);
438
+ }
439
+ },
440
+ {
441
+ key: "nativeSignature",
442
+ value: /**
443
+ * Returns signature for submitting native order on-chain
444
+ * Only valid if order is native
445
+ *
446
+ * @see FusionOrder.isNative
447
+ * @see FusionOrder.fromNative
448
+ */ function nativeSignature(maker) {
449
+ return new LimitOrder({
450
+ maker: maker,
451
+ makerAsset: this.makerAsset,
452
+ makingAmount: this.makingAmount,
453
+ takingAmount: this.takingAmount,
454
+ takerAsset: this.takerAsset,
455
+ receiver: this.receiver,
456
+ salt: this.salt
457
+ }, this.inner.makerTraits).toCalldata();
458
+ }
440
459
  }
441
460
  ], [
442
461
  {
@@ -444,20 +463,47 @@ export var FusionOrder = /*#__PURE__*/ function() {
444
463
  value: function _new(/**
445
464
  * Fusion extension address
446
465
  * @see https://github.com/1inch/limit-order-settlement
447
- */ settlementExtension, orderInfo, details, extra) /**
448
- * Required if `allowPartialFills` or `allowMultipleFills` is false
449
- * Max size is 40bit
450
- */ /**
451
- * Default is true
452
- */ /**
453
- * Default is true
454
- */ /**
455
- * Order will expire in `orderExpirationDelay` after auction ends
456
- * Default 12s
457
- */ {
466
+ */ settlementExtension, orderInfo, details, extra) {
458
467
  return new FusionOrder(settlementExtension, orderInfo, details.auction, details.whitelist, details.surplus, extra);
459
468
  }
460
469
  },
470
+ {
471
+ key: "isNativeOrder",
472
+ value: function isNativeOrder(chainId, ethOrderFactory, order, signature) {
473
+ try {
474
+ var orderWithRealMaker = LimitOrder.fromCalldata(signature);
475
+ var expectedAddress = ethOrderFactory.getProxyAddress(orderWithRealMaker.getOrderHash(chainId));
476
+ return expectedAddress.equal(new Address(order.maker));
477
+ } catch (e) {
478
+ return false;
479
+ }
480
+ }
481
+ },
482
+ {
483
+ key: "fromNative",
484
+ value: /**
485
+ * Create new order from native asset
486
+ *
487
+ *
488
+ * Note, that such order should be submitted on-chain through `ETHOrders.depositForOrder` AND off-chain through submit to relayer
489
+ * // todo: update link
490
+ * @see ETHOrders.depositForOrder https://github.com/1inch/limit-order-protocol/blob/c100474444cd71cf7989cd8a63f375e72656b8b4/contracts/extensions/ETHOrders.sol#L89
491
+ */ function fromNative(chainId, ethOrdersFactory, /**
492
+ * Fusion extension address
493
+ * @see https://github.com/1inch/limit-order-settlement
494
+ */ settlementExtension, orderInfo, details, extra) {
495
+ var _orderInfo = _object_spread_props(_object_spread({}, orderInfo), {
496
+ makerAsset: CHAIN_TO_WRAPPER[chainId],
497
+ receiver: orderInfo.receiver || orderInfo.maker
498
+ });
499
+ // create temp order to calc order hash
500
+ var _order = FusionOrder.new(settlementExtension, _orderInfo, details, extra);
501
+ var finalOrderInfo = _object_spread_props(_object_spread({}, _orderInfo), {
502
+ maker: ethOrdersFactory.getProxyAddress(_order.getOrderHash(chainId))
503
+ });
504
+ return new FusionOrder(settlementExtension, finalOrderInfo, details.auction, details.whitelist, details.surplus, extra);
505
+ }
506
+ },
461
507
  {
462
508
  key: "fromDataAndExtension",
463
509
  value: /**
@@ -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,74 @@ 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 NOT from native asset', function() {
333
+ var ethOrderFactory = new ProxyFactory(Address.fromBigInt(1n), Address.fromBigInt(2n));
334
+ var chainId = NetworkEnum.ETHEREUM;
335
+ var settlementExt = Address.fromBigInt(3n);
336
+ var maker = new Address('0x00000000219ab540356cbb839cbe05303d7705fa');
337
+ var nativeOrder = FusionOrder.new(settlementExt, {
338
+ makerAsset: new Address('0x1000000000000000000000000000000000000000'),
339
+ takerAsset: new Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
340
+ makingAmount: 1000000000000000000n,
341
+ takingAmount: 1420000000n,
342
+ maker: maker,
343
+ salt: 10n
344
+ }, {
345
+ auction: new AuctionDetails({
346
+ duration: 180n,
347
+ startTime: 1673548149n,
348
+ initialRateBump: 50000,
349
+ points: [
350
+ {
351
+ coefficient: 20000,
352
+ delay: 12
353
+ }
354
+ ]
355
+ }),
356
+ whitelist: Whitelist.new(1673548139n, [
357
+ {
358
+ address: new Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
359
+ allowFrom: 0n
360
+ }
361
+ ]),
362
+ surplus: SurplusParams.NO_FEE
363
+ });
364
+ expect(nativeOrder.isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(false);
365
+ expect(FusionOrder.fromDataAndExtension(nativeOrder.build(), nativeOrder.extension).isNative(chainId, ethOrderFactory, nativeOrder.nativeSignature(maker))).toEqual(false);
366
+ });
367
+ });
@@ -5,3 +5,4 @@ export * from './fusion-extension.js';
5
5
  export * from './fees/index.js';
6
6
  export { CHAIN_TO_WRAPPER } from './constants.js';
7
7
  export * from './surplus-params.js';
8
+ export * from './cancellation-auction.js';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Required if `allowPartialFills` or `allowMultipleFills` is false
3
+ * Max size is 40bit
4
+ */ /**
5
+ * Default is true
6
+ */ /**
7
+ * Default is true
8
+ */ /**
9
+ * Order will expire in `orderExpirationDelay` after auction ends
10
+ * Default 12s
11
+ */ export { };