@atomiqlabs/chain-starknet 1.0.8 → 2.0.0-beta.0

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 (121) hide show
  1. package/dist/index.d.ts +13 -9
  2. package/dist/index.js +13 -9
  3. package/dist/starknet/StarknetChainType.d.ts +6 -2
  4. package/dist/starknet/StarknetInitializer.d.ts +3 -2
  5. package/dist/starknet/StarknetInitializer.js +17 -6
  6. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
  7. package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
  8. package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
  9. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
  10. package/dist/starknet/chain/StarknetChainInterface.js +91 -0
  11. package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
  12. package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
  13. package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
  14. package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
  15. package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
  16. package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
  17. package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
  18. package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
  19. package/dist/starknet/contract/StarknetContractBase.js +5 -7
  20. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
  21. package/dist/starknet/contract/StarknetContractModule.js +11 -0
  22. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
  25. package/dist/starknet/events/StarknetChainEvents.js +9 -9
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +24 -6
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +116 -28
  28. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
  29. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
  30. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
  31. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
  32. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
  33. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
  34. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
  35. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
  36. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
  37. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
  38. package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
  39. package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
  40. package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
  41. package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
  42. package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
  43. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
  44. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
  45. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
  46. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
  47. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
  48. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
  49. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
  50. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
  51. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
  52. package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
  53. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
  54. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
  55. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
  56. package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
  57. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
  58. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
  59. package/dist/starknet/wallet/StarknetSigner.js +1 -1
  60. package/dist/utils/Utils.d.ts +2 -2
  61. package/dist/utils/Utils.js +3 -1
  62. package/package.json +2 -2
  63. package/src/index.ts +15 -9
  64. package/src/starknet/StarknetChainType.ts +10 -2
  65. package/src/starknet/StarknetInitializer.ts +23 -7
  66. package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
  67. package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
  68. package/src/starknet/chain/StarknetChainInterface.ts +149 -0
  69. package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
  70. package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
  71. package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
  72. package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
  73. package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
  74. package/src/starknet/contract/StarknetContractBase.ts +9 -12
  75. package/src/starknet/contract/StarknetContractModule.ts +16 -0
  76. package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
  77. package/src/starknet/events/StarknetChainEvents.ts +15 -11
  78. package/src/starknet/events/StarknetChainEventsBrowser.ts +168 -41
  79. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
  80. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
  81. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
  82. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
  83. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
  84. package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
  85. package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
  86. package/src/starknet/swaps/handlers/IHandler.ts +2 -2
  87. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
  88. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
  89. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
  90. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
  91. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
  92. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
  93. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
  94. package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
  95. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
  96. package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
  97. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
  98. package/src/starknet/wallet/StarknetSigner.ts +1 -1
  99. package/src/utils/Utils.ts +4 -3
  100. package/dist/starknet/base/StarknetBase.d.ts +0 -34
  101. package/dist/starknet/base/StarknetBase.js +0 -29
  102. package/src/starknet/base/StarknetBase.ts +0 -56
  103. /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
  104. /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
  105. /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
  106. /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
  107. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
  108. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
  109. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
  110. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
  111. /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
  112. /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
  113. /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
  114. /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
  115. /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
  116. /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
  117. /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
  118. /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
  119. /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
  120. /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
  121. /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
@@ -10,14 +10,15 @@ const starknet_1 = require("starknet");
10
10
  * rely purely on events
11
11
  */
