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

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 (67) hide show
  1. package/dist/api/orders/order-api.spec.js +1 -0
  2. package/dist/api/orders/order-api.spec.js.map +1 -1
  3. package/dist/api/quoter/quote/quote.d.ts +5 -1
  4. package/dist/api/quoter/quote/quote.js +3 -3
  5. package/dist/api/quoter/quote/quote.js.map +1 -1
  6. package/dist/api/quoter/quote/types.d.ts +4 -0
  7. package/dist/api/quoter/quoter.api.spec.js +18 -3
  8. package/dist/api/quoter/quoter.api.spec.js.map +1 -1
  9. package/dist/api/quoter/types.d.ts +3 -3
  10. package/dist/auction-calculator/auction-calculator.d.ts +23 -4
  11. package/dist/auction-calculator/auction-calculator.js +40 -6
  12. package/dist/auction-calculator/auction-calculator.js.map +1 -1
  13. package/dist/auction-calculator/auction-calculator.spec.js +7 -5
  14. package/dist/auction-calculator/auction-calculator.spec.js.map +1 -1
  15. package/dist/auction-calculator/calc.d.ts +8 -0
  16. package/dist/auction-calculator/calc.js +8 -0
  17. package/dist/auction-calculator/calc.js.map +1 -1
  18. package/dist/auction-calculator/constants.js +1 -1
  19. package/dist/auction-calculator/constants.js.map +1 -1
  20. package/dist/connector/blockchain/private-key-provider.connector.js +2 -0
  21. package/dist/connector/blockchain/private-key-provider.connector.js.map +1 -1
  22. package/dist/connector/ws/websocket-client.connector.js +2 -0
  23. package/dist/connector/ws/websocket-client.connector.js.map +1 -1
  24. package/dist/constants.d.ts +1 -0
  25. package/dist/constants.js +2 -1
  26. package/dist/constants.js.map +1 -1
  27. package/dist/fusion-order/auction-details/auction-details.d.ts +29 -0
  28. package/dist/fusion-order/auction-details/auction-details.js +21 -0
  29. package/dist/fusion-order/auction-details/auction-details.js.map +1 -1
  30. package/dist/fusion-order/auction-details/types.d.ts +12 -0
  31. package/dist/fusion-order/fusion-extension.d.ts +2 -2
  32. package/dist/fusion-order/fusion-extension.js +3 -3
  33. package/dist/fusion-order/fusion-extension.js.map +1 -1
  34. package/dist/fusion-order/fusion-order.d.ts +89 -3
  35. package/dist/fusion-order/fusion-order.js +144 -17
  36. package/dist/fusion-order/fusion-order.js.map +1 -1
  37. package/dist/fusion-order/fusion-order.spec.js +35 -5
  38. package/dist/fusion-order/fusion-order.spec.js.map +1 -1
  39. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.d.ts +38 -1
  40. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js +125 -46
  41. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.js.map +1 -1
  42. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js +95 -8
  43. package/dist/fusion-order/settlement-post-interaction-data/settlement-post-interaction-data.spec.js.map +1 -1
  44. package/dist/fusion-order/settlement-post-interaction-data/types.d.ts +12 -3
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +11 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/sdk/sdk.js +3 -6
  49. package/dist/sdk/sdk.js.map +1 -1
  50. package/dist/sdk/types.d.ts +11 -0
  51. package/dist/sdk/utils.js +5 -2
  52. package/dist/sdk/utils.js.map +1 -1
  53. package/dist/utils/amounts.d.ts +17 -1
  54. package/dist/utils/amounts.js +19 -3
  55. package/dist/utils/amounts.js.map +1 -1
  56. package/dist/utils/time.d.ts +1 -0
  57. package/dist/utils/time.js +8 -0
  58. package/dist/utils/time.js.map +1 -0
  59. package/dist/validations.d.ts +4 -0
  60. package/dist/validations.js +4 -0
  61. package/dist/validations.js.map +1 -1
  62. package/dist/ws-api/ws.spec.js +1 -0
  63. package/dist/ws-api/ws.spec.js.map +1 -1
  64. package/package.json +31 -24
  65. package/dist/limit-order-contract/index.d.ts +0 -1
  66. package/dist/limit-order-contract/index.js +0 -6
  67. package/dist/limit-order-contract/index.js.map +0 -1
