@1inch/fusion-sdk 1.0.1-rc.3 → 1.0.1-rc.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/api/orders/order-api.spec.js +6 -5
  2. package/dist/api/orders/order-api.spec.js.map +1 -1
  3. package/dist/api/orders/orders.api.d.ts +1 -0
  4. package/dist/api/orders/orders.api.js +4 -3
  5. package/dist/api/orders/orders.api.js.map +1 -1
  6. package/dist/api/quoter/quote/quote.d.ts +5 -1
  7. package/dist/api/quoter/quote/quote.js +13 -6
  8. package/dist/api/quoter/quote/quote.js.map +1 -1
  9. package/dist/api/quoter/quote/types.d.ts +4 -0
  10. package/dist/api/quoter/quoter.api.d.ts +1 -0
  11. package/dist/api/quoter/quoter.api.js +3 -2
  12. package/dist/api/quoter/quoter.api.js.map +1 -1
  13. package/dist/api/quoter/quoter.api.spec.js +21 -6
  14. package/dist/api/quoter/quoter.api.spec.js.map +1 -1
  15. package/dist/api/quoter/types.d.ts +3 -3
  16. package/dist/api/relayer/relayer.api.d.ts +1 -0
  17. package/dist/api/relayer/relayer.api.js +3 -2
  18. package/dist/api/relayer/relayer.api.js.map +1 -1
  19. package/dist/api/relayer/relayer.api.spec.js +8 -5
  20. package/dist/api/relayer/relayer.api.spec.js.map +1 -1
  21. package/dist/api/relayer/relayer.request.d.ts +1 -0
  22. package/dist/api/relayer/relayer.request.js +3 -1
  23. package/dist/api/relayer/relayer.request.js.map +1 -1
  24. package/dist/api/relayer/types.d.ts +1 -0
  25. package/dist/auction-calculator/auction-calculator.d.ts +23 -4
  26. package/dist/auction-calculator/auction-calculator.js +40 -6
  27. package/dist/auction-calculator/auction-calculator.js.map +1 -1
  28. package/dist/auction-calculator/auction-calculator.spec.js +7 -5
  29. package/dist/auction-calculator/auction-calculator.spec.js.map +1 -1
  30. package/dist/auction-calculator/calc.d.ts +8 -0
  31. package/dist/auction-calculator/calc.js +8 -0
  32. package/dist/auction-calculator/calc.js.map +1 -1
  33. package/dist/auction-calculator/constants.js +1 -1
  34. package/dist/auction-calculator/constants.js.map +1 -1
  35. package/dist/connector/blockchain/private-key-provider.connector.js +2 -0
  36. package/dist/connector/blockchain/private-key-provider.connector.js.map +1 -1
  37. package/dist/connector/ws/websocket-client.connector.js +2 -0
  38. package/dist/connector/ws/websocket-client.connector.js.map +1 -1
  39. package/dist/constants.d.ts +1 -0
  40. package/dist/constants.js +2 -1
  41. package/dist/constants.js.map +1 -1
  42. package/dist/fusion-order/auction-details/auction-details.d.ts +29 -0
  43. package/dist/fusion-order/auction-details/auction-details.js +21 -0
  44. package/dist/fusion-order/auction-details/auction-details.js.map +1 -1
  45. package/dist/fusion-order/auction-details/types.d.ts +12 -0
  46. package/dist/fusion-order/fusion-extension.d.ts +2 -2
  47. package/dist/fusion-order/fusion-extension.js +3 -3
  48. package/dist/fusion-order/fusion-extension.js.map +1 -1
  49. package/dist/fusion-order/fusion-order.d.ts +90 -3
  50. package/dist/fusion-order/fusion-order.js +144 -17
  51. package/dist/fusion-order/fusion-order.js.map +1 -1
  52. package/dist/fusion-order/fusion-order.spec.js +35 -5
  53. package/dist/fusion-order/fusion-order.spec.js.map +1 -1
  54. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.d.ts +38 -1
  55. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js +125 -46
  56. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js.map +1 -1
  57. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js +95 -8
  58. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js.map +1 -1
  59. package/dist/fusion-order/settlement-post-interaction-data/types.d.ts +12 -3
  60. package/dist/index.d.ts +2 -2
  61. package/dist/index.js +11 -2
  62. package/dist/index.js.map +1 -1
  63. package/dist/sdk/sdk.js +6 -7
  64. package/dist/sdk/sdk.js.map +1 -1
  65. package/dist/sdk/types.d.ts +12 -0
  66. package/dist/sdk/utils.js +5 -2
  67. package/dist/sdk/utils.js.map +1 -1
  68. package/dist/utils/amounts.d.ts +17 -1
  69. package/dist/utils/amounts.js +19 -3
  70. package/dist/utils/amounts.js.map +1 -1
  71. package/dist/utils/time.d.ts +1 -0
  72. package/dist/utils/time.js +8 -0
  73. package/dist/utils/time.js.map +1 -0
  74. package/dist/validations.d.ts +4 -0
  75. package/dist/validations.js +4 -0
  76. package/dist/validations.js.map +1 -1
  77. package/dist/ws-api/ws-api.d.ts +1 -0
  78. package/dist/ws-api/ws-api.js +2 -1
  79. package/dist/ws-api/ws-api.js.map +1 -1
  80. package/dist/ws-api/ws.spec.js +9 -8
  81. package/dist/ws-api/ws.spec.js.map +1 -1
  82. package/package.json +31 -24
  83. package/dist/limit-order-contract/index.d.ts +0 -1
  84. package/dist/limit-order-contract/index.js +0 -6
  85. package/dist/limit-order-contract/index.js.map +0 -1
