ponder 0.13.4 → 0.13.5
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# ponder
|
|
2
2
|
|
|
3
|
+
## 0.13.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`54e56d2`](https://github.com/ponder-sh/ponder/commit/54e56d2f4ad24ef7e4e3b81882884e514b19bf60) Thanks [@kyscott18](https://github.com/kyscott18)! - Improved realtime sync error handling.
|
|
8
|
+
|
|
3
9
|
## 0.13.4
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -3,10 +3,9 @@ import { getChildAddress, isAddressFactory, isAddressMatched, isBlockFilterMatch
|
|
|
3
3
|
import { createLock } from '../utils/mutex.js';
|
|
4
4
|
import { range } from '../utils/range.js';
|
|
5
5
|
import { _debug_traceBlockByHash, _eth_getBlockByHash, _eth_getBlockByNumber, _eth_getBlockReceipts, _eth_getLogs, _eth_getTransactionReceipt, validateLogsAndBlock, validateReceiptsAndBlock, validateTracesAndBlock, validateTransactionsAndBlock, } from '../utils/rpc.js';
|
|
6
|
-
import { wait } from '../utils/wait.js';
|
|
7
6
|
import { hexToNumber, zeroHash } from "viem";
|
|
8
7
|
import { isFilterInBloom, isInBloom, zeroLogsBloom } from "./bloom.js";
|
|
9
|
-
const MAX_LATEST_BLOCK_ATTEMPT_MS =
|
|
8
|
+
const MAX_LATEST_BLOCK_ATTEMPT_MS = 10 * 60 * 1000; // 10 minutes
|
|
10
9
|
const ERROR_TIMEOUT = [
|
|
11
10
|
1, 2, 5, 10, 30, 60, 60, 60, 60, 60, 60, 60, 60, 60,
|
|
12
11
|
];
|
|
@@ -25,7 +24,6 @@ export const createRealtimeSync = (args) => {
|
|
|
25
24
|
*/
|
|
26
25
|
let unfinalizedBlocks = [];
|
|
27
26
|
let fetchAndReconcileLatestBlockErrorCount = 0;
|
|
28
|
-
let reconcileBlockErrorCount = 0;
|
|
29
27
|
const factories = [];
|
|
30
28
|
const logFilters = [];
|
|
31
29
|
const traceFilters = [];
|
|
@@ -543,16 +541,8 @@ export const createRealtimeSync = (args) => {
|
|
|
543
541
|
* 4) Block is exactly one block ahead of the last processed,
|
|
544
542
|
* handle this new block (happy path).
|
|
545
543
|
*
|
|
546
|
-
* @dev
|
|
547
|
-
*
|
|
548
|
-
*
|
|
549
|
-
* @returns
|
|
550
|
-
* - `rejected` for case 1 and 2.
|
|
551
|
-
* - `reorg` for case 2 with a promise that resolves once the reorg is applied.
|
|
552
|
-
* - `pending` for case 3 with a promise that resolves once the block is
|
|
553
|
-
* settled as `rejected`, `accepted`, or `reorg`.
|
|
554
|
-
* - `accepted` for case 4 with promises for the "block" and "finalize" events
|
|
555
|
-
* that resolve when each event is applied.
|
|
544
|
+
* @dev `blockCallback` is guaranteed to be called exactly once or an error is thrown.
|
|
545
|
+
* @dev It is an invariant that the correct events are generated or an error is thrown.
|
|
556
546
|
*/
|
|
557
547
|
const reconcileBlock = async function* (blockWithEventData, blockCallback) {
|
|
558
548
|
const latestBlock = getLatestUnfinalizedBlock();
|
|
@@ -566,148 +556,122 @@ export const createRealtimeSync = (args) => {
|
|
|
566
556
|
blockCallback?.(false);
|
|
567
557
|
return;
|
|
568
558
|
}
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
yield* reconcileBlock(pendingBlock);
|
|
589
|
-
}
|
|
590
|
-
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
591
|
-
return;
|
|
559
|
+
// Quickly check for a reorg by comparing block numbers. If the block
|
|
560
|
+
// number has not increased, a reorg must have occurred.
|
|
561
|
+
if (hexToNumber(latestBlock.number) >= hexToNumber(block.number)) {
|
|
562
|
+
const reorgEvent = await reconcileReorg(block);
|
|
563
|
+
blockCallback?.(false);
|
|
564
|
+
yield reorgEvent;
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
// Blocks are missing. They should be fetched and enqueued.
|
|
568
|
+
if (hexToNumber(latestBlock.number) + 1 < hexToNumber(block.number)) {
|
|
569
|
+
// Retrieve missing blocks, but only fetch a certain amount.
|
|
570
|
+
const missingBlockRange = range(hexToNumber(latestBlock.number) + 1, Math.min(hexToNumber(block.number), hexToNumber(latestBlock.number) + MAX_QUEUED_BLOCKS));
|
|
571
|
+
const pendingBlocks = await Promise.all(missingBlockRange.map((blockNumber) => _eth_getBlockByNumber(args.rpc, { blockNumber }).then((block) => fetchBlockEventData(block))));
|
|
572
|
+
args.common.logger.info({
|
|
573
|
+
service: "realtime",
|
|
574
|
+
msg: `Fetched ${missingBlockRange.length} missing '${args.chain.name}' blocks [${hexToNumber(latestBlock.number) + 1}, ${Math.min(hexToNumber(block.number), hexToNumber(latestBlock.number) + MAX_QUEUED_BLOCKS)}]`,
|
|
575
|
+
});
|
|
576
|
+
for (const pendingBlock of pendingBlocks) {
|
|
577
|
+
yield* reconcileBlock(pendingBlock);
|
|
592
578
|
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
const reorgEvent = await reconcileReorg(block);
|
|
579
|
+
if (hexToNumber(block.number) - hexToNumber(latestBlock.number) >
|
|
580
|
+
MAX_QUEUED_BLOCKS) {
|
|
596
581
|
blockCallback?.(false);
|
|
597
|
-
yield reorgEvent;
|
|
598
|
-
return;
|
|
599
|
-
}
|
|
600
|
-
// New block is exactly one block ahead of the local chain.
|
|
601
|
-
// Attempt to ingest it.
|
|
602
|
-
const blockWithFilteredEventData = filterBlockEventData(blockWithEventData);
|
|
603
|
-
if (blockWithFilteredEventData.logs.length > 0 ||
|
|
604
|
-
blockWithFilteredEventData.traces.length > 0 ||
|
|
605
|
-
blockWithFilteredEventData.transactions.length > 0) {
|
|
606
|
-
const _text = [];
|
|
607
|
-
if (blockWithFilteredEventData.logs.length === 1) {
|
|
608
|
-
_text.push("1 log");
|
|
609
|
-
}
|
|
610
|
-
else if (blockWithFilteredEventData.logs.length > 1) {
|
|
611
|
-
_text.push(`${blockWithFilteredEventData.logs.length} logs`);
|
|
612
|
-
}
|
|
613
|
-
if (blockWithFilteredEventData.traces.length === 1) {
|
|
614
|
-
_text.push("1 trace");
|
|
615
|
-
}
|
|
616
|
-
else if (blockWithFilteredEventData.traces.length > 1) {
|
|
617
|
-
_text.push(`${blockWithFilteredEventData.traces.length} traces`);
|
|
618
|
-
}
|
|
619
|
-
if (blockWithFilteredEventData.transactions.length === 1) {
|
|
620
|
-
_text.push("1 transaction");
|
|
621
|
-
}
|
|
622
|
-
else if (blockWithFilteredEventData.transactions.length > 1) {
|
|
623
|
-
_text.push(`${blockWithFilteredEventData.transactions.length} transactions`);
|
|
624
|
-
}
|
|
625
|
-
const text = _text.filter((t) => t !== undefined).join(" and ");
|
|
626
|
-
args.common.logger.info({
|
|
627
|
-
service: "realtime",
|
|
628
|
-
msg: `Synced ${text} from '${args.chain.name}' block ${hexToNumber(block.number)}`,
|
|
629
|
-
});
|
|
630
582
|
}
|
|
631
583
|
else {
|
|
632
|
-
|
|
633
|
-
service: "realtime",
|
|
634
|
-
msg: `Synced block ${hexToNumber(block.number)} from '${args.chain.name}' `,
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
unfinalizedBlocks.push({
|
|
638
|
-
hash: block.hash,
|
|
639
|
-
parentHash: block.parentHash,
|
|
640
|
-
number: block.number,
|
|
641
|
-
timestamp: block.timestamp,
|
|
642
|
-
});
|
|
643
|
-
// Make sure `transactions` can be garbage collected
|
|
644
|
-
blockWithEventData.block.transactions =
|
|
645
|
-
blockWithFilteredEventData.block.transactions;
|
|
646
|
-
yield {
|
|
647
|
-
type: "block",
|
|
648
|
-
hasMatchedFilter: blockWithFilteredEventData.matchedFilters.size > 0,
|
|
649
|
-
block: blockWithFilteredEventData.block,
|
|
650
|
-
logs: blockWithFilteredEventData.logs,
|
|
651
|
-
transactions: blockWithFilteredEventData.transactions,
|
|
652
|
-
transactionReceipts: blockWithFilteredEventData.transactionReceipts,
|
|
653
|
-
traces: blockWithFilteredEventData.traces,
|
|
654
|
-
childAddresses: blockWithFilteredEventData.childAddresses,
|
|
655
|
-
blockCallback,
|
|
656
|
-
};
|
|
657
|
-
// Determine if a new range has become finalized by evaluating if the
|
|
658
|
-
// latest block number is 2 * finalityBlockCount >= finalized block number.
|
|
659
|
-
// Essentially, there is a range the width of finalityBlockCount that is entirely
|
|
660
|
-
// finalized.
|
|
661
|
-
const blockMovesFinality = hexToNumber(block.number) >=
|
|
662
|
-
hexToNumber(finalizedBlock.number) + 2 * args.chain.finalityBlockCount;
|
|
663
|
-
if (blockMovesFinality) {
|
|
664
|
-
const pendingFinalizedBlock = unfinalizedBlocks.find((lb) => hexToNumber(lb.number) ===
|
|
665
|
-
hexToNumber(block.number) - args.chain.finalityBlockCount);
|
|
666
|
-
args.common.logger.debug({
|
|
667
|
-
service: "realtime",
|
|
668
|
-
msg: `Finalized ${hexToNumber(pendingFinalizedBlock.number) - hexToNumber(finalizedBlock.number) + 1} '${args.chain.name}' blocks [${hexToNumber(finalizedBlock.number) + 1}, ${hexToNumber(pendingFinalizedBlock.number)}]`,
|
|
669
|
-
});
|
|
670
|
-
const finalizedBlocks = unfinalizedBlocks.filter((lb) => hexToNumber(lb.number) <= hexToNumber(pendingFinalizedBlock.number));
|
|
671
|
-
unfinalizedBlocks = unfinalizedBlocks.filter((lb) => hexToNumber(lb.number) > hexToNumber(pendingFinalizedBlock.number));
|
|
672
|
-
for (const block of finalizedBlocks) {
|
|
673
|
-
childAddressesPerBlock.delete(hexToNumber(block.number));
|
|
674
|
-
}
|
|
675
|
-
finalizedBlock = pendingFinalizedBlock;
|
|
676
|
-
yield {
|
|
677
|
-
type: "finalize",
|
|
678
|
-
block: pendingFinalizedBlock,
|
|
679
|
-
};
|
|
584
|
+
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
680
585
|
}
|
|
681
|
-
|
|
682
|
-
reconcileBlockErrorCount = 0;
|
|
586
|
+
return;
|
|
683
587
|
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
588
|
+
// Check if a reorg occurred by validating the chain of block hashes.
|
|
589
|
+
if (block.parentHash !== latestBlock.hash) {
|
|
590
|
+
const reorgEvent = await reconcileReorg(block);
|
|
591
|
+
blockCallback?.(false);
|
|
592
|
+
yield reorgEvent;
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
// New block is exactly one block ahead of the local chain.
|
|
596
|
+
// Attempt to ingest it.
|
|
597
|
+
const blockWithFilteredEventData = filterBlockEventData(blockWithEventData);
|
|
598
|
+
if (blockWithFilteredEventData.logs.length > 0 ||
|
|
599
|
+
blockWithFilteredEventData.traces.length > 0 ||
|
|
600
|
+
blockWithFilteredEventData.transactions.length > 0) {
|
|
601
|
+
const _text = [];
|
|
602
|
+
if (blockWithFilteredEventData.logs.length === 1) {
|
|
603
|
+
_text.push("1 log");
|
|
688
604
|
}
|
|
689
|
-
|
|
605
|
+
else if (blockWithFilteredEventData.logs.length > 1) {
|
|
606
|
+
_text.push(`${blockWithFilteredEventData.logs.length} logs`);
|
|
607
|
+
}
|
|
608
|
+
if (blockWithFilteredEventData.traces.length === 1) {
|
|
609
|
+
_text.push("1 trace");
|
|
610
|
+
}
|
|
611
|
+
else if (blockWithFilteredEventData.traces.length > 1) {
|
|
612
|
+
_text.push(`${blockWithFilteredEventData.traces.length} traces`);
|
|
613
|
+
}
|
|
614
|
+
if (blockWithFilteredEventData.transactions.length === 1) {
|
|
615
|
+
_text.push("1 transaction");
|
|
616
|
+
}
|
|
617
|
+
else if (blockWithFilteredEventData.transactions.length > 1) {
|
|
618
|
+
_text.push(`${blockWithFilteredEventData.transactions.length} transactions`);
|
|
619
|
+
}
|
|
620
|
+
const text = _text.filter((t) => t !== undefined).join(" and ");
|
|
621
|
+
args.common.logger.info({
|
|
690
622
|
service: "realtime",
|
|
691
|
-
msg: `
|
|
692
|
-
error,
|
|
623
|
+
msg: `Synced ${text} from '${args.chain.name}' block ${hexToNumber(block.number)}`,
|
|
693
624
|
});
|
|
694
|
-
|
|
695
|
-
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
args.common.logger.info({
|
|
696
628
|
service: "realtime",
|
|
697
|
-
msg: `
|
|
629
|
+
msg: `Synced block ${hexToNumber(block.number)} from '${args.chain.name}' `,
|
|
698
630
|
});
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
631
|
+
}
|
|
632
|
+
unfinalizedBlocks.push({
|
|
633
|
+
hash: block.hash,
|
|
634
|
+
parentHash: block.parentHash,
|
|
635
|
+
number: block.number,
|
|
636
|
+
timestamp: block.timestamp,
|
|
637
|
+
});
|
|
638
|
+
// Make sure `transactions` can be garbage collected
|
|
639
|
+
blockWithEventData.block.transactions =
|
|
640
|
+
blockWithFilteredEventData.block.transactions;
|
|
641
|
+
yield {
|
|
642
|
+
type: "block",
|
|
643
|
+
hasMatchedFilter: blockWithFilteredEventData.matchedFilters.size > 0,
|
|
644
|
+
block: blockWithFilteredEventData.block,
|
|
645
|
+
logs: blockWithFilteredEventData.logs,
|
|
646
|
+
transactions: blockWithFilteredEventData.transactions,
|
|
647
|
+
transactionReceipts: blockWithFilteredEventData.transactionReceipts,
|
|
648
|
+
traces: blockWithFilteredEventData.traces,
|
|
649
|
+
childAddresses: blockWithFilteredEventData.childAddresses,
|
|
650
|
+
blockCallback,
|
|
651
|
+
};
|
|
652
|
+
// Determine if a new range has become finalized by evaluating if the
|
|
653
|
+
// latest block number is 2 * finalityBlockCount >= finalized block number.
|
|
654
|
+
// Essentially, there is a range the width of finalityBlockCount that is entirely
|
|
655
|
+
// finalized.
|
|
656
|
+
const blockMovesFinality = hexToNumber(block.number) >=
|
|
657
|
+
hexToNumber(finalizedBlock.number) + 2 * args.chain.finalityBlockCount;
|
|
658
|
+
if (blockMovesFinality) {
|
|
659
|
+
const pendingFinalizedBlock = unfinalizedBlocks.find((lb) => hexToNumber(lb.number) ===
|
|
660
|
+
hexToNumber(block.number) - args.chain.finalityBlockCount);
|
|
661
|
+
args.common.logger.debug({
|
|
662
|
+
service: "realtime",
|
|
663
|
+
msg: `Finalized ${hexToNumber(pendingFinalizedBlock.number) - hexToNumber(finalizedBlock.number) + 1} '${args.chain.name}' blocks [${hexToNumber(finalizedBlock.number) + 1}, ${hexToNumber(pendingFinalizedBlock.number)}]`,
|
|
664
|
+
});
|
|
665
|
+
const finalizedBlocks = unfinalizedBlocks.filter((lb) => hexToNumber(lb.number) <= hexToNumber(pendingFinalizedBlock.number));
|
|
666
|
+
unfinalizedBlocks = unfinalizedBlocks.filter((lb) => hexToNumber(lb.number) > hexToNumber(pendingFinalizedBlock.number));
|
|
667
|
+
for (const block of finalizedBlocks) {
|
|
668
|
+
childAddressesPerBlock.delete(hexToNumber(block.number));
|
|
710
669
|
}
|
|
670
|
+
finalizedBlock = pendingFinalizedBlock;
|
|
671
|
+
yield {
|
|
672
|
+
type: "finalize",
|
|
673
|
+
block: pendingFinalizedBlock,
|
|
674
|
+
};
|
|
711
675
|
}
|
|
712
676
|
};
|
|
713
677
|
const onError = (error) => {
|
|
@@ -716,13 +680,14 @@ export const createRealtimeSync = (args) => {
|
|
|
716
680
|
}
|
|
717
681
|
args.common.logger.warn({
|
|
718
682
|
service: "realtime",
|
|
719
|
-
msg: `Failed to fetch
|
|
683
|
+
msg: `Failed to fetch and reconcile '${args.chain.name}' block`,
|
|
720
684
|
error,
|
|
721
685
|
});
|
|
722
686
|
fetchAndReconcileLatestBlockErrorCount += 1;
|
|
723
|
-
//
|
|
724
|
-
if (fetchAndReconcileLatestBlockErrorCount
|
|
725
|
-
|
|
687
|
+
// Number of retries is max(10, `MAX_LATEST_BLOCK_ATTEMPT_MS` / `args.chain.pollingInterval`)
|
|
688
|
+
if (fetchAndReconcileLatestBlockErrorCount >= 10 &&
|
|
689
|
+
fetchAndReconcileLatestBlockErrorCount * args.chain.pollingInterval >
|
|
690
|
+
MAX_LATEST_BLOCK_ATTEMPT_MS) {
|
|
726
691
|
args.common.logger.error({
|
|
727
692
|
service: "realtime",
|
|
728
693
|
msg: `Fatal error: Unable to fetch latest '${args.chain.name}' block after ${ERROR_TIMEOUT.length} attempts.`,
|
|
@@ -750,11 +715,15 @@ export const createRealtimeSync = (args) => {
|
|
|
750
715
|
return;
|
|
751
716
|
}
|
|
752
717
|
const blockWithEventData = await fetchBlockEventData(block);
|
|
753
|
-
fetchAndReconcileLatestBlockErrorCount = 0;
|
|
754
718
|
// Note: `reconcileBlock` must be called serially.
|
|
755
719
|
await realtimeSyncLock.lock();
|
|
756
|
-
|
|
757
|
-
|
|
720
|
+
try {
|
|
721
|
+
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
722
|
+
}
|
|
723
|
+
finally {
|
|
724
|
+
realtimeSyncLock.unlock();
|
|
725
|
+
}
|
|
726
|
+
fetchAndReconcileLatestBlockErrorCount = 0;
|
|
758
727
|
}
|
|
759
728
|
catch (_error) {
|
|
760
729
|
blockCallback?.(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync-realtime/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sync-realtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync-realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAEV,KAAK,EACL,OAAO,EACP,SAAS,EAET,UAAU,EAEV,MAAM,EACN,SAAS,EACT,eAAe,EACf,OAAO,EACP,SAAS,EACT,eAAe,EACf,sBAAsB,EAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAY1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sync-realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAEV,KAAK,EACL,OAAO,EACP,SAAS,EAET,UAAU,EAEV,MAAM,EACN,SAAS,EACT,eAAe,EACf,OAAO,EACP,SAAS,EACT,eAAe,EACf,sBAAsB,EAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAY1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAevD,OAAO,EAAE,KAAK,OAAO,EAAoC,MAAM,MAAM,CAAC;AAGtE,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,IAAI,CACF,KAAK,EAAE,SAAS,GAAG,eAAe,EAClC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAC5C,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC5B,0DAA0D;IAC1D,iBAAiB,EAAE,UAAU,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,SAAS,GAAG,eAAe,CAAC;IACnC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;IAC9C,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,CAAC;IACC,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C,GAAG,kBAAkB,CAAC,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAEtE,KAAK,4BAA4B,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,CAAC;AASF,eAAO,MAAM,kBAAkB,SACvB,4BAA4B,KACjC,YAk7BF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ponder",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.5",
|
|
4
4
|
"description": "An open-source framework for crypto application backends",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"rimraf": "^5.0.5",
|
|
100
100
|
"tsx": "^4.19.2",
|
|
101
101
|
"vitest": "^1.0.2",
|
|
102
|
-
"@ponder/client": "0.13.
|
|
102
|
+
"@ponder/client": "0.13.5"
|
|
103
103
|
},
|
|
104
104
|
"engines": {
|
|
105
105
|
"node": ">=18.14"
|
|
@@ -46,7 +46,6 @@ import {
|
|
|
46
46
|
validateTracesAndBlock,
|
|
47
47
|
validateTransactionsAndBlock,
|
|
48
48
|
} from "@/utils/rpc.js";
|
|
49
|
-
import { wait } from "@/utils/wait.js";
|
|
50
49
|
import { type Address, type Hash, hexToNumber, zeroHash } from "viem";
|
|
51
50
|
import { isFilterInBloom, isInBloom, zeroLogsBloom } from "./bloom.js";
|
|
52
51
|
|
|
@@ -92,7 +91,7 @@ type CreateRealtimeSyncParameters = {
|
|
|
92
91
|
childAddresses: Map<FactoryId, Map<Address, number>>;
|
|
93
92
|
};
|
|
94
93
|
|
|
95
|
-
const MAX_LATEST_BLOCK_ATTEMPT_MS =
|
|
94
|
+
const MAX_LATEST_BLOCK_ATTEMPT_MS = 10 * 60 * 1000; // 10 minutes
|
|
96
95
|
|
|
97
96
|
const ERROR_TIMEOUT = [
|
|
98
97
|
1, 2, 5, 10, 30, 60, 60, 60, 60, 60, 60, 60, 60, 60,
|
|
@@ -118,7 +117,6 @@ export const createRealtimeSync = (
|
|
|
118
117
|
*/
|
|
119
118
|
let unfinalizedBlocks: LightBlock[] = [];
|
|
120
119
|
let fetchAndReconcileLatestBlockErrorCount = 0;
|
|
121
|
-
let reconcileBlockErrorCount = 0;
|
|
122
120
|
|
|
123
121
|
const factories: Factory[] = [];
|
|
124
122
|
const logFilters: LogFilter[] = [];
|
|
@@ -777,16 +775,8 @@ export const createRealtimeSync = (
|
|
|
777
775
|
* 4) Block is exactly one block ahead of the last processed,
|
|
778
776
|
* handle this new block (happy path).
|
|
779
777
|
*
|
|
780
|
-
* @dev
|
|
781
|
-
*
|
|
782
|
-
*
|
|
783
|
-
* @returns
|
|
784
|
-
* - `rejected` for case 1 and 2.
|
|
785
|
-
* - `reorg` for case 2 with a promise that resolves once the reorg is applied.
|
|
786
|
-
* - `pending` for case 3 with a promise that resolves once the block is
|
|
787
|
-
* settled as `rejected`, `accepted`, or `reorg`.
|
|
788
|
-
* - `accepted` for case 4 with promises for the "block" and "finalize" events
|
|
789
|
-
* that resolve when each event is applied.
|
|
778
|
+
* @dev `blockCallback` is guaranteed to be called exactly once or an error is thrown.
|
|
779
|
+
* @dev It is an invariant that the correct events are generated or an error is thrown.
|
|
790
780
|
*/
|
|
791
781
|
const reconcileBlock = async function* (
|
|
792
782
|
blockWithEventData: BlockWithEventData,
|
|
@@ -806,214 +796,178 @@ export const createRealtimeSync = (
|
|
|
806
796
|
return;
|
|
807
797
|
}
|
|
808
798
|
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
const reorgEvent = await reconcileReorg(block);
|
|
799
|
+
// Quickly check for a reorg by comparing block numbers. If the block
|
|
800
|
+
// number has not increased, a reorg must have occurred.
|
|
801
|
+
if (hexToNumber(latestBlock.number) >= hexToNumber(block.number)) {
|
|
802
|
+
const reorgEvent = await reconcileReorg(block);
|
|
814
803
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
804
|
+
blockCallback?.(false);
|
|
805
|
+
yield reorgEvent;
|
|
806
|
+
return;
|
|
807
|
+
}
|
|
819
808
|
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
809
|
+
// Blocks are missing. They should be fetched and enqueued.
|
|
810
|
+
if (hexToNumber(latestBlock.number) + 1 < hexToNumber(block.number)) {
|
|
811
|
+
// Retrieve missing blocks, but only fetch a certain amount.
|
|
812
|
+
const missingBlockRange = range(
|
|
813
|
+
hexToNumber(latestBlock.number) + 1,
|
|
814
|
+
Math.min(
|
|
815
|
+
hexToNumber(block.number),
|
|
816
|
+
hexToNumber(latestBlock.number) + MAX_QUEUED_BLOCKS,
|
|
817
|
+
),
|
|
818
|
+
);
|
|
830
819
|
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
),
|
|
820
|
+
const pendingBlocks = await Promise.all(
|
|
821
|
+
missingBlockRange.map((blockNumber) =>
|
|
822
|
+
_eth_getBlockByNumber(args.rpc, { blockNumber }).then((block) =>
|
|
823
|
+
fetchBlockEventData(block),
|
|
836
824
|
),
|
|
837
|
-
)
|
|
838
|
-
|
|
839
|
-
args.common.logger.info({
|
|
840
|
-
service: "realtime",
|
|
841
|
-
msg: `Fetched ${missingBlockRange.length} missing '${
|
|
842
|
-
args.chain.name
|
|
843
|
-
}' blocks [${hexToNumber(latestBlock.number) + 1}, ${Math.min(
|
|
844
|
-
hexToNumber(block.number),
|
|
845
|
-
hexToNumber(latestBlock.number) + MAX_QUEUED_BLOCKS,
|
|
846
|
-
)}]`,
|
|
847
|
-
});
|
|
848
|
-
|
|
849
|
-
for (const pendingBlock of pendingBlocks) {
|
|
850
|
-
yield* reconcileBlock(pendingBlock);
|
|
851
|
-
}
|
|
852
|
-
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
853
|
-
return;
|
|
854
|
-
}
|
|
825
|
+
),
|
|
826
|
+
);
|
|
855
827
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
828
|
+
args.common.logger.info({
|
|
829
|
+
service: "realtime",
|
|
830
|
+
msg: `Fetched ${missingBlockRange.length} missing '${
|
|
831
|
+
args.chain.name
|
|
832
|
+
}' blocks [${hexToNumber(latestBlock.number) + 1}, ${Math.min(
|
|
833
|
+
hexToNumber(block.number),
|
|
834
|
+
hexToNumber(latestBlock.number) + MAX_QUEUED_BLOCKS,
|
|
835
|
+
)}]`,
|
|
836
|
+
});
|
|
859
837
|
|
|
860
|
-
|
|
861
|
-
yield
|
|
862
|
-
return;
|
|
838
|
+
for (const pendingBlock of pendingBlocks) {
|
|
839
|
+
yield* reconcileBlock(pendingBlock);
|
|
863
840
|
}
|
|
864
841
|
|
|
865
|
-
// New block is exactly one block ahead of the local chain.
|
|
866
|
-
// Attempt to ingest it.
|
|
867
|
-
|
|
868
|
-
const blockWithFilteredEventData =
|
|
869
|
-
filterBlockEventData(blockWithEventData);
|
|
870
|
-
|
|
871
842
|
if (
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
blockWithFilteredEventData.transactions.length > 0
|
|
843
|
+
hexToNumber(block.number) - hexToNumber(latestBlock.number) >
|
|
844
|
+
MAX_QUEUED_BLOCKS
|
|
875
845
|
) {
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
if (blockWithFilteredEventData.logs.length === 1) {
|
|
879
|
-
_text.push("1 log");
|
|
880
|
-
} else if (blockWithFilteredEventData.logs.length > 1) {
|
|
881
|
-
_text.push(`${blockWithFilteredEventData.logs.length} logs`);
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
if (blockWithFilteredEventData.traces.length === 1) {
|
|
885
|
-
_text.push("1 trace");
|
|
886
|
-
} else if (blockWithFilteredEventData.traces.length > 1) {
|
|
887
|
-
_text.push(`${blockWithFilteredEventData.traces.length} traces`);
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
if (blockWithFilteredEventData.transactions.length === 1) {
|
|
891
|
-
_text.push("1 transaction");
|
|
892
|
-
} else if (blockWithFilteredEventData.transactions.length > 1) {
|
|
893
|
-
_text.push(
|
|
894
|
-
`${blockWithFilteredEventData.transactions.length} transactions`,
|
|
895
|
-
);
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
const text = _text.filter((t) => t !== undefined).join(" and ");
|
|
899
|
-
args.common.logger.info({
|
|
900
|
-
service: "realtime",
|
|
901
|
-
msg: `Synced ${text} from '${args.chain.name}' block ${hexToNumber(block.number)}`,
|
|
902
|
-
});
|
|
846
|
+
blockCallback?.(false);
|
|
903
847
|
} else {
|
|
904
|
-
|
|
905
|
-
service: "realtime",
|
|
906
|
-
msg: `Synced block ${hexToNumber(block.number)} from '${args.chain.name}' `,
|
|
907
|
-
});
|
|
848
|
+
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
908
849
|
}
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
909
852
|
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
number: block.number,
|
|
914
|
-
timestamp: block.timestamp,
|
|
915
|
-
});
|
|
916
|
-
|
|
917
|
-
// Make sure `transactions` can be garbage collected
|
|
918
|
-
blockWithEventData.block.transactions =
|
|
919
|
-
blockWithFilteredEventData.block.transactions;
|
|
920
|
-
|
|
921
|
-
yield {
|
|
922
|
-
type: "block",
|
|
923
|
-
hasMatchedFilter: blockWithFilteredEventData.matchedFilters.size > 0,
|
|
924
|
-
block: blockWithFilteredEventData.block,
|
|
925
|
-
logs: blockWithFilteredEventData.logs,
|
|
926
|
-
transactions: blockWithFilteredEventData.transactions,
|
|
927
|
-
transactionReceipts: blockWithFilteredEventData.transactionReceipts,
|
|
928
|
-
traces: blockWithFilteredEventData.traces,
|
|
929
|
-
childAddresses: blockWithFilteredEventData.childAddresses,
|
|
930
|
-
blockCallback,
|
|
931
|
-
};
|
|
932
|
-
|
|
933
|
-
// Determine if a new range has become finalized by evaluating if the
|
|
934
|
-
// latest block number is 2 * finalityBlockCount >= finalized block number.
|
|
935
|
-
// Essentially, there is a range the width of finalityBlockCount that is entirely
|
|
936
|
-
// finalized.
|
|
937
|
-
|
|
938
|
-
const blockMovesFinality =
|
|
939
|
-
hexToNumber(block.number) >=
|
|
940
|
-
hexToNumber(finalizedBlock.number) + 2 * args.chain.finalityBlockCount;
|
|
941
|
-
if (blockMovesFinality) {
|
|
942
|
-
const pendingFinalizedBlock = unfinalizedBlocks.find(
|
|
943
|
-
(lb) =>
|
|
944
|
-
hexToNumber(lb.number) ===
|
|
945
|
-
hexToNumber(block.number) - args.chain.finalityBlockCount,
|
|
946
|
-
)!;
|
|
853
|
+
// Check if a reorg occurred by validating the chain of block hashes.
|
|
854
|
+
if (block.parentHash !== latestBlock.hash) {
|
|
855
|
+
const reorgEvent = await reconcileReorg(block);
|
|
947
856
|
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
}' blocks [${hexToNumber(finalizedBlock.number) + 1}, ${hexToNumber(pendingFinalizedBlock.number)}]`,
|
|
953
|
-
});
|
|
857
|
+
blockCallback?.(false);
|
|
858
|
+
yield reorgEvent;
|
|
859
|
+
return;
|
|
860
|
+
}
|
|
954
861
|
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
hexToNumber(lb.number) <= hexToNumber(pendingFinalizedBlock.number),
|
|
958
|
-
);
|
|
862
|
+
// New block is exactly one block ahead of the local chain.
|
|
863
|
+
// Attempt to ingest it.
|
|
959
864
|
|
|
960
|
-
|
|
961
|
-
(lb) =>
|
|
962
|
-
hexToNumber(lb.number) > hexToNumber(pendingFinalizedBlock.number),
|
|
963
|
-
);
|
|
865
|
+
const blockWithFilteredEventData = filterBlockEventData(blockWithEventData);
|
|
964
866
|
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
867
|
+
if (
|
|
868
|
+
blockWithFilteredEventData.logs.length > 0 ||
|
|
869
|
+
blockWithFilteredEventData.traces.length > 0 ||
|
|
870
|
+
blockWithFilteredEventData.transactions.length > 0
|
|
871
|
+
) {
|
|
872
|
+
const _text: string[] = [];
|
|
970
873
|
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
};
|
|
874
|
+
if (blockWithFilteredEventData.logs.length === 1) {
|
|
875
|
+
_text.push("1 log");
|
|
876
|
+
} else if (blockWithFilteredEventData.logs.length > 1) {
|
|
877
|
+
_text.push(`${blockWithFilteredEventData.logs.length} logs`);
|
|
975
878
|
}
|
|
976
879
|
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
880
|
+
if (blockWithFilteredEventData.traces.length === 1) {
|
|
881
|
+
_text.push("1 trace");
|
|
882
|
+
} else if (blockWithFilteredEventData.traces.length > 1) {
|
|
883
|
+
_text.push(`${blockWithFilteredEventData.traces.length} traces`);
|
|
884
|
+
}
|
|
981
885
|
|
|
982
|
-
if (
|
|
983
|
-
|
|
886
|
+
if (blockWithFilteredEventData.transactions.length === 1) {
|
|
887
|
+
_text.push("1 transaction");
|
|
888
|
+
} else if (blockWithFilteredEventData.transactions.length > 1) {
|
|
889
|
+
_text.push(
|
|
890
|
+
`${blockWithFilteredEventData.transactions.length} transactions`,
|
|
891
|
+
);
|
|
984
892
|
}
|
|
985
893
|
|
|
986
|
-
|
|
894
|
+
const text = _text.filter((t) => t !== undefined).join(" and ");
|
|
895
|
+
args.common.logger.info({
|
|
987
896
|
service: "realtime",
|
|
988
|
-
msg: `
|
|
989
|
-
|
|
897
|
+
msg: `Synced ${text} from '${args.chain.name}' block ${hexToNumber(block.number)}`,
|
|
898
|
+
});
|
|
899
|
+
} else {
|
|
900
|
+
args.common.logger.info({
|
|
901
|
+
service: "realtime",
|
|
902
|
+
msg: `Synced block ${hexToNumber(block.number)} from '${args.chain.name}' `,
|
|
990
903
|
});
|
|
904
|
+
}
|
|
991
905
|
|
|
992
|
-
|
|
906
|
+
unfinalizedBlocks.push({
|
|
907
|
+
hash: block.hash,
|
|
908
|
+
parentHash: block.parentHash,
|
|
909
|
+
number: block.number,
|
|
910
|
+
timestamp: block.timestamp,
|
|
911
|
+
});
|
|
993
912
|
|
|
994
|
-
|
|
913
|
+
// Make sure `transactions` can be garbage collected
|
|
914
|
+
blockWithEventData.block.transactions =
|
|
915
|
+
blockWithFilteredEventData.block.transactions;
|
|
916
|
+
|
|
917
|
+
yield {
|
|
918
|
+
type: "block",
|
|
919
|
+
hasMatchedFilter: blockWithFilteredEventData.matchedFilters.size > 0,
|
|
920
|
+
block: blockWithFilteredEventData.block,
|
|
921
|
+
logs: blockWithFilteredEventData.logs,
|
|
922
|
+
transactions: blockWithFilteredEventData.transactions,
|
|
923
|
+
transactionReceipts: blockWithFilteredEventData.transactionReceipts,
|
|
924
|
+
traces: blockWithFilteredEventData.traces,
|
|
925
|
+
childAddresses: blockWithFilteredEventData.childAddresses,
|
|
926
|
+
blockCallback,
|
|
927
|
+
};
|
|
928
|
+
|
|
929
|
+
// Determine if a new range has become finalized by evaluating if the
|
|
930
|
+
// latest block number is 2 * finalityBlockCount >= finalized block number.
|
|
931
|
+
// Essentially, there is a range the width of finalityBlockCount that is entirely
|
|
932
|
+
// finalized.
|
|
933
|
+
|
|
934
|
+
const blockMovesFinality =
|
|
935
|
+
hexToNumber(block.number) >=
|
|
936
|
+
hexToNumber(finalizedBlock.number) + 2 * args.chain.finalityBlockCount;
|
|
937
|
+
if (blockMovesFinality) {
|
|
938
|
+
const pendingFinalizedBlock = unfinalizedBlocks.find(
|
|
939
|
+
(lb) =>
|
|
940
|
+
hexToNumber(lb.number) ===
|
|
941
|
+
hexToNumber(block.number) - args.chain.finalityBlockCount,
|
|
942
|
+
)!;
|
|
943
|
+
|
|
944
|
+
args.common.logger.debug({
|
|
995
945
|
service: "realtime",
|
|
996
|
-
msg: `
|
|
997
|
-
|
|
998
|
-
}
|
|
946
|
+
msg: `Finalized ${hexToNumber(pendingFinalizedBlock.number) - hexToNumber(finalizedBlock.number) + 1} '${
|
|
947
|
+
args.chain.name
|
|
948
|
+
}' blocks [${hexToNumber(finalizedBlock.number) + 1}, ${hexToNumber(pendingFinalizedBlock.number)}]`,
|
|
999
949
|
});
|
|
1000
950
|
|
|
1001
|
-
|
|
951
|
+
const finalizedBlocks = unfinalizedBlocks.filter(
|
|
952
|
+
(lb) =>
|
|
953
|
+
hexToNumber(lb.number) <= hexToNumber(pendingFinalizedBlock.number),
|
|
954
|
+
);
|
|
1002
955
|
|
|
1003
|
-
|
|
956
|
+
unfinalizedBlocks = unfinalizedBlocks.filter(
|
|
957
|
+
(lb) =>
|
|
958
|
+
hexToNumber(lb.number) > hexToNumber(pendingFinalizedBlock.number),
|
|
959
|
+
);
|
|
1004
960
|
|
|
1005
|
-
|
|
961
|
+
for (const block of finalizedBlocks) {
|
|
962
|
+
childAddressesPerBlock.delete(hexToNumber(block.number));
|
|
963
|
+
}
|
|
1006
964
|
|
|
1007
|
-
|
|
1008
|
-
if (reconcileBlockErrorCount === ERROR_TIMEOUT.length) {
|
|
1009
|
-
args.common.logger.error({
|
|
1010
|
-
service: "realtime",
|
|
1011
|
-
msg: `Fatal error: Unable to process '${args.chain.name}' block ${hexToNumber(block.number)} after ${ERROR_TIMEOUT.length} attempts.`,
|
|
1012
|
-
error,
|
|
1013
|
-
});
|
|
965
|
+
finalizedBlock = pendingFinalizedBlock;
|
|
1014
966
|
|
|
1015
|
-
|
|
1016
|
-
|
|
967
|
+
yield {
|
|
968
|
+
type: "finalize",
|
|
969
|
+
block: pendingFinalizedBlock,
|
|
970
|
+
};
|
|
1017
971
|
}
|
|
1018
972
|
};
|
|
1019
973
|
|
|
@@ -1024,16 +978,17 @@ export const createRealtimeSync = (
|
|
|
1024
978
|
|
|
1025
979
|
args.common.logger.warn({
|
|
1026
980
|
service: "realtime",
|
|
1027
|
-
msg: `Failed to fetch
|
|
981
|
+
msg: `Failed to fetch and reconcile '${args.chain.name}' block`,
|
|
1028
982
|
error,
|
|
1029
983
|
});
|
|
1030
984
|
|
|
1031
985
|
fetchAndReconcileLatestBlockErrorCount += 1;
|
|
1032
986
|
|
|
1033
|
-
//
|
|
987
|
+
// Number of retries is max(10, `MAX_LATEST_BLOCK_ATTEMPT_MS` / `args.chain.pollingInterval`)
|
|
1034
988
|
if (
|
|
989
|
+
fetchAndReconcileLatestBlockErrorCount >= 10 &&
|
|
1035
990
|
fetchAndReconcileLatestBlockErrorCount * args.chain.pollingInterval >
|
|
1036
|
-
|
|
991
|
+
MAX_LATEST_BLOCK_ATTEMPT_MS
|
|
1037
992
|
) {
|
|
1038
993
|
args.common.logger.error({
|
|
1039
994
|
service: "realtime",
|
|
@@ -1070,15 +1025,17 @@ export const createRealtimeSync = (
|
|
|
1070
1025
|
|
|
1071
1026
|
const blockWithEventData = await fetchBlockEventData(block);
|
|
1072
1027
|
|
|
1073
|
-
fetchAndReconcileLatestBlockErrorCount = 0;
|
|
1074
|
-
|
|
1075
1028
|
// Note: `reconcileBlock` must be called serially.
|
|
1076
1029
|
|
|
1077
1030
|
await realtimeSyncLock.lock();
|
|
1078
1031
|
|
|
1079
|
-
|
|
1032
|
+
try {
|
|
1033
|
+
yield* reconcileBlock(blockWithEventData, blockCallback);
|
|
1034
|
+
} finally {
|
|
1035
|
+
realtimeSyncLock.unlock();
|
|
1036
|
+
}
|
|
1080
1037
|
|
|
1081
|
-
|
|
1038
|
+
fetchAndReconcileLatestBlockErrorCount = 0;
|
|
1082
1039
|
} catch (_error) {
|
|
1083
1040
|
blockCallback?.(false);
|
|
1084
1041
|
onError(_error as Error);
|