@@ -1,8 +1,20 @@
1
1
  export type AuctionPoint = {
2
+ /**
3
+ * point in time of this point relatively to previous point
4
+ */
2
5
  delay: number;
6
+ /**
7
+ * coefficient rate bump from the end of an auction
8
+ */
3
9
  coefficient: number;
4
10
  };
5
11
  export type AuctionGasCostInfo = {
12
+ /**
13
+ * Rate bump to cover gas price. 10_000_000 means 100%
14
+ */
6
15
  gasBumpEstimate: bigint;
16
+ /**
17
+ * Gas price at estimation time. 1000 means 1 Gwei
18
+ */
7
19
  gasPriceEstimate: bigint;
8
20
  };
@@ -3,8 +3,8 @@ import { AuctionDetails } from './auction-details';
3
3
  import { SettlementPostInteractionData } from './settlement-post-interaction-data';
4
4
  export declare class FusionExtension extends ExtensionBuilder {
5
5
  readonly address: Address;
6
- readonly details: AuctionDetails;
6
+ readonly auctionDetails: AuctionDetails;
7
7
  readonly postInteractionData: SettlementPostInteractionData;
8
- constructor(address: Address, details: AuctionDetails, postInteractionData: SettlementPostInteractionData);
8
+ constructor(address: Address, auctionDetails: AuctionDetails, postInteractionData: SettlementPostInteractionData);
9
9
  build(): Extension;
10
10
  }
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FusionExtension = void 0;
4
4
  const limit_order_sdk_1 = require("@1inch/limit-order-sdk");
