@atomiqlabs/chain-starknet 8.0.13 → 8.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/index.d.ts +18 -18
  2. package/dist/index.js +42 -42
  3. package/dist/starknet/StarknetChainType.d.ts +19 -19
  4. package/dist/starknet/StarknetChainType.js +2 -2
  5. package/dist/starknet/StarknetInitializer.d.ts +66 -63
  6. package/dist/starknet/StarknetInitializer.js +101 -101
  7. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  8. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  9. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +196 -196
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.js +419 -411
  11. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +70 -70
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +115 -115
  13. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +91 -91
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +155 -155
  15. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  16. package/dist/starknet/chain/StarknetAction.js +74 -74
  17. package/dist/starknet/chain/StarknetChainInterface.d.ts +142 -143
  18. package/dist/starknet/chain/StarknetChainInterface.js +198 -199
  19. package/dist/starknet/chain/StarknetModule.d.ts +8 -8
  20. package/dist/starknet/chain/StarknetModule.js +12 -12
  21. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  22. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  23. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  24. package/dist/starknet/chain/modules/StarknetAccounts.js +26 -26
  25. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +10 -10
  26. package/dist/starknet/chain/modules/StarknetAddresses.js +27 -27
  27. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +27 -27
  28. package/dist/starknet/chain/modules/StarknetBlocks.js +82 -82
  29. package/dist/starknet/chain/modules/StarknetEvents.d.ts +47 -47
  30. package/dist/starknet/chain/modules/StarknetEvents.js +90 -90
  31. package/dist/starknet/chain/modules/StarknetFees.d.ts +118 -104
  32. package/dist/starknet/chain/modules/StarknetFees.js +150 -146
  33. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  34. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  35. package/dist/starknet/chain/modules/StarknetTokens.d.ts +66 -66
  36. package/dist/starknet/chain/modules/StarknetTokens.js +99 -99
  37. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +122 -115
  38. package/dist/starknet/chain/modules/StarknetTransactions.js +633 -612
  39. package/dist/starknet/contract/StarknetContractBase.d.ts +14 -13
  40. package/dist/starknet/contract/StarknetContractBase.js +21 -20
  41. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  42. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  43. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +56 -57
  44. package/dist/starknet/contract/modules/StarknetContractEvents.js +111 -111
  45. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  46. package/dist/starknet/events/StarknetChainEvents.js +61 -61
  47. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +178 -190
  48. package/dist/starknet/events/StarknetChainEventsBrowser.js +523 -582
  49. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +49 -53
  50. package/dist/starknet/provider/RpcProviderWithRetries.js +94 -94
  51. package/dist/starknet/provider/WebSocketChannelWithRetries.d.ts +21 -21
  52. package/dist/starknet/provider/WebSocketChannelWithRetries.js +46 -46
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  54. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +225 -219
  56. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +663 -621
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +108 -108
  58. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +190 -190
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +56 -56
  60. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +103 -103
  61. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
  62. package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
  63. package/dist/starknet/swaps/StarknetSwapContract.d.ts +309 -278
  64. package/dist/starknet/swaps/StarknetSwapContract.js +755 -579
  65. package/dist/starknet/swaps/StarknetSwapData.d.ts +234 -234
  66. package/dist/starknet/swaps/StarknetSwapData.js +474 -474
  67. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  68. package/dist/starknet/swaps/StarknetSwapModule.js +12 -12
  69. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  70. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  72. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  74. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  80. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +42 -45
  82. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +50 -54
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  84. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  85. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +67 -67
  86. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +52 -52
  88. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +99 -99
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -94
  90. package/dist/starknet/swaps/modules/StarknetSwapInit.js +239 -239
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +60 -60
  92. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +126 -126
  93. package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +11 -11
  94. package/dist/starknet/wallet/StarknetBrowserSigner.js +17 -17
  95. package/dist/starknet/wallet/StarknetPersistentSigner.d.ts +76 -76
  96. package/dist/starknet/wallet/StarknetPersistentSigner.js +291 -291
  97. package/dist/starknet/wallet/StarknetSigner.d.ts +72 -72
  98. package/dist/starknet/wallet/StarknetSigner.js +114 -114
  99. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.d.ts +18 -18
  100. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.js +45 -45
  101. package/dist/utils/Utils.d.ts +77 -77
  102. package/dist/utils/Utils.js +304 -303
  103. package/package.json +2 -2
  104. package/src/starknet/StarknetInitializer.ts +6 -3
  105. package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -6
  106. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +7 -7
  107. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +6 -6
  108. package/src/starknet/chain/StarknetAction.ts +1 -0
  109. package/src/starknet/chain/StarknetChainInterface.ts +0 -2
  110. package/src/starknet/chain/modules/StarknetFees.ts +15 -2
  111. package/src/starknet/chain/modules/StarknetTransactions.ts +24 -0
  112. package/src/starknet/contract/StarknetContractBase.ts +7 -4
  113. package/src/starknet/contract/StarknetContractModule.ts +1 -1
  114. package/src/starknet/contract/modules/StarknetContractEvents.ts +7 -7
  115. package/src/starknet/events/StarknetChainEventsBrowser.ts +2 -64
  116. package/src/starknet/provider/RpcProviderWithRetries.ts +1 -1
  117. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +84 -18
  118. package/src/starknet/swaps/StarknetSwapContract.ts +242 -6
  119. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +0 -4