12
12
  class StarknetChainEventsBrowser {
13
- constructor(starknetSwapContract, pollIntervalSeconds = 5) {
13
+ constructor(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds = 5) {
14
14
  this.listeners = [];
15
15
  this.eventListeners = [];
16
16
  this.logger = (0, Utils_1.getLogger)("StarknetChainEventsBrowser: ");
17
17
  this.initFunctionName = "initialize";
18
18
  this.initEntryPointSelector = BigInt(starknet_1.hash.starknetKeccak(this.initFunctionName));
19
- this.provider = starknetSwapContract.provider;
19
+ this.provider = chainInterface.provider;
20
20
  this.starknetSwapContract = starknetSwapContract;
21
+ this.starknetSpvVaultContract = starknetSpvVaultContract;
21
22
  this.pollIntervalSeconds = pollIntervalSeconds;
22
23
  }
23
24
  findInitSwapData(call, escrowHash, claimHandler) {
@@ -90,17 +91,69 @@ class StarknetChainEventsBrowser {
90
91
  " witnessResult: " + witnessResult + " escrowHash: " + escrowHash);
91
92
  return new base_1.ClaimEvent(escrowHash, witnessResult);
92
93
  }
94
+ parseSpvOpenEvent(event) {
95
+ const owner = (0, Utils_1.toHex)(event.params.owner);
96
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
97
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
98
+ const vout = Number((0, Utils_1.toBigInt)(event.params.vout));
99
+ this.logger.debug("SpvOpenEvent owner: " + owner + " vaultId: " + vaultId + " utxo: " + btcTxId + ":" + vout);
100
+ return new base_1.SpvVaultOpenEvent(owner, vaultId, btcTxId, vout);
101
+ }
102
+ parseSpvDepositEvent(event) {
103
+ const owner = (0, Utils_1.toHex)(event.params.owner);
104
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
105
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
106
+ const depositCount = Number((0, Utils_1.toBigInt)(event.params.deposit_count));
107
+ this.logger.debug("SpvDepositEvent owner: " + owner + " vaultId: " + vaultId + " depositCount: " + depositCount + " amounts: ", amounts);
108
+ return new base_1.SpvVaultDepositEvent(owner, vaultId, amounts, depositCount);
109
+ }
110
+ parseSpvFrontEvent(event) {
111
+ const owner = (0, Utils_1.toHex)(event.params.owner);
112
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
113
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
114
+ const recipient = (0, Utils_1.toHex)(event.params.recipient);
115
+ const executionHash = (0, Utils_1.toHex)(event.params.execution_hash);
116
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
117
+ const frontingAddress = (0, Utils_1.toHex)(event.params.caller);
118
+ this.logger.debug("SpvFrontEvent owner: " + owner + " vaultId: " + vaultId + " btcTxId: " + btcTxId +
119
+ " recipient: " + recipient + " frontedBy: " + frontingAddress + " amounts: ", amounts);
120
+ return new base_1.SpvVaultFrontEvent(owner, vaultId, btcTxId, recipient, executionHash, amounts, frontingAddress);
121
+ }
122
+ parseSpvClaimEvent(event) {
123
+ const owner = (0, Utils_1.toHex)(event.params.owner);
124
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
125
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
126
+ const recipient = (0, Utils_1.toHex)(event.params.recipient);
127
+ const executionHash = (0, Utils_1.toHex)(event.params.execution_hash);
128
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
129
+ const caller = (0, Utils_1.toHex)(event.params.caller);
130
+ const frontingAddress = (0, Utils_1.toHex)(event.params.fronting_address);
131
+ const withdrawCount = Number((0, Utils_1.toBigInt)(event.params.withdraw_count));
132
+ this.logger.debug("SpvClaimEvent owner: " + owner + " vaultId: " + vaultId + " btcTxId: " + btcTxId + " withdrawCount: " + withdrawCount +
133
+ " recipient: " + recipient + " frontedBy: " + frontingAddress + " claimedBy: " + caller + " amounts: ", amounts);
134
+ return new base_1.SpvVaultClaimEvent(owner, vaultId, btcTxId, recipient, executionHash, amounts, caller, frontingAddress, withdrawCount);
135
+ }
136
+ parseSpvCloseEvent(event) {
137
+ const owner = (0, Utils_1.toHex)(event.params.owner);
138
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
139
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
140
+ const error = (0, Utils_1.bigNumberishToBuffer)(event.params.error).toString();
141
+ return new base_1.SpvVaultCloseEvent(owner, vaultId, btcTxId, error);
142
+ }
93
143
  /**
94
144
  * Processes event as received from the chain, parses it & calls event listeners
95
145
  *
96
146
  * @param events
97
147
  * @param currentBlockNumber
98
148
  * @param currentBlockTimestamp
149
+ * @param pendingEventTime
99
150
  * @protected
100
151
  */
101
- async processEvents(events, currentBlockNumber, currentBlockTimestamp) {
152
+ async processEvents(events, currentBlockNumber, currentBlockTimestamp, pendingEventTime) {
102
153
  const blockTimestampsCache = {};
103
154
  const getBlockTimestamp = async (blockNumber) => {
155
+ if (blockNumber === currentBlockNumber)
156
+ return currentBlockTimestamp;
104
157
  const blockNumberString = blockNumber.toString();
105
158
  blockTimestampsCache[blockNumberString] ?? (blockTimestampsCache[blockNumberString] = (await this.provider.getBlockWithTxHashes(blockNumber)).timestamp);
106
159
  return blockTimestampsCache[blockNumberString];
@@ -118,8 +171,23 @@ class StarknetChainEventsBrowser {
118
171
  case "escrow_manager::events::Initialize":
119
172
  parsedEvent = this.parseInitializeEvent(event);
120
173
  break;
174
+ case "spv_swap_vault::events::Opened":
175
+ parsedEvent = this.parseSpvOpenEvent(event);
176
+ break;
177
+ case "spv_swap_vault::events::Deposited":
178
+ parsedEvent = this.parseSpvDepositEvent(event);
179
+ break;
180
+ case "spv_swap_vault::events::Fronted":
181
+ parsedEvent = this.parseSpvFrontEvent(event);
182
+ break;
183
+ case "spv_swap_vault::events::Claimed":
184
+ parsedEvent = this.parseSpvClaimEvent(event);
185
+ break;
186
+ case "spv_swap_vault::events::Closed":
187
+ parsedEvent = this.parseSpvCloseEvent(event);
188
+ break;
121
189
  }
122
- const timestamp = (event.blockNumber == null || event.blockNumber === currentBlockNumber) ? currentBlockTimestamp : await getBlockTimestamp(event.blockNumber);
190
+ const timestamp = event.blockNumber == null ? pendingEventTime : await getBlockTimestamp(event.blockNumber);
123
191
  parsedEvent.meta = {
124
192
  blockTime: timestamp,
125
193
  txId: event.txHash,
@@ -131,34 +199,54 @@ class StarknetChainEventsBrowser {
131
199
  await listener(parsedEvents);
132
200
  }
133
201
  }
134
- async checkEvents(lastBlockNumber, lastTxHash) {
135
- //Get pending events
136
- let pendingEvents = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], []);
202
+ async checkEventsEcrowManager(lastTxHash, lastBlockNumber, currentBlock) {
203
+ const currentBlockNumber = currentBlock.block_number;
204
+ lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
205
+ const logStartHeight = currentBlockNumber > lastBlockNumber ? lastBlockNumber + 1 : lastBlockNumber;
206
+ this.logger.debug("checkEvents(EscrowManager): Requesting logs: " + logStartHeight + "...pending");
207
+ let events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], logStartHeight, null);
137
208
  if (lastTxHash != null) {
138
- const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(pendingEvents, val => val.txHash === lastTxHash);
139
- if (latestProcessedEventIndex !== -1)
140
- pendingEvents.splice(0, latestProcessedEventIndex + 1);
209
+ const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
210
+ if (latestProcessedEventIndex !== -1) {
211
+ events.splice(0, latestProcessedEventIndex + 1);
212
+ this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: " + events.length);
213
+ }
214
+ }
215
+ if (events.length > 0) {
216
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
217
+ lastTxHash = events[events.length - 1].txHash;
218
+ }
219
+ return lastTxHash;
220
+ }
221
+ async checkEventsSpvVaults(lastTxHash, lastBlockNumber, currentBlock) {
222
+ const currentBlockNumber = currentBlock.block_number;
223
+ lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
224
+ const logStartHeight = currentBlockNumber > lastBlockNumber ? lastBlockNumber + 1 : lastBlockNumber;
225
+ this.logger.debug("checkEvents(SpvVaults): Requesting logs: " + logStartHeight + "...pending");
226
+ let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], logStartHeight, null);
227
+ if (lastTxHash != null) {
228
+ const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
229
+ if (latestProcessedEventIndex !== -1) {
230
+ events.splice(0, latestProcessedEventIndex + 1);
231
+ this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: " + events.length);
232
+ }
141
233
  }
142
- if (pendingEvents.length > 0) {
143
- await this.processEvents(pendingEvents, null, Math.floor(Date.now() / 1000));
144
- lastTxHash = pendingEvents[pendingEvents.length - 1].txHash;
234
+ if (events.length > 0) {
235
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
236
+ lastTxHash = events[events.length - 1].txHash;
145
237
  }
238
+ return lastTxHash;
239
+ }
240
+ async checkEvents(lastBlockNumber, lastTxHashes) {
241
+ lastTxHashes ?? (lastTxHashes = []);
146
242
  const currentBlock = await this.provider.getBlockWithTxHashes("latest");
147
243
  const currentBlockNumber = currentBlock.block_number;
148
244
  if (lastBlockNumber != null && currentBlockNumber > lastBlockNumber) {
149
- const events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], lastBlockNumber + 1, currentBlockNumber);
150
- if (lastTxHash != null) {
151
- const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
152
- if (latestProcessedEventIndex !== -1)
153
- events.splice(0, latestProcessedEventIndex + 1);
154
- }
155
- if (events.length > 0) {
156
- await this.processEvents(events, currentBlockNumber, currentBlock.timestamp);
157
- lastTxHash = events[events.length - 1].txHash;
158
- }
245
+ lastTxHashes[0] = await this.checkEventsEcrowManager(lastTxHashes[0], lastBlockNumber, currentBlock);
246
+ lastTxHashes[1] = await this.checkEventsSpvVaults(lastTxHashes[1], lastBlockNumber, currentBlock);
159
247
  }
