@1inch/fusion-sdk 1.0.1-rc.4 → 1.0.1-rc.40
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 +6 -5
- package/dist/api/orders/order-api.spec.js.map +1 -1
- package/dist/api/orders/orders.api.d.ts +1 -0
- package/dist/api/orders/orders.api.js +4 -3
- package/dist/api/orders/orders.api.js.map +1 -1
- package/dist/api/orders/types.d.ts +2 -0
- package/dist/api/orders/types.js.map +1 -1
- package/dist/api/quoter/quote/order-params.d.ts +1 -0
- package/dist/api/quoter/quote/order-params.js +1 -0
- package/dist/api/quoter/quote/order-params.js.map +1 -1
- package/dist/api/quoter/quote/quote.d.ts +5 -1
- package/dist/api/quoter/quote/quote.js +18 -10
- package/dist/api/quoter/quote/quote.js.map +1 -1
- package/dist/api/quoter/quote/types.d.ts +5 -0
- package/dist/api/quoter/quoter.api.d.ts +1 -0
- package/dist/api/quoter/quoter.api.js +3 -2
- package/dist/api/quoter/quoter.api.js.map +1 -1
- package/dist/api/quoter/quoter.api.spec.js +21 -6
- package/dist/api/quoter/quoter.api.spec.js.map +1 -1
- package/dist/api/quoter/quoter.request.d.ts +1 -0
- package/dist/api/quoter/quoter.request.js +3 -1
- package/dist/api/quoter/quoter.request.js.map +1 -1
- package/dist/api/quoter/types.d.ts +4 -3
- package/dist/api/quoter/types.js.map +1 -1
- package/dist/api/relayer/relayer.api.d.ts +1 -0
- package/dist/api/relayer/relayer.api.js +3 -2
- package/dist/api/relayer/relayer.api.js.map +1 -1
- package/dist/api/relayer/relayer.api.spec.js +8 -5
- package/dist/api/relayer/relayer.api.spec.js.map +1 -1
- package/dist/api/relayer/relayer.request.d.ts +1 -0
- package/dist/api/relayer/relayer.request.js +3 -1
- package/dist/api/relayer/relayer.request.js.map +1 -1
- package/dist/api/relayer/types.d.ts +1 -0
- package/dist/auction-calculator/auction-calculator.d.ts +23 -4
- package/dist/auction-calculator/auction-calculator.js +40 -6
- package/dist/auction-calculator/auction-calculator.js.map +1 -1
- package/dist/auction-calculator/auction-calculator.spec.js +7 -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 +29 -0
- package/dist/fusion-order/auction-details/auction-details.js +21 -0
- 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-extension.d.ts +12 -4
- package/dist/fusion-order/fusion-extension.js +37 -9
- package/dist/fusion-order/fusion-extension.js.map +1 -1
- package/dist/fusion-order/fusion-extension.spec.d.ts +1 -0
- package/dist/fusion-order/fusion-extension.spec.js +75 -0
- package/dist/fusion-order/fusion-extension.spec.js.map +1 -0
- package/dist/fusion-order/fusion-order.d.ts +83 -3
- package/dist/fusion-order/fusion-order.js +124 -23
- package/dist/fusion-order/fusion-order.js.map +1 -1
- package/dist/fusion-order/fusion-order.spec.js +69 -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 +38 -1
- package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js +125 -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 +95 -8
- 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 +12 -3
- package/dist/fusion-order/source-track.d.ts +1 -0
- package/dist/fusion-order/source-track.js +16 -0
- package/dist/fusion-order/source-track.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/sdk/sdk.js +12 -10
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/types.d.ts +14 -0
- package/dist/sdk/utils.js +5 -2
- package/dist/sdk/utils.js.map +1 -1
- package/dist/utils/amounts.d.ts +17 -1
- package/dist/utils/amounts.js +19 -3
- 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/validations.d.ts +4 -0
- package/dist/validations.js +4 -0
- package/dist/validations.js.map +1 -1
- package/dist/ws-api/ws-api.d.ts +1 -0
- package/dist/ws-api/ws-api.js +2 -1
- package/dist/ws-api/ws-api.js.map +1 -1
- package/dist/ws-api/ws.spec.js +9 -8
- package/dist/ws-api/ws.spec.js.map +1 -1
- package/package.json +31 -24
- 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
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const limit_order_sdk_1 = require("@1inch/limit-order-sdk");
|
|
4
|
+
const fusion_order_1 = require("./fusion-order");
|
|
5
|
+
const auction_details_1 = require("./auction-details");
|
|
6
|
+
const fusion_extension_1 = require("./fusion-extension");
|
|
7
|
+
describe('FusionExtension', () => {
|
|
8
|
+
it('should decode', () => {
|
|
9
|
+
const extensionContract = new limit_order_sdk_1.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
|
|
10
|
+
const order = fusion_order_1.FusionOrder.new(extensionContract, {
|
|
11
|
+
makerAsset: new limit_order_sdk_1.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
|
|
12
|
+
takerAsset: new limit_order_sdk_1.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
13
|
+
makingAmount: 1000000000000000000n,
|
|
14
|
+
takingAmount: 1420000000n,
|
|
15
|
+
maker: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
16
|
+
salt: 10n
|
|
17
|
+
}, {
|
|
18
|
+
auction: new auction_details_1.AuctionDetails({
|
|
19
|
+
duration: 180n,
|
|
20
|
+
startTime: 1673548149n,
|
|
21
|
+
initialRateBump: 50000,
|
|
22
|
+
points: [
|
|
23
|
+
{
|
|
24
|
+
coefficient: 20000,
|
|
25
|
+
delay: 12
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}),
|
|
29
|
+
whitelist: [
|
|
30
|
+
{
|
|
31
|
+
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
32
|
+
allowFrom: 0n
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
resolvingStartTime: 1673548139n
|
|
36
|
+
});
|
|
37
|
+
const fusionExtension = fusion_extension_1.FusionExtension.decode(order.extension.encode());
|
|
38
|
+
expect(fusionExtension).toStrictEqual(order.fusionExtension);
|
|
39
|
+
});
|
|
40
|
+
it('should decode with permit', () => {
|
|
41
|
+
const extensionContract = new limit_order_sdk_1.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
|
|
42
|
+
const order = fusion_order_1.FusionOrder.new(extensionContract, {
|
|
43
|
+
makerAsset: new limit_order_sdk_1.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
|
|
44
|
+
takerAsset: new limit_order_sdk_1.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
45
|
+
makingAmount: 1000000000000000000n,
|
|
46
|
+
takingAmount: 1420000000n,
|
|
47
|
+
maker: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
48
|
+
salt: 10n
|
|
49
|
+
}, {
|
|
50
|
+
auction: new auction_details_1.AuctionDetails({
|
|
51
|
+
duration: 180n,
|
|
52
|
+
startTime: 1673548149n,
|
|
53
|
+
initialRateBump: 50000,
|
|
54
|
+
points: [
|
|
55
|
+
{
|
|
56
|
+
coefficient: 20000,
|
|
57
|
+
delay: 12
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}),
|
|
61
|
+
whitelist: [
|
|
62
|
+
{
|
|
63
|
+
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
64
|
+
allowFrom: 0n
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
resolvingStartTime: 1673548139n
|
|
68
|
+
}, {
|
|
69
|
+
permit: '0xdeadbeef'
|
|
70
|
+
});
|
|
71
|
+
const fusionExtension = fusion_extension_1.FusionExtension.decode(order.extension.encode());
|
|
72
|
+
expect(fusionExtension).toStrictEqual(order.fusionExtension);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=fusion-extension.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusion-extension.spec.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-extension.spec.ts"],"names":[],"mappings":";;AAAA,4DAA8C;AAC9C,iDAA0C;AAC1C,uDAAgD;AAChD,yDAAkD;AAElD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACrB,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,SAAS,EAAE,EAAE;iBAChB;aACJ;YACD,kBAAkB,EAAE,WAAW;SAClC,CACJ,CAAA;QACD,MAAM,eAAe,GAAG,kCAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;QACxE,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACjC,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,SAAS,EAAE,EAAE;iBAChB;aACJ;YACD,kBAAkB,EAAE,WAAW;SAClC,EACD;YACI,MAAM,EAAE,YAAY;SACvB,CACJ,CAAA;QACD,MAAM,eAAe,GAAG,kCAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;QACxE,MAAM,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
|
|
@@ -4,6 +4,12 @@ import { AuctionDetails } from './auction-details';
|
|
|
4
4
|
import { AuctionWhitelistItem, IntegratorFee } from './settlement-post-interaction-data';
|
|
5
5
|
import { AuctionCalculator } from '../auction-calculator';
|
|
6
6
|
export declare class FusionOrder {
|
|
7
|
+
/**
|
|
8
|
+
* Fusion extension address
|
|
9
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
10
|
+
*/
|
|
11
|
+
readonly settlementExtensionContract: Address;
|
|
12
|
+
private static _ORDER_FEE_BASE_POINTS;
|
|
7
13
|
private static defaultExtra;
|
|
8
14
|
readonly fusionExtension: FusionExtension;
|
|
9
15
|
private inner;
|
|
@@ -15,27 +21,101 @@ export declare class FusionOrder {
|
|
|
15
21
|
get takingAmount(): bigint;
|
|
16
22
|
get makingAmount(): bigint;
|
|
17
23
|
get receiver(): Address;
|
|
24
|
+
/**
|
|
25
|
+
* Timestamp in sec
|
|
26
|
+
*/
|
|
18
27
|
get deadline(): bigint;
|
|
19
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Timestamp in sec
|
|
30
|
+
*/
|
|
31
|
+
get auctionStartTime(): bigint;
|
|
32
|
+
/**
|
|
33
|
+
* Timestamp in sec
|
|
34
|
+
*/
|
|
35
|
+
get auctionEndTime(): bigint;
|
|
36
|
+
get partialFillAllowed(): boolean;
|
|
37
|
+
get multipleFillsAllowed(): boolean;
|
|
38
|
+
static new(
|
|
39
|
+
/**
|
|
40
|
+
* Fusion extension address
|
|
41
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
42
|
+
*/
|
|
43
|
+
settlementExtension: Address, orderInfo: OrderInfoData, details: {
|
|
20
44
|
auction: AuctionDetails;
|
|
21
45
|
fees?: {
|
|
22
46
|
integratorFee?: IntegratorFee;
|
|
23
47
|
bankFee?: bigint;
|
|
24
48
|
};
|
|
25
49
|
whitelist: AuctionWhitelistItem[];
|
|
50
|
+
/**
|
|
51
|
+
* Time from which order can be executed
|
|
52
|
+
*/
|
|
53
|
+
resolvingStartTime?: bigint;
|
|
26
54
|
}, extra?: {
|
|
27
55
|
unwrapWETH?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Required if `allowPartialFills` or `allowMultipleFills` is false
|
|
58
|
+
* Max size is 40bit
|
|
59
|
+
*/
|
|
28
60
|
nonce?: bigint;
|
|
29
61
|
permit?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Default is true
|
|
64
|
+
*/
|
|
30
65
|
allowPartialFills?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Default is true
|
|
68
|
+
*/
|
|
31
69
|
allowMultipleFills?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Order will expire in `orderExpirationDelay` after auction ends
|
|
72
|
+
* Default 12s
|
|
73
|
+
*/
|
|
32
74
|
orderExpirationDelay?: bigint;
|
|
33
75
|
enablePermit2?: boolean;
|
|
76
|
+
source?: string;
|
|
34
77
|
}): FusionOrder;
|
|
78
|
+
/**
|
|
79
|
+
* Create FusionOrder from order data and extension
|
|
80
|
+
*
|
|
81
|
+
*/
|
|
35
82
|
static fromDataAndExtension(order: LimitOrderV4Struct, extension: Extension): FusionOrder;
|
|
36
83
|
build(): LimitOrderV4Struct;
|
|
37
|
-
getOrderHash(
|
|
38
|
-
getTypedData(
|
|
84
|
+
getOrderHash(chainId: number): string;
|
|
85
|
+
getTypedData(chainId: number): EIP712TypedData;
|
|
39
86
|
getCalculator(): AuctionCalculator;
|
|
87
|
+
/**
|
|
88
|
+
* Calculates required taking amount for passed `makingAmount` at block time `time`
|
|
89
|
+
*
|
|
90
|
+
* @param makingAmount maker swap amount
|
|
91
|
+
* @param time execution time in sec
|
|
92
|
+
* @param blockBaseFee block fee in wei.
|
|
93
|
+
* */
|
|
40
94
|
calcTakingAmount(makingAmount: bigint, time: bigint, blockBaseFee?: bigint): bigint;
|
|
95
|
+
/**
|
|
96
|
+
* Check whether address allowed to execute order at the given time
|
|
97
|
+
*
|
|
98
|
+
* @param executor address of executor
|
|
99
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
100
|
+
*/
|
|
101
|
+
canExecuteAt(executor: Address, executionTime: bigint): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Check is order expired at a given time
|
|
104
|
+
*
|
|
105
|
+
* @param time timestamp in seconds
|
|
106
|
+
*/
|
|
107
|
+
isExpiredAt(time: bigint): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Returns how much fee will be credited from a resolver deposit account
|
|
110
|
+
* Token of fee set in Settlement extension constructor
|
|
111
|
+
* Actual deployments can be found at https://github.com/1inch/limit-order-settlement/tree/master/deployments
|
|
112
|
+
*
|
|
113
|
+
* @param filledMakingAmount which resolver fills
|
|
114
|
+
* @see https://github.com/1inch/limit-order-settlement/blob/0e3cae3653092ebb4ea5d2a338c87a54351ad883/contracts/extensions/ResolverFeeExtension.sol#L29
|
|
115
|
+
*/
|
|
116
|
+
getResolverFee(filledMakingAmount: bigint): bigint;
|
|
117
|
+
/**
|
|
118
|
+
* Check if `wallet` can fill order before other
|
|
119
|
+
*/
|
|
120
|
+
isExclusiveResolver(wallet: Address): boolean;
|
|
41
121
|
}
|
|
@@ -9,23 +9,36 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
9
9
|
const fusion_extension_1 = require("./fusion-extension");
|
|
10
10
|
const auction_details_1 = require("./auction-details");
|
|
11
11
|
const settlement_post_interaction_data_1 = require("./settlement-post-interaction-data");
|
|
12
|
+
const source_track_1 = require("./source-track");
|
|
12
13
|
const auction_calculator_1 = require("../auction-calculator");
|
|
13
|
-
const utils_1 = require("../utils");
|
|
14
14
|
const constants_1 = require("../constants");
|
|
15
15
|
const amounts_1 = require("../utils/amounts");
|
|
16
|
+
const time_1 = require("../utils/time");
|
|
16
17
|
class FusionOrder {
|
|
17
|
-
constructor(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
constructor(
|
|
19
|
+
/**
|
|
20
|
+
* Fusion extension address
|
|
21
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
22
|
+
*/
|
|
23
|
+
settlementExtensionContract, orderInfo, auctionDetails, postInteractionData, extra = FusionOrder.defaultExtra) {
|
|
24
|
+
this.settlementExtensionContract = settlementExtensionContract;
|
|
25
|
+
const allowPartialFills = extra.allowPartialFills ??
|
|
26
|
+
FusionOrder.defaultExtra.allowPartialFills;
|
|
27
|
+
const allowMultipleFills = extra.allowMultipleFills ??
|
|
28
|
+
FusionOrder.defaultExtra.allowMultipleFills;
|
|
29
|
+
const unwrapWETH = extra.unwrapWETH ?? FusionOrder.defaultExtra.unwrapWETH;
|
|
30
|
+
const enablePermit2 = extra.enablePermit2 ?? FusionOrder.defaultExtra.enablePermit2;
|
|
31
|
+
const orderExpirationDelay = extra.orderExpirationDelay ??
|
|
32
|
+
FusionOrder.defaultExtra.orderExpirationDelay;
|
|
33
|
+
const { nonce, permit } = extra;
|
|
22
34
|
const deadline = auctionDetails.startTime +
|
|
23
35
|
auctionDetails.duration +
|
|
24
36
|
orderExpirationDelay;
|
|
25
37
|
const makerTraits = limit_order_sdk_1.MakerTraits.default()
|
|
26
38
|
.withExpiration(deadline)
|
|
27
39
|
.setPartialFills(allowPartialFills)
|
|
28
|
-
.setMultipleFills(allowMultipleFills)
|
|
40
|
+
.setMultipleFills(allowMultipleFills)
|
|
41
|
+
.enablePostInteraction();
|
|
29
42
|
if (makerTraits.isBitInvalidatorMode()) {
|
|
30
43
|
(0, assert_1.default)(nonce !== undefined, 'Nonce required, when partial fill or multiple fill disallowed');
|
|
31
44
|
}
|
|
@@ -38,14 +51,22 @@ class FusionOrder {
|
|
|
38
51
|
if (nonce !== undefined) {
|
|
39
52
|
makerTraits.withNonce(nonce);
|
|
40
53
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
54
|
+
/**
|
|
55
|
+
* @see https://github.com/1inch/limit-order-settlement/blob/0afb4785cb825fe959c534ff4f1a771d4d33cdf4/contracts/extensions/IntegratorFeeExtension.sol#L65
|
|
56
|
+
*/
|
|
57
|
+
const receiver = postInteractionData.integratorFee?.ratio
|
|
58
|
+
? settlementExtensionContract
|
|
59
|
+
: orderInfo.receiver;
|
|
60
|
+
const extension = new fusion_extension_1.FusionExtension(settlementExtensionContract, auctionDetails, postInteractionData, permit ? new limit_order_sdk_1.Interaction(orderInfo.makerAsset, permit) : undefined);
|
|
45
61
|
const builtExtension = extension.build();
|
|
62
|
+
const salt = limit_order_sdk_1.LimitOrder.buildSalt(builtExtension, orderInfo.salt);
|
|
63
|
+
const saltWithInjectedTrackCode = orderInfo.salt
|
|
64
|
+
? salt
|
|
65
|
+
: (0, source_track_1.injectTrackCode)(salt, extra.source);
|
|
46
66
|
this.inner = new limit_order_sdk_1.LimitOrder({
|
|
47
67
|
...orderInfo,
|
|
48
|
-
|
|
68
|
+
receiver,
|
|
69
|
+
salt: saltWithInjectedTrackCode
|
|
49
70
|
}, makerTraits, builtExtension);
|
|
50
71
|
this.fusionExtension = extension;
|
|
51
72
|
}
|
|
@@ -70,29 +91,64 @@ class FusionOrder {
|
|
|
70
91
|
get receiver() {
|
|
71
92
|
return this.inner.receiver;
|
|
72
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Timestamp in sec
|
|
96
|
+
*/
|
|
73
97
|
get deadline() {
|
|
74
98
|
return this.inner.makerTraits.expiration() || 0n;
|
|
75
99
|
}
|
|
76
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Timestamp in sec
|
|
102
|
+
*/
|
|
103
|
+
get auctionStartTime() {
|
|
104
|
+
return this.fusionExtension.auctionDetails.startTime;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Timestamp in sec
|
|
108
|
+
*/
|
|
109
|
+
get auctionEndTime() {
|
|
110
|
+
const { startTime, duration } = this.fusionExtension.auctionDetails;
|
|
111
|
+
return startTime + duration;
|
|
112
|
+
}
|
|
113
|
+
get partialFillAllowed() {
|
|
114
|
+
return this.inner.makerTraits.isPartialFillAllowed();
|
|
115
|
+
}
|
|
116
|
+
get multipleFillsAllowed() {
|
|
117
|
+
return this.inner.makerTraits.isMultipleFillsAllowed();
|
|
118
|
+
}
|
|
119
|
+
static new(
|
|
120
|
+
/**
|
|
121
|
+
* Fusion extension address
|
|
122
|
+
* @see https://github.com/1inch/limit-order-settlement
|
|
123
|
+
*/
|
|
124
|
+
settlementExtension, orderInfo, details, extra) {
|
|
77
125
|
return new FusionOrder(settlementExtension, orderInfo, details.auction, settlement_post_interaction_data_1.SettlementPostInteractionData.new({
|
|
78
126
|
bankFee: details.fees?.bankFee || 0n,
|
|
79
127
|
integratorFee: details.fees?.integratorFee,
|
|
80
128
|
whitelist: details.whitelist,
|
|
81
|
-
|
|
129
|
+
resolvingStartTime: details.resolvingStartTime ?? (0, time_1.now)(),
|
|
130
|
+
customReceiver: orderInfo.receiver
|
|
82
131
|
}), extra);
|
|
83
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Create FusionOrder from order data and extension
|
|
135
|
+
*
|
|
136
|
+
*/
|
|
84
137
|
static fromDataAndExtension(order, extension) {
|
|
85
138
|
const settlementContract = limit_order_sdk_1.Address.fromFirstBytes(extension.makingAmountData);
|
|
86
139
|
(0, assert_1.default)(limit_order_sdk_1.Address.fromFirstBytes(extension.takingAmountData).equal(settlementContract) &&
|
|
87
140
|
limit_order_sdk_1.Address.fromFirstBytes(extension.postInteraction).equal(settlementContract), 'Invalid extension, all calls should be to the same address');
|
|
88
141
|
const makerTraits = new limit_order_sdk_1.MakerTraits(BigInt(order.makerTraits));
|
|
89
|
-
|
|
90
|
-
|
|
142
|
+
(0, assert_1.default)(!makerTraits.isPrivate(), 'fusion order can not be private');
|
|
143
|
+
(0, assert_1.default)(makerTraits.hasPostInteraction(), 'post-interaction must be enabled');
|
|
144
|
+
const auctionDetails = auction_details_1.AuctionDetails.fromExtension(extension);
|
|
145
|
+
const postInteractionData = settlement_post_interaction_data_1.SettlementPostInteractionData.fromExtension(extension);
|
|
91
146
|
const deadline = makerTraits.expiration();
|
|
92
147
|
const orderExpirationDelay = deadline === null
|
|
93
148
|
? undefined
|
|
94
149
|
: deadline - auctionDetails.startTime - auctionDetails.duration;
|
|
95
150
|
return new FusionOrder(settlementContract, {
|
|
151
|
+
// shift because of how LimitOrder.buildSalt works
|
|
96
152
|
salt: BigInt(order.salt) >> 160n,
|
|
97
153
|
maker: new limit_order_sdk_1.Address(order.maker),
|
|
98
154
|
receiver: new limit_order_sdk_1.Address(order.receiver),
|
|
@@ -107,7 +163,7 @@ class FusionOrder {
|
|
|
107
163
|
nonce: makerTraits.nonceOrEpoch(),
|
|
108
164
|
permit: extension.makerPermit === constants_1.ZX
|
|
109
165
|
? undefined
|
|
110
|
-
: extension.makerPermit,
|
|
166
|
+
: limit_order_sdk_1.Interaction.decode(extension.makerPermit).data,
|
|
111
167
|
unwrapWETH: makerTraits.isNativeUnwrapEnabled(),
|
|
112
168
|
orderExpirationDelay
|
|
113
169
|
});
|
|
@@ -115,23 +171,68 @@ class FusionOrder {
|
|
|
115
171
|
build() {
|
|
116
172
|
return this.inner.build();
|
|
117
173
|
}
|
|
118
|
-
getOrderHash(
|
|
119
|
-
return this.inner.getOrderHash(
|
|
174
|
+
getOrderHash(chainId) {
|
|
175
|
+
return this.inner.getOrderHash(chainId);
|
|
120
176
|
}
|
|
121
|
-
getTypedData(
|
|
122
|
-
return this.inner.getTypedData(
|
|
177
|
+
getTypedData(chainId) {
|
|
178
|
+
return this.inner.getTypedData(chainId);
|
|
123
179
|
}
|
|
124
180
|
getCalculator() {
|
|
125
|
-
return auction_calculator_1.AuctionCalculator.fromAuctionData(this.fusionExtension.postInteractionData, this.fusionExtension.
|
|
126
|
-
}
|
|
181
|
+
return auction_calculator_1.AuctionCalculator.fromAuctionData(this.fusionExtension.postInteractionData, this.fusionExtension.auctionDetails);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Calculates required taking amount for passed `makingAmount` at block time `time`
|
|
185
|
+
*
|
|
186
|
+
* @param makingAmount maker swap amount
|
|
187
|
+
* @param time execution time in sec
|
|
188
|
+
* @param blockBaseFee block fee in wei.
|
|
189
|
+
* */
|
|
127
190
|
calcTakingAmount(makingAmount, time, blockBaseFee = 0n) {
|
|
128
191
|
const takingAmount = (0, amounts_1.calcTakingAmount)(makingAmount, this.makingAmount, this.takingAmount);
|
|
129
192
|
const calculator = this.getCalculator();
|
|
130
193
|
const bump = calculator.calcRateBump(time, blockBaseFee);
|
|
131
194
|
return calculator.calcAuctionTakingAmount(takingAmount, bump);
|
|
132
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Check whether address allowed to execute order at the given time
|
|
198
|
+
*
|
|
199
|
+
* @param executor address of executor
|
|
200
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
201
|
+
*/
|
|
202
|
+
canExecuteAt(executor, executionTime) {
|
|
203
|
+
return this.fusionExtension.postInteractionData.canExecuteAt(executor, executionTime);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Check is order expired at a given time
|
|
207
|
+
*
|
|
208
|
+
* @param time timestamp in seconds
|
|
209
|
+
*/
|
|
210
|
+
isExpiredAt(time) {
|
|
211
|
+
return time > this.deadline;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Returns how much fee will be credited from a resolver deposit account
|
|
215
|
+
* Token of fee set in Settlement extension constructor
|
|
216
|
+
* Actual deployments can be found at https://github.com/1inch/limit-order-settlement/tree/master/deployments
|
|
217
|
+
*
|
|
218
|
+
* @param filledMakingAmount which resolver fills
|
|
219
|
+
* @see https://github.com/1inch/limit-order-settlement/blob/0e3cae3653092ebb4ea5d2a338c87a54351ad883/contracts/extensions/ResolverFeeExtension.sol#L29
|
|
220
|
+
*/
|
|
221
|
+
getResolverFee(filledMakingAmount) {
|
|
222
|
+
return ((this.fusionExtension.postInteractionData.bankFee *
|
|
223
|
+
FusionOrder._ORDER_FEE_BASE_POINTS *
|
|
224
|
+
filledMakingAmount) /
|
|
225
|
+
this.makingAmount);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Check if `wallet` can fill order before other
|
|
229
|
+
*/
|
|
230
|
+
isExclusiveResolver(wallet) {
|
|
231
|
+
return this.fusionExtension.postInteractionData.isExclusiveResolver(wallet);
|
|
232
|
+
}
|
|
133
233
|
}
|
|
134
234
|
exports.FusionOrder = FusionOrder;
|
|
235
|
+
FusionOrder._ORDER_FEE_BASE_POINTS = 10n ** 15n;
|
|
135
236
|
FusionOrder.defaultExtra = {
|
|
136
237
|
allowPartialFills: true,
|
|
137
238
|
allowMultipleFills: true,
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"fusion-order.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
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 ethers_1 = require("ethers");
|
|
4
5
|
const fusion_order_1 = require("./fusion-order");
|
|
5
6
|
const auction_details_1 = require("./auction-details");
|
|
6
7
|
describe('Fusion Order', () => {
|
|
@@ -28,9 +29,10 @@ describe('Fusion Order', () => {
|
|
|
28
29
|
whitelist: [
|
|
29
30
|
{
|
|
30
31
|
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
31
|
-
|
|
32
|
+
allowFrom: 0n
|
|
32
33
|
}
|
|
33
|
-
]
|
|
34
|
+
],
|
|
35
|
+
resolvingStartTime: 1673548139n
|
|
34
36
|
});
|
|
35
37
|
const builtOrder = order.build();
|
|
36
38
|
expect(builtOrder).toStrictEqual({
|
|
@@ -40,8 +42,8 @@ describe('Fusion Order', () => {
|
|
|
40
42
|
receiver: '0x0000000000000000000000000000000000000000',
|
|
41
43
|
takerAsset: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
42
44
|
takingAmount: '1420000000',
|
|
43
|
-
makerTraits: '
|
|
44
|
-
salt: '
|
|
45
|
+
makerTraits: '33471150795161712739625987854073848363835856965607525350783622537007396290560',
|
|
46
|
+
salt: '14969955465678758833706505435513058355190519874774'
|
|
45
47
|
});
|
|
46
48
|
const makerTraits = new limit_order_sdk_1.MakerTraits(BigInt(builtOrder.makerTraits));
|
|
47
49
|
expect(makerTraits.isNativeUnwrapEnabled()).toEqual(false);
|
|
@@ -72,11 +74,73 @@ describe('Fusion Order', () => {
|
|
|
72
74
|
whitelist: [
|
|
73
75
|
{
|
|
74
76
|
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
75
|
-
|
|
77
|
+
allowFrom: 0n
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
});
|
|
81
|
+
expect(fusion_order_1.FusionOrder.fromDataAndExtension(order.build(), order.extension)).toStrictEqual(order);
|
|
82
|
+
});
|
|
83
|
+
it('should decode fusion order from order + extension with provided source', () => {
|
|
84
|
+
const extensionContract = new limit_order_sdk_1.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c');
|
|
85
|
+
const order = fusion_order_1.FusionOrder.new(extensionContract, {
|
|
86
|
+
makerAsset: new limit_order_sdk_1.Address('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
|
|
87
|
+
takerAsset: new limit_order_sdk_1.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'),
|
|
88
|
+
makingAmount: 1000000000000000000n,
|
|
89
|
+
takingAmount: 1420000000n,
|
|
90
|
+
maker: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
91
|
+
salt: 10n
|
|
92
|
+
}, {
|
|
93
|
+
auction: new auction_details_1.AuctionDetails({
|
|
94
|
+
duration: 180n,
|
|
95
|
+
startTime: 1673548149n,
|
|
96
|
+
initialRateBump: 50000,
|
|
97
|
+
points: [
|
|
98
|
+
{
|
|
99
|
+
coefficient: 20000,
|
|
100
|
+
delay: 12
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}),
|
|
104
|
+
whitelist: [
|
|
105
|
+
{
|
|
106
|
+
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
107
|
+
allowFrom: 0n
|
|
76
108
|
}
|
|
77
109
|
]
|
|
110
|
+
}, {
|
|
111
|
+
source: 'test'
|
|
78
112
|
});
|
|
79
113
|
expect(fusion_order_1.FusionOrder.fromDataAndExtension(order.build(), order.extension)).toStrictEqual(order);
|
|
80
114
|
});
|
|
115
|
+
it('Should calculate taking amount', () => {
|
|
116
|
+
const now = 10000n;
|
|
117
|
+
const order = fusion_order_1.FusionOrder.new(new limit_order_sdk_1.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c'), {
|
|
118
|
+
makerAsset: new limit_order_sdk_1.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // USDC
|
|
119
|
+
),
|
|
120
|
+
takerAsset: new limit_order_sdk_1.Address('0x111111111117dc0aa78b770fa6a738034120c302' // 1INCH
|
|
121
|
+
),
|
|
122
|
+
maker: limit_order_sdk_1.Address.fromBigInt(1n),
|
|
123
|
+
makingAmount: (0, ethers_1.parseUnits)('150', 6),
|
|
124
|
+
takingAmount: (0, ethers_1.parseUnits)('200')
|
|
125
|
+
}, {
|
|
126
|
+
auction: new auction_details_1.AuctionDetails({
|
|
127
|
+
startTime: now,
|
|
128
|
+
duration: 120n,
|
|
129
|
+
initialRateBump: 10000000,
|
|
130
|
+
points: []
|
|
131
|
+
}),
|
|
132
|
+
whitelist: [
|
|
133
|
+
{
|
|
134
|
+
address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
|
|
135
|
+
allowFrom: 0n
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
resolvingStartTime: 0n
|
|
139
|
+
}, {
|
|
140
|
+
source: 'some_id'
|
|
141
|
+
});
|
|
142
|
+
expect(order.calcTakingAmount(order.makingAmount, now)).toEqual(2n * order.takingAmount // because init rate bump is 100%
|
|
143
|
+
);
|
|
144
|
+
});
|
|
81
145
|
});
|
|
82
146
|
//# sourceMappingURL=fusion-order.spec.js.map
|
|
@@ -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":";;AAAA,4DAA2D;AAC3D,mCAAiC;AACjC,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,SAAS,EAAE,EAAE;iBAChB;aACJ;YACD,kBAAkB,EAAE,WAAW;SAClC,CACJ,CAAA;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAChC,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC;YAC7B,KAAK,EAAE,4CAA4C;YACnD,UAAU,EAAE,4CAA4C;YACxD,YAAY,EAAE,qBAAqB;YACnC,QAAQ,EAAE,4CAA4C;YACtD,UAAU,EAAE,4CAA4C;YACxD,YAAY,EAAE,YAAY;YAC1B,WAAW,EACP,+EAA+E;YACnF,IAAI,EAAE,oDAAoD;SAC7D,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,IAAI,6BAAW,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;QACnE,MAAM,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC1D,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,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,SAAS,EAAE,EAAE;iBAChB;aACJ;SACJ,CACJ,CAAA;QAED,MAAM,CACF,0BAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CACnE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAC9E,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,SAAS,EAAE,EAAE;iBAChB;aACJ;SACJ,EACD;YACI,MAAM,EAAE,MAAM;SACjB,CACJ,CAAA;QAED,MAAM,CACF,0BAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CACnE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,CAAA;QAClB,MAAM,KAAK,GAAG,0BAAW,CAAC,GAAG,CACzB,IAAI,yBAAO,CAAC,4CAA4C,CAAC,EACzD;YACI,UAAU,EAAE,IAAI,yBAAO,CACnB,4CAA4C,CAAC,OAAO;aACvD;YACD,UAAU,EAAE,IAAI,yBAAO,CACnB,4CAA4C,CAAC,QAAQ;aACxD;YACD,KAAK,EAAE,yBAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,YAAY,EAAE,IAAA,mBAAU,EAAC,KAAK,EAAE,CAAC,CAAC;YAClC,YAAY,EAAE,IAAA,mBAAU,EAAC,KAAK,CAAC;SAClC,EACD;YACI,OAAO,EAAE,IAAI,gCAAc,CAAC;gBACxB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,QAAU;gBAC3B,MAAM,EAAE,EAAE;aACb,CAAC;YACF,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,IAAI,yBAAO,CAChB,4CAA4C,CAC/C;oBACD,SAAS,EAAE,EAAE;iBAChB;aACJ;YACD,kBAAkB,EAAE,EAAE;SACzB,EACD;YACI,MAAM,EAAE,SAAS;SACpB,CACJ,CAAA;QAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAC3D,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,iCAAiC;SAC5D,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}
|
package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.d.ts
CHANGED
|
@@ -1,16 +1,53 @@
|
|
|
1
|
+
import { Address, Extension } 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;
|
|
8
|
+
readonly customReceiver?: Address;
|
|
7
9
|
private constructor();
|
|
8
10
|
static new(data: SettlementSuffixData): SettlementPostInteractionData;
|
|
11
|
+
/**
|
|
12
|
+
* Construct `SettlementPostInteractionData` from bytes
|
|
13
|
+
* @param data bytes with 0x prefix in next format:
|
|
14
|
+
* - [uint32 feeBank] only when first bit of `bitMask` enabled
|
|
15
|
+
* - [uint16 integratorFeeRation, uint160 integratorFeeReceiver, [uint160 customReceiver]] only when second bit of `bitMask` enabled
|
|
16
|
+
* - uint32 auctionStartTime
|
|
17
|
+
* - (bytes10 last10bytesOfAddress, uint16 auctionDelay) * N whitelist info
|
|
18
|
+
* - uint8 bitMask:
|
|
19
|
+
* 0b0000_0001 - fee bank mask
|
|
20
|
+
* 0b0000_0010 - integrator fee mask
|
|
21
|
+
* 0b0000_0100 - is custom receiver present (only used when integrator fee enabled)
|
|
22
|
+
* 0b1111_1000 - resolvers count mask
|
|
23
|
+
*
|
|
24
|
+
* All data is tight packed
|
|
25
|
+
* @see SettlementPostInteractionData.encode
|
|
26
|
+
*/
|
|
9
27
|
static decode(data: string): SettlementPostInteractionData;
|
|
28
|
+
static fromExtension(extension: Extension): SettlementPostInteractionData;
|
|
29
|
+
/**
|
|
30
|
+
* Serialize post-interaction data to bytes
|
|
31
|
+
*/
|
|
10
32
|
encode(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Check whether address allowed to execute order at the given time
|
|
35
|
+
*
|
|
36
|
+
* @param executor address of executor
|
|
37
|
+
* @param executionTime timestamp in sec at which order planning to execute
|
|
38
|
+
*/
|
|
39
|
+
canExecuteAt(executor: Address, executionTime: bigint): boolean;
|
|
40
|
+
isExclusiveResolver(wallet: Address): boolean;
|
|
11
41
|
}
|
|
12
42
|
type WhitelistItem = {
|
|
43
|
+
/**
|
|
44
|
+
* last 10 bytes of address, no 0x prefix
|
|
45
|
+
*/
|
|
13
46
|
addressHalf: string;
|
|
47
|
+
/**
|
|
48
|
+
* Delay from previous resolver in seconds
|
|
49
|
+
* For first resolver delay from `resolvingStartTime`
|
|
50
|
+
*/
|
|
14
51
|
delay: bigint;
|
|
15
52
|
};
|
|
16
53
|
export {};
|