5
5
  class FusionExtension extends limit_order_sdk_1.ExtensionBuilder {
6
- constructor(address, details, postInteractionData) {
6
+ constructor(address, auctionDetails, postInteractionData) {
7
7
  super();
8
8
  this.address = address;
9
- this.details = details;
9
+ this.auctionDetails = auctionDetails;
10
10
  this.postInteractionData = postInteractionData;
11
11
  }
12
12
  build() {
13
- const detailsBytes = this.details.encode();
13
+ const detailsBytes = this.auctionDetails.encode();
14
14
  this.withMakingAmountData(this.address, detailsBytes)
15
15
  .withTakingAmountData(this.address, detailsBytes)
16
16
  .withPostInteraction(new limit_order_sdk_1.Interaction(this.address, this.postInteractionData.encode()));
@@ -1 +1 @@
1
- {"version":3,"file":"fusion-extension.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-extension.ts"],"names":[],"mappings":";;;AAAA,4DAK+B;AAI/B,MAAa,eAAgB,SAAQ,kCAAgB;IACjD,YACoB,OAAgB,EAChB,OAAuB,EACvB,mBAAkD;QAElE,KAAK,EAAE,CAAA;QAJS,YAAO,GAAP,OAAO,CAAS;QAChB,YAAO,GAAP,OAAO,CAAgB;QACvB,wBAAmB,GAAnB,mBAAmB,CAA+B;IAGtE,CAAC;IAEM,KAAK;QACR,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QAE1C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;aAChD,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;aAChD,mBAAmB,CAChB,IAAI,6BAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CACnE,CAAA;QAEL,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACJ;AApBD,0CAoBC"}
1
+ {"version":3,"file":"fusion-extension.js","sourceRoot":"","sources":["../../src/fusion-order/fusion-extension.ts"],"names":[],"mappings":";;;AAAA,4DAK+B;AAI/B,MAAa,eAAgB,SAAQ,kCAAgB;IACjD,YACoB,OAAgB,EAChB,cAA8B,EAC9B,mBAAkD;QAElE,KAAK,EAAE,CAAA;QAJS,YAAO,GAAP,OAAO,CAAS;QAChB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,wBAAmB,GAAnB,mBAAmB,CAA+B;IAGtE,CAAC;IAEM,KAAK;QACR,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAA;QAEjD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;aAChD,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;aAChD,mBAAmB,CAChB,IAAI,6BAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CACnE,CAAA;QAEL,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACJ;AApBD,0CAoBC"}
@@ -4,30 +4,116 @@ 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;
10
16
  private constructor();
11
17
  get extension(): Extension;
12
- static new(settlementExtension: Address, orderInfo: OrderInfoData, details: {
18
+ get maker(): Address;
19
+ get takerAsset(): Address;
20
+ get makerAsset(): Address;
21
+ get takingAmount(): bigint;
22
+ get makingAmount(): bigint;
23
+ get receiver(): Address;
24
+ /**
25
+ * Timestamp in sec
26
+ */
27
+ get deadline(): bigint;
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: {
13
44
  auction: AuctionDetails;
14
45
  fees?: {
15
46
  integratorFee?: IntegratorFee;
16
47
  bankFee?: bigint;
17
48
  };
18
49
  whitelist: AuctionWhitelistItem[];
50
+ /**
51
+ * Time from which order can be executed
52
+ */
53
+ resolvingStartTime?: bigint;
19
54
  }, extra?: {
20
55
  unwrapWETH?: boolean;
56
+ /**
57
+ * Required if `allowPartialFills` is false
58
+ */
21
59
  nonce?: bigint;
22
60
  permit?: string;
61
+ /**
62
+ * Default is true
63
+ */
23
64
  allowPartialFills?: boolean;
65
+ /**
66
+ * Default is true
67
+ */
24
68
  allowMultipleFills?: boolean;
69
+ /**
70
+ * Order will expire in `orderExpirationDelay` after auction ends
71
+ * Default 12s
72
+ */
25
73
  orderExpirationDelay?: bigint;
26
74
  enablePermit2?: boolean;
27
75
  }): FusionOrder;
76
+ /**
77
+ * Create FusionOrder from order data and extension
78
+ *
79
+ */
28
80
  static fromDataAndExtension(order: LimitOrderV4Struct, extension: Extension): FusionOrder;
29
81
  build(): LimitOrderV4Struct;
30
- getOrderHash(domain?: import("@1inch/limit-order-sdk").EIP712DomainType): string;
31
- getTypedData(domain?: import("@1inch/limit-order-sdk").EIP712DomainType): EIP712TypedData;
82
+ getOrderHash(chainId: number): string;
83
+ getTypedData(chainId: number): EIP712TypedData;
32
84
  getCalculator(): AuctionCalculator;
85
+ /**
86
+ * Calculates required taking amount for passed `makingAmount` at block time `time`
87
+ *
88
+ * @param makingAmount maker swap amount
89
+ * @param time execution time in sec
90
+ * @param blockBaseFee block fee in wei.
91
+ * */
92
+ calcTakingAmount(makingAmount: bigint, time: bigint, blockBaseFee?: bigint): bigint;
93
+ /**
94
+ * Check whether address allowed to execute order at the given time
95
+ *
96
+ * @param executor address of executor
97
+ * @param executionTime timestamp in sec at which order planning to execute
98
+ */
99
+ canExecuteAt(executor: Address, executionTime: bigint): boolean;
100
+ /**
101
+ * Check is order expired at a given time
102
+ *
103
+ * @param time timestamp in seconds
104
+ */
105
+ isExpiredAt(time: bigint): boolean;
106
+ /**
107
+ * Returns how much fee will be credited from a resolver deposit account
108
+ * Token of fee set in Settlement extension constructor
109
+ * Actual deployments can be found at https://github.com/1inch/limit-order-settlement/tree/master/deployments
110
+ *
111
+ * @param filledMakingAmount which resolver fills
112
+ * @see https://github.com/1inch/limit-order-settlement/blob/0e3cae3653092ebb4ea5d2a338c87a54351ad883/contracts/extensions/ResolverFeeExtension.sol#L29
113
+ */
114
+ getResolverFee(filledMakingAmount: bigint): bigint;
115
+ /**
116
+ * Check if `wallet` can fill order before other
117
+ */
118
+ isExclusiveResolver(wallet: Address): boolean;
33
119
  }
@@ -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":";;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,KAAK,EAAE,EAAE;iBACZ;aACJ;SACJ,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,KAAK,EAAE,EAAE;iBACZ;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;AACN,CAAC,CAAC,CAAA"}
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,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,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"}
@@ -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 {};