160
248
  return {
161
- txHash: lastTxHash,
249
+ txHashes: lastTxHashes,
162
250
  blockNumber: currentBlockNumber
163
251
  };
164
252
  }
@@ -167,15 +255,15 @@ class StarknetChainEventsBrowser {
167
255
  *
168
256
  * @protected
169
257
  */
170
- async setupPoll(lastBlockNumber, lastTxHash, saveLatestProcessedBlockNumber) {
258
+ async setupPoll(lastBlockNumber, lastTxHashes, saveLatestProcessedBlockNumber) {
171
259
  this.stopped = false;
172
260
  let func;
173
261
  func = async () => {
174
- await this.checkEvents(lastBlockNumber, lastTxHash).then(({ blockNumber, txHash }) => {
262
+ await this.checkEvents(lastBlockNumber, lastTxHashes).then(({ blockNumber, txHashes }) => {
175
263
  lastBlockNumber = blockNumber;
176
- lastTxHash = txHash;
264
+ lastTxHashes = txHashes;
177
265
  if (saveLatestProcessedBlockNumber != null)
178
- return saveLatestProcessedBlockNumber(blockNumber, lastTxHash);
266
+ return saveLatestProcessedBlockNumber(blockNumber, lastTxHashes);
179
267
  }).catch(e => {
180
268
  this.logger.error("setupPoll(): Failed to fetch starknet log: ", e);
181
269
  });
@@ -0,0 +1,21 @@
1
+ import { RpcChannel, RpcProvider, RpcProviderOptions } from "starknet";
2
+ export declare class RpcChannelWithRetries extends RpcChannel {
3
+ readonly retryPolicy?: {
4
+ maxRetries?: number;
5
+ delay?: number;
6
+ exponential?: boolean;
7
+ };
8
+ constructor(options?: RpcProviderOptions, retryPolicy?: {
9
+ maxRetries?: number;
10
+ delay?: number;
11
+ exponential?: boolean;
12
+ });
13
+ protected fetchEndpoint(method: any, params?: any): Promise<any>;
14
+ }
15
+ export declare class RpcProviderWithRetries extends RpcProvider {
16
+ constructor(options?: RpcProviderOptions, retryPolicy?: {
17
+ maxRetries?: number;
18
+ delay?: number;
19
+ exponential?: boolean;
20
+ });
21
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RpcProviderWithRetries = exports.RpcChannelWithRetries = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const Utils_1 = require("../../utils/Utils");
6
+ class RpcChannelWithRetries extends starknet_1.RpcChannel {
7
+ constructor(options, retryPolicy) {
8
+ super(options);
9
+ this.retryPolicy = retryPolicy;
10
+ }
11
+ fetchEndpoint(method, params) {
12
+ return (0, Utils_1.tryWithRetries)(() => super.fetchEndpoint(method, params), this.retryPolicy, e => {
13
+ if (!e.message.startsWith("RPC: "))
14
+ return false;
15
+ const arr = e.message.split("\n");
16
+ const errorCode = parseInt(arr[arr.length - 1]);
17
+ if (isNaN(errorCode))
18
+ return false;
19
+ if (errorCode < 0)
20
+ return false; //Not defined error, e.g. Rate limit (-32097)
21
+ return true;
22
+ });
23
+ }
24
+ }
25
+ exports.RpcChannelWithRetries = RpcChannelWithRetries;
26
+ class RpcProviderWithRetries extends starknet_1.RpcProvider {
27
+ constructor(options, retryPolicy) {
28
+ super(options);
29
+ this.channel = new RpcChannelWithRetries({ ...options, waitMode: false }, retryPolicy);
30
+ }
31
+ }
32
+ exports.RpcProviderWithRetries = RpcProviderWithRetries;