@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,303 +1,304 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isUint256 = isUint256;
4
- exports.timeoutPromise = timeoutPromise;
5
- exports.onceAsync = onceAsync;
6
- exports.getLogger = getLogger;
7
- exports.tryWithRetries = tryWithRetries;
8
- exports.toHex = toHex;
9
- exports.calculateHash = calculateHash;
10
- exports.u32ArrayToBuffer = u32ArrayToBuffer;
11
- exports.bufferToU32Array = bufferToU32Array;
12
- exports.u32ReverseEndianness = u32ReverseEndianness;
13
- exports.bigNumberishToBuffer = bigNumberishToBuffer;
14
- exports.toBigInt = toBigInt;
15
- exports.bytes31SpanToBuffer = bytes31SpanToBuffer;
16
- exports.bufferToBytes31Span = bufferToBytes31Span;
17
- exports.bufferToByteArray = bufferToByteArray;
18
- exports.poseidonHashRange = poseidonHashRange;
19
- exports.findLastIndex = findLastIndex;
20
- exports.bigIntMax = bigIntMax;
21
- exports.serializeSignature = serializeSignature;
22
- exports.deserializeSignature = deserializeSignature;
23
- exports.serializeResourceBounds = serializeResourceBounds;
24
- exports.deserializeResourceBounds = deserializeResourceBounds;
25
- const starknet_1 = require("starknet");
26
- const buffer_1 = require("buffer");
27
- function isUint256(val) {
28
- return val.low != null && val.high != null;
29
- }
30
- function timeoutPromise(timeoutMillis, abortSignal) {
31
- return new Promise((resolve, reject) => {
32
- const timeout = setTimeout(resolve, timeoutMillis);
33
- if (abortSignal != null)
34
- abortSignal.addEventListener("abort", () => {
35
- clearTimeout(timeout);
36
- reject(new Error("Aborted"));
37
- });
38
- });
39
- }
40
- function onceAsync(executor) {
41
- let promise;
42
- return () => {
43
- if (promise == null) {
44
- promise = executor();
45
- return promise;
46
- }
47
- else {
48
- return promise.catch(() => promise = executor());
49
- }
50
- };
51
- }
52
- function getLogger(prefix) {
53
- return {
54
- // @ts-ignore
55
- debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
56
- // @ts-ignore
57
- info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
58
- // @ts-ignore
59
- warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
60
- // @ts-ignore
61
- error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
62
- };
63
- }
64
- const logger = getLogger("Utils: ");
65
- async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
66
- retryPolicy = retryPolicy || {};
67
- retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
68
- retryPolicy.delay = retryPolicy.delay || 500;
69
- retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
70
- let err = null;
71
- for (let i = 0; i < retryPolicy.maxRetries; i++) {
72
- try {
73
- const resp = await func();
74
- return resp;
75
- }
76
- catch (e) {
77
- if (errorAllowed != null && errorAllowed(e))
78
- throw e;
79
- err = e;
80
- logger.error("tryWithRetries(): error on try number: " + i, e);
81
- }
82
- if (abortSignal != null && abortSignal.aborted)
83
- throw new Error("Aborted");
84
- if (i !== retryPolicy.maxRetries - 1) {
85
- await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
86
- }
87
- }
88
- throw err;
89
- }
90
- function toHex(value, length = 64) {
91
- if (value == null)
92
- return null;
93
- if (typeof (value) === "string")
94
- value = BigInt(value);
95
- switch (typeof (value)) {
96
- case "number":
97
- case "bigint":
98
- return "0x" + value.toString(16).padStart(length, "0");
99
- }
100
- return "0x" + value.toString("hex").padStart(length, "0");
101
- }
102
- function calculateHash(tx) {
103
- if (tx.signed == null)
104
- throw new Error("Cannot calculate hash for an unsigned transaction!");
105
- const commonData = {
106
- version: tx.details.version,
107
- maxFee: tx.details.maxFee,
108
- chainId: tx.details.chainId,
109
- nonce: tx.details.nonce,
110
- accountDeploymentData: tx.details.accountDeploymentData,
111
- nonceDataAvailabilityMode: starknet_1.EDAMode[tx.details.nonceDataAvailabilityMode],
112
- feeDataAvailabilityMode: starknet_1.EDAMode[tx.details.feeDataAvailabilityMode],
113
- resourceBounds: tx.details.resourceBounds,
114
- tip: tx.details.tip,
115
- paymasterData: tx.details.paymasterData
116
- };
117
- switch (tx.type) {
118
- case "INVOKE":
119
- if (tx.signed.calldata == null ||
120
- tx.details.walletAddress == null)
121
- throw new Error("TX not enough data to compute hash!");
122
- const invokeData = starknet_1.CallData.compile(tx.signed.calldata);
123
- return tx.txId = starknet_1.hash.calculateInvokeTransactionHash({
124
- senderAddress: tx.details.walletAddress,
125
- compiledCalldata: invokeData,
126
- ...commonData
127
- });
128
- case "DEPLOY_ACCOUNT":
129
- if (tx.signed.constructorCalldata == null ||
130
- tx.signed.addressSalt == null ||
131
- tx.tx.contractAddress == null)
132
- throw new Error("TX not enough data to compute hash!");
133
- const deployAccountData = starknet_1.CallData.compile(tx.signed.constructorCalldata);
134
- return tx.txId = starknet_1.hash.calculateDeployAccountTransactionHash({
135
- contractAddress: tx.tx.contractAddress,
136
- classHash: tx.signed.classHash,
137
- compiledConstructorCalldata: deployAccountData,
138
- salt: tx.signed.addressSalt,
139
- ...commonData
140
- });
141
- default:
142
- throw new Error("Unsupported tx type!");
143
- }
144
- }
145
- function u32ArrayToBuffer(arr) {
146
- const buffer = buffer_1.Buffer.alloc(4 * arr.length);
147
- for (let i = 0; i < arr.length; i++) {
148
- buffer.writeUInt32BE(Number(arr[i]), i * 4);
149
- }
150
- return buffer;
151
- }
152
- function bufferToU32Array(buffer) {
153
- const result = [];
154
- for (let i = 0; i < buffer.length; i += 4) {
155
- result.push(buffer.readUInt32BE(i));
156
- }
157
- return result;
158
- }
159
- function u32ReverseEndianness(value) {
160
- const valueBN = BigInt(value);
161
- return Number(((valueBN & 0xffn) << 24n) |
162
- ((valueBN & 0xff00n) << 8n) |
163
- ((valueBN >> 8n) & 0xff00n) |
164
- ((valueBN >> 24n) & 0xffn));
165
- }
166
- function bigNumberishToBuffer(value, length) {
167
- if (isUint256(value)) {
168
- return buffer_1.Buffer.concat([bigNumberishToBuffer(value.high, 16), bigNumberishToBuffer(value.low, 16)]);
169
- }
170
- if (typeof (value) === "string") {
171
- if (value.startsWith("0x")) {
172
- value = value.slice(2);
173
- }
174
- else {
175
- value = BigInt(value).toString(16);
176
- }
177
- }
178
- else {
179
- value = value.toString(16);
180
- }
181
- if (length != null)
182
- value = value.padStart(length * 2, "0");
183
- const buff = buffer_1.Buffer.from(value, "hex");
184
- if (length != null && buff.length > length)
185
- return buff.slice(buff.length - length);
186
- return buff;
187
- }
188
- function toBigInt(value) {
189
- if (value == null)
190
- return null;
191
- if (isUint256(value)) {
192
- return (toBigInt(value.high) << 128n) | toBigInt(value.low);
193
- }
194
- if (typeof (value) === "string") {
195
- if (!value.startsWith("0x"))
196
- value = "0x" + value;
197
- return BigInt(value);
198
- }
199
- if (typeof (value) === "bigint") {
200
- return value;
201
- }
202
- return BigInt(value);
203
- }
204
- function bytes31SpanToBuffer(span, length) {
205
- const buffers = [];
206
- const numFullBytes31 = Math.floor(length / 31);
207
- const additionalBytes = length - (numFullBytes31 * 31);
208
- const requiredSpanLength = numFullBytes31 + (additionalBytes === 0 ? 0 : 1);
209
- if (span.length < requiredSpanLength)
210
- throw new Error("Not enough bytes in the felt array!");
211
- let i = 0;
212
- for (; i < numFullBytes31; i++) {
213
- buffers.push(bigNumberishToBuffer(span[i], 31));
214
- }
215
- if (additionalBytes !== 0)
216
- buffers.push(bigNumberishToBuffer(span[i], additionalBytes));
217
- return buffer_1.Buffer.concat(buffers);
218
- }
219
- function bufferToBytes31Span(buffer, startIndex = 0, endIndex = buffer.length) {
220
- const values = [];
221
- for (let i = startIndex + 31; i < endIndex; i += 31) {
222
- values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
223
- }
224
- if (endIndex > startIndex + (values.length * 31))
225
- values.push(BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex")));
226
- return values;
227
- }
228
- function bufferToByteArray(buffer, startIndex = 0, endIndex = buffer.length) {
229
- const values = [];
230
- for (let i = startIndex + 31; i < endIndex; i += 31) {
231
- values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
232
- }
233
- let pendingWord = BigInt(0);
234
- let pendingWordLen = BigInt(endIndex - (startIndex + (values.length * 31)));
235
- if (pendingWordLen !== BigInt(0)) {
236
- pendingWord = BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex"));
237
- }
238
- return [
239
- BigInt(values.length),
240
- ...values,
241
- pendingWord,
242
- pendingWordLen
243
- ];
244
- }
245
- function poseidonHashRange(buffer, startIndex = 0, endIndex = buffer.length) {
246
- return starknet_1.hash.computePoseidonHashOnElements(bufferToBytes31Span(buffer, startIndex, endIndex));
247
- }
248
- function findLastIndex(array, callback) {
249
- for (let i = array.length - 1; i >= 0; i--) {
250
- if (callback(array[i], i))
251
- return i;
252
- }
253
- return -1;
254
- }
255
- function bigIntMax(a, b) {
256
- return a > b ? a : b;
257
- }
258
- function serializeSignature(signature) {
259
- return signature == null
260
- ? undefined
261
- : Array.isArray(signature)
262
- ? signature
263
- : [toHex(signature.r), toHex(signature.s)];
264
- }
265
- function deserializeSignature(signature) {
266
- return signature == null
267
- ? undefined
268
- : Array.isArray(signature)
269
- ? signature
270
- : [signature.r, signature.s];
271
- }
272
- function serializeResourceBounds(resourceBounds) {
273
- return {
274
- l2_gas: {
275
- max_amount: toHex(resourceBounds.l2_gas.max_amount),
276
- max_price_per_unit: toHex(resourceBounds.l2_gas.max_price_per_unit),
277
- },
278
- l1_gas: {
279
- max_amount: toHex(resourceBounds.l1_gas.max_amount),
280
- max_price_per_unit: toHex(resourceBounds.l1_gas.max_price_per_unit),
281
- },
282
- l1_data_gas: {
283
- max_amount: toHex(resourceBounds.l1_data_gas.max_amount),
284
- max_price_per_unit: toHex(resourceBounds.l1_data_gas.max_price_per_unit),
285
- }
286
- };
287
- }
288
- function deserializeResourceBounds(resourceBounds) {
289
- return {
290
- l2_gas: {
291
- max_amount: BigInt(resourceBounds.l2_gas.max_amount),
292
- max_price_per_unit: BigInt(resourceBounds.l2_gas.max_price_per_unit),
293
- },
294
- l1_gas: {
295
- max_amount: BigInt(resourceBounds.l1_gas.max_amount),
296
- max_price_per_unit: BigInt(resourceBounds.l1_gas.max_price_per_unit),
297
- },
298
- l1_data_gas: {
299
- max_amount: BigInt(resourceBounds.l1_data_gas.max_amount),
300
- max_price_per_unit: BigInt(resourceBounds.l1_data_gas.max_price_per_unit),
301
- }
302
- };
303
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeResourceBounds = exports.serializeResourceBounds = exports.deserializeSignature = exports.serializeSignature = exports.bigIntMax = exports.findLastIndex = exports.poseidonHashRange = exports.bufferToByteArray = exports.bufferToBytes31Span = exports.bytes31SpanToBuffer = exports.toBigInt = exports.bigNumberishToBuffer = exports.u32ReverseEndianness = exports.bufferToU32Array = exports.u32ArrayToBuffer = exports.calculateHash = exports.toHex = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = exports.isUint256 = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const buffer_1 = require("buffer");
6
+ function isUint256(val) {
7
+ return val.low != null && val.high != null;
8
+ }
9
+ exports.isUint256 = isUint256;
10
+ function timeoutPromise(timeoutMillis, abortSignal) {
11
+ return new Promise((resolve, reject) => {
12
+ const timeout = setTimeout(resolve, timeoutMillis);
13
+ if (abortSignal != null)
14
+ abortSignal.addEventListener("abort", () => {
15
+ clearTimeout(timeout);
16
+ reject(new Error("Aborted"));
17
+ });
18
+ });
19
+ }
20
+ exports.timeoutPromise = timeoutPromise;
21
+ function onceAsync(executor) {
22
+ let promise;
23
+ return () => {
24
+ if (promise == null) {
25
+ promise = executor();
26
+ return promise;
27
+ }
28
+ else {
29
+ return promise.catch(() => promise = executor());
30
+ }
31
+ };
32
+ }
33
+ exports.onceAsync = onceAsync;
34
+ function getLogger(prefix) {
35
+ return {
36
+ // @ts-ignore
37
+ debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
38
+ // @ts-ignore
39
+ info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
40
+ // @ts-ignore
41
+ warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
42
+ // @ts-ignore
43
+ error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
44
+ };
45
+ }
46
+ exports.getLogger = getLogger;
47
+ const logger = getLogger("Utils: ");
48
+ async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
49
+ retryPolicy = retryPolicy || {};
50
+ retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
51
+ retryPolicy.delay = retryPolicy.delay || 500;
52
+ retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
53
+ let err = null;
54
+ for (let i = 0; i < retryPolicy.maxRetries; i++) {
55
+ try {
56
+ const resp = await func();
57
+ return resp;
58
+ }
59
+ catch (e) {
60
+ if (errorAllowed != null && errorAllowed(e))
61
+ throw e;
62
+ err = e;
63
+ logger.error("tryWithRetries(): error on try number: " + i, e);
64
+ }
65
+ if (abortSignal != null && abortSignal.aborted)
66
+ throw new Error("Aborted");
67
+ if (i !== retryPolicy.maxRetries - 1) {
68
+ await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
69
+ }
70
+ }
71
+ throw err;
72
+ }
73
+ exports.tryWithRetries = tryWithRetries;
74
+ function toHex(value, length = 64) {
75
+ if (value == null)
76
+ return null;
77
+ if (typeof (value) === "string")
78
+ value = BigInt(value);
79
+ switch (typeof (value)) {
80
+ case "number":
81
+ case "bigint":
82
+ return "0x" + value.toString(16).padStart(length, "0");
83
+ }
84
+ return "0x" + value.toString("hex").padStart(length, "0");
85
+ }
86
+ exports.toHex = toHex;
87
+ function calculateHash(tx) {
88
+ if (tx.signed == null)
89
+ throw new Error("Cannot calculate hash for an unsigned transaction!");
90
+ const commonData = {
91
+ version: tx.details.version,
92
+ maxFee: tx.details.maxFee,
93
+ chainId: tx.details.chainId,
94
+ nonce: tx.details.nonce,
95
+ accountDeploymentData: tx.details.accountDeploymentData,
96
+ nonceDataAvailabilityMode: starknet_1.EDAMode[tx.details.nonceDataAvailabilityMode],
97
+ feeDataAvailabilityMode: starknet_1.EDAMode[tx.details.feeDataAvailabilityMode],
98
+ resourceBounds: tx.details.resourceBounds,
99
+ tip: tx.details.tip,
100
+ paymasterData: tx.details.paymasterData
101
+ };
102
+ switch (tx.type) {
103
+ case "INVOKE":
104
+ if (tx.signed.calldata == null ||
105
+ tx.details.walletAddress == null)
106
+ throw new Error("TX not enough data to compute hash!");
107
+ const invokeData = starknet_1.CallData.compile(tx.signed.calldata);
108
+ return tx.txId = starknet_1.hash.calculateInvokeTransactionHash({
109
+ senderAddress: tx.details.walletAddress,
110
+ compiledCalldata: invokeData,
111
+ ...commonData
112
+ });
113
+ case "DEPLOY_ACCOUNT":
114
+ if (tx.signed.constructorCalldata == null ||
115
+ tx.signed.addressSalt == null ||
116
+ tx.tx.contractAddress == null)
117
+ throw new Error("TX not enough data to compute hash!");
118
+ const deployAccountData = starknet_1.CallData.compile(tx.signed.constructorCalldata);
119
+ return tx.txId = starknet_1.hash.calculateDeployAccountTransactionHash({
120
+ contractAddress: tx.tx.contractAddress,
121
+ classHash: tx.signed.classHash,
122
+ compiledConstructorCalldata: deployAccountData,
123
+ salt: tx.signed.addressSalt,
124
+ ...commonData
125
+ });
126
+ default:
127
+ throw new Error("Unsupported tx type!");
128
+ }
129
+ }
130
+ exports.calculateHash = calculateHash;
131
+ function u32ArrayToBuffer(arr) {
132
+ const buffer = buffer_1.Buffer.alloc(4 * arr.length);
133
+ for (let i = 0; i < arr.length; i++) {
134
+ buffer.writeUInt32BE(Number(arr[i]), i * 4);
135
+ }
136
+ return buffer;
137
+ }
138
+ exports.u32ArrayToBuffer = u32ArrayToBuffer;
139
+ function bufferToU32Array(buffer) {
140
+ const result = [];
141
+ for (let i = 0; i < buffer.length; i += 4) {
142
+ result.push(buffer.readUInt32BE(i));
143
+ }
144
+ return result;
145
+ }
146
+ exports.bufferToU32Array = bufferToU32Array;
147
+ function u32ReverseEndianness(value) {
148
+ const valueBN = BigInt(value);
149
+ return Number(((valueBN & 0xffn) << 24n) |
150
+ ((valueBN & 0xff00n) << 8n) |
151
+ ((valueBN >> 8n) & 0xff00n) |
152
+ ((valueBN >> 24n) & 0xffn));
153
+ }
154
+ exports.u32ReverseEndianness = u32ReverseEndianness;
155
+ function bigNumberishToBuffer(value, length) {
156
+ if (isUint256(value)) {
157
+ return buffer_1.Buffer.concat([bigNumberishToBuffer(value.high, 16), bigNumberishToBuffer(value.low, 16)]);
158
+ }
159
+ if (typeof (value) === "string") {
160
+ if (value.startsWith("0x")) {
161
+ value = value.slice(2);
162
+ }
163
+ else {
164
+ value = BigInt(value).toString(16);
165
+ }
166
+ }
167
+ else {
168
+ value = value.toString(16);
169
+ }
170
+ if (length != null)
171
+ value = value.padStart(length * 2, "0");
172
+ const buff = buffer_1.Buffer.from(value, "hex");
173
+ if (length != null && buff.length > length)
174
+ return buff.slice(buff.length - length);
175
+ return buff;
176
+ }
177
+ exports.bigNumberishToBuffer = bigNumberishToBuffer;
178
+ function toBigInt(value) {
179
+ if (value == null)
180
+ return null;
181
+ if (isUint256(value)) {
182
+ return (toBigInt(value.high) << 128n) | toBigInt(value.low);
183
+ }
184
+ if (typeof (value) === "string") {
185
+ if (!value.startsWith("0x"))
186
+ value = "0x" + value;
187
+ return BigInt(value);
188
+ }
189
+ if (typeof (value) === "bigint") {
190
+ return value;
191
+ }
192
+ return BigInt(value);
193
+ }
194
+ exports.toBigInt = toBigInt;
195
+ function bytes31SpanToBuffer(span, length) {
196
+ const buffers = [];
197
+ const numFullBytes31 = Math.floor(length / 31);
198
+ const additionalBytes = length - (numFullBytes31 * 31);
199
+ const requiredSpanLength = numFullBytes31 + (additionalBytes === 0 ? 0 : 1);
200
+ if (span.length < requiredSpanLength)
201
+ throw new Error("Not enough bytes in the felt array!");
202
+ let i = 0;
203
+ for (; i < numFullBytes31; i++) {
204
+ buffers.push(bigNumberishToBuffer(span[i], 31));
205
+ }
206
+ if (additionalBytes !== 0)
207
+ buffers.push(bigNumberishToBuffer(span[i], additionalBytes));
208
+ return buffer_1.Buffer.concat(buffers);
209
+ }
210
+ exports.bytes31SpanToBuffer = bytes31SpanToBuffer;
211
+ function bufferToBytes31Span(buffer, startIndex = 0, endIndex = buffer.length) {
212
+ const values = [];
213
+ for (let i = startIndex + 31; i < endIndex; i += 31) {
214
+ values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
215
+ }
216
+ if (endIndex > startIndex + (values.length * 31))
217
+ values.push(BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex")));
218
+ return values;
219
+ }
220
+ exports.bufferToBytes31Span = bufferToBytes31Span;
221
+ function bufferToByteArray(buffer, startIndex = 0, endIndex = buffer.length) {
222
+ const values = [];
223
+ for (let i = startIndex + 31; i < endIndex; i += 31) {
224
+ values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
225
+ }
226
+ let pendingWord = BigInt(0);
227
+ let pendingWordLen = BigInt(endIndex - (startIndex + (values.length * 31)));
228
+ if (pendingWordLen !== BigInt(0)) {
229
+ pendingWord = BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex"));
230
+ }
231
+ return [
232
+ BigInt(values.length),
233
+ ...values,
234
+ pendingWord,
235
+ pendingWordLen
236
+ ];
237
+ }
238
+ exports.bufferToByteArray = bufferToByteArray;
239
+ function poseidonHashRange(buffer, startIndex = 0, endIndex = buffer.length) {
240
+ return starknet_1.hash.computePoseidonHashOnElements(bufferToBytes31Span(buffer, startIndex, endIndex));
241
+ }
242
+ exports.poseidonHashRange = poseidonHashRange;
243
+ function findLastIndex(array, callback) {
244
+ for (let i = array.length - 1; i >= 0; i--) {
245
+ if (callback(array[i], i))
246
+ return i;
247
+ }
248
+ return -1;
249
+ }
250
+ exports.findLastIndex = findLastIndex;
251
+ function bigIntMax(a, b) {
252
+ return a > b ? a : b;
253
+ }
254
+ exports.bigIntMax = bigIntMax;
255
+ function serializeSignature(signature) {
256
+ return signature == null
257
+ ? undefined
258
+ : Array.isArray(signature)
259
+ ? signature
260
+ : [toHex(signature.r), toHex(signature.s)];
261
+ }
262
+ exports.serializeSignature = serializeSignature;
263
+ function deserializeSignature(signature) {
264
+ return signature == null
265
+ ? undefined
266
+ : Array.isArray(signature)
267
+ ? signature
268
+ : [signature.r, signature.s];
269
+ }
270
+ exports.deserializeSignature = deserializeSignature;
271
+ function serializeResourceBounds(resourceBounds) {
272
+ return {
273
+ l2_gas: {
274
+ max_amount: toHex(resourceBounds.l2_gas.max_amount),
275
+ max_price_per_unit: toHex(resourceBounds.l2_gas.max_price_per_unit),
276
+ },
277
+ l1_gas: {
278
+ max_amount: toHex(resourceBounds.l1_gas.max_amount),
279
+ max_price_per_unit: toHex(resourceBounds.l1_gas.max_price_per_unit),
280
+ },
281
+ l1_data_gas: {
282
+ max_amount: toHex(resourceBounds.l1_data_gas.max_amount),
283
+ max_price_per_unit: toHex(resourceBounds.l1_data_gas.max_price_per_unit),
284
+ }
285
+ };
286
+ }
287
+ exports.serializeResourceBounds = serializeResourceBounds;
288
+ function deserializeResourceBounds(resourceBounds) {
289
+ return {
290
+ l2_gas: {
291
+ max_amount: BigInt(resourceBounds.l2_gas.max_amount),
292
+ max_price_per_unit: BigInt(resourceBounds.l2_gas.max_price_per_unit),
293
+ },
294
+ l1_gas: {
295
+ max_amount: BigInt(resourceBounds.l1_gas.max_amount),
296
+ max_price_per_unit: BigInt(resourceBounds.l1_gas.max_price_per_unit),
297
+ },
298
+ l1_data_gas: {
299
+ max_amount: BigInt(resourceBounds.l1_data_gas.max_amount),
300
+ max_price_per_unit: BigInt(resourceBounds.l1_data_gas.max_price_per_unit),
301
+ }
302
+ };
303
+ }
304
+ exports.deserializeResourceBounds = deserializeResourceBounds;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/chain-starknet",
3
- "version": "8.0.13",
3
+ "version": "8.1.10",
4
4
  "description": "Starknet specific base implementation",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -30,7 +30,7 @@
30
30
  "url": "git+https://github.com/atomiqlabs/atomiq-chain-starknet.git"
31
31
  },
32
32
  "dependencies": {
33
- "@atomiqlabs/base": "^13.0.4",
33
+ "@atomiqlabs/base": "^13.1.9",
34
34
  "@noble/hashes": "^1.7.1",
35
35
  "@scure/btc-signer": "^1.6.0",
36
36
  "abi-wan-kanabi": "2.2.4",