@1inch/fusion-sdk 1.0.1-rc.0 → 1.0.1-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/api/orders/order-api.spec.js +1 -0
- package/dist/api/orders/order-api.spec.js.map +1 -1
- package/dist/api/quoter/quote/quote.d.ts +4 -0
- package/dist/api/quoter/quote/quote.js +3 -2
- package/dist/api/quoter/quote/quote.js.map +1 -1
- package/dist/api/quoter/quote/types.d.ts +4 -0
- package/dist/auction-calculator/auction-calculator.d.ts +25 -5
- package/dist/auction-calculator/auction-calculator.js +35 -11
- package/dist/auction-calculator/auction-calculator.js.map +1 -1
- package/dist/auction-calculator/auction-calculator.spec.js +33 -5
- package/dist/auction-calculator/auction-calculator.spec.js.map +1 -1
- package/dist/auction-calculator/calc.d.ts +8 -0
- package/dist/auction-calculator/calc.js +8 -0
- package/dist/auction-calculator/calc.js.map +1 -1
- package/dist/auction-calculator/constants.js +1 -1
- package/dist/auction-calculator/constants.js.map +1 -1
- package/dist/connector/blockchain/private-key-provider.connector.js +2 -0
- package/dist/connector/blockchain/private-key-provider.connector.js.map +1 -1
- package/dist/connector/ws/websocket-client.connector.js +2 -0
- package/dist/connector/ws/websocket-client.connector.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/fusion-order/auction-details/auction-details.d.ts +27 -0
- package/dist/fusion-order/auction-details/auction-details.js +20 -2
- package/dist/fusion-order/auction-details/auction-details.js.map +1 -1
- package/dist/fusion-order/auction-details/types.d.ts +12 -0
- package/dist/fusion-order/fusion-order.d.ts +52 -1
- package/dist/fusion-order/fusion-order.js +68 -4
- package/dist/fusion-order/fusion-order.js.map +1 -1
- package/dist/fusion-order/fusion-order.spec.js +6 -5
- package/dist/fusion-order/fusion-order.spec.js.map +1 -1
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.d.ts +34 -1
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js +94 -46
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js.map +1 -1
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js +76 -7
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js.map +1 -1
- package/dist/fusion-order/settlement-post-interaction-data/types.d.ts +11 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/sdk/types.d.ts +11 -0
- package/dist/utils/amounts.d.ts +16 -0
- package/dist/utils/amounts.js +16 -0
- package/dist/utils/amounts.js.map +1 -1
- package/dist/utils/time.d.ts +1 -0
- package/dist/utils/time.js +8 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js +1 -30
- package/dist/utils.js.map +1 -1
- package/dist/validations.d.ts +4 -0
- package/dist/validations.js +4 -0
- package/dist/validations.js.map +1 -1
- package/dist/ws-api/ws.spec.js +1 -0
- package/dist/ws-api/ws.spec.js.map +1 -1
- package/package.json +17 -9
- package/dist/limit-order-contract/index.d.ts +0 -1
- package/dist/limit-order-contract/index.js +0 -6
- package/dist/limit-order-contract/index.js.map +0 -1
- package/dist/utils/bytes/bit-mask.d.ts +0 -7
- package/dist/utils/bytes/bit-mask.js +0 -22
- package/dist/utils/bytes/bit-mask.js.map +0 -1
- package/dist/utils/bytes/bit-mask.spec.d.ts +0 -1
- package/dist/utils/bytes/bit-mask.spec.js +0 -16
- package/dist/utils/bytes/bit-mask.spec.js.map +0 -1
- package/dist/utils/bytes/bn.d.ts +0 -20
- package/dist/utils/bytes/bn.js +0 -68
- package/dist/utils/bytes/bn.js.map +0 -1
- package/dist/utils/bytes/bn.spec.d.ts +0 -1
- package/dist/utils/bytes/bn.spec.js +0 -19
- package/dist/utils/bytes/bn.spec.js.map +0 -1
- package/dist/utils/bytes/bytes-iter.d.ts +0 -12
- package/dist/utils/bytes/bytes-iter.js +0 -47
- package/dist/utils/bytes/bytes-iter.js.map +0 -1
|
@@ -9,25 +9,76 @@ export declare class FusionOrder {
|
|
|
9
9
|
private inner;
|
|
10
10
|
private constructor();
|
|
11
11
|
get extension(): Extension;
|
|
12
|
-
|
|
12
|
+
get maker(): Address;
|
|
13
|
+
get takerAsset(): Address;
|
|
14
|
+
get makerAsset(): Address;
|
|
15
|
+
get takingAmount(): bigint;
|
|
16
|
+
get makingAmount(): bigint;
|
|
17
|
+
get receiver(): Address;
|
|
18
|
+
/**
|
|
19
|
+
* Timestamp in sec
|
|
20
|
+
*/
|
|
21
|
+
get deadline(): bigint;
|
|
22
|
+
static new(
|
|
23
|
+
/**
|
|
24
|
+
* Fusion extension address
|
|
25
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
26
|
+
*/
|
|
27
|
+
settlementExtension: Address, orderInfo: OrderInfoData, details: {
|
|
13
28
|
auction: AuctionDetails;
|
|
14
29
|
fees?: {
|
|
15
30
|
integratorFee?: IntegratorFee;
|
|
16
31
|
bankFee?: bigint;
|
|
17
32
|
};
|
|
18
33
|
whitelist: AuctionWhitelistItem[];
|
|
34
|
+
/**
|
|
35
|
+
* Time from which order can be executed
|
|
36
|
+
*/
|
|
37
|
+
resolvingStartTime?: bigint;
|
|
19
38
|
}, extra?: {
|
|
20
39
|
unwrapWETH?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Required if `allowPartialFills` is false
|
|
42
|
+
*/
|
|
21
43
|
nonce?: bigint;
|
|
22
44
|
permit?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Default is true
|
|
47
|
+
*/
|
|
23
48
|
allowPartialFills?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Default is true
|
|
51
|
+
*/
|
|
24
52
|
allowMultipleFills?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Order will expire in `orderExpirationDelay` after auction ends
|
|
55
|
+
* Default 12s
|
|
56
|
+
*/
|
|
25
57
|
orderExpirationDelay?: bigint;
|
|
26
58
|
enablePermit2?: boolean;
|
|
27
59
|
}): FusionOrder;
|
|
60
|
+
/**
|
|
61
|
+
* Create FusionOrder from order data and extension
|
|
62
|
+
*
|
|
63
|
+
*/
|
|
28
64
|
static fromDataAndExtension(order: LimitOrderV4Struct, extension: Extension): FusionOrder;
|
|
29
65
|
build(): LimitOrderV4Struct;
|
|
30
66
|
getOrderHash(domain?: import("@1inch/limit-order-sdk").EIP712DomainType): string;
|
|
31
67
|
getTypedData(domain?: import("@1inch/limit-order-sdk").EIP712DomainType): EIP712TypedData;
|
|
32
68
|
getCalculator(): AuctionCalculator;
|
|
69
|
+
/**
|
|
70
|
+
* Calculates required taking amount for passed `makingAmount` at block time `time`
|
|
71
|
+
*
|
|
72
|
+
* @param makingAmount maker swap amount
|
|
73
|
+
* @param time execution time in sec
|
|
74
|
+
* @param blockBaseFee block fee in wei.
|
|
75
|
+
* */
|
|
76
|
+
calcTakingAmount(makingAmount: bigint, time: bigint, blockBaseFee?: bigint): bigint;
|
|
77
|
+
/**
|
|
78
|
+
* Check whether address allowed to execute order at the given time
|
|
79
|
+
*
|
|
80
|
+
* @param executor address of executor
|
|
81
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
82
|
+
*/
|
|
83
|
+
canExecuteAt(executor: Address, executionTime: bigint): boolean;
|
|
33
84
|
}
|
|
@@ -12,8 +12,15 @@ const settlement_post_interaction_data_1 = require("./settlement-post-interactio
|
|
|
12
12
|
const auction_calculator_1 = require("../auction-calculator");
|
|
13
13
|
const utils_1 = require("../utils");
|
|
14
14
|
const constants_1 = require("../constants");
|
|
15
|
+
const amounts_1 = require("../utils/amounts");
|
|
16
|
+
const time_1 = require("../utils/time");
|
|
15
17
|
class FusionOrder {
|
|
16
|
-
constructor(
|
|
18
|
+
constructor(
|
|
19
|
+
/**
|
|
20
|
+
* Fusion extension address
|
|
21
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
22
|
+
*/
|
|
23
|
+
extensionContract, orderInfo, auctionDetails, postInteractionData, extra = FusionOrder.defaultExtra) {
|
|
17
24
|
const { allowPartialFills, allowMultipleFills, unwrapWETH, enablePermit2, orderExpirationDelay, nonce, permit } = {
|
|
18
25
|
...FusionOrder.defaultExtra,
|
|
19
26
|
...extra
|
|
@@ -24,7 +31,8 @@ class FusionOrder {
|
|
|
24
31
|
const makerTraits = limit_order_sdk_1.MakerTraits.default()
|
|
25
32
|
.withExpiration(deadline)
|
|
26
33
|
.setPartialFills(allowPartialFills)
|
|
27
|
-
.setMultipleFills(allowMultipleFills)
|
|
34
|
+
.setMultipleFills(allowMultipleFills)
|
|
35
|
+
.enablePostInteraction();
|
|
28
36
|
if (makerTraits.isBitInvalidatorMode()) {
|
|
29
37
|
(0, assert_1.default)(nonce !== undefined, 'Nonce required, when partial fill or multiple fill disallowed');
|
|
30
38
|
}
|
|
@@ -51,14 +59,47 @@ class FusionOrder {
|
|
|
51
59
|
get extension() {
|
|
52
60
|
return this.inner.extension;
|
|
53
61
|
}
|
|
54
|
-
|
|
62
|
+
get maker() {
|
|
63
|
+
return this.inner.maker;
|
|
64
|
+
}
|
|
65
|
+
get takerAsset() {
|
|
66
|
+
return this.inner.takerAsset;
|
|
67
|
+
}
|
|
68
|
+
get makerAsset() {
|
|
69
|
+
return this.inner.makerAsset;
|
|
70
|
+
}
|
|
71
|
+
get takingAmount() {
|
|
72
|
+
return this.inner.takingAmount;
|
|
73
|
+
}
|
|
74
|
+
get makingAmount() {
|
|
75
|
+
return this.inner.makingAmount;
|
|
76
|
+
}
|
|
77
|
+
get receiver() {
|
|
78
|
+
return this.inner.receiver;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Timestamp in sec
|
|
82
|
+
*/
|
|
83
|
+
get deadline() {
|
|
84
|
+
return this.inner.makerTraits.expiration() || 0n;
|
|
85
|
+
}
|
|
86
|
+
static new(
|
|
87
|
+
/**
|
|
88
|
+
* Fusion extension address
|
|
89
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
90
|
+
*/
|
|
91
|
+
settlementExtension, orderInfo, details, extra) {
|
|
55
92
|
return new FusionOrder(settlementExtension, orderInfo, details.auction, settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
56
93
|
bankFee: details.fees?.bankFee || 0n,
|
|
57
94
|
integratorFee: details.fees?.integratorFee,
|
|
58
95
|
whitelist: details.whitelist,
|
|
59
|
-
|
|
96
|
+
resolvingStartTime: details.resolvingStartTime ?? (0, time_1.now)()
|
|
60
97
|
}), extra);
|
|
61
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Create FusionOrder from order data and extension
|
|
101
|
+
*
|
|
102
|
+
*/
|
|
62
103
|
static fromDataAndExtension(order, extension) {
|
|
63
104
|
const settlementContract = limit_order_sdk_1.Address.fromFirstBytes(extension.makingAmountData);
|
|
64
105
|
(0, assert_1.default)(limit_order_sdk_1.Address.fromFirstBytes(extension.takingAmountData).equal(settlementContract) &&
|
|
@@ -71,6 +112,7 @@ class FusionOrder {
|
|
|
71
112
|
? undefined
|
|
72
113
|
: deadline - auctionDetails.startTime - auctionDetails.duration;
|
|
73
114
|
return new FusionOrder(settlementContract, {
|
|
115
|
+
// shift because of how LimitOrder.buildSalt works
|
|
74
116
|
salt: BigInt(order.salt) >> 160n,
|
|
75
117
|
maker: new limit_order_sdk_1.Address(order.maker),
|
|
76
118
|
receiver: new limit_order_sdk_1.Address(order.receiver),
|
|
@@ -102,6 +144,28 @@ class FusionOrder {
|
|
|
102
144
|
getCalculator() {
|
|
103
145
|
return auction_calculator_1.AuctionCalculator.fromAuctionData(this.fusionExtension.postInteractionData, this.fusionExtension.details);
|
|
104
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Calculates required taking amount for passed `makingAmount` at block time `time`
|
|
149
|
+
*
|
|
150
|
+
* @param makingAmount maker swap amount
|
|
151
|
+
* @param time execution time in sec
|
|
152
|
+
* @param blockBaseFee block fee in wei.
|
|
153
|
+
* */
|
|
154
|
+
calcTakingAmount(makingAmount, time, blockBaseFee = 0n) {
|
|
155
|
+
const takingAmount = (0, amounts_1.calcTakingAmount)(makingAmount, this.makingAmount, this.takingAmount);
|
|
156
|
+
const calculator = this.getCalculator();
|
|
157
|
+
const bump = calculator.calcRateBump(time, blockBaseFee);
|
|
158
|
+
return calculator.calcAuctionTakingAmount(takingAmount, bump);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check whether address allowed to execute order at the given time
|
|
162
|
+
*
|
|
163
|
+
* @param executor address of executor
|
|
164
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
165
|
+
*/
|
|
166
|
+
canExecuteAt(executor, executionTime) {
|
|
167
|
+
return this.fusionExtension.postInteractionData.canExecuteAt(executor, executionTime);
|
|
168
|
+
}
|
|
105
169
|
}
|
|
106
170
|
exports.FusionOrder = FusionOrder;
|
|
107
171
|
FusionOrder.defaultExtra = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-order.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.ts"],"names":[],"mappings":";;;;;;AAAA,4DAS+B;AAC/B,oDAA2B;AAC3B,yDAAkD;AAClD,uDAAgD;AAChD,yFAI2C;AAC3C,8DAAuD;AACvD,oCAA8B;AAC9B,4CAA+B;
|
|
1
|
+
{"version":3,"file":"fusion-order.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,9 +28,10 @@ describe('Fusion Order', () => {
|
|
|
28
28
|
whitelist: [
|
|
29
29
|
{
|
|
30
30
|
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
31
|
-
|
|
31
|
+
allowFrom: 0n
|
|
32
32
|
}
|
|
33
|
-
]
|
|
33
|
+
],
|
|
34
|
+
resolvingStartTime: 1673548139n
|
|
34
35
|
});
|
|
35
36
|
const builtOrder = order.build();
|
|
36
37
|
expect(builtOrder).toStrictEqual({
|
|
@@ -40,8 +41,8 @@ describe('Fusion Order', () => {
|
|
|
40
41
|
receiver: '0x0000000000000000000000000000000000000000',
|
|
41
42
|
takerAsset: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
42
43
|
takingAmount: '1420000000',
|
|
43
|
-
makerTraits: '
|
|
44
|
-
salt: '
|
|
44
|
+
makerTraits: '33471150795161712739625987854073848363835856965607525350783622537007396290560',
|
|
45
|
+
salt: '14969955465678758833706505435513058355190519874774'
|
|
45
46
|
});
|
|
46
47
|
const makerTraits = new limit_order_sdk_1.MakerTraits(BigInt(builtOrder.makerTraits));
|
|
47
48
|
expect(makerTraits.isNativeUnwrapEnabled()).toEqual(false);
|
|
@@ -72,7 +73,7 @@ describe('Fusion Order', () => {
|
|
|
72
73
|
whitelist: [
|
|
73
74
|
{
|
|
74
75
|
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
75
|
-
|
|
76
|
+
allowFrom: 0n
|
|
76
77
|
}
|
|
77
78
|
]
|
|
78
79
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-order.spec.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.spec.ts"],"names":[],"mappings":";;AAAA,4DAA2D;AAC3D,iDAA0C;AAC1C,uDAAgD;AAEhD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,iBAAiB,GAAG,IAAI,yBAAO,CACjC,4CAA4C,CAC/C,CAAA;QAED,MAAM,KAAK,GAAG,0BAAW,CAAC,GAAG,CACzB,iBAAiB,EACjB;YACI,UAAU,EAAE,IAAI,yBAAO,CACnB,4CAA4C,CAC/C;YACD,UAAU,EAAE,IAAI,yBAAO,CACnB,4CAA4C,CAC/C;YACD,YAAY,EAAE,oBAAoB;YAClC,YAAY,EAAE,WAAW;YACzB,KAAK,EAAE,IAAI,yBAAO,CACd,4CAA4C,CAC/C;YACD,IAAI,EAAE,GAAG;SACZ,EACD;YACI,OAAO,EAAE,IAAI,gCAAc,CAAC;gBACxB,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,WAAW;gBACtB,eAAe,EAAE,KAAK;gBACtB,MAAM,EAAE;oBACJ;wBACI,WAAW,EAAE,KAAK;wBAClB,KAAK,EAAE,EAAE;qBACZ;iBACJ;aACJ,CAAC;YACF,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,IAAI,yBAAO,CAChB,4CAA4C,CAC/C;oBACD,
|
|
1
|
+
{"version":3,"file":"fusion-order.spec.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.d.ts
CHANGED
|
@@ -1,16 +1,49 @@
|
|
|
1
|
+
import { Address } from '@1inch/limit-order-sdk';
|
|
1
2
|
import { IntegratorFee, SettlementSuffixData } from './types';
|
|
2
3
|
export declare class SettlementPostInteractionData {
|
|
3
4
|
readonly whitelist: WhitelistItem[];
|
|
4
5
|
readonly integratorFee?: IntegratorFee;
|
|
5
6
|
readonly bankFee: bigint;
|
|
6
|
-
readonly
|
|
7
|
+
readonly resolvingStartTime: bigint;
|
|
7
8
|
private constructor();
|
|
8
9
|
static new(data: SettlementSuffixData): SettlementPostInteractionData;
|
|
10
|
+
/**
|
|
11
|
+
* Construct `SettlementPostInteractionData` from bytes
|
|
12
|
+
* @param data bytes with 0x prefix in next format:
|
|
13
|
+
* - [uint32 feeBank] only when first bit of `bitMask` enabled
|
|
14
|
+
* - [uint160 integratorFeeReceiver, uint32 integratorFeeRation] only when second bit of `bitMask` enabled
|
|
15
|
+
* - uint32 auctionStartTime
|
|
16
|
+
* - (bytes10 last10bytesOfAddress, uint16 auctionDelay) * N whitelist info
|
|
17
|
+
* - uint8 bitMask:
|
|
18
|
+
* 0b0000_0001 - fee bank mask
|
|
19
|
+
* 0b0000_0010 - integrator fee mask
|
|
20
|
+
* 0b1111_1000 - resolvers count mask
|
|
21
|
+
*
|
|
22
|
+
* All data is tight packed
|
|
23
|
+
* @see SettlementPostInteractionData.encode
|
|
24
|
+
*/
|
|
9
25
|
static decode(data: string): SettlementPostInteractionData;
|
|
26
|
+
/**
|
|
27
|
+
* Serialize post-interaction data to bytes
|
|
28
|
+
*/
|
|
10
29
|
encode(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Check whether address allowed to execute order at the given time
|
|
32
|
+
*
|
|
33
|
+
* @param executor address of executor
|
|
34
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
35
|
+
*/
|
|
36
|
+
canExecuteAt(executor: Address, executionTime: bigint): boolean;
|
|
11
37
|
}
|
|
12
38
|
type WhitelistItem = {
|
|
39
|
+
/**
|
|
40
|
+
* last 10 bytes of address, no 0x prefix
|
|
41
|
+
*/
|
|
13
42
|
addressHalf: string;
|
|
43
|
+
/**
|
|
44
|
+
* Delay from previous resolver in seconds
|
|
45
|
+
* For first resolver delay from `resolvingStartTime`
|
|
46
|
+
*/
|
|
14
47
|
delay: bigint;
|
|
15
48
|
};
|
|
16
49
|
export {};
|
package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js
CHANGED
|
@@ -4,38 +4,72 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SettlementPostInteractionData = void 0;
|
|
7
|
-
const ethers_1 = require("ethers");
|
|
8
7
|
const limit_order_sdk_1 = require("@1inch/limit-order-sdk");
|
|
8
|
+
const byte_utils_1 = require("@1inch/byte-utils");
|
|
9
9
|
const assert_1 = __importDefault(require("assert"));
|
|
10
10
|
const validations_1 = require("../../validations");
|
|
11
|
-
const bytes_iter_1 = require("../../utils/bytes/bytes-iter");
|
|
12
11
|
const utils_1 = require("../../utils");
|
|
12
|
+
const constants_1 = require("../../constants");
|
|
13
13
|
class SettlementPostInteractionData {
|
|
14
14
|
constructor(data) {
|
|
15
15
|
this.whitelist = data.whitelist;
|
|
16
16
|
this.integratorFee = data?.integratorFee;
|
|
17
|
-
this.bankFee = data.bankFee;
|
|
18
|
-
this.
|
|
17
|
+
this.bankFee = data.bankFee || 0n;
|
|
18
|
+
this.resolvingStartTime = data.resolvingStartTime;
|
|
19
19
|
}
|
|
20
20
|
static new(data) {
|
|
21
|
+
(0, assert_1.default)(data.whitelist.length, 'Whitelist can not be empty');
|
|
22
|
+
// transform timestamps to cumulative delays
|
|
23
|
+
let sumDelay = 0n;
|
|
24
|
+
const whitelist = data.whitelist
|
|
25
|
+
.map((d) => ({
|
|
26
|
+
addressHalf: d.address.toString().slice(-20),
|
|
27
|
+
allowFrom: d.allowFrom < data.resolvingStartTime
|
|
28
|
+
? data.resolvingStartTime
|
|
29
|
+
: d.allowFrom
|
|
30
|
+
}))
|
|
31
|
+
.sort((a, b) => Number(a.allowFrom - b.allowFrom)) // ASC
|
|
32
|
+
.map((val) => {
|
|
33
|
+
const delay = val.allowFrom - data.resolvingStartTime - sumDelay;
|
|
34
|
+
sumDelay += delay;
|
|
35
|
+
(0, assert_1.default)(delay < constants_1.UINT_16_MAX, 'Too big diff between timestamps');
|
|
36
|
+
return {
|
|
37
|
+
delay,
|
|
38
|
+
addressHalf: val.addressHalf
|
|
39
|
+
};
|
|
40
|
+
});
|
|
21
41
|
return new SettlementPostInteractionData({
|
|
22
42
|
...data,
|
|
23
|
-
whitelist
|
|
24
|
-
addressHalf: d.address.toString().slice(-20),
|
|
25
|
-
delay: d.delay
|
|
26
|
-
}))
|
|
43
|
+
whitelist
|
|
27
44
|
});
|
|
28
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Construct `SettlementPostInteractionData` from bytes
|
|
48
|
+
* @param data bytes with 0x prefix in next format:
|
|
49
|
+
* - [uint32 feeBank] only when first bit of `bitMask` enabled
|
|
50
|
+
* - [uint160 integratorFeeReceiver, uint32 integratorFeeRation] only when second bit of `bitMask` enabled
|
|
51
|
+
* - uint32 auctionStartTime
|
|
52
|
+
* - (bytes10 last10bytesOfAddress, uint16 auctionDelay) * N whitelist info
|
|
53
|
+
* - uint8 bitMask:
|
|
54
|
+
* 0b0000_0001 - fee bank mask
|
|
55
|
+
* 0b0000_0010 - integrator fee mask
|
|
56
|
+
* 0b1111_1000 - resolvers count mask
|
|
57
|
+
*
|
|
58
|
+
* All data is tight packed
|
|
59
|
+
* @see SettlementPostInteractionData.encode
|
|
60
|
+
*/
|
|
29
61
|
static decode(data) {
|
|
30
62
|
(0, assert_1.default)((0, validations_1.isHexBytes)(data), 'Post interaction data must be valid bytes string');
|
|
31
|
-
const iter =
|
|
32
|
-
const
|
|
63
|
+
const iter = byte_utils_1.BytesIter.BigInt(data);
|
|
64
|
+
const extra = iter.nextByte(byte_utils_1.BytesIter.SIDE.Back);
|
|
33
65
|
let bankFee = 0n;
|
|
34
66
|
let integratorFee;
|
|
35
|
-
|
|
67
|
+
// fee bank presented
|
|
68
|
+
if ((extra & 1n) === 1n) {
|
|
36
69
|
bankFee = iter.nextUint32();
|
|
37
70
|
}
|
|
38
|
-
|
|
71
|
+
// integrator fee presented
|
|
72
|
+
if ((extra & 2n) === 2n) {
|
|
39
73
|
const integratorAddress = iter.nextUint160();
|
|
40
74
|
const integratorFeeRatio = iter.nextUint32();
|
|
41
75
|
integratorFee = {
|
|
@@ -43,63 +77,77 @@ class SettlementPostInteractionData {
|
|
|
43
77
|
receiver: limit_order_sdk_1.Address.fromBigInt(integratorAddress)
|
|
44
78
|
};
|
|
45
79
|
}
|
|
46
|
-
const
|
|
80
|
+
const resolvingStartTime = iter.nextUint32();
|
|
47
81
|
const whitelist = [];
|
|
48
82
|
while (!iter.isEmpty()) {
|
|
49
83
|
const addressHalf = iter
|
|
50
84
|
.nextBytes(10)
|
|
51
85
|
.toString(16)
|
|
52
86
|
.padStart(20, '0');
|
|
53
|
-
const
|
|
87
|
+
const delay = iter.nextUint16();
|
|
54
88
|
whitelist.push({
|
|
55
89
|
addressHalf,
|
|
56
|
-
delay
|
|
90
|
+
delay
|
|
57
91
|
});
|
|
58
92
|
}
|
|
59
93
|
return new SettlementPostInteractionData({
|
|
60
94
|
integratorFee,
|
|
61
95
|
bankFee,
|
|
62
|
-
|
|
96
|
+
resolvingStartTime,
|
|
63
97
|
whitelist
|
|
64
98
|
});
|
|
65
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Serialize post-interaction data to bytes
|
|
102
|
+
*/
|
|
66
103
|
encode() {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
104
|
+
/**
|
|
105
|
+
* 0b0000_0001 - fee bank mask
|
|
106
|
+
* 0b0000_0010 - integrator fee mask
|
|
107
|
+
* 0b1111_1000 - resolvers count mask
|
|
108
|
+
*/
|
|
109
|
+
let bitMask = new byte_utils_1.BN(0n);
|
|
110
|
+
const bytes = new byte_utils_1.BytesBuilder();
|
|
111
|
+
// Add bank fee if exists
|
|
72
112
|
if (this.bankFee) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
type: 'uint32',
|
|
76
|
-
value: ethers_1.ethers.solidityPacked(['uint32'], [this.bankFee])
|
|
77
|
-
});
|
|
113
|
+
bitMask = bitMask.setBit(0n, 1);
|
|
114
|
+
bytes.addUint32(this.bankFee);
|
|
78
115
|
}
|
|
116
|
+
// add integrator fee if exists
|
|
79
117
|
if (this.integratorFee?.ratio) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}, {
|
|
85
|
-
type: 'uint32',
|
|
86
|
-
value: ethers_1.ethers.solidityPacked(['uint32'], [this.integratorFee.ratio])
|
|
87
|
-
});
|
|
118
|
+
bitMask = bitMask.setBit(1n, 1);
|
|
119
|
+
bytes
|
|
120
|
+
.addAddress(this.integratorFee.receiver.toString())
|
|
121
|
+
.addUint32(this.integratorFee.ratio);
|
|
88
122
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
value: this.auctionStartTime
|
|
92
|
-
});
|
|
123
|
+
bytes.addUint32(this.resolvingStartTime);
|
|
124
|
+
// whitelist data
|
|
93
125
|
for (const wl of this.whitelist) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
126
|
+
bytes.addBytes((0, utils_1.add0x)(wl.addressHalf)).addUint16(wl.delay);
|
|
127
|
+
}
|
|
128
|
+
bitMask = bitMask.setMask(new byte_utils_1.BitMask(3n, 8n), BigInt(this.whitelist.length));
|
|
129
|
+
bytes.addUint8(bitMask.value);
|
|
130
|
+
return bytes.asHex();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check whether address allowed to execute order at the given time
|
|
134
|
+
*
|
|
135
|
+
* @param executor address of executor
|
|
136
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
137
|
+
*/
|
|
138
|
+
canExecuteAt(executor, executionTime) {
|
|
139
|
+
const addressHalf = executor.toString().slice(-20);
|
|
140
|
+
let allowedFrom = this.resolvingStartTime;
|
|
141
|
+
for (const whitelist of this.whitelist) {
|
|
142
|
+
allowedFrom += whitelist.delay;
|
|
143
|
+
if (addressHalf === whitelist.addressHalf) {
|
|
144
|
+
return executionTime >= allowedFrom;
|
|
145
|
+
}
|
|
146
|
+
else if (executionTime < allowedFrom) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
101
149
|
}
|
|
102
|
-
return
|
|
150
|
+
return false;
|
|
103
151
|
}
|
|
104
152
|
}
|
|
105
153
|
exports.SettlementPostInteractionData = SettlementPostInteractionData;
|
package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settlement-post-interaction-data.js","sourceRoot":"","sources":["../../../src/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"settlement-post-interaction-data.js","sourceRoot":"","sources":["../../../src/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.ts"],"names":[],"mappings":"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"}
|
package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js
CHANGED
|
@@ -1,25 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const limit_order_sdk_1 = require("@1inch/limit-order-sdk");
|
|
4
|
+
const byte_utils_1 = require("@1inch/byte-utils");
|
|
4
5
|
const settlement_post_interaction_data_1 = require("./settlement-post-interaction-data");
|
|
5
6
|
const utils_1 = require("../../sdk/utils");
|
|
6
|
-
describe('
|
|
7
|
+
describe('SettlementPostInteractionData', () => {
|
|
8
|
+
it('Should encode/decode with bank fee and whitelist', () => {
|
|
9
|
+
const data = settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
10
|
+
bankFee: 1n,
|
|
11
|
+
resolvingStartTime: 1708117482n,
|
|
12
|
+
whitelist: [
|
|
13
|
+
{
|
|
14
|
+
address: limit_order_sdk_1.Address.ZERO_ADDRESS,
|
|
15
|
+
allowFrom: 0n
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
});
|
|
19
|
+
const encoded = data.encode();
|
|
20
|
+
expect((0, byte_utils_1.getBytesCount)(encoded)).toEqual(21n);
|
|
21
|
+
expect(settlement_post_interaction_data_1.SettlementPostInteractionData.decode(encoded)).toStrictEqual(data);
|
|
22
|
+
});
|
|
7
23
|
it('Should encode/decode with no fees and whitelist', () => {
|
|
8
24
|
const data = settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
25
|
+
resolvingStartTime: 1708117482n,
|
|
26
|
+
whitelist: [
|
|
27
|
+
{
|
|
28
|
+
address: limit_order_sdk_1.Address.ZERO_ADDRESS,
|
|
29
|
+
allowFrom: 0n
|
|
30
|
+
}
|
|
31
|
+
]
|
|
12
32
|
});
|
|
13
|
-
|
|
33
|
+
const encoded = data.encode();
|
|
34
|
+
expect((0, byte_utils_1.getBytesCount)(encoded)).toEqual(17n);
|
|
35
|
+
expect(settlement_post_interaction_data_1.SettlementPostInteractionData.decode(encoded)).toStrictEqual(data);
|
|
14
36
|
});
|
|
15
37
|
it('Should encode/decode with fees and whitelist', () => {
|
|
16
38
|
const data = settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
17
39
|
bankFee: 0n,
|
|
18
|
-
|
|
40
|
+
resolvingStartTime: 1708117482n,
|
|
19
41
|
whitelist: [
|
|
20
42
|
{
|
|
21
43
|
address: limit_order_sdk_1.Address.ZERO_ADDRESS,
|
|
22
|
-
|
|
44
|
+
allowFrom: 0n
|
|
23
45
|
}
|
|
24
46
|
],
|
|
25
47
|
integratorFee: {
|
|
@@ -29,5 +51,52 @@ describe('PostInteractionData', () => {
|
|
|
29
51
|
});
|
|
30
52
|
expect(settlement_post_interaction_data_1.SettlementPostInteractionData.decode(data.encode())).toStrictEqual(data);
|
|
31
53
|
});
|
|
54
|
+
it('Should generate correct whitelist', () => {
|
|
55
|
+
const start = 1708117482n;
|
|
56
|
+
const data = settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
57
|
+
resolvingStartTime: start,
|
|
58
|
+
whitelist: [
|
|
59
|
+
{
|
|
60
|
+
address: limit_order_sdk_1.Address.fromBigInt(2n),
|
|
61
|
+
allowFrom: start + 1000n
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
address: limit_order_sdk_1.Address.ZERO_ADDRESS,
|
|
65
|
+
allowFrom: start - 10n // should be set to start
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
address: limit_order_sdk_1.Address.fromBigInt(1n),
|
|
69
|
+
allowFrom: start + 10n
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
address: limit_order_sdk_1.Address.fromBigInt(3n),
|
|
73
|
+
allowFrom: start + 10n
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
expect(data.whitelist).toStrictEqual([
|
|
78
|
+
{
|
|
79
|
+
addressHalf: limit_order_sdk_1.Address.ZERO_ADDRESS.toString().slice(-20),
|
|
80
|
+
delay: 0n
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
addressHalf: limit_order_sdk_1.Address.fromBigInt(1n).toString().slice(-20),
|
|
84
|
+
delay: 10n
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
addressHalf: limit_order_sdk_1.Address.fromBigInt(3n).toString().slice(-20),
|
|
88
|
+
delay: 0n
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
addressHalf: limit_order_sdk_1.Address.fromBigInt(2n).toString().slice(-20),
|
|
92
|
+
delay: 990n
|
|
93
|
+
}
|
|
94
|
+
]);
|
|
95
|
+
expect(data.canExecuteAt(limit_order_sdk_1.Address.fromBigInt(1n), start + 10n)).toEqual(true);
|
|
96
|
+
expect(data.canExecuteAt(limit_order_sdk_1.Address.fromBigInt(1n), start + 9n)).toEqual(false);
|
|
97
|
+
expect(data.canExecuteAt(limit_order_sdk_1.Address.fromBigInt(3n), start + 10n)).toEqual(true);
|
|
98
|
+
expect(data.canExecuteAt(limit_order_sdk_1.Address.fromBigInt(3n), start + 9n)).toEqual(false);
|
|
99
|
+
expect(data.canExecuteAt(limit_order_sdk_1.Address.fromBigInt(2n), start + 50n)).toEqual(false);
|
|
100
|
+
});
|
|
32
101
|
});
|
|
33
102
|
//# sourceMappingURL=settlement-post-interaction-data.spec.js.map
|