@atomiqlabs/chain-starknet 3.0.0-dev.8 → 4.0.0-dev.3

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 (146) hide show
  1. package/LICENSE +201 -201
  2. package/dist/index.d.ts +38 -38
  3. package/dist/index.js +54 -54
  4. package/dist/starknet/StarknetChainType.d.ts +13 -13
  5. package/dist/starknet/StarknetChainType.js +2 -2
  6. package/dist/starknet/StarknetInitializer.d.ts +27 -19
  7. package/dist/starknet/StarknetInitializer.js +69 -69
  8. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  9. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
  11. package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
  13. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
  15. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
  16. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  17. package/dist/starknet/chain/StarknetAction.js +73 -73
  18. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
  19. package/dist/starknet/chain/StarknetChainInterface.js +91 -91
  20. package/dist/starknet/chain/StarknetModule.d.ts +14 -14
  21. package/dist/starknet/chain/StarknetModule.js +13 -13
  22. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  23. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  24. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  25. package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
  26. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
  27. package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
  28. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -19
  29. package/dist/starknet/chain/modules/StarknetBlocks.js +64 -49
  30. package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
  31. package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
  32. package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
  33. package/dist/starknet/chain/modules/StarknetFees.js +114 -114
  34. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  35. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  36. package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
  37. package/dist/starknet/chain/modules/StarknetTokens.js +98 -98
  38. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
  39. package/dist/starknet/chain/modules/StarknetTransactions.js +255 -255
  40. package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
  41. package/dist/starknet/contract/StarknetContractBase.js +16 -16
  42. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  43. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  44. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
  45. package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
  46. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  47. package/dist/starknet/events/StarknetChainEvents.js +52 -52
  48. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +90 -91
  49. package/dist/starknet/events/StarknetChainEventsBrowser.js +292 -294
  50. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
  51. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
  52. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  54. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -65
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -376
  56. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -144
  58. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -24
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -61
  60. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +434 -434
  61. package/dist/starknet/swaps/EscrowManagerAbi.js +587 -587
  62. package/dist/starknet/swaps/StarknetSwapContract.d.ts +190 -196
  63. package/dist/starknet/swaps/StarknetSwapContract.js +409 -395
  64. package/dist/starknet/swaps/StarknetSwapData.d.ts +67 -67
  65. package/dist/starknet/swaps/StarknetSwapData.js +290 -290
  66. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  67. package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
  68. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  69. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  70. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  72. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  74. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  80. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
  82. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  84. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
  85. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  86. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
  88. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +86 -84
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.js +224 -200
  90. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
  92. package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
  93. package/dist/starknet/wallet/StarknetKeypairWallet.js +30 -30
  94. package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
  95. package/dist/starknet/wallet/StarknetSigner.js +46 -46
  96. package/dist/utils/Utils.d.ts +37 -37
  97. package/dist/utils/Utils.js +261 -257
  98. package/package.json +37 -37
  99. package/src/index.ts +47 -47
  100. package/src/starknet/StarknetChainType.ts +28 -28
  101. package/src/starknet/StarknetInitializer.ts +108 -100
  102. package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
  103. package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
  104. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
  105. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
  106. package/src/starknet/chain/StarknetAction.ts +85 -85
  107. package/src/starknet/chain/StarknetChainInterface.ts +149 -149
  108. package/src/starknet/chain/StarknetModule.ts +19 -19
  109. package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
  110. package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
  111. package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
  112. package/src/starknet/chain/modules/StarknetBlocks.ts +74 -58
  113. package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
  114. package/src/starknet/chain/modules/StarknetFees.ts +154 -154
  115. package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
  116. package/src/starknet/chain/modules/StarknetTokens.ts +116 -116
  117. package/src/starknet/chain/modules/StarknetTransactions.ts +277 -277
  118. package/src/starknet/contract/StarknetContractBase.ts +26 -26
  119. package/src/starknet/contract/StarknetContractModule.ts +16 -16
  120. package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
  121. package/src/starknet/events/StarknetChainEvents.ts +67 -67
  122. package/src/starknet/events/StarknetChainEventsBrowser.ts +410 -412
  123. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
  124. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
  125. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -477
  126. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -194
  127. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -68
  128. package/src/starknet/swaps/EscrowManagerAbi.ts +586 -586
  129. package/src/starknet/swaps/StarknetSwapContract.ts +628 -605
  130. package/src/starknet/swaps/StarknetSwapData.ts +403 -403
  131. package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
  132. package/src/starknet/swaps/handlers/IHandler.ts +20 -20
  133. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
  134. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
  135. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
  136. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
  137. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
  138. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
  139. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
  140. package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
  141. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
  142. package/src/starknet/swaps/modules/StarknetSwapInit.ts +286 -260
  143. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
  144. package/src/starknet/wallet/StarknetKeypairWallet.ts +39 -39
  145. package/src/starknet/wallet/StarknetSigner.ts +55 -55
  146. package/src/utils/Utils.ts +252 -248