@@ -10,21 +10,34 @@ 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
12
  const auction_calculator_1 = require("../auction-calculator");
13
- const utils_1 = require("../utils");
14
13
  const constants_1 = require("../constants");
14
+ const amounts_1 = require("../utils/amounts");
15
+ const time_1 = require("../utils/time");
15
16
  class FusionOrder {
16
- constructor(extensionContract, orderInfo, auctionDetails, postInteractionData, extra = FusionOrder.defaultExtra) {
17
- const { allowPartialFills, allowMultipleFills, unwrapWETH, enablePermit2, orderExpirationDelay, nonce, permit } = {
18
- ...FusionOrder.defaultExtra,
19
- ...extra
20
- };
17
+ constructor(
18
+ /**
19
+ * Fusion extension address
20
+ * @see https://github.com/1inch/limit-order-settlement
21
+ */
22
+ settlementExtensionContract, orderInfo, auctionDetails, postInteractionData, extra = FusionOrder.defaultExtra) {
23
+ this.settlementExtensionContract = settlementExtensionContract;
24
+ const allowPartialFills = extra.allowPartialFills ??
25
+ FusionOrder.defaultExtra.allowPartialFills;
26
+ const allowMultipleFills = extra.allowMultipleFills ??
27
+ FusionOrder.defaultExtra.allowMultipleFills;
28
+ const unwrapWETH = extra.unwrapWETH ?? FusionOrder.defaultExtra.unwrapWETH;
29
+ const enablePermit2 = extra.enablePermit2 ?? FusionOrder.defaultExtra.enablePermit2;
30
+ const orderExpirationDelay = extra.orderExpirationDelay ??
31
+ FusionOrder.defaultExtra.orderExpirationDelay;
32
+ const { nonce, permit } = extra;
21
33
  const deadline = auctionDetails.startTime +
22
34
  auctionDetails.duration +
23
35
  orderExpirationDelay;
24
36
  const makerTraits = limit_order_sdk_1.MakerTraits.default()
25
37
  .withExpiration(deadline)
26
38
  .setPartialFills(allowPartialFills)
27
- .setMultipleFills(allowMultipleFills);
39
+ .setMultipleFills(allowMultipleFills)
40
+ .enablePostInteraction();
28
41
  if (makerTraits.isBitInvalidatorMode()) {
29
42
  (0, assert_1.default)(nonce !== undefined, 'Nonce required, when partial fill or multiple fill disallowed');
30
43
  }
@@ -37,13 +50,20 @@ class FusionOrder {
37
50
  if (nonce !== undefined) {
38
51
  makerTraits.withNonce(nonce);
39
52
  }
40
- const extension = new fusion_extension_1.FusionExtension(extensionContract, auctionDetails, postInteractionData);
53
+ /**
54
+ * @see https://github.com/1inch/limit-order-settlement/blob/0afb4785cb825fe959c534ff4f1a771d4d33cdf4/contracts/extensions/IntegratorFeeExtension.sol#L65
55
+ */
56
+ const receiver = postInteractionData.integratorFee?.ratio
57
+ ? settlementExtensionContract
58
+ : orderInfo.receiver;
59
+ const extension = new fusion_extension_1.FusionExtension(settlementExtensionContract, auctionDetails, postInteractionData);
41
60
  if (permit) {
42
61
  extension.withMakerPermit(orderInfo.makerAsset, permit);
43
62
  }
44
63
  const builtExtension = extension.build();
45
64
  this.inner = new limit_order_sdk_1.LimitOrder({
46
65
  ...orderInfo,
66
+ receiver,
47
67
  salt: limit_order_sdk_1.LimitOrder.buildSalt(builtExtension, orderInfo.salt)
48
68
  }, makerTraits, builtExtension);
49
69
  this.fusionExtension = extension;
@@ -51,26 +71,82 @@ class FusionOrder {
51
71
  get extension() {
52
72
  return this.inner.extension;
53
73
  }
54
- static new(settlementExtension, orderInfo, details, extra = FusionOrder.defaultExtra) {
74
+ get maker() {
75
+ return this.inner.maker;
76
+ }
77
+ get takerAsset() {
78
+ return this.inner.takerAsset;
79
+ }
80
+ get makerAsset() {
81
+ return this.inner.makerAsset;
82
+ }
83
+ get takingAmount() {
84
+ return this.inner.takingAmount;
85
+ }
86
+ get makingAmount() {
87
+ return this.inner.makingAmount;
88
+ }
89
+ get receiver() {
90
+ return this.inner.receiver;
91
+ }
92
+ /**
93
+ * Timestamp in sec
94
+ */
95
+ get deadline() {
96
+ return this.inner.makerTraits.expiration() || 0n;
97
+ }
98
+ /**
99
+ * Timestamp in sec
100
+ */
101
+ get auctionStartTime() {
102
+ return this.fusionExtension.auctionDetails.startTime;
103
+ }
104
+ /**
105
+ * Timestamp in sec
106
+ */
107
+ get auctionEndTime() {
108
+ const { startTime, duration } = this.fusionExtension.auctionDetails;
109
+ return startTime + duration;
110
+ }
111
+ get partialFillAllowed() {
112
+ return this.inner.makerTraits.isPartialFillAllowed();
113
+ }
114
+ get multipleFillsAllowed() {
115
+ return this.inner.makerTraits.isMultipleFillsAllowed();
116
+ }
117
+ static new(
118
+ /**
119
+ * Fusion extension address
120
+ * @see https://github.com/1inch/limit-order-settlement
121
+ */
122
+ settlementExtension, orderInfo, details, extra) {
55
123
  return new FusionOrder(settlementExtension, orderInfo, details.auction, settlement_post_interaction_data_1.SettlementPostInteractionData.new({
56
124
  bankFee: details.fees?.bankFee || 0n,
57
125
  integratorFee: details.fees?.integratorFee,
58
126
  whitelist: details.whitelist,
59
- auctionStartTime: details.auction.startTime
127
+ resolvingStartTime: details.resolvingStartTime ?? (0, time_1.now)(),
128
+ customReceiver: orderInfo.receiver
60
129
  }), extra);
61
130
  }
131
+ /**
132
+ * Create FusionOrder from order data and extension
133
+ *
134
+ */
62
135
  static fromDataAndExtension(order, extension) {
63
136
  const settlementContract = limit_order_sdk_1.Address.fromFirstBytes(extension.makingAmountData);
64
137
  (0, assert_1.default)(limit_order_sdk_1.Address.fromFirstBytes(extension.takingAmountData).equal(settlementContract) &&
65
138
  limit_order_sdk_1.Address.fromFirstBytes(extension.postInteraction).equal(settlementContract), 'Invalid extension, all calls should be to the same address');
66
139
  const makerTraits = new limit_order_sdk_1.MakerTraits(BigInt(order.makerTraits));
67
- const auctionDetails = auction_details_1.AuctionDetails.decode((0, utils_1.add0x)(extension.makingAmountData.slice(42)));
68
- const postInteractionData = settlement_post_interaction_data_1.SettlementPostInteractionData.decode((0, utils_1.add0x)(extension.postInteraction.slice(42)));
140
+ (0, assert_1.default)(!makerTraits.isPrivate(), 'fusion order can not be private');
141
+ (0, assert_1.default)(makerTraits.hasPostInteraction(), 'post-interaction must be enabled');
142
+ const auctionDetails = auction_details_1.AuctionDetails.fromExtension(extension);
143
+ const postInteractionData = settlement_post_interaction_data_1.SettlementPostInteractionData.fromExtension(extension);
69
144
  const deadline = makerTraits.expiration();
70
145
  const orderExpirationDelay = deadline === null
71
146
  ? undefined
72
147
  : deadline - auctionDetails.startTime - auctionDetails.duration;
73
148
  return new FusionOrder(settlementContract, {
149
+ // shift because of how LimitOrder.buildSalt works
74
150
  salt: BigInt(order.salt) >> 160n,
75
151
  maker: new limit_order_sdk_1.Address(order.maker),
76
152
  receiver: new limit_order_sdk_1.Address(order.receiver),
@@ -93,17 +169,68 @@ class FusionOrder {
93
169
  build() {
94
170
  return this.inner.build();
95
171
  }
96
- getOrderHash(domain = (0, limit_order_sdk_1.getLimitOrderV4Domain)(1)) {
97
- return this.inner.getOrderHash(domain);
172
+ getOrderHash(chainId) {
173
+ return this.inner.getOrderHash(chainId);
98
174
  }
99
- getTypedData(domain = (0, limit_order_sdk_1.getLimitOrderV4Domain)(1)) {
100
- return this.inner.getTypedData(domain);
175
+ getTypedData(chainId) {
176
+ return this.inner.getTypedData(chainId);
101
177
  }
102
178
  getCalculator() {
103
- return auction_calculator_1.AuctionCalculator.fromAuctionData(this.fusionExtension.postInteractionData, this.fusionExtension.details);
179
+ return auction_calculator_1.AuctionCalculator.fromAuctionData(this.fusionExtension.postInteractionData, this.fusionExtension.auctionDetails);
180
+ }
181
+ /**
182
+ * Calculates required taking amount for passed `makingAmount` at block time `time`
183
+ *
184
+ * @param makingAmount maker swap amount
185
+ * @param time execution time in sec
186
+ * @param blockBaseFee block fee in wei.
187
+ * */
188
+ calcTakingAmount(makingAmount, time, blockBaseFee = 0n) {
189
+ const takingAmount = (0, amounts_1.calcTakingAmount)(makingAmount, this.makingAmount, this.takingAmount);
190
+ const calculator = this.getCalculator();
191
+ const bump = calculator.calcRateBump(time, blockBaseFee);
192
+ return calculator.calcAuctionTakingAmount(takingAmount, bump);
193
+ }
194
+ /**
195
+ * Check whether address allowed to execute order at the given time
196
+ *
197
+ * @param executor address of executor
198
+ * @param executionTime timestamp in sec at which order planning to execute
199
+ */
200
+ canExecuteAt(executor, executionTime) {
201
+ return this.fusionExtension.postInteractionData.canExecuteAt(executor, executionTime);
202
+ }
203
+ /**
204
+ * Check is order expired at a given time
205
+ *
206
+ * @param time timestamp in seconds
207
+ */
208
+ isExpiredAt(time) {
209
+ return time > this.deadline;
210
+ }
211
+ /**
212
+ * Returns how much fee will be credited from a resolver deposit account
213
+ * Token of fee set in Settlement extension constructor
214
+ * Actual deployments can be found at https://github.com/1inch/limit-order-settlement/tree/master/deployments
215
+ *
216
+ * @param filledMakingAmount which resolver fills
217
+ * @see https://github.com/1inch/limit-order-settlement/blob/0e3cae3653092ebb4ea5d2a338c87a54351ad883/contracts/extensions/ResolverFeeExtension.sol#L29
218
+ */
219
+ getResolverFee(filledMakingAmount) {
220
+ return ((this.fusionExtension.postInteractionData.bankFee *
221
+ FusionOrder._ORDER_FEE_BASE_POINTS *
222
+ filledMakingAmount) /
223
+ this.makingAmount);
224
+ }
225
+ /**
226
+ * Check if `wallet` can fill order before other
227
+ */
228
+ isExclusiveResolver(wallet) {
229
+ return this.fusionExtension.postInteractionData.isExclusiveResolver(wallet);
104
230
  }
105
231
  }
106
232
  exports.FusionOrder = FusionOrder;
233
+ FusionOrder._ORDER_FEE_BASE_POINTS = 10n ** 15n;
107
234
  FusionOrder.defaultExtra = {
108
235
  allowPartialFills: true,
109
236
  allowMultipleFills: true,
@@ -1 +1 @@
1
- {"version":3,"file":"fusion-order.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.ts"],"names":[],"mappings":"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"}
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
- delay: 0n
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: '29852648006495581632639394572552351243421169944806257724550573036760110989312',
44
- salt: '14832508939800728556409473652845244531014097925085'
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,39 @@ describe('Fusion Order', () => {
72
74
  whitelist: [
73
75
  {
74
76
  address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
75
- delay: 0n
77
+ allowFrom: 0n
76
78
  }
77
79
  ]
78
80
  });
79
81
  expect(fusion_order_1.FusionOrder.fromDataAndExtension(order.build(), order.extension)).toStrictEqual(order);
80
82
  });
83
+ it('Should calculate taking amount', () => {
84
+ const now = 10000n;
85
+ const order = fusion_order_1.FusionOrder.new(new limit_order_sdk_1.Address('0x8273f37417da37c4a6c3995e82cf442f87a25d9c'), {
86
+ makerAsset: new limit_order_sdk_1.Address('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // USDC
87
+ ),
88
+ takerAsset: new limit_order_sdk_1.Address('0x111111111117dc0aa78b770fa6a738034120c302' // 1INCH
89
+ ),
90
+ maker: limit_order_sdk_1.Address.fromBigInt(1n),
91
+ makingAmount: (0, ethers_1.parseUnits)('150', 6),
92
+ takingAmount: (0, ethers_1.parseUnits)('200')
93
+ }, {
94
+ auction: new auction_details_1.AuctionDetails({
95
+ startTime: now,
96
+ duration: 120n,
97
+ initialRateBump: 10000000,
98
+ points: []
99
+ }),
100
+ whitelist: [
101
+ {
102
+ address: new limit_order_sdk_1.Address('0x00000000219ab540356cbb839cbe05303d7705fa'),
103
+ allowFrom: 0n
104
+ }
105
+ ],
106
+ resolvingStartTime: 0n
107
+ });
108
+ expect(order.calcTakingAmount(order.makingAmount, now)).toEqual(2n * order.takingAmount // because init rate bump is 100%
109
+ );
110
+ });
81
111
  });
82
112
  //# 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":"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"}
1
+ {"version":3,"file":"fusion-order.spec.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-order.spec.ts"],"names":[],"mappings":"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"}
@@ -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 auctionStartTime: bigint;
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 {};
@@ -4,102 +4,181 @@ 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");
9
8
  const byte_utils_1 = require("@1inch/byte-utils");
10
9
  const assert_1 = __importDefault(require("assert"));
11
10
  const validations_1 = require("../../validations");
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.auctionStartTime = data.auctionStartTime;
17
+ this.bankFee = data.bankFee || 0n;
18
+ this.resolvingStartTime = data.resolvingStartTime;
19
+ this.customReceiver = data.customReceiver;
20
+ if (this.integratorFee?.ratio) {
21
+ (0, assert_1.default)(!this.integratorFee.receiver.isZero(), 'Fee receiver can not be zero when fee set');
22
+ }
19
23
  }
20
24
  static new(data) {
25
+ (0, assert_1.default)(data.whitelist.length, 'Whitelist can not be empty');
26
+ // transform timestamps to cumulative delays
27
+ let sumDelay = 0n;
28
+ const whitelist = data.whitelist
29
+ .map((d) => ({
30
+ addressHalf: d.address.toString().slice(-20),
31
+ allowFrom: d.allowFrom < data.resolvingStartTime
32
+ ? data.resolvingStartTime
33
+ : d.allowFrom
34
+ }))
35
+ .sort((a, b) => Number(a.allowFrom - b.allowFrom)) // ASC
36
+ .map((val) => {
37
+ const delay = val.allowFrom - data.resolvingStartTime - sumDelay;
38
+ sumDelay += delay;
39
+ (0, assert_1.default)(delay < constants_1.UINT_16_MAX, 'Too big diff between timestamps');
40
+ return {
41
+ delay,
42
+ addressHalf: val.addressHalf
43
+ };
44
+ });
21
45
  return new SettlementPostInteractionData({
22
46
  ...data,
23
- whitelist: data.whitelist.map((d) => ({
24
- addressHalf: d.address.toString().slice(-20),
25
- delay: d.delay
26
- }))
47
+ whitelist
27
48
  });
28
49
  }
50
+ /**
51
+ * Construct `SettlementPostInteractionData` from bytes
52
+ * @param data bytes with 0x prefix in next format:
53
+ * - [uint32 feeBank] only when first bit of `bitMask` enabled
54
+ * - [uint16 integratorFeeRation, uint160 integratorFeeReceiver, [uint160 customReceiver]] only when second bit of `bitMask` enabled
55
+ * - uint32 auctionStartTime
56
+ * - (bytes10 last10bytesOfAddress, uint16 auctionDelay) * N whitelist info
57
+ * - uint8 bitMask:
58
+ * 0b0000_0001 - fee bank mask
59
+ * 0b0000_0010 - integrator fee mask
60
+ * 0b0000_0100 - is custom receiver present (only used when integrator fee enabled)
61
+ * 0b1111_1000 - resolvers count mask
62
+ *
63
+ * All data is tight packed
64
+ * @see SettlementPostInteractionData.encode
65
+ */
29
66
  static decode(data) {
30
67
  (0, assert_1.default)((0, validations_1.isHexBytes)(data), 'Post interaction data must be valid bytes string');
31
68
  const iter = byte_utils_1.BytesIter.BigInt(data);
32
- const feeType = iter.nextByte();
69
+ const flags = new byte_utils_1.BN(iter.nextByte(byte_utils_1.BytesIter.SIDE.Back));
33
70
  let bankFee = 0n;
34
71
  let integratorFee;
35
- if ((feeType & 1n) === 1n) {
72
+ let customReceiver;
73
+ // fee bank presented
74
+ if (flags.getBit(0n)) {
36
75
  bankFee = iter.nextUint32();
37
76
  }
38
- if ((feeType & 2n) === 2n) {
77
+ // integrator fee presented
78
+ if (flags.getBit(1n)) {
79
+ const integratorFeeRatio = iter.nextUint16();
39
80
  const integratorAddress = iter.nextUint160();
40
- const integratorFeeRatio = iter.nextUint32();
41
81
  integratorFee = {
42
82
  ratio: integratorFeeRatio,
43
83
  receiver: limit_order_sdk_1.Address.fromBigInt(integratorAddress)
44
84
  };
85
+ // custom receiver presented
86
+ if (flags.getBit(2n)) {
87
+ customReceiver = limit_order_sdk_1.Address.fromBigInt(iter.nextUint160());
88
+ }
45
89
  }
46
- const auctionStartTime = iter.nextUint32();
90
+ const resolvingStartTime = iter.nextUint32();
47
91
  const whitelist = [];
48
92
  while (!iter.isEmpty()) {
49
93
  const addressHalf = iter
50
94
  .nextBytes(10)
51
95
  .toString(16)
52
96
  .padStart(20, '0');
53
- const allowance = iter.nextUint16();
97
+ const delay = iter.nextUint16();
54
98
  whitelist.push({
55
99
  addressHalf,
56
- delay: allowance
100
+ delay
57
101
  });
58
102
  }
59
103
  return new SettlementPostInteractionData({
60
104
  integratorFee,
61
105
  bankFee,
62
- auctionStartTime,
63
- whitelist
106
+ resolvingStartTime,
107
+ whitelist,
108
+ customReceiver
64
109
  });
65
110
  }
111
+ static fromExtension(extension) {
112
+ return SettlementPostInteractionData.decode((0, utils_1.add0x)(extension.postInteraction.slice(42)));
113
+ }
114
+ /**
115
+ * Serialize post-interaction data to bytes
116
+ */
66
117
  encode() {
67
- const fee = {
68
- type: 'uint8',
69
- value: 0n
70
- };
71
- const data = [fee];
118
+ /**
119
+ * 0b0000_0001 - fee bank mask
120
+ * 0b0000_0010 - integrator fee mask
121
+ * 0b0000_0100 - is custom receiver present
122
+ * 0b1111_1000 - resolvers count mask
123
+ */
124
+ let bitMask = new byte_utils_1.BN(0n);
125
+ const bytes = new byte_utils_1.BytesBuilder();
126
+ // Add bank fee if exists
72
127
  if (this.bankFee) {
73
- fee.value |= 1n;
74
- data.push({
75
- type: 'uint32',
76
- value: ethers_1.ethers.solidityPacked(['uint32'], [this.bankFee])
77
- });
128
+ bitMask = bitMask.setBit(0n, 1);
129
+ bytes.addUint32(this.bankFee);
78
130
  }
131
+ // add integrator fee if exists
79
132
  if (this.integratorFee?.ratio) {
80
- fee.value |= 2n;
81
- data.push({
82
- type: 'uint160',
83
- value: ethers_1.ethers.solidityPacked(['uint160'], [this.integratorFee.receiver.toString()])
84
- }, {
85
- type: 'uint32',
86
- value: ethers_1.ethers.solidityPacked(['uint32'], [this.integratorFee.ratio])
87
- });
133
+ bitMask = bitMask.setBit(1n, 1);
134
+ bytes
135
+ .addUint16(this.integratorFee.ratio)
136
+ .addAddress(this.integratorFee.receiver.toString());
137
+ if (this.customReceiver && !this.customReceiver.isZero()) {
138
+ bitMask = bitMask.setBit(2n, 1);
139
+ bytes.addAddress(this.customReceiver.toString());
140
+ }
88
141
  }
89
- data.push({
90
- type: 'uint32',
91
- value: this.auctionStartTime
92
- });
142
+ bytes.addUint32(this.resolvingStartTime);
143
+ // whitelist data
93
144
  for (const wl of this.whitelist) {
94
- data.push({
95
- type: 'bytes10',
96
- value: (0, utils_1.add0x)(wl.addressHalf)
97
- }, {
98
- type: 'uint16',
99
- value: BigInt(wl.delay)
100
- });
145
+ bytes.addBytes((0, utils_1.add0x)(wl.addressHalf)).addUint16(wl.delay);
146
+ }
147
+ bitMask = bitMask.setMask(new byte_utils_1.BitMask(3n, 8n), BigInt(this.whitelist.length));
148
+ bytes.addUint8(bitMask.value);
149
+ return bytes.asHex();
150
+ }
151
+ /**
152
+ * Check whether address allowed to execute order at the given time
153
+ *
154
+ * @param executor address of executor
155
+ * @param executionTime timestamp in sec at which order planning to execute
156
+ */
157
+ canExecuteAt(executor, executionTime) {
158
+ const addressHalf = executor.toString().slice(-20);
159
+ let allowedFrom = this.resolvingStartTime;
160
+ for (const whitelist of this.whitelist) {
161
+ allowedFrom += whitelist.delay;
162
+ if (addressHalf === whitelist.addressHalf) {
163
+ return executionTime >= allowedFrom;
164
+ }
165
+ else if (executionTime < allowedFrom) {
166
+ return false;
167
+ }
168
+ }
169
+ return false;
170
+ }
171
+ isExclusiveResolver(wallet) {
172
+ const addressHalf = wallet.toString().slice(-20);
173
+ // only one resolver, so check if it is the passed address
174
+ if (this.whitelist.length === 1) {
175
+ return addressHalf === this.whitelist[0].addressHalf;
176
+ }
177
+ // more than 1 address can fill at the same time, no exclusivity
178
+ if (this.whitelist[0].delay === this.whitelist[1].delay) {
179
+ return false;
101
180
  }
102
- return ethers_1.ethers.solidityPacked(data.map((d) => d.type), data.map((d) => d.value));
181
+ return addressHalf === this.whitelist[0].addressHalf;
103
182
  }
104
183
  }
105
184
  exports.SettlementPostInteractionData = SettlementPostInteractionData;