@@ -1,474 +1,474 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetSwapData = void 0;
4
- const base_1 = require("@atomiqlabs/base");
5
- const TimelockRefundHandler_1 = require("./handlers/refund/TimelockRefundHandler");
6
- const starknet_1 = require("starknet");
7
- const Utils_1 = require("../../utils/Utils");
8
- const FLAG_PAY_OUT = 0x01n;
9
- const FLAG_PAY_IN = 0x02n;
10
- const FLAG_REPUTATION = 0x04n;
11
- function successActionEquals(a, b) {
12
- if (a != null && b != null) {
13
- return a.executionHash.toLowerCase() === b.executionHash.toLowerCase() &&
14
- a.executionExpiry === b.executionExpiry &&
15
- a.executionFee === b.executionFee;
16
- }
17
- return a === b;
18
- }
19
- function isSerializedData(obj) {
20
- return obj.type === "strk";
21
- }
22
- /**
23
- * Represents swap data for executing PrTLC (on-chain) or HTLC (lightning) based swaps
24
- *
25
- * @category Swaps
26
- */
27
- class StarknetSwapData extends base_1.SwapData {
28
- /**
29
- *
30
- * @param value
31
- * @private
32
- */
33
- static toFlags(value) {
34
- const val = (0, Utils_1.toBigInt)(value);
35
- return {
36
- sequence: val >> 64n,
37
- payOut: (val & FLAG_PAY_OUT) === FLAG_PAY_OUT,
38
- payIn: (val & FLAG_PAY_IN) === FLAG_PAY_IN,
39
- reputation: (val & FLAG_REPUTATION) === FLAG_REPUTATION
40
- };
41
- }
42
- /**
43
- *
44
- * @private
45
- */
46
- getFlags() {
47
- return (this.sequence << 64n) +
48
- (this.payOut ? FLAG_PAY_OUT : 0n) +
49
- (this.payIn ? FLAG_PAY_IN : 0n) +
50
- (this.reputation ? FLAG_REPUTATION : 0n);
51
- }
52
- constructor(data) {
53
- super();
54
- if (!isSerializedData(data)) {
55
- this.offerer = data.offerer;
56
- this.claimer = data.claimer;
57
- this.token = data.token;
58
- this.refundHandler = data.refundHandler;
59
- this.claimHandler = data.claimHandler;
60
- this.payOut = data.payOut;
61
- this.payIn = data.payIn;
62
- this.reputation = data.reputation;
63
- this.sequence = data.sequence;
64
- this.claimData = data.claimData;
65
- this.refundData = data.refundData;
66
- this.amount = data.amount;
67
- this.feeToken = data.feeToken;
68
- this.securityDeposit = data.securityDeposit;
69
- this.claimerBounty = data.claimerBounty;
70
- this.kind = data.kind;
71
- this.extraData = data.extraData;
72
- this.successAction = data.successAction;
73
- }
74
- else {
75
- this.offerer = data.offerer;
76
- this.claimer = data.claimer;
77
- this.token = data.token;
78
- this.refundHandler = data.refundHandler;
79
- this.claimHandler = data.claimHandler;
80
- this.payOut = data.payOut;
81
- this.payIn = data.payIn;
82
- this.reputation = data.reputation;
83
- this.sequence = BigInt(data.sequence);
84
- this.claimData = data.claimData;
85
- this.refundData = data.refundData;
86
- this.amount = BigInt(data.amount);
87
- this.feeToken = data.feeToken;
88
- this.securityDeposit = BigInt(data.securityDeposit);
89
- this.claimerBounty = BigInt(data.claimerBounty);
90
- this.kind = data.kind;
91
- this.extraData = data.extraData;
92
- this.successAction = data.successAction == null || Array.isArray(data.successAction) ? undefined : {
93
- executionHash: data.successAction.executionHash,
94
- executionExpiry: BigInt(data.successAction.executionExpiry),
95
- executionFee: BigInt(data.successAction.executionFee),
96
- };
97
- }
98
- }
99
- /**
100
- * @inheritDoc
101
- */
102
- getOfferer() {
103
- return this.offerer;
104
- }
105
- /**
106
- * @inheritDoc
107
- */
108
- setOfferer(newOfferer) {
109
- this.offerer = newOfferer;
110
- this.payIn = true;
111
- }
112
- /**
113
- * @inheritDoc
114
- */
115
- getClaimer() {
116
- return this.claimer;
117
- }
118
- /**
119
- * @inheritDoc
120
- */
121
- setClaimer(newClaimer) {
122
- this.claimer = newClaimer;
123
- this.payIn = false;
124
- this.payOut = true;
125
- this.reputation = false;
126
- }
127
- /**
128
- * @inheritDoc
129
- */
130
- serialize() {
131
- return {
132
- type: "strk",
133
- offerer: this.offerer,
134
- claimer: this.claimer,
135
- token: this.token,
136
- refundHandler: this.refundHandler,
137
- claimHandler: this.claimHandler,
138
- payOut: this.payOut,
139
- payIn: this.payIn,
140
- reputation: this.reputation,
141
- sequence: this.sequence?.toString(10),
142
- claimData: this.claimData,
143
- refundData: this.refundData,
144
- amount: this.amount?.toString(10),
145
- feeToken: this.feeToken,
146
- securityDeposit: this.securityDeposit?.toString(10),
147
- claimerBounty: this.claimerBounty?.toString(10),
148
- kind: this.kind,
149
- extraData: this.extraData,
150
- successAction: this.successAction == null ? undefined : {
151
- executionHash: this.successAction.executionHash,
152
- executionExpiry: this.successAction.executionExpiry.toString(10),
153
- executionFee: this.successAction.executionFee.toString(10)
154
- }
155
- };
156
- }
157
- /**
158
- * @inheritDoc
159
- */
160
- getAmount() {
161
- return this.amount;
162
- }
163
- /**
164
- * @inheritDoc
165
- */
166
- getToken() {
167
- return this.token;
168
- }
169
- /**
170
- * @inheritDoc
171
- */
172
- isToken(token) {
173
- return this.token.toLowerCase() === token.toLowerCase();
174
- }
175
- /**
176
- * @inheritDoc
177
- */
178
- getType() {
179
- return this.kind;
180
- }
181
- /**
182
- * @inheritDoc
183
- */
184
- getExpiry() {
185
- return TimelockRefundHandler_1.TimelockRefundHandler.getExpiry(this);
186
- }
187
- /**
188
- * @inheritDoc
189
- */
190
- isPayIn() {
191
- return this.payIn;
192
- }
193
- /**
194
- * @inheritDoc
195
- */
196
- isPayOut() {
197
- return this.payOut;
198
- }
199
- /**
200
- * @inheritDoc
201
- */
202
- isTrackingReputation() {
203
- return this.reputation;
204
- }
205
- /**
206
- * @inheritDoc
207
- */
208
- getEscrowHash() {
209
- const amountValue = starknet_1.cairo.uint256("0x" + this.amount.toString(16));
210
- const securityDepositValue = starknet_1.cairo.uint256("0x" + this.securityDeposit.toString(16));
211
- const claimerBountyValue = starknet_1.cairo.uint256("0x" + this.claimerBounty.toString(16));
212
- const elements = [
213
- this.offerer,
214
- this.claimer,
215
- this.token,
216
- this.refundHandler,
217
- this.claimHandler,
218
- this.getFlags(),
219
- this.claimData,
220
- this.refundData,
221
- amountValue.low,
222
- amountValue.high,
223
- this.feeToken,
224
- securityDepositValue.low,
225
- securityDepositValue.high,
226
- claimerBountyValue.low,
227
- claimerBountyValue.high
228
- ];
229
- if (this.successAction != null) {
230
- elements.push(this.successAction.executionHash);
231
- elements.push(this.successAction.executionExpiry);
232
- const feeValue = starknet_1.cairo.uint256("0x" + this.successAction.executionFee.toString(16));
233
- elements.push(feeValue.low, feeValue.high);
234
- }
235
- let escrowHash = starknet_1.hash.computePoseidonHashOnElements(elements);
236
- if (escrowHash.startsWith("0x"))
237
- escrowHash = escrowHash.slice(2);
238
- return escrowHash.padStart(64, "0");
239
- }
240
- /**
241
- * @inheritDoc
242
- */
243
- getClaimHash() {
244
- let hash = this.claimData;
245
- if (hash.startsWith("0x"))
246
- hash = hash.slice(2);
247
- return hash.padStart(64, "0");
248
- }
249
- /**
250
- * @inheritDoc
251
- */
252
- getSequence() {
253
- return this.sequence;
254
- }
255
- /**
256
- * @inheritDoc
257
- */
258
- getConfirmationsHint() {
259
- if (this.extraData == null)
260
- return null;
261
- if (this.extraData.length != 84)
262
- return null;
263
- return parseInt(this.extraData.slice(80), 16);
264
- }
265
- /**
266
- * @inheritDoc
267
- */
268
- getNonceHint() {
269
- if (this.extraData == null)
270
- return null;
271
- if (this.extraData.length != 84)
272
- return null;
273
- return BigInt("0x" + this.extraData.slice(64, 80));
274
- }
275
- /**
276
- * @inheritDoc
277
- */
278
- getTxoHashHint() {
279
- if (this.extraData == null)
280
- return null;
281
- if (this.extraData.length != 84)
282
- return null;
283
- return this.extraData.slice(0, 64);
284
- }
285
- /**
286
- * @inheritDoc
287
- */
288
- getExtraData() {
289
- return this.extraData ?? null;
290
- }
291
- /**
292
- * @inheritDoc
293
- */
294
- setExtraData(extraData) {
295
- this.extraData = extraData;
296
- }
297
- /**
298
- * @inheritDoc
299
- */
300
- getSecurityDeposit() {
301
- return this.securityDeposit;
302
- }
303
- /**
304
- * @inheritDoc
305
- */
306
- getClaimerBounty() {
307
- return this.claimerBounty;
308
- }
309
- /**
310
- * @inheritDoc
311
- */
312
- getTotalDeposit() {
313
- return this.claimerBounty < this.securityDeposit ? this.securityDeposit : this.claimerBounty;
314
- }
315
- /**
316
- * @inheritDoc
317
- */
318
- getDepositToken() {
319
- return this.feeToken;
320
- }
321
- /**
322
- * @inheritDoc
323
- */
324
- isDepositToken(token) {
325
- if (!token.startsWith("0x"))
326
- token = "0x" + token;
327
- return (0, Utils_1.toHex)(this.feeToken) === (0, Utils_1.toHex)(token);
328
- }
329
- /**
330
- * @inheritDoc
331
- */
332
- isClaimer(address) {
333
- if (!address.startsWith("0x"))
334
- address = "0x" + address;
335
- return (0, Utils_1.toHex)(this.claimer) === (0, Utils_1.toHex)(address);
336
- }
337
- /**
338
- * @inheritDoc
339
- */
340
- isOfferer(address) {
341
- if (!address.startsWith("0x"))
342
- address = "0x" + address;
343
- return (0, Utils_1.toHex)(this.offerer) === (0, Utils_1.toHex)(address);
344
- }
345
- /**
346
- * Checks whether the passed address is specified as a claim handler for the swap
347
- *
348
- * @param address
349
- */
350
- isClaimHandler(address) {
351
- if (!address.startsWith("0x"))
352
- address = "0x" + address;
353
- return (0, Utils_1.toHex)(this.claimHandler) === (0, Utils_1.toHex)(address);
354
- }
355
- /**
356
- * Checks if the passed data match the swap's claim data
357
- *
358
- * @param data
359
- */
360
- isClaimData(data) {
361
- if (!data.startsWith("0x"))
362
- data = "0x" + data;
363
- return (0, Utils_1.toHex)(this.claimData) === (0, Utils_1.toHex)(data);
364
- }
365
- /**
366
- * @inheritDoc
367
- */
368
- equals(other) {
369
- return other.offerer.toLowerCase() === this.offerer.toLowerCase() &&
370
- other.claimer.toLowerCase() === this.claimer.toLowerCase() &&
371
- other.token.toLowerCase() === this.token.toLowerCase() &&
372
- other.refundHandler.toLowerCase() === this.refundHandler.toLowerCase() &&
373
- other.claimHandler.toLowerCase() === this.claimHandler.toLowerCase() &&
374
- other.payIn === this.payIn &&
375
- other.payOut === this.payOut &&
376
- other.reputation === this.reputation &&
377
- this.sequence === other.sequence &&
378
- other.claimData.toLowerCase() === this.claimData.toLowerCase() &&
379
- other.refundData.toLowerCase() === this.refundData.toLowerCase() &&
380
- other.amount === this.amount &&
381
- other.securityDeposit === this.securityDeposit &&
382
- other.claimerBounty === this.claimerBounty &&
383
- successActionEquals(other.successAction, this.successAction);
384
- }
385
- /**
386
- * Serializes the swap data into starknet.js struct representation
387
- */
388
- toEscrowStruct() {
389
- return {
390
- offerer: this.offerer,
391
- claimer: this.claimer,
392
- token: this.token,
393
- refund_handler: this.refundHandler,
394
- claim_handler: this.claimHandler,
395
- flags: this.getFlags(),
396
- claim_data: this.claimData,
397
- refund_data: this.refundData,
398
- amount: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.amount)),
399
- fee_token: this.feeToken,
400
- security_deposit: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.securityDeposit)),
401
- claimer_bounty: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.claimerBounty)),
402
- success_action: new starknet_1.CairoOption(this.successAction == null ? starknet_1.CairoOptionVariant.None : starknet_1.CairoOptionVariant.Some, this.successAction == null ? undefined : {
403
- hash: this.successAction.executionHash,
404
- expiry: this.successAction.executionExpiry,
405
- fee: starknet_1.cairo.uint256(this.successAction.executionFee)
406
- })
407
- };
408
- }
409
- /**
410
- * Deserializes swap data from the provided felt252 array,
411
- *
412
- * @param span a felt252 array of length 16 or more
413
- * @param claimHandlerImpl Claim handler implementation to parse the swap type, this is checked
414
- * for internally and this throws an error if the passed `claimHandlerImpl` doesn't match the
415
- * claim handler address in the passed swap data
416
- */
417
- static fromSerializedFeltArray(span, claimHandlerImpl) {
418
- if (span.length < 16)
419
- throw new Error("Invalid length of serialized starknet swap data!");
420
- const offerer = (0, Utils_1.toHex)(span.shift());
421
- const claimer = (0, Utils_1.toHex)(span.shift());
422
- const token = (0, Utils_1.toHex)(span.shift());
423
- const refundHandler = (0, Utils_1.toHex)(span.shift());
424
- const claimHandler = (0, Utils_1.toHex)(span.shift());
425
- const { payOut, payIn, reputation, sequence } = StarknetSwapData.toFlags(span.shift());
426
- const claimData = (0, Utils_1.toHex)(span.shift());
427
- const refundData = (0, Utils_1.toHex)(span.shift());
428
- const amount = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
429
- const feeToken = (0, Utils_1.toHex)(span.shift());
430
- const securityDeposit = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
431
- const claimerBounty = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
432
- const hasSuccessAction = (0, Utils_1.toBigInt)(span.shift()) === 0n;
433
- let successAction = undefined;
434
- if (hasSuccessAction) {
435
- if (span.length < 4)
436
- throw new Error("Invalid length of serialized starknet swap data!");
437
- successAction = {
438
- executionHash: (0, Utils_1.toHex)(span.shift()),
439
- executionExpiry: (0, Utils_1.toBigInt)(span.shift()),
440
- executionFee: (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() })
441
- };
442
- }
443
- const swapData = new StarknetSwapData({
444
- offerer,
445
- claimer,
446
- token,
447
- refundHandler,
448
- claimHandler,
449
- payOut,
450
- payIn,
451
- reputation,
452
- sequence,
453
- claimData,
454
- refundData,
455
- amount,
456
- feeToken,
457
- securityDeposit,
458
- claimerBounty,
459
- kind: claimHandlerImpl.getType(),
460
- successAction
461
- });
462
- if (!swapData.isClaimHandler(claimHandlerImpl.address))
463
- throw new Error(`Invalid swap handler impl passed! Passed: ${claimHandlerImpl.address}, actual: ${swapData.claimHandler}`);
464
- return swapData;
465
- }
466
- /**
467
- * @inheritDoc
468
- */
469
- hasSuccessAction() {
470
- return this.successAction != null;
471
- }
472
- }
473
- exports.StarknetSwapData = StarknetSwapData;
474
- base_1.SwapData.deserializers["strk"] = StarknetSwapData;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetSwapData = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const TimelockRefundHandler_1 = require("./handlers/refund/TimelockRefundHandler");
6
+ const starknet_1 = require("starknet");
7
+ const Utils_1 = require("../../utils/Utils");
8
+ const FLAG_PAY_OUT = 0x01n;
9
+ const FLAG_PAY_IN = 0x02n;
10
+ const FLAG_REPUTATION = 0x04n;
11
+ function successActionEquals(a, b) {
12
+ if (a != null && b != null) {
13
+ return a.executionHash.toLowerCase() === b.executionHash.toLowerCase() &&
14
+ a.executionExpiry === b.executionExpiry &&
15
+ a.executionFee === b.executionFee;
16
+ }
17
+ return a === b;
18
+ }
19
+ function isSerializedData(obj) {
20
+ return obj.type === "strk";
21
+ }
22
+ /**
23
+ * Represents swap data for executing PrTLC (on-chain) or HTLC (lightning) based swaps
24
+ *
25
+ * @category Swaps
26
+ */
27
+ class StarknetSwapData extends base_1.SwapData {
28
+ /**
29
+ *
30
+ * @param value
31
+ * @private
32
+ */
33
+ static toFlags(value) {
34
+ const val = (0, Utils_1.toBigInt)(value);
35
+ return {
36
+ sequence: val >> 64n,
37
+ payOut: (val & FLAG_PAY_OUT) === FLAG_PAY_OUT,
38
+ payIn: (val & FLAG_PAY_IN) === FLAG_PAY_IN,
39
+ reputation: (val & FLAG_REPUTATION) === FLAG_REPUTATION
40
+ };
41
+ }
42
+ /**
43
+ *
44
+ * @private
45
+ */
46
+ getFlags() {
47
+ return (this.sequence << 64n) +
48
+ (this.payOut ? FLAG_PAY_OUT : 0n) +
49
+ (this.payIn ? FLAG_PAY_IN : 0n) +
50
+ (this.reputation ? FLAG_REPUTATION : 0n);
51
+ }
52
+ constructor(data) {
53
+ super();
54
+ if (!isSerializedData(data)) {
55
+ this.offerer = data.offerer;
56
+ this.claimer = data.claimer;
57
+ this.token = data.token;
58
+ this.refundHandler = data.refundHandler;
59
+ this.claimHandler = data.claimHandler;
60
+ this.payOut = data.payOut;
61
+ this.payIn = data.payIn;
62
+ this.reputation = data.reputation;
63
+ this.sequence = data.sequence;
64
+ this.claimData = data.claimData;
65
+ this.refundData = data.refundData;
66
+ this.amount = data.amount;
67
+ this.feeToken = data.feeToken;
68
+ this.securityDeposit = data.securityDeposit;
69
+ this.claimerBounty = data.claimerBounty;
70
+ this.kind = data.kind;
71
+ this.extraData = data.extraData;
72
+ this.successAction = data.successAction;
73
+ }
74
+ else {
75
+ this.offerer = data.offerer;
76
+ this.claimer = data.claimer;
77
+ this.token = data.token;
78
+ this.refundHandler = data.refundHandler;
79
+ this.claimHandler = data.claimHandler;
80
+ this.payOut = data.payOut;
81
+ this.payIn = data.payIn;
82
+ this.reputation = data.reputation;
83
+ this.sequence = BigInt(data.sequence);
84
+ this.claimData = data.claimData;
85
+ this.refundData = data.refundData;
86
+ this.amount = BigInt(data.amount);
87
+ this.feeToken = data.feeToken;
88
+ this.securityDeposit = BigInt(data.securityDeposit);
89
+ this.claimerBounty = BigInt(data.claimerBounty);
90
+ this.kind = data.kind;
91
+ this.extraData = data.extraData;
92
+ this.successAction = data.successAction == null || Array.isArray(data.successAction) ? undefined : {
93
+ executionHash: data.successAction.executionHash,
94
+ executionExpiry: BigInt(data.successAction.executionExpiry),
95
+ executionFee: BigInt(data.successAction.executionFee),
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * @inheritDoc
101
+ */
102
+ getOfferer() {
103
+ return this.offerer;
104
+ }
105
+ /**
106
+ * @inheritDoc
107
+ */
108
+ setOfferer(newOfferer) {
109
+ this.offerer = newOfferer;
110
+ this.payIn = true;
111
+ }
112
+ /**
113
+ * @inheritDoc
114
+ */
115
+ getClaimer() {
116
+ return this.claimer;
117
+ }
118
+ /**
119
+ * @inheritDoc
120
+ */
121
+ setClaimer(newClaimer) {
122
+ this.claimer = newClaimer;
123
+ this.payIn = false;
124
+ this.payOut = true;
125
+ this.reputation = false;
126
+ }
127
+ /**
128
+ * @inheritDoc
129
+ */
130
+ serialize() {
131
+ return {
132
+ type: "strk",
133
+ offerer: this.offerer,
134
+ claimer: this.claimer,
135
+ token: this.token,
136
+ refundHandler: this.refundHandler,
137
+ claimHandler: this.claimHandler,
138
+ payOut: this.payOut,
139
+ payIn: this.payIn,
140
+ reputation: this.reputation,
141
+ sequence: this.sequence?.toString(10),
142
+ claimData: this.claimData,
143
+ refundData: this.refundData,
144
+ amount: this.amount?.toString(10),
145
+ feeToken: this.feeToken,
146
+ securityDeposit: this.securityDeposit?.toString(10),
147
+ claimerBounty: this.claimerBounty?.toString(10),
148
+ kind: this.kind,
149
+ extraData: this.extraData,
150
+ successAction: this.successAction == null ? undefined : {
151
+ executionHash: this.successAction.executionHash,
152
+ executionExpiry: this.successAction.executionExpiry.toString(10),
153
+ executionFee: this.successAction.executionFee.toString(10)
154
+ }
155
+ };
156
+ }
157
+ /**
158
+ * @inheritDoc
159
+ */
160
+ getAmount() {
161
+ return this.amount;
162
+ }
163
+ /**
164
+ * @inheritDoc
165
+ */
166
+ getToken() {
167
+ return this.token;
168
+ }
169
+ /**
170
+ * @inheritDoc
171
+ */
172
+ isToken(token) {
173
+ return this.token.toLowerCase() === token.toLowerCase();
174
+ }
175
+ /**
176
+ * @inheritDoc
177
+ */
178
+ getType() {
179
+ return this.kind;
180
+ }
181
+ /**
182
+ * @inheritDoc
183
+ */
184
+ getExpiry() {
185
+ return TimelockRefundHandler_1.TimelockRefundHandler.getExpiry(this);
186
+ }
187
+ /**
188
+ * @inheritDoc
189
+ */
190
+ isPayIn() {
191
+ return this.payIn;
192
+ }
193
+ /**
194
+ * @inheritDoc
195
+ */
196
+ isPayOut() {
197
+ return this.payOut;
198
+ }
199
+ /**
200
+ * @inheritDoc
201
+ */
202
+ isTrackingReputation() {
203
+ return this.reputation;
204
+ }
205
+ /**
206
+ * @inheritDoc
207
+ */
208
+ getEscrowHash() {
209
+ const amountValue = starknet_1.cairo.uint256("0x" + this.amount.toString(16));
210
+ const securityDepositValue = starknet_1.cairo.uint256("0x" + this.securityDeposit.toString(16));
211
+ const claimerBountyValue = starknet_1.cairo.uint256("0x" + this.claimerBounty.toString(16));
212
+ const elements = [
213
+ this.offerer,
214
+ this.claimer,
215
+ this.token,
216
+ this.refundHandler,
217
+ this.claimHandler,
218
+ this.getFlags(),
219
+ this.claimData,
220
+ this.refundData,
221
+ amountValue.low,
222
+ amountValue.high,
223
+ this.feeToken,
224
+ securityDepositValue.low,
225
+ securityDepositValue.high,
226
+ claimerBountyValue.low,
227
+ claimerBountyValue.high
228
+ ];
229
+ if (this.successAction != null) {
230
+ elements.push(this.successAction.executionHash);
231
+ elements.push(this.successAction.executionExpiry);
232
+ const feeValue = starknet_1.cairo.uint256("0x" + this.successAction.executionFee.toString(16));
233
+ elements.push(feeValue.low, feeValue.high);
234
+ }
235
+ let escrowHash = starknet_1.hash.computePoseidonHashOnElements(elements);
236
+ if (escrowHash.startsWith("0x"))
237
+ escrowHash = escrowHash.slice(2);
238
+ return escrowHash.padStart(64, "0");
239
+ }
240
+ /**
241
+ * @inheritDoc
242
+ */
243
+ getClaimHash() {
244
+ let hash = this.claimData;
245
+ if (hash.startsWith("0x"))
246
+ hash = hash.slice(2);
247
+ return hash.padStart(64, "0");
248
+ }
249
+ /**
250
+ * @inheritDoc
251
+ */
252
+ getSequence() {
253
+ return this.sequence;
254
+ }
255
+ /**
256
+ * @inheritDoc
257
+ */
258
+ getConfirmationsHint() {
259
+ if (this.extraData == null)
260
+ return null;
261
+ if (this.extraData.length != 84)
262
+ return null;
263
+ return parseInt(this.extraData.slice(80), 16);
264
+ }
265
+ /**
266
+ * @inheritDoc
267
+ */
268
+ getNonceHint() {
269
+ if (this.extraData == null)
270
+ return null;
271
+ if (this.extraData.length != 84)
272
+ return null;
273
+ return BigInt("0x" + this.extraData.slice(64, 80));
274
+ }
275
+ /**
276
+ * @inheritDoc
277
+ */
278
+ getTxoHashHint() {
279
+ if (this.extraData == null)
280
+ return null;
281
+ if (this.extraData.length != 84)
282
+ return null;
283
+ return this.extraData.slice(0, 64);
284
+ }
285
+ /**
286
+ * @inheritDoc
287
+ */
288
+ getExtraData() {
289
+ return this.extraData ?? null;
290
+ }
291
+ /**
292
+ * @inheritDoc
293
+ */
294
+ setExtraData(extraData) {
295
+ this.extraData = extraData;
296
+ }
297
+ /**
298
+ * @inheritDoc
299
+ */
300
+ getSecurityDeposit() {
301
+ return this.securityDeposit;
302
+ }
303
+ /**
304
+ * @inheritDoc
305
+ */
306
+ getClaimerBounty() {
307
+ return this.claimerBounty;
308
+ }
309
+ /**
310
+ * @inheritDoc
311
+ */
312
+ getTotalDeposit() {
313
+ return this.claimerBounty < this.securityDeposit ? this.securityDeposit : this.claimerBounty;
314
+ }
315
+ /**
316
+ * @inheritDoc
317
+ */
318
+ getDepositToken() {
319
+ return this.feeToken;
320
+ }
321
+ /**
322
+ * @inheritDoc
323
+ */
324
+ isDepositToken(token) {
325
+ if (!token.startsWith("0x"))
326
+ token = "0x" + token;
327
+ return (0, Utils_1.toHex)(this.feeToken) === (0, Utils_1.toHex)(token);
328
+ }
329
+ /**
330
+ * @inheritDoc
331
+ */
332
+ isClaimer(address) {
333
+ if (!address.startsWith("0x"))
334
+ address = "0x" + address;
335
+ return (0, Utils_1.toHex)(this.claimer) === (0, Utils_1.toHex)(address);
336
+ }
337
+ /**
338
+ * @inheritDoc
339
+ */
340
+ isOfferer(address) {
341
+ if (!address.startsWith("0x"))
342
+ address = "0x" + address;
343
+ return (0, Utils_1.toHex)(this.offerer) === (0, Utils_1.toHex)(address);
344
+ }
345
+ /**
346
+ * Checks whether the passed address is specified as a claim handler for the swap
347
+ *
348
+ * @param address
349
+ */
350
+ isClaimHandler(address) {
351
+ if (!address.startsWith("0x"))
352
+ address = "0x" + address;
353
+ return (0, Utils_1.toHex)(this.claimHandler) === (0, Utils_1.toHex)(address);
354
+ }
355
+ /**
356
+ * Checks if the passed data match the swap's claim data
357
+ *
358
+ * @param data
359
+ */
360
+ isClaimData(data) {
361
+ if (!data.startsWith("0x"))
362
+ data = "0x" + data;
363
+ return (0, Utils_1.toHex)(this.claimData) === (0, Utils_1.toHex)(data);
364
+ }
365
+ /**
366
+ * @inheritDoc
367
+ */
368
+ equals(other) {
369
+ return other.offerer.toLowerCase() === this.offerer.toLowerCase() &&
370
+ other.claimer.toLowerCase() === this.claimer.toLowerCase() &&
371
+ other.token.toLowerCase() === this.token.toLowerCase() &&
372
+ other.refundHandler.toLowerCase() === this.refundHandler.toLowerCase() &&
373
+ other.claimHandler.toLowerCase() === this.claimHandler.toLowerCase() &&
374
+ other.payIn === this.payIn &&
375
+ other.payOut === this.payOut &&
376
+ other.reputation === this.reputation &&
377
+ this.sequence === other.sequence &&
378
+ other.claimData.toLowerCase() === this.claimData.toLowerCase() &&
379
+ other.refundData.toLowerCase() === this.refundData.toLowerCase() &&
380
+ other.amount === this.amount &&
381
+ other.securityDeposit === this.securityDeposit &&
382
+ other.claimerBounty === this.claimerBounty &&
383
+ successActionEquals(other.successAction, this.successAction);
384
+ }
385
+ /**
386
+ * Serializes the swap data into starknet.js struct representation
387
+ */
388
+ toEscrowStruct() {
389
+ return {
390
+ offerer: this.offerer,
391
+ claimer: this.claimer,
392
+ token: this.token,
393
+ refund_handler: this.refundHandler,
394
+ claim_handler: this.claimHandler,
395
+ flags: this.getFlags(),
396
+ claim_data: this.claimData,
397
+ refund_data: this.refundData,
398
+ amount: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.amount)),
399
+ fee_token: this.feeToken,
400
+ security_deposit: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.securityDeposit)),
401
+ claimer_bounty: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.claimerBounty)),
402
+ success_action: new starknet_1.CairoOption(this.successAction == null ? starknet_1.CairoOptionVariant.None : starknet_1.CairoOptionVariant.Some, this.successAction == null ? undefined : {
403
+ hash: this.successAction.executionHash,
404
+ expiry: this.successAction.executionExpiry,
405
+ fee: starknet_1.cairo.uint256(this.successAction.executionFee)
406
+ })
407
+ };
408
+ }
409
+ /**
410
+ * Deserializes swap data from the provided felt252 array,
411
+ *
412
+ * @param span a felt252 array of length 16 or more
413
+ * @param claimHandlerImpl Claim handler implementation to parse the swap type, this is checked
414
+ * for internally and this throws an error if the passed `claimHandlerImpl` doesn't match the
415
+ * claim handler address in the passed swap data
416
+ */
417
+ static fromSerializedFeltArray(span, claimHandlerImpl) {
418
+ if (span.length < 16)
419
+ throw new Error("Invalid length of serialized starknet swap data!");
420
+ const offerer = (0, Utils_1.toHex)(span.shift());
421
+ const claimer = (0, Utils_1.toHex)(span.shift());
422
+ const token = (0, Utils_1.toHex)(span.shift());
423
+ const refundHandler = (0, Utils_1.toHex)(span.shift());
424
+ const claimHandler = (0, Utils_1.toHex)(span.shift());
425
+ const { payOut, payIn, reputation, sequence } = StarknetSwapData.toFlags(span.shift());
426
+ const claimData = (0, Utils_1.toHex)(span.shift());
427
+ const refundData = (0, Utils_1.toHex)(span.shift());
428
+ const amount = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
429
+ const feeToken = (0, Utils_1.toHex)(span.shift());
430
+ const securityDeposit = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
431
+ const claimerBounty = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
432
+ const hasSuccessAction = (0, Utils_1.toBigInt)(span.shift()) === 0n;
433
+ let successAction = undefined;
434
+ if (hasSuccessAction) {
435
+ if (span.length < 4)
436
+ throw new Error("Invalid length of serialized starknet swap data!");
437
+ successAction = {
438
+ executionHash: (0, Utils_1.toHex)(span.shift()),
439
+ executionExpiry: (0, Utils_1.toBigInt)(span.shift()),
440
+ executionFee: (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() })
441
+ };
442
+ }
443
+ const swapData = new StarknetSwapData({
444
+ offerer,
445
+ claimer,
446
+ token,
447
+ refundHandler,
448
+ claimHandler,
449
+ payOut,
450
+ payIn,
451
+ reputation,
452
+ sequence,
453
+ claimData,
454
+ refundData,
455
+ amount,
456
+ feeToken,
457
+ securityDeposit,
458
+ claimerBounty,
459
+ kind: claimHandlerImpl.getType(),
460
+ successAction
461
+ });
462
+ if (!swapData.isClaimHandler(claimHandlerImpl.address))
463
+ throw new Error(`Invalid swap handler impl passed! Passed: ${claimHandlerImpl.address}, actual: ${swapData.claimHandler}`);
464
+ return swapData;
465
+ }
466
+ /**
467
+ * @inheritDoc
468
+ */
469
+ hasSuccessAction() {
470
+ return this.successAction != null;
471
+ }
472
+ }
473
+ exports.StarknetSwapData = StarknetSwapData;
474
+ base_1.SwapData.deserializers["strk"] = StarknetSwapData;