@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.
- package/dist/index.d.ts +13 -9
- package/dist/index.js +13 -9
- package/dist/starknet/StarknetChainType.d.ts +6 -2
- package/dist/starknet/StarknetInitializer.d.ts +3 -2
- package/dist/starknet/StarknetInitializer.js +17 -6
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
- package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
- package/dist/starknet/chain/StarknetChainInterface.js +91 -0
- package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
- package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
- package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
- package/dist/starknet/contract/StarknetContractBase.js +5 -7
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
- package/dist/starknet/contract/StarknetContractModule.js +11 -0
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
- package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
- package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
- package/dist/starknet/events/StarknetChainEvents.js +9 -9
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +24 -6
- package/dist/starknet/events/StarknetChainEventsBrowser.js +116 -28
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
- package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
- package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
- package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
- package/dist/starknet/wallet/StarknetSigner.js +1 -1
- package/dist/utils/Utils.d.ts +2 -2
- package/dist/utils/Utils.js +3 -1
- package/package.json +2 -2
- package/src/index.ts +15 -9
- package/src/starknet/StarknetChainType.ts +10 -2
- package/src/starknet/StarknetInitializer.ts +23 -7
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
- package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
- package/src/starknet/chain/StarknetChainInterface.ts +149 -0
- package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
- package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
- package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
- package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
- package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
- package/src/starknet/contract/StarknetContractBase.ts +9 -12
- package/src/starknet/contract/StarknetContractModule.ts +16 -0
- package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
- package/src/starknet/events/StarknetChainEvents.ts +15 -11
- package/src/starknet/events/StarknetChainEventsBrowser.ts +168 -41
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
- package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
- package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
- package/src/starknet/swaps/handlers/IHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
- package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
- package/src/starknet/wallet/StarknetSigner.ts +1 -1
- package/src/utils/Utils.ts +4 -3
- package/dist/starknet/base/StarknetBase.d.ts +0 -34
- package/dist/starknet/base/StarknetBase.js +0 -29
- package/src/starknet/base/StarknetBase.ts +0 -56
- /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
- /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
- /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
- /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 =
|
|
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 =
|
|
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
|
|
135
|
-
|
|
136
|
-
|
|
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)(
|
|
139
|
-
if (latestProcessedEventIndex !== -1)
|
|
140
|
-
|
|
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 (
|
|
143
|
-
await this.processEvents(
|
|
144
|
-
lastTxHash =
|
|
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
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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,
|
|
258
|
+
async setupPoll(lastBlockNumber, lastTxHashes, saveLatestProcessedBlockNumber) {
|
|
171
259
|
this.stopped = false;
|
|
172
260
|
let func;
|
|
173
261
|
func = async () => {
|
|
174
|
-
await this.checkEvents(lastBlockNumber,
|
|
262
|
+
await this.checkEvents(lastBlockNumber, lastTxHashes).then(({ blockNumber, txHashes }) => {
|
|
175
263
|
lastBlockNumber = blockNumber;
|
|
176
|
-
|
|
264
|
+
lastTxHashes = txHashes;
|
|
177
265
|
if (saveLatestProcessedBlockNumber != null)
|
|
178
|
-
return saveLatestProcessedBlockNumber(blockNumber,
|
|
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;
|