@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.
- package/dist/cjs/abi/NativeOrderFactory.abi.json +217 -0
- package/dist/cjs/abi/NativeOrderImpl.abi.json +281 -0
- package/dist/cjs/api/quoter/quote/quote.js +29 -4
- package/dist/cjs/contracts/index.js +20 -0
- package/dist/cjs/contracts/native-order-factory.js +115 -0
- package/dist/cjs/contracts/native-order-impl.js +129 -0
- package/dist/cjs/contracts/proxy-factory.js +87 -0
- package/dist/cjs/contracts/types.js +4 -0
- package/dist/cjs/fusion-order/cancellation-auction.js +81 -0
- package/dist/cjs/fusion-order/fusion-order.js +71 -25
- package/dist/cjs/fusion-order/fusion-order.spec.js +73 -0
- package/dist/cjs/fusion-order/index.js +1 -0
- package/dist/cjs/fusion-order/types.js +4 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/sdk/sdk.js +83 -28
- package/dist/esm/abi/NativeOrderFactory.abi.json +217 -0
- package/dist/esm/abi/NativeOrderImpl.abi.json +281 -0
- package/dist/esm/api/quoter/quote/quote.js +24 -4
- package/dist/esm/contracts/index.js +3 -0
- package/dist/esm/contracts/native-order-factory.js +100 -0
- package/dist/esm/contracts/native-order-impl.js +114 -0
- package/dist/esm/contracts/proxy-factory.js +72 -0
- package/dist/esm/contracts/types.js +1 -0
- package/dist/esm/fusion-order/cancellation-auction.js +66 -0
- package/dist/esm/fusion-order/fusion-order.js +69 -23
- package/dist/esm/fusion-order/fusion-order.spec.js +73 -0
- package/dist/esm/fusion-order/index.js +1 -0
- package/dist/esm/fusion-order/types.js +11 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk/sdk.js +83 -28
- package/dist/types/src/api/quoter/quote/quote.d.ts +3 -0
- package/dist/types/src/api/quoter/types.d.ts +2 -0
- package/dist/types/src/contracts/index.d.ts +3 -0
- package/dist/types/src/contracts/native-order-factory.d.ts +9 -0
- package/dist/types/src/contracts/native-order-impl.d.ts +10 -0
- package/dist/types/src/contracts/proxy-factory.d.ts +8 -0
- package/dist/types/src/contracts/types.d.ts +6 -0
- package/dist/types/src/fusion-order/cancellation-auction.d.ts +7 -0
- package/dist/types/src/fusion-order/fusion-order.d.ts +9 -27
- package/dist/types/src/fusion-order/index.d.ts +1 -0
- package/dist/types/src/fusion-order/types.d.ts +20 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/sdk/sdk.d.ts +4 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- 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
|
-
|
|
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,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
|
+
});
|
|
@@ -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 { };
|