@@ -1,403 +1,403 @@
1
- import {SwapData, ChainSwapType} from "@atomiqlabs/base";
2
- import {TimelockRefundHandler} from "./handlers/refund/TimelockRefundHandler";
3
- import {BigNumberish, cairo, CairoOption, CairoOptionVariant, hash} from "starknet";
4
- import {toBigInt, toHex} from "../../utils/Utils";
5
- import {
6
- StringToPrimitiveType
7
- } from "abi-wan-kanabi/dist/kanabi";
8
- import {EscrowManagerAbi} from "./EscrowManagerAbi";
9
- import {IClaimHandler} from "./handlers/claim/ClaimHandlers";
10
-
11
- const FLAG_PAY_OUT: bigint = 0x01n;
12
- const FLAG_PAY_IN: bigint = 0x02n;
13
- const FLAG_REPUTATION: bigint = 0x04n;
14
-
15
- export type StarknetSwapDataType = StringToPrimitiveType<typeof EscrowManagerAbi, "escrow_manager::structs::escrow::EscrowData">;
16
-
17
- export class StarknetSwapData extends SwapData {
18
-
19
- static toFlags(value: number | bigint | string): {payOut: boolean, payIn: boolean, reputation: boolean, sequence: bigint} {
20
- const val = toBigInt(value);
21
- return {
22
- sequence: val >> 64n,
23
- payOut: (val & FLAG_PAY_OUT) === FLAG_PAY_OUT,
24
- payIn: (val & FLAG_PAY_IN) === FLAG_PAY_IN,
25
- reputation: (val & FLAG_REPUTATION) === FLAG_REPUTATION
26
- }
27
- }
28
-
29
- private getFlags(): bigint {
30
- return (this.sequence << 64n) +
31
- (this.payOut ? FLAG_PAY_OUT : 0n) +
32
- (this.payIn ? FLAG_PAY_IN : 0n) +
33
- (this.reputation ? FLAG_REPUTATION : 0n);
34
- }
35
-
36
- offerer: string;
37
- claimer: string;
38
- token: string;
39
-
40
- refundHandler: string;
41
- claimHandler: string;
42
-
43
- //Flags
44
- payOut: boolean;
45
- payIn: boolean;
46
- reputation: boolean;
47
- sequence: bigint;
48
-
49
- claimData: string;
50
- refundData: string;
51
-
52
- amount: bigint;
53
-
54
- feeToken: string;
55
- securityDeposit: bigint;
56
- claimerBounty: bigint;
57
-
58
- extraData: string;
59
-
60
- kind: ChainSwapType;
61
-
62
- constructor(
63
- offerer: string,
64
- claimer: string,
65
- token: string,
66
- refundHandler: string,
67
- claimHandler: string,
68
- payOut: boolean,
69
- payIn: boolean,
70
- reputation: boolean,
71
- sequence: bigint,
72
- claimData: string,
73
- refundData: string,
74
- amount: bigint,
75
- feeToken: string,
76
- securityDeposit: bigint,
77
- claimerBounty: bigint,
78
- kind: ChainSwapType,
79
- extraData: string
80
- );
81
-
82
- constructor(data: any);
83
-
84
- constructor(
85
- offererOrData: string | any,
86
- claimer?: string,
87
- token?: string,
88
- refundHandler?: string,
89
- claimHandler?: string,
90
- payOut?: boolean,
91
- payIn?: boolean,
92
- reputation?: boolean,
93
- sequence?: bigint,
94
- claimData?: string,
95
- refundData?: string,
96
- amount?: bigint,
97
- feeToken?: string,
98
- securityDeposit?: bigint,
99
- claimerBounty?: bigint,
100
- kind?: ChainSwapType,
101
- extraData?: string
102
- ) {
103
- super();
104
- if(claimer!=null || token!=null || refundHandler!=null || claimHandler!=null ||
105
- payOut!=null || payIn!=null || reputation!=null || sequence!=null || claimData!=null || refundData!=null ||
106
- amount!=null || feeToken!=null || securityDeposit!=null || claimerBounty!=null) {
107
- this.offerer = offererOrData;
108
- this.claimer = claimer;
109
- this.token = token;
110
- this.refundHandler = refundHandler;
111
- this.claimHandler = claimHandler;
112
- this.payOut = payOut;
113
- this.payIn = payIn;
114
- this.reputation = reputation;
115
- this.sequence = sequence;
116
- this.claimData = claimData;
117
- this.refundData = refundData;
118
- this.amount = amount;
119
- this.feeToken = feeToken;
120
- this.securityDeposit = securityDeposit;
121
- this.claimerBounty = claimerBounty;
122
- this.kind = kind;
123
- this.extraData = extraData;
124
- } else {
125
- this.offerer = offererOrData.offerer;
126
- this.claimer = offererOrData.claimer;
127
- this.token = offererOrData.token;
128
- this.refundHandler = offererOrData.refundHandler;
129
- this.claimHandler = offererOrData.claimHandler;
130
- this.payOut = offererOrData.payOut;
131
- this.payIn = offererOrData.payIn;
132
- this.reputation = offererOrData.reputation;
133
- this.sequence = offererOrData.sequence==null ? null : BigInt(offererOrData.sequence);
134
- this.claimData = offererOrData.claimData;
135
- this.refundData = offererOrData.refundData;
136
- this.amount = offererOrData.amount==null ? null : BigInt(offererOrData.amount);
137
- this.feeToken = offererOrData.feeToken;
138
- this.securityDeposit = offererOrData.securityDeposit==null ? null : BigInt(offererOrData.securityDeposit);
139
- this.claimerBounty = offererOrData.claimerBounty==null ? null : BigInt(offererOrData.claimerBounty);
140
- this.kind = offererOrData.kind;
141
- this.extraData = offererOrData.extraData;
142
- }
143
- }
144
-
145
- getOfferer(): string {
146
- return this.offerer;
147
- }
148
-
149
- setOfferer(newOfferer: string) {
150
- this.offerer = newOfferer;
151
- this.payIn = true;
152
- }
153
-
154
- getClaimer(): string {
155
- return this.claimer;
156
- }
157
-
158
- setClaimer(newClaimer: string) {
159
- this.claimer = newClaimer;
160
- this.payIn = false;
161
- this.payOut = true;
162
- this.reputation = false;
163
- }
164
-
165
- serialize(): any {
166
- return {
167
- type: "strk",
168
- offerer: this.offerer,
169
- claimer: this.claimer,
170
- token: this.token,
171
- refundHandler: this.refundHandler,
172
- claimHandler: this.claimHandler,
173
- payOut: this.payOut,
174
- payIn: this.payIn,
175
- reputation: this.reputation,
176
- sequence: this.sequence==null ? null : this.sequence.toString(10),
177
- claimData: this.claimData,
178
- refundData: this.refundData,
179
- amount: this.amount==null ? null : this.amount.toString(10),
180
- feeToken: this.feeToken,
181
- securityDeposit: this.securityDeposit==null ? null : this.securityDeposit.toString(10),
182
- claimerBounty: this.claimerBounty==null ? null : this.claimerBounty.toString(10),
183
- kind: this.kind,
184
- extraData: this.extraData
185
- }
186
- }
187
-
188
- getAmount(): bigint {
189
- return this.amount;
190
- }
191
-
192
- getToken(): string {
193
- return this.token;
194
- }
195
-
196
- isToken(token: string): boolean {
197
- return this.token.toLowerCase()===token.toLowerCase();
198
- }
199
-
200
- getType(): ChainSwapType {
201
- return this.kind;
202
- }
203
-
204
- getExpiry(): bigint {
205
- return TimelockRefundHandler.getExpiry(this);
206
- }
207
-
208
- isPayIn(): boolean {
209
- return this.payIn;
210
- }
211
-
212
- isPayOut(): boolean {
213
- return this.payOut;
214
- }
215
-
216
- getEscrowHash(): string {
217
- const amountValue = cairo.uint256("0x"+this.amount.toString(16));
218
- const securityDepositValue = cairo.uint256("0x"+this.securityDeposit.toString(16));
219
- const claimerBountyValue = cairo.uint256("0x"+this.claimerBounty.toString(16));
220
- let escrowHash = hash.computePoseidonHashOnElements([
221
- this.offerer,
222
- this.claimer,
223
- this.token,
224
- this.refundHandler,
225
- this.claimHandler,
226
- this.getFlags(),
227
- this.claimData,
228
- this.refundData,
229
- amountValue.low,
230
- amountValue.high,
231
- this.feeToken,
232
- securityDepositValue.low,
233
- securityDepositValue.high,
234
- claimerBountyValue.low,
235
- claimerBountyValue.high
236
- ]);
237
- if(escrowHash.startsWith("0x")) escrowHash = escrowHash.slice(2);
238
- return escrowHash.padStart(64, "0");
239
- }
240
-
241
- getClaimHash(): string {
242
- let hash = this.claimData;
243
- if(hash.startsWith("0x")) hash = hash.slice(2);
244
- return hash.padStart(64, "0");
245
- }
246
-
247
- getSequence(): bigint {
248
- return this.sequence;
249
- }
250
-
251
- getConfirmationsHint(): number {
252
- if(this.extraData==null) return null;
253
- if(this.extraData.length!=84) return null;
254
- return parseInt(this.extraData.slice(80), 16);
255
- }
256
-
257
- getNonceHint(): bigint {
258
- if(this.extraData==null) return null;
259
- if(this.extraData.length!=84) return null;
260
- return BigInt("0x"+this.extraData.slice(64, 80));
261
- }
262
-
263
- getTxoHashHint(): string {
264
- if(this.extraData==null) return null;
265
- if(this.extraData.length!=84) return null;
266
- return this.extraData.slice(0, 64);
267
- }
268
-
269
- getExtraData(): string {
270
- return this.extraData;
271
- }
272
-
273
- setExtraData(extraData: string): void {
274
- this.extraData = extraData;
275
- }
276
-
277
- getSecurityDeposit() {
278
- return this.securityDeposit;
279
- }
280
-
281
- getClaimerBounty() {
282
- return this.claimerBounty;
283
- }
284
-
285
- getTotalDeposit() {
286
- return this.claimerBounty < this.securityDeposit ? this.securityDeposit : this.claimerBounty;
287
- }
288
-
289
- getDepositToken() {
290
- return this.feeToken;
291
- }
292
-
293
- isDepositToken(token: string): boolean {
294
- if(!token.startsWith("0x")) token = "0x"+token;
295
- return toHex(this.feeToken)===toHex(token);
296
- }
297
-
298
- isClaimer(address: string) {
299
- if(!address.startsWith("0x")) address = "0x"+address;
300
- return toHex(this.claimer)===toHex(address);
301
- }
302
-
303
- isOfferer(address: string) {
304
- if(!address.startsWith("0x")) address = "0x"+address;
305
- return toHex(this.offerer)===toHex(address);
306
- }
307
-
308
- isRefundHandler(address: string): boolean {
309
- if(!address.startsWith("0x")) address = "0x"+address;
310
- return toHex(this.refundHandler)===toHex(address);
311
- }
312
-
313
- isClaimHandler(address: string): boolean {
314
- if(!address.startsWith("0x")) address = "0x"+address;
315
- return toHex(this.claimHandler)===toHex(address);
316
- }
317
-
318
- isClaimData(data: string): boolean {
319
- if(!data.startsWith("0x")) data = "0x"+data;
320
- return toHex(this.claimData)===toHex(data);
321
- }
322
-
323
- equals(other: StarknetSwapData): boolean {
324
- return other.offerer.toLowerCase()===this.offerer.toLowerCase() &&
325
- other.claimer.toLowerCase()===this.claimer.toLowerCase() &&
326
- other.token.toLowerCase()===this.token.toLowerCase() &&
327
- other.refundHandler.toLowerCase()===this.refundHandler.toLowerCase() &&
328
- other.claimHandler.toLowerCase()===this.claimHandler.toLowerCase() &&
329
- other.payIn===this.payIn &&
330
- other.payOut===this.payOut &&
331
- other.reputation===this.reputation &&
332
- this.sequence === other.sequence &&
333
- other.claimData.toLowerCase()===this.claimData.toLowerCase() &&
334
- other.refundData.toLowerCase()===this.refundData.toLowerCase() &&
335
- other.amount === this.amount &&
336
- other.securityDeposit === this.securityDeposit &&
337
- other.claimerBounty === this.claimerBounty
338
- }
339
-
340
- toEscrowStruct(): StarknetSwapDataType {
341
- return {
342
- offerer: this.offerer,
343
- claimer: this.claimer,
344
- token: this.token,
345
- refund_handler: this.refundHandler,
346
- claim_handler: this.claimHandler,
347
- flags: this.getFlags(),
348
- claim_data: this.claimData,
349
- refund_data: this.refundData,
350
- amount: cairo.uint256(toBigInt(this.amount)),
351
- fee_token: this.feeToken,
352
- security_deposit: cairo.uint256(toBigInt(this.securityDeposit)),
353
- claimer_bounty: cairo.uint256(toBigInt(this.claimerBounty)),
354
- success_action: new CairoOption(CairoOptionVariant.None) //For now enforce no success action
355
- }
356
- }
357
-
358
- static fromSerializedFeltArray(span: BigNumberish[], claimHandlerImpl: IClaimHandler<any, any>) {
359
- const offerer = toHex(span.shift());
360
- const claimer = toHex(span.shift());
361
- const token = toHex(span.shift());
362
- const refundHandler = toHex(span.shift());
363
- const claimHandler = toHex(span.shift());
364
- const {payOut, payIn, reputation, sequence} = StarknetSwapData.toFlags(span.shift());
365
- const claimData = toHex(span.shift());
366
- const refundData = toHex(span.shift());
367
- const amount = toBigInt({low: span.shift(), high: span.shift()});
368
- const feeToken = toHex(span.shift());
369
- const securityDeposit = toBigInt({low: span.shift(), high: span.shift()});
370
- const claimerBounty = toBigInt({low: span.shift(), high: span.shift()});
371
- const hasSuccessAction = toBigInt(span.shift()) === 0n;
372
- if(hasSuccessAction) {
373
- const executionContract = toHex(span.shift());
374
- const executionHash = toHex(span.shift());
375
- const executionExpiry = toBigInt(span.shift());
376
- const executionFee = toBigInt({low: span.shift(), high: span.shift()});
377
- // throw new Error("Success action not allowed!");
378
- }
379
-
380
- return new StarknetSwapData(
381
- offerer,
382
- claimer,
383
- token,
384
- refundHandler,
385
- claimHandler,
386
- payOut,
387
- payIn,
388
- reputation,
389
- sequence,
390
- claimData,
391
- refundData,
392
- amount,
393
- feeToken,
394
- securityDeposit,
395
- claimerBounty,
396
- claimHandlerImpl.getType(),
397
- null
398
- );
399
- }
400
-
401
- }
402
-
403
- SwapData.deserializers["strk"] = StarknetSwapData;
1
+ import {SwapData, ChainSwapType} from "@atomiqlabs/base";
2
+ import {TimelockRefundHandler} from "./handlers/refund/TimelockRefundHandler";
3
+ import {BigNumberish, cairo, CairoOption, CairoOptionVariant, hash} from "starknet";
4
+ import {toBigInt, toHex} from "../../utils/Utils";
5
+ import {
6
+ StringToPrimitiveType
7
+ } from "abi-wan-kanabi/dist/kanabi";
8
+ import {EscrowManagerAbi} from "./EscrowManagerAbi";
9
+ import {IClaimHandler} from "./handlers/claim/ClaimHandlers";
10
+
11
+ const FLAG_PAY_OUT: bigint = 0x01n;
12
+ const FLAG_PAY_IN: bigint = 0x02n;
13
+ const FLAG_REPUTATION: bigint = 0x04n;
14
+
15
+ export type StarknetSwapDataType = StringToPrimitiveType<typeof EscrowManagerAbi, "escrow_manager::structs::escrow::EscrowData">;
16
+
17
+ export class StarknetSwapData extends SwapData {
18
+
19
+ static toFlags(value: number | bigint | string): {payOut: boolean, payIn: boolean, reputation: boolean, sequence: bigint} {
20
+ const val = toBigInt(value);
21
+ return {
22
+ sequence: val >> 64n,
23
+ payOut: (val & FLAG_PAY_OUT) === FLAG_PAY_OUT,
24
+ payIn: (val & FLAG_PAY_IN) === FLAG_PAY_IN,
25
+ reputation: (val & FLAG_REPUTATION) === FLAG_REPUTATION
26
+ }
27
+ }
28
+
29
+ private getFlags(): bigint {
30
+ return (this.sequence << 64n) +
31
+ (this.payOut ? FLAG_PAY_OUT : 0n) +
32
+ (this.payIn ? FLAG_PAY_IN : 0n) +
33
+ (this.reputation ? FLAG_REPUTATION : 0n);
34
+ }
35
+
36
+ offerer: string;
37
+ claimer: string;
38
+ token: string;
39
+
40
+ refundHandler: string;
41
+ claimHandler: string;
42
+
43
+ //Flags
44
+ payOut: boolean;
45
+ payIn: boolean;
46
+ reputation: boolean;
47
+ sequence: bigint;
48
+
49
+ claimData: string;
50
+ refundData: string;
51
+
52
+ amount: bigint;
53
+
54
+ feeToken: string;
55
+ securityDeposit: bigint;
56
+ claimerBounty: bigint;
57
+
58
+ extraData: string;
59
+
60
+ kind: ChainSwapType;
61
+
62
+ constructor(
63
+ offerer: string,
64
+ claimer: string,
65
+ token: string,
66
+ refundHandler: string,
67
+ claimHandler: string,
68
+ payOut: boolean,
69
+ payIn: boolean,
70
+ reputation: boolean,
71
+ sequence: bigint,
72
+ claimData: string,
73
+ refundData: string,
74
+ amount: bigint,
75
+ feeToken: string,
76
+ securityDeposit: bigint,
77
+ claimerBounty: bigint,
78
+ kind: ChainSwapType,
79
+ extraData: string
80
+ );
81
+
82
+ constructor(data: any);
83
+
84
+ constructor(
85
+ offererOrData: string | any,
86
+ claimer?: string,
87
+ token?: string,
88
+ refundHandler?: string,
89
+ claimHandler?: string,
90
+ payOut?: boolean,
91
+ payIn?: boolean,
92
+ reputation?: boolean,
93
+ sequence?: bigint,
94
+ claimData?: string,
95
+ refundData?: string,
96
+ amount?: bigint,
97
+ feeToken?: string,
98
+ securityDeposit?: bigint,
99
+ claimerBounty?: bigint,
100
+ kind?: ChainSwapType,
101
+ extraData?: string
102
+ ) {
103
+ super();
104
+ if(claimer!=null || token!=null || refundHandler!=null || claimHandler!=null ||
105
+ payOut!=null || payIn!=null || reputation!=null || sequence!=null || claimData!=null || refundData!=null ||
106
+ amount!=null || feeToken!=null || securityDeposit!=null || claimerBounty!=null) {
107
+ this.offerer = offererOrData;
108
+ this.claimer = claimer;
109
+ this.token = token;
110
+ this.refundHandler = refundHandler;
111
+ this.claimHandler = claimHandler;
112
+ this.payOut = payOut;
113
+ this.payIn = payIn;
114
+ this.reputation = reputation;
115
+ this.sequence = sequence;
116
+ this.claimData = claimData;
117
+ this.refundData = refundData;
118
+ this.amount = amount;
119
+ this.feeToken = feeToken;
120
+ this.securityDeposit = securityDeposit;
121
+ this.claimerBounty = claimerBounty;
122
+ this.kind = kind;
123
+ this.extraData = extraData;
124
+ } else {
125
+ this.offerer = offererOrData.offerer;
126
+ this.claimer = offererOrData.claimer;
127
+ this.token = offererOrData.token;
128
+ this.refundHandler = offererOrData.refundHandler;
129
+ this.claimHandler = offererOrData.claimHandler;
130
+ this.payOut = offererOrData.payOut;
131
+ this.payIn = offererOrData.payIn;
132
+ this.reputation = offererOrData.reputation;
133
+ this.sequence = offererOrData.sequence==null ? null : BigInt(offererOrData.sequence);
134
+ this.claimData = offererOrData.claimData;
135
+ this.refundData = offererOrData.refundData;
136
+ this.amount = offererOrData.amount==null ? null : BigInt(offererOrData.amount);
137
+ this.feeToken = offererOrData.feeToken;
138
+ this.securityDeposit = offererOrData.securityDeposit==null ? null : BigInt(offererOrData.securityDeposit);
139
+ this.claimerBounty = offererOrData.claimerBounty==null ? null : BigInt(offererOrData.claimerBounty);
140
+ this.kind = offererOrData.kind;
141
+ this.extraData = offererOrData.extraData;
142
+ }
143
+ }
144
+
145
+ getOfferer(): string {
146
+ return this.offerer;
147
+ }
148
+
149
+ setOfferer(newOfferer: string) {
150
+ this.offerer = newOfferer;
151
+ this.payIn = true;
152
+ }
153
+
154
+ getClaimer(): string {
155
+ return this.claimer;
156
+ }
157
+
158
+ setClaimer(newClaimer: string) {
159
+ this.claimer = newClaimer;
160
+ this.payIn = false;
161
+ this.payOut = true;
162
+ this.reputation = false;
163
+ }
164
+
165
+ serialize(): any {
166
+ return {
167
+ type: "strk",
168
+ offerer: this.offerer,
169
+ claimer: this.claimer,
170
+ token: this.token,
171
+ refundHandler: this.refundHandler,
172
+ claimHandler: this.claimHandler,
173
+ payOut: this.payOut,
174
+ payIn: this.payIn,
175
+ reputation: this.reputation,
176
+ sequence: this.sequence==null ? null : this.sequence.toString(10),
177
+ claimData: this.claimData,
178
+ refundData: this.refundData,
179
+ amount: this.amount==null ? null : this.amount.toString(10),
180
+ feeToken: this.feeToken,
181
+ securityDeposit: this.securityDeposit==null ? null : this.securityDeposit.toString(10),
182
+ claimerBounty: this.claimerBounty==null ? null : this.claimerBounty.toString(10),
183
+ kind: this.kind,
184
+ extraData: this.extraData
185
+ }
186
+ }
187
+
188
+ getAmount(): bigint {
189
+ return this.amount;
190
+ }
191
+
192
+ getToken(): string {
193
+ return this.token;
194
+ }
195
+
196
+ isToken(token: string): boolean {
197
+ return this.token.toLowerCase()===token.toLowerCase();
198
+ }
199
+
200
+ getType(): ChainSwapType {
201
+ return this.kind;
202
+ }
203
+
204
+ getExpiry(): bigint {
205
+ return TimelockRefundHandler.getExpiry(this);
206
+ }
207
+
208
+ isPayIn(): boolean {
209
+ return this.payIn;
210
+ }
211
+
212
+ isPayOut(): boolean {
213
+ return this.payOut;
214
+ }
215
+
216
+ getEscrowHash(): string {
217
+ const amountValue = cairo.uint256("0x"+this.amount.toString(16));
218
+ const securityDepositValue = cairo.uint256("0x"+this.securityDeposit.toString(16));
219
+ const claimerBountyValue = cairo.uint256("0x"+this.claimerBounty.toString(16));
220
+ let escrowHash = hash.computePoseidonHashOnElements([
221
+ this.offerer,
222
+ this.claimer,
223
+ this.token,
224
+ this.refundHandler,
225
+ this.claimHandler,
226
+ this.getFlags(),
227
+ this.claimData,
228
+ this.refundData,
229
+ amountValue.low,
230
+ amountValue.high,
231
+ this.feeToken,
232
+ securityDepositValue.low,
233
+ securityDepositValue.high,
234
+ claimerBountyValue.low,
235
+ claimerBountyValue.high
236
+ ]);
237
+ if(escrowHash.startsWith("0x")) escrowHash = escrowHash.slice(2);
238
+ return escrowHash.padStart(64, "0");
239
+ }
240
+
241
+ getClaimHash(): string {
242
+ let hash = this.claimData;
243
+ if(hash.startsWith("0x")) hash = hash.slice(2);
244
+ return hash.padStart(64, "0");
245
+ }
246
+
247
+ getSequence(): bigint {
248
+ return this.sequence;
249
+ }
250
+
251
+ getConfirmationsHint(): number {
252
+ if(this.extraData==null) return null;
253
+ if(this.extraData.length!=84) return null;
254
+ return parseInt(this.extraData.slice(80), 16);
255
+ }
256
+
257
+ getNonceHint(): bigint {
258
+ if(this.extraData==null) return null;
259
+ if(this.extraData.length!=84) return null;
260
+ return BigInt("0x"+this.extraData.slice(64, 80));
261
+ }
262
+
263
+ getTxoHashHint(): string {
264
+ if(this.extraData==null) return null;
265
+ if(this.extraData.length!=84) return null;
266
+ return this.extraData.slice(0, 64);
267
+ }
268
+
269
+ getExtraData(): string {
270
+ return this.extraData;
271
+ }
272
+
273
+ setExtraData(extraData: string): void {
274
+ this.extraData = extraData;
275
+ }
276
+
277
+ getSecurityDeposit() {
278
+ return this.securityDeposit;
279
+ }
280
+
281
+ getClaimerBounty() {
282
+ return this.claimerBounty;
283
+ }
284
+
285
+ getTotalDeposit() {
286
+ return this.claimerBounty < this.securityDeposit ? this.securityDeposit : this.claimerBounty;
287
+ }
288
+
289
+ getDepositToken() {
290
+ return this.feeToken;
291
+ }
292
+
293
+ isDepositToken(token: string): boolean {
294
+ if(!token.startsWith("0x")) token = "0x"+token;
295
+ return toHex(this.feeToken)===toHex(token);
296
+ }
297
+
298
+ isClaimer(address: string) {
299
+ if(!address.startsWith("0x")) address = "0x"+address;
300
+ return toHex(this.claimer)===toHex(address);
301
+ }
302
+
303
+ isOfferer(address: string) {
304
+ if(!address.startsWith("0x")) address = "0x"+address;
305
+ return toHex(this.offerer)===toHex(address);
306
+ }
307
+
308
+ isRefundHandler(address: string): boolean {
309
+ if(!address.startsWith("0x")) address = "0x"+address;
310
+ return toHex(this.refundHandler)===toHex(address);
311
+ }
312
+
313
+ isClaimHandler(address: string): boolean {
314
+ if(!address.startsWith("0x")) address = "0x"+address;
315
+ return toHex(this.claimHandler)===toHex(address);
316
+ }
317
+
318
+ isClaimData(data: string): boolean {
319
+ if(!data.startsWith("0x")) data = "0x"+data;
320
+ return toHex(this.claimData)===toHex(data);
321
+ }
322
+
323
+ equals(other: StarknetSwapData): boolean {
324
+ return other.offerer.toLowerCase()===this.offerer.toLowerCase() &&
325
+ other.claimer.toLowerCase()===this.claimer.toLowerCase() &&
326
+ other.token.toLowerCase()===this.token.toLowerCase() &&
327
+ other.refundHandler.toLowerCase()===this.refundHandler.toLowerCase() &&
328
+ other.claimHandler.toLowerCase()===this.claimHandler.toLowerCase() &&
329
+ other.payIn===this.payIn &&
330
+ other.payOut===this.payOut &&
331
+ other.reputation===this.reputation &&
332
+ this.sequence === other.sequence &&
333
+ other.claimData.toLowerCase()===this.claimData.toLowerCase() &&
334
+ other.refundData.toLowerCase()===this.refundData.toLowerCase() &&
335
+ other.amount === this.amount &&
336
+ other.securityDeposit === this.securityDeposit &&
337
+ other.claimerBounty === this.claimerBounty
338
+ }
339
+
340
+ toEscrowStruct(): StarknetSwapDataType {
341
+ return {
342
+ offerer: this.offerer,
343
+ claimer: this.claimer,
344
+ token: this.token,
345
+ refund_handler: this.refundHandler,
346
+ claim_handler: this.claimHandler,
347
+ flags: this.getFlags(),
348
+ claim_data: this.claimData,
349
+ refund_data: this.refundData,
350
+ amount: cairo.uint256(toBigInt(this.amount)),
351
+ fee_token: this.feeToken,
352
+ security_deposit: cairo.uint256(toBigInt(this.securityDeposit)),
353
+ claimer_bounty: cairo.uint256(toBigInt(this.claimerBounty)),
354
+ success_action: new CairoOption(CairoOptionVariant.None) //For now enforce no success action
355
+ }
356
+ }
357
+
358
+ static fromSerializedFeltArray(span: BigNumberish[], claimHandlerImpl: IClaimHandler<any, any>) {
359
+ const offerer = toHex(span.shift());
360
+ const claimer = toHex(span.shift());
361
+ const token = toHex(span.shift());
362
+ const refundHandler = toHex(span.shift());
363
+ const claimHandler = toHex(span.shift());
364
+ const {payOut, payIn, reputation, sequence} = StarknetSwapData.toFlags(span.shift());
365
+ const claimData = toHex(span.shift());
366
+ const refundData = toHex(span.shift());
367
+ const amount = toBigInt({low: span.shift(), high: span.shift()});
368
+ const feeToken = toHex(span.shift());
369
+ const securityDeposit = toBigInt({low: span.shift(), high: span.shift()});
370
+ const claimerBounty = toBigInt({low: span.shift(), high: span.shift()});
371
+ const hasSuccessAction = toBigInt(span.shift()) === 0n;
372
+ if(hasSuccessAction) {
373
+ const executionContract = toHex(span.shift());
374
+ const executionHash = toHex(span.shift());
375
+ const executionExpiry = toBigInt(span.shift());
376
+ const executionFee = toBigInt({low: span.shift(), high: span.shift()});
377
+ // throw new Error("Success action not allowed!");
378
+ }
379
+
380
+ return new StarknetSwapData(
381
+ offerer,
382
+ claimer,
383
+ token,
384
+ refundHandler,
385
+ claimHandler,
386
+ payOut,
387
+ payIn,
388
+ reputation,
389
+ sequence,
390
+ claimData,
391
+ refundData,
392
+ amount,
393
+ feeToken,
394
+ securityDeposit,
395
+ claimerBounty,
396
+ claimHandlerImpl.getType(),
397
+ null
398
+ );
399
+ }
400
+
401
+ }
402
+
403
+ SwapData.deserializers["strk"] = StarknetSwapData;