@aztec/stdlib 4.0.0-nightly.20260111 → 4.0.0-nightly.20260113
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/dest/block/attestation_info.d.ts +5 -5
- package/dest/block/attestation_info.d.ts.map +1 -1
- package/dest/block/attestation_info.js +4 -4
- package/dest/block/l2_block.d.ts +6 -3
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block.js +2 -2
- package/dest/block/l2_block_new.d.ts +1 -2
- package/dest/block/l2_block_new.d.ts.map +1 -1
- package/dest/block/l2_block_new.js +4 -1
- package/dest/block/l2_block_source.d.ts +245 -41
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_source.js +23 -5
- package/dest/block/l2_block_stream/index.d.ts +2 -1
- package/dest/block/l2_block_stream/index.d.ts.map +1 -1
- package/dest/block/l2_block_stream/index.js +1 -0
- package/dest/block/l2_block_stream/interfaces.d.ts +16 -5
- package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.d.ts +4 -2
- package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.js +102 -30
- package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts +24 -16
- package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_tips_memory_store.js +55 -61
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +49 -0
- package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -0
- package/dest/block/l2_block_stream/l2_tips_store_base.js +179 -0
- package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
- package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
- package/dest/block/test/l2_tips_store_test_suite.js +483 -38
- package/dest/block/validate_block_result.d.ts +24 -24
- package/dest/block/validate_block_result.d.ts.map +1 -1
- package/dest/block/validate_block_result.js +13 -13
- package/dest/checkpoint/checkpoint.d.ts +1 -1
- package/dest/checkpoint/checkpoint.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint.js +1 -0
- package/dest/checkpoint/checkpoint_info.d.ts +32 -3
- package/dest/checkpoint/checkpoint_info.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_info.js +34 -1
- package/dest/checkpoint/index.d.ts +2 -1
- package/dest/checkpoint/index.d.ts.map +1 -1
- package/dest/checkpoint/index.js +1 -0
- package/dest/interfaces/api_limit.d.ts +2 -1
- package/dest/interfaces/api_limit.d.ts.map +1 -1
- package/dest/interfaces/api_limit.js +1 -0
- package/dest/interfaces/archiver.d.ts +6 -6
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +6 -4
- package/dest/interfaces/aztec-node-admin.d.ts +12 -6
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node-admin.js +2 -2
- package/dest/interfaces/aztec-node.d.ts +2 -2
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +8 -3
- package/dest/interfaces/configs.d.ts +6 -1
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +2 -1
- package/dest/interfaces/p2p.d.ts +7 -9
- package/dest/interfaces/p2p.d.ts.map +1 -1
- package/dest/interfaces/p2p.js +3 -4
- package/dest/interfaces/proving-job.d.ts +166 -166
- package/dest/interfaces/validator.d.ts +41 -7
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/validator.js +3 -1
- package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +6 -5
- package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
- package/dest/kernel/hints/build_note_hash_read_request_hints.js +5 -6
- package/dest/p2p/attestation_utils.d.ts +3 -3
- package/dest/p2p/attestation_utils.d.ts.map +1 -1
- package/dest/p2p/attestation_utils.js +1 -1
- package/dest/p2p/block_proposal.d.ts +85 -21
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +120 -37
- package/dest/p2p/checkpoint_attestation.d.ts +77 -0
- package/dest/p2p/checkpoint_attestation.d.ts.map +1 -0
- package/dest/p2p/{block_attestation.js → checkpoint_attestation.js} +22 -19
- package/dest/p2p/checkpoint_proposal.d.ts +154 -0
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -0
- package/dest/p2p/checkpoint_proposal.js +217 -0
- package/dest/p2p/consensus_payload.d.ts +4 -2
- package/dest/p2p/consensus_payload.d.ts.map +1 -1
- package/dest/p2p/consensus_payload.js +3 -2
- package/dest/p2p/index.d.ts +4 -2
- package/dest/p2p/index.d.ts.map +1 -1
- package/dest/p2p/index.js +3 -1
- package/dest/p2p/signature_utils.d.ts +5 -3
- package/dest/p2p/signature_utils.d.ts.map +1 -1
- package/dest/p2p/signature_utils.js +3 -1
- package/dest/p2p/signed_txs.d.ts +40 -0
- package/dest/p2p/signed_txs.d.ts.map +1 -0
- package/dest/p2p/signed_txs.js +70 -0
- package/dest/p2p/topic_type.d.ts +3 -2
- package/dest/p2p/topic_type.d.ts.map +1 -1
- package/dest/p2p/topic_type.js +8 -2
- package/dest/rollup/checkpoint_header.d.ts +5 -1
- package/dest/rollup/checkpoint_header.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.js +4 -0
- package/dest/tests/factories.d.ts +13 -1
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +50 -1
- package/dest/tests/mocks.d.ts +55 -9
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +84 -35
- package/dest/tx/private_execution_result.d.ts +1 -5
- package/dest/tx/private_execution_result.d.ts.map +1 -1
- package/dest/tx/private_execution_result.js +3 -20
- package/package.json +8 -8
- package/src/block/attestation_info.ts +9 -6
- package/src/block/l2_block.ts +3 -3
- package/src/block/l2_block_new.ts +5 -1
- package/src/block/l2_block_source.ts +66 -16
- package/src/block/l2_block_stream/index.ts +1 -0
- package/src/block/l2_block_stream/interfaces.ts +16 -4
- package/src/block/l2_block_stream/l2_block_stream.ts +121 -38
- package/src/block/l2_block_stream/l2_tips_memory_store.ts +62 -56
- package/src/block/l2_block_stream/l2_tips_store_base.ts +226 -0
- package/src/block/test/l2_tips_store_test_suite.ts +485 -36
- package/src/block/validate_block_result.ts +35 -31
- package/src/checkpoint/checkpoint.ts +1 -0
- package/src/checkpoint/checkpoint_info.ts +45 -2
- package/src/checkpoint/index.ts +1 -0
- package/src/interfaces/api_limit.ts +1 -0
- package/src/interfaces/archiver.ts +14 -6
- package/src/interfaces/aztec-node-admin.ts +5 -2
- package/src/interfaces/aztec-node.ts +30 -3
- package/src/interfaces/configs.ts +5 -0
- package/src/interfaces/p2p.ts +8 -12
- package/src/interfaces/validator.ts +57 -7
- package/src/kernel/hints/build_note_hash_read_request_hints.ts +5 -8
- package/src/p2p/attestation_utils.ts +3 -3
- package/src/p2p/block_proposal.ts +185 -41
- package/src/p2p/{block_attestation.ts → checkpoint_attestation.ts} +31 -25
- package/src/p2p/checkpoint_proposal.ts +337 -0
- package/src/p2p/consensus_payload.ts +5 -2
- package/src/p2p/index.ts +3 -1
- package/src/p2p/signature_utils.ts +3 -1
- package/src/p2p/signed_txs.ts +83 -0
- package/src/p2p/topic_type.ts +3 -2
- package/src/rollup/checkpoint_header.ts +13 -0
- package/src/tests/factories.ts +42 -1
- package/src/tests/mocks.ts +146 -50
- package/src/tx/private_execution_result.ts +0 -15
- package/dest/p2p/block_attestation.d.ts +0 -77
- package/dest/p2p/block_attestation.d.ts.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { BlockNumberSchema } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { BlockNumberSchema, CheckpointNumberSchema } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { CheckpointHeader } from '../rollup/checkpoint_header.js';
|
|
4
|
+
export const GENESIS_CHECKPOINT_HEADER_HASH = CheckpointHeader.empty().hash();
|
|
3
5
|
/** Creates an L2 block id */ export function makeL2BlockId(number, hash) {
|
|
4
6
|
if (number !== 0 && !hash) {
|
|
5
7
|
throw new Error(`Hash is required for non-genesis blocks (got block number ${number})`);
|
|
@@ -9,18 +11,34 @@ import { z } from 'zod';
|
|
|
9
11
|
hash: hash
|
|
10
12
|
};
|
|
11
13
|
}
|
|
14
|
+
/** Creates an L2 checkpoint id */ export function makeL2CheckpointId(number, hash) {
|
|
15
|
+
return {
|
|
16
|
+
number,
|
|
17
|
+
hash
|
|
18
|
+
};
|
|
19
|
+
}
|
|
12
20
|
const L2BlockIdSchema = z.object({
|
|
13
21
|
number: BlockNumberSchema,
|
|
14
22
|
hash: z.string()
|
|
15
23
|
});
|
|
24
|
+
const L2CheckpointIdSchema = z.object({
|
|
25
|
+
number: CheckpointNumberSchema,
|
|
26
|
+
hash: z.string()
|
|
27
|
+
});
|
|
28
|
+
const L2TipIdSchema = z.object({
|
|
29
|
+
block: L2BlockIdSchema,
|
|
30
|
+
checkpoint: L2CheckpointIdSchema
|
|
31
|
+
});
|
|
16
32
|
export const L2TipsSchema = z.object({
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
33
|
+
proposed: L2BlockIdSchema,
|
|
34
|
+
checkpointed: L2TipIdSchema,
|
|
35
|
+
proven: L2TipIdSchema,
|
|
36
|
+
finalized: L2TipIdSchema
|
|
20
37
|
});
|
|
21
38
|
export var L2BlockSourceEvents = /*#__PURE__*/ function(L2BlockSourceEvents) {
|
|
22
39
|
L2BlockSourceEvents["L2PruneDetected"] = "l2PruneDetected";
|
|
23
40
|
L2BlockSourceEvents["L2BlockProven"] = "l2BlockProven";
|
|
24
|
-
L2BlockSourceEvents["
|
|
41
|
+
L2BlockSourceEvents["L2BlocksCheckpointed"] = "l2BlocksCheckpointed";
|
|
42
|
+
L2BlockSourceEvents["InvalidAttestationsCheckpointDetected"] = "invalidCheckpointDetected";
|
|
25
43
|
return L2BlockSourceEvents;
|
|
26
44
|
}({});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './interfaces.js';
|
|
2
2
|
export * from './l2_block_stream.js';
|
|
3
3
|
export * from './l2_tips_memory_store.js';
|
|
4
|
-
|
|
4
|
+
export * from './l2_tips_store_base.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay9sMl9ibG9ja19zdHJlYW0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
|
|
2
|
+
import type { L2BlockNew } from '../l2_block_new.js';
|
|
3
|
+
import type { CheckpointId, L2BlockId, L2BlockPruneReason, L2Tips } from '../l2_block_source.js';
|
|
3
4
|
/** Interface to the local view of the chain. Implemented by world-state and l2-tips-store. */
|
|
4
5
|
export interface L2BlockStreamLocalDataProvider {
|
|
5
6
|
getL2BlockHash(number: number): Promise<string | undefined>;
|
|
@@ -11,10 +12,20 @@ export interface L2BlockStreamEventHandler {
|
|
|
11
12
|
}
|
|
12
13
|
export type L2BlockStreamEvent = /** Emits blocks added to the chain. */ {
|
|
13
14
|
type: 'blocks-added';
|
|
14
|
-
blocks:
|
|
15
|
-
} | /**
|
|
15
|
+
blocks: L2BlockNew[];
|
|
16
|
+
} | /** Emits checkpoints published to L1. */ {
|
|
17
|
+
type: 'chain-checkpointed';
|
|
18
|
+
checkpoint: PublishedCheckpoint;
|
|
19
|
+
block: L2BlockId;
|
|
20
|
+
} | /**
|
|
21
|
+
* Reports last correct block (new tip of the proposed chain). Note that this is not necessarily the anchor block
|
|
22
|
+
* that will be used in the transaction - if the chain has already moved past the reorg, we'll also see blocks-added
|
|
23
|
+
* events that will push the anchor block forward.
|
|
24
|
+
*/ {
|
|
16
25
|
type: 'chain-pruned';
|
|
26
|
+
reason: L2BlockPruneReason;
|
|
17
27
|
block: L2BlockId;
|
|
28
|
+
checkpoint: CheckpointId;
|
|
18
29
|
} | /** Reports new proven block. */ {
|
|
19
30
|
type: 'chain-proven';
|
|
20
31
|
block: L2BlockId;
|
|
@@ -23,4 +34,4 @@ export type L2BlockStreamEvent = /** Emits blocks added to the chain. */ {
|
|
|
23
34
|
block: L2BlockId;
|
|
24
35
|
};
|
|
25
36
|
export type L2TipsStore = L2BlockStreamEventHandler & L2BlockStreamLocalDataProvider;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jsb2NrL2wyX2Jsb2NrX3N0cmVhbS9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRyw4RkFBOEY7QUFDOUYsTUFBTSxXQUFXLDhCQUE4QjtJQUM3QyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzVELFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDOUI7QUFFRCxnREFBZ0Q7QUFDaEQsTUFBTSxXQUFXLHlCQUF5QjtJQUN4QyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2xFO0FBRUQsTUFBTSxNQUFNLGtCQUFrQixHQUMxQix1Q0FBdUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsY0FBYyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztDQUN0QixHQUNELHlDQUF5QyxDQUFDO0lBQ3hDLElBQUksRUFBRSxvQkFBb0IsQ0FBQztJQUMzQixVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDaEMsS0FBSyxFQUFFLFNBQVMsQ0FBQztDQUNsQixHQUNEOzs7O0dBSUMsQ0FBQztJQUNBLElBQUksRUFBRSxjQUFjLENBQUM7SUFDckIsTUFBTSxFQUFFLGtCQUFrQixDQUFDO0lBQzNCLEtBQUssRUFBRSxTQUFTLENBQUM7SUFDakIsVUFBVSxFQUFFLFlBQVksQ0FBQztDQUMxQixHQUNELGdDQUFnQyxDQUFDO0lBQy9CLElBQUksRUFBRSxjQUFjLENBQUM7SUFDckIsS0FBSyxFQUFFLFNBQVMsQ0FBQztDQUNsQixHQUNELGdFQUFnRSxDQUFDO0lBQy9ELElBQUksRUFBRSxpQkFBaUIsQ0FBQztJQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFDO0NBQ2xCLENBQUM7QUFFTixNQUFNLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixHQUFHLDhCQUE4QixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEjG,8FAA8F;AAC9F,MAAM,WAAW,8BAA8B;IAC7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,gDAAgD;AAChD,MAAM,WAAW,yBAAyB;IACxC,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,MAAM,MAAM,kBAAkB,GAC1B,uCAAuC,CAAC;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,GACD,yCAAyC,CAAC;IACxC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,mBAAmB,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC;CAClB,GACD;;;;GAIC,CAAC;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,YAAY,CAAC;CAC1B,GACD,gCAAgC,CAAC;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;CAClB,GACD,gEAAgE,CAAC;IAC/D,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,8BAA8B,CAAC"}
|
|
@@ -10,13 +10,15 @@ export declare class L2BlockStream {
|
|
|
10
10
|
private readonly runningPromise;
|
|
11
11
|
private isSyncing;
|
|
12
12
|
private hasStarted;
|
|
13
|
-
constructor(l2BlockSource: Pick<L2BlockSource, '
|
|
13
|
+
constructor(l2BlockSource: Pick<L2BlockSource, 'getL2BlocksNew' | 'getBlockHeader' | 'getL2Tips' | 'getPublishedCheckpoints' | 'getCheckpointedBlocks'>, localData: L2BlockStreamLocalDataProvider, handler: L2BlockStreamEventHandler, log?: import("@aztec/foundation/log").Logger, opts?: {
|
|
14
14
|
proven?: boolean;
|
|
15
15
|
pollIntervalMS?: number;
|
|
16
16
|
batchSize?: number;
|
|
17
17
|
startingBlock?: number;
|
|
18
18
|
/** Instead of downloading all blocks, only fetch the smallest subset that results in reliable reorg detection. */
|
|
19
19
|
skipFinalized?: boolean;
|
|
20
|
+
/** When true, checkpoint events will not be emitted. Blocks are still fetched via checkpoints but only blocks-added events are emitted. */
|
|
21
|
+
ignoreCheckpoints?: boolean;
|
|
20
22
|
});
|
|
21
23
|
start(): void;
|
|
22
24
|
stop(): Promise<void>;
|
|
@@ -32,4 +34,4 @@ export declare class L2BlockStream {
|
|
|
32
34
|
private getBlockHashFromSource;
|
|
33
35
|
private emitEvent;
|
|
34
36
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfYmxvY2tfc3RyZWFtLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX2Jsb2NrX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQTJDLEtBQUssYUFBYSxFQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBQ25ILE9BQU8sS0FBSyxFQUFzQix5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJILHVIQUF1SDtBQUN2SCxxQkFBYSxhQUFhO0lBTXRCLE9BQU8sQ0FBQyxhQUFhO0lBSXJCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBQ3BCLE9BQU8sQ0FBQyxJQUFJO0lBWmQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQVM7SUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBUztJQUUzQixZQUNVLGFBQWEsRUFBRSxJQUFJLENBQ3pCLGFBQWEsRUFDYixnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxXQUFXLEdBQUcseUJBQXlCLEdBQUcsdUJBQXVCLENBQ3hHLEVBQ08sU0FBUyxFQUFFLDhCQUE4QixFQUN6QyxPQUFPLEVBQUUseUJBQXlCLEVBQ3pCLEdBQUcseUNBQXFDLEVBQ2pELElBQUksR0FBRTtRQUNaLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUNqQixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ25CLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixrSEFBa0g7UUFDbEgsYUFBYSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ3hCLDJJQUEySTtRQUMzSSxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztLQUN4QixFQU9QO0lBRU0sS0FBSyxTQUdYO0lBRVksSUFBSSxrQkFFaEI7SUFFTSxTQUFTLFlBRWY7SUFFRDs7OztPQUlHO0lBQ1UsSUFBSSxrQkFJaEI7SUFFRCxVQUFnQixJQUFJLGtCQXNLbkI7WUFPYSxxQkFBcUI7SUF3Qm5DLE9BQU8sQ0FBQyxzQkFBc0I7WUFPaEIsU0FBUztDQVN4QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l2_block_stream.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_block_stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"l2_block_stream.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_block_stream.ts"],"names":[],"mappings":"AAMA,OAAO,EAA2C,KAAK,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AACnH,OAAO,KAAK,EAAsB,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAErH,uHAAuH;AACvH,qBAAa,aAAa;IAMtB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,IAAI;IAZd,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAE3B,YACU,aAAa,EAAE,IAAI,CACzB,aAAa,EACb,gBAAgB,GAAG,gBAAgB,GAAG,WAAW,GAAG,yBAAyB,GAAG,uBAAuB,CACxG,EACO,SAAS,EAAE,8BAA8B,EACzC,OAAO,EAAE,yBAAyB,EACzB,GAAG,yCAAqC,EACjD,IAAI,GAAE;QACZ,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kHAAkH;QAClH,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,2IAA2I;QAC3I,iBAAiB,CAAC,EAAE,OAAO,CAAC;KACxB,EAOP;IAEM,KAAK,SAGX;IAEY,IAAI,kBAEhB;IAEM,SAAS,YAEf;IAED;;;;OAIG;IACU,IAAI,kBAIhB;IAED,UAAgB,IAAI,kBAsKnB;YAOa,qBAAqB;IAwBnC,OAAO,CAAC,sBAAsB;YAOhB,SAAS;CASxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import { AbortError } from '@aztec/foundation/error';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
@@ -50,39 +50,39 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
50
50
|
const sourceTips = await this.l2BlockSource.getL2Tips();
|
|
51
51
|
const localTips = await this.localData.getL2Tips();
|
|
52
52
|
this.log.trace(`Running L2 block stream`, {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
sourceFinalized: sourceTips.finalized.number,
|
|
56
|
-
localFinalized: localTips.finalized.number,
|
|
57
|
-
sourceProven: sourceTips.proven.number,
|
|
58
|
-
localProven: localTips.proven.number,
|
|
59
|
-
sourceLatestHash: sourceTips.latest.hash,
|
|
60
|
-
localLatestHash: localTips.latest.hash,
|
|
61
|
-
sourceProvenHash: sourceTips.proven.hash,
|
|
62
|
-
localProvenHash: localTips.proven.hash,
|
|
63
|
-
sourceFinalizedHash: sourceTips.finalized.hash,
|
|
64
|
-
localFinalizedHash: localTips.finalized.hash
|
|
53
|
+
sourceTips,
|
|
54
|
+
localTips
|
|
65
55
|
});
|
|
66
56
|
// Check if there was a reorg and emit a chain-pruned event if so.
|
|
67
|
-
let latestBlockNumber = localTips.
|
|
57
|
+
let latestBlockNumber = localTips.proposed.number;
|
|
68
58
|
const sourceCache = new BlockHashCache([
|
|
69
|
-
sourceTips.
|
|
59
|
+
sourceTips.proposed
|
|
70
60
|
]);
|
|
71
61
|
while(!await this.areBlockHashesEqualAt(latestBlockNumber, {
|
|
72
62
|
sourceCache
|
|
73
63
|
})){
|
|
74
64
|
latestBlockNumber--;
|
|
75
65
|
}
|
|
76
|
-
if (latestBlockNumber < localTips.
|
|
77
|
-
latestBlockNumber = BlockNumber(Math.min(latestBlockNumber, sourceTips.
|
|
66
|
+
if (latestBlockNumber < localTips.proposed.number) {
|
|
67
|
+
latestBlockNumber = BlockNumber(Math.min(latestBlockNumber, sourceTips.proposed.number)); // see #13471
|
|
78
68
|
const hash = sourceCache.get(latestBlockNumber) ?? await this.getBlockHashFromSource(latestBlockNumber);
|
|
79
69
|
if (latestBlockNumber !== 0 && !hash) {
|
|
80
70
|
throw new Error(`Block hash not found in block source for block number ${latestBlockNumber}`);
|
|
81
71
|
}
|
|
82
|
-
this.log.verbose(`Reorg detected. Pruning blocks from ${latestBlockNumber + 1} to ${localTips.
|
|
72
|
+
this.log.verbose(`Reorg detected. Pruning blocks from ${latestBlockNumber + 1} to ${localTips.proposed.number}.`);
|
|
73
|
+
// This check is not 100% accurate
|
|
74
|
+
// If the local tips are sufficiently behind the source tips, such that we are missing at least one checkpoint
|
|
75
|
+
// that has now been re-orged due to a proof failure then this will indicate a failure to checkpoint rather than a failure to prove
|
|
76
|
+
// TODO: (mbps/PhilWindle): Improve re-org detection accuracy when we come to do re-orgs
|
|
77
|
+
let reason = 'unproven';
|
|
78
|
+
if (latestBlockNumber === localTips.checkpointed.block.number && !this.opts.ignoreCheckpoints) {
|
|
79
|
+
reason = 'uncheckpointed';
|
|
80
|
+
}
|
|
83
81
|
await this.emitEvent({
|
|
84
82
|
type: 'chain-pruned',
|
|
85
|
-
block: makeL2BlockId(latestBlockNumber, hash)
|
|
83
|
+
block: makeL2BlockId(latestBlockNumber, hash),
|
|
84
|
+
reason,
|
|
85
|
+
checkpoint: sourceTips.checkpointed.checkpoint
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
// If we are just starting, use the starting block number from the options.
|
|
@@ -95,19 +95,91 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
95
95
|
this.hasStarted = true;
|
|
96
96
|
}
|
|
97
97
|
let nextBlockNumber = latestBlockNumber + 1;
|
|
98
|
+
let nextCheckpointToEmit = CheckpointNumber(localTips.checkpointed.checkpoint.number + 1);
|
|
98
99
|
if (this.opts.skipFinalized) {
|
|
99
100
|
// When skipping finalized blocks we need to provide reliable reorg detection while fetching as few blocks as
|
|
100
101
|
// possible. Finalized blocks cannot be reorged by definition, so we can skip most of them. We do need the very
|
|
101
102
|
// last finalized block however in order to guarantee that we will eventually find a block in which our local
|
|
102
103
|
// store matches the source.
|
|
103
104
|
// If the last finalized block is behind our local tip, there is nothing to skip.
|
|
104
|
-
nextBlockNumber = Math.max(sourceTips.finalized.number, nextBlockNumber);
|
|
105
|
+
nextBlockNumber = Math.max(sourceTips.finalized.block.number, nextBlockNumber);
|
|
106
|
+
// If the next checkpoint to emit is behind the finalized tip then skip forward
|
|
107
|
+
nextCheckpointToEmit = CheckpointNumber(Math.max(nextCheckpointToEmit, sourceTips.finalized.checkpoint.number));
|
|
108
|
+
}
|
|
109
|
+
// Loop 1: Emit checkpoint events for checkpoints whose blocks are already in local storage.
|
|
110
|
+
// This handles the case where blocks were synced as uncheckpointed and later became checkpointed.
|
|
111
|
+
// The guard `lastBlockInCheckpoint.number > localTips.proposed.number` ensures we don't emit
|
|
112
|
+
// checkpoints for blocks we don't have (e.g., when startingBlock skips earlier blocks).
|
|
113
|
+
// Since only one checkpoint can ever be uncheckpointed, this loop should iterate at most once.
|
|
114
|
+
if (!this.opts.ignoreCheckpoints) {
|
|
115
|
+
let loop1Iterations = 0;
|
|
116
|
+
while(nextCheckpointToEmit <= sourceTips.checkpointed.checkpoint.number){
|
|
117
|
+
const checkpoints = await this.l2BlockSource.getPublishedCheckpoints(nextCheckpointToEmit, 1);
|
|
118
|
+
if (checkpoints.length === 0) {
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
const lastBlockInCheckpoint = checkpoints[0].checkpoint.blocks.at(-1);
|
|
122
|
+
// If this checkpoint has blocks we haven't seen yet, stop - they need to be fetched first
|
|
123
|
+
if (lastBlockInCheckpoint.number > localTips.proposed.number) {
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
loop1Iterations++;
|
|
127
|
+
if (loop1Iterations > 1) {
|
|
128
|
+
this.log.warn(`Emitting multiple checkpoints (${loop1Iterations}) for already-local blocks. ` + `Next checkpoint: ${nextCheckpointToEmit}, source checkpointed: ${sourceTips.checkpointed.checkpoint.number}`);
|
|
129
|
+
}
|
|
130
|
+
const lastBlockHash = await lastBlockInCheckpoint.hash();
|
|
131
|
+
await this.emitEvent({
|
|
132
|
+
type: 'chain-checkpointed',
|
|
133
|
+
checkpoint: checkpoints[0],
|
|
134
|
+
block: makeL2BlockId(lastBlockInCheckpoint.number, lastBlockHash.toString())
|
|
135
|
+
});
|
|
136
|
+
nextCheckpointToEmit = CheckpointNumber(nextCheckpointToEmit + 1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Loop 2: Fetch new checkpointed blocks. For each block, get its checkpoint, emit all blocks
|
|
140
|
+
// from that checkpoint that we need, then emit the checkpoint event.
|
|
141
|
+
// We cache the current checkpoint to avoid redundant fetches when batchSize < checkpoint size.
|
|
142
|
+
let checkpoint;
|
|
143
|
+
while(nextBlockNumber <= sourceTips.checkpointed.block.number){
|
|
144
|
+
const limit = Math.min(this.opts.batchSize ?? 50, sourceTips.checkpointed.block.number - nextBlockNumber + 1);
|
|
145
|
+
// Check if we need to fetch a new checkpoint (nextBlockNumber is beyond the cached one)
|
|
146
|
+
if (!checkpoint || nextBlockNumber > checkpoint.checkpoint.blocks.at(-1).number) {
|
|
147
|
+
const blocks = await this.l2BlockSource.getCheckpointedBlocks(BlockNumber(nextBlockNumber), 1);
|
|
148
|
+
if (blocks.length === 0) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
const checkpoints = await this.l2BlockSource.getPublishedCheckpoints(blocks[0].checkpointNumber, 1);
|
|
152
|
+
if (checkpoints.length === 0) {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
checkpoint = checkpoints[0];
|
|
156
|
+
}
|
|
157
|
+
// Get all blocks from this checkpoint that we need, respecting batchSize
|
|
158
|
+
const blocksForCheckpoint = checkpoint.checkpoint.blocks.filter((b)=>b.number >= nextBlockNumber).slice(0, limit);
|
|
159
|
+
if (blocksForCheckpoint.length === 0) {
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
await this.emitEvent({
|
|
163
|
+
type: 'blocks-added',
|
|
164
|
+
blocks: blocksForCheckpoint
|
|
165
|
+
});
|
|
166
|
+
nextBlockNumber = blocksForCheckpoint.at(-1).number + 1;
|
|
167
|
+
// If we've reached the end of this checkpoint, emit the checkpoint event
|
|
168
|
+
const lastBlockInCheckpoint = checkpoint.checkpoint.blocks.at(-1);
|
|
169
|
+
if (!this.opts.ignoreCheckpoints && nextBlockNumber > lastBlockInCheckpoint.number) {
|
|
170
|
+
const lastBlockHash = await lastBlockInCheckpoint.hash();
|
|
171
|
+
await this.emitEvent({
|
|
172
|
+
type: 'chain-checkpointed',
|
|
173
|
+
checkpoint,
|
|
174
|
+
block: makeL2BlockId(lastBlockInCheckpoint.number, lastBlockHash.toString())
|
|
175
|
+
});
|
|
176
|
+
}
|
|
105
177
|
}
|
|
106
|
-
//
|
|
107
|
-
while(nextBlockNumber <= sourceTips.
|
|
108
|
-
const limit = Math.min(this.opts.batchSize ?? 50, sourceTips.
|
|
178
|
+
// Loop 3: Fetch any remaining uncheckpointed (proposed) blocks.
|
|
179
|
+
while(nextBlockNumber <= sourceTips.proposed.number){
|
|
180
|
+
const limit = Math.min(this.opts.batchSize ?? 50, sourceTips.proposed.number - nextBlockNumber + 1);
|
|
109
181
|
this.log.trace(`Requesting blocks from ${nextBlockNumber} limit ${limit} proven=${this.opts.proven}`);
|
|
110
|
-
const blocks = await this.l2BlockSource.
|
|
182
|
+
const blocks = await this.l2BlockSource.getL2BlocksNew(BlockNumber(nextBlockNumber), limit, this.opts.proven);
|
|
111
183
|
if (blocks.length === 0) {
|
|
112
184
|
break;
|
|
113
185
|
}
|
|
@@ -115,19 +187,19 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
115
187
|
type: 'blocks-added',
|
|
116
188
|
blocks
|
|
117
189
|
});
|
|
118
|
-
nextBlockNumber = blocks.at(-1).
|
|
190
|
+
nextBlockNumber = blocks.at(-1).number + 1;
|
|
119
191
|
}
|
|
120
192
|
// Update the proven and finalized tips.
|
|
121
|
-
if (localTips.proven !== undefined && sourceTips.proven.number !== localTips.proven.number) {
|
|
193
|
+
if (localTips.proven !== undefined && sourceTips.proven.block.number !== localTips.proven.block.number) {
|
|
122
194
|
await this.emitEvent({
|
|
123
195
|
type: 'chain-proven',
|
|
124
|
-
block: sourceTips.proven
|
|
196
|
+
block: sourceTips.proven.block
|
|
125
197
|
});
|
|
126
198
|
}
|
|
127
|
-
if (localTips.finalized !== undefined && sourceTips.finalized.number !== localTips.finalized.number) {
|
|
199
|
+
if (localTips.finalized !== undefined && sourceTips.finalized.block.number !== localTips.finalized.block.number) {
|
|
128
200
|
await this.emitEvent({
|
|
129
201
|
type: 'chain-finalized',
|
|
130
|
-
block: sourceTips.finalized
|
|
202
|
+
block: sourceTips.finalized.block
|
|
131
203
|
});
|
|
132
204
|
}
|
|
133
205
|
} catch (err) {
|
|
@@ -172,7 +244,7 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
172
244
|
return this.l2BlockSource.getBlockHeader(blockNumber).then((h)=>h?.hash()).then((hash)=>hash?.toString());
|
|
173
245
|
}
|
|
174
246
|
async emitEvent(event) {
|
|
175
|
-
this.log.debug(`Emitting ${event.type} (${event.type === 'blocks-added' ? event.blocks.length : event.block.number})`);
|
|
247
|
+
this.log.debug(`Emitting ${event.type} (${event.type === 'blocks-added' ? event.blocks.length : event.type === 'chain-checkpointed' ? event.checkpoint.checkpoint.number : event.block.number})`);
|
|
176
248
|
await this.handler.handleBlockStreamEvent(event);
|
|
177
249
|
if (!this.isRunning() && !this.isSyncing) {
|
|
178
250
|
throw new AbortError();
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
|
|
3
|
+
import type { L2BlockTag } from '../l2_block_source.js';
|
|
4
|
+
import { L2TipsStoreBase } from './l2_tips_store_base.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @dev
|
|
6
|
+
* In-memory implementation of L2 tips store. Useful for testing and lightweight clients.
|
|
7
|
+
* @dev Tests in kv-store/src/stores/l2_tips_memory_store.test.ts
|
|
8
8
|
*/
|
|
9
|
-
export declare class L2TipsMemoryStore
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
protected
|
|
17
|
-
protected
|
|
9
|
+
export declare class L2TipsMemoryStore extends L2TipsStoreBase {
|
|
10
|
+
private readonly tips;
|
|
11
|
+
private readonly blockHashes;
|
|
12
|
+
private readonly blockToCheckpoint;
|
|
13
|
+
private readonly checkpoints;
|
|
14
|
+
protected getTip(tag: L2BlockTag): Promise<BlockNumber | undefined>;
|
|
15
|
+
protected setTip(tag: L2BlockTag, blockNumber: BlockNumber): Promise<void>;
|
|
16
|
+
protected getStoredBlockHash(blockNumber: BlockNumber): Promise<string | undefined>;
|
|
17
|
+
protected setBlockHash(blockNumber: BlockNumber, hash: string): Promise<void>;
|
|
18
|
+
protected deleteBlockHashesBefore(blockNumber: BlockNumber): Promise<void>;
|
|
19
|
+
protected getCheckpointNumberForBlock(blockNumber: BlockNumber): Promise<CheckpointNumber | undefined>;
|
|
20
|
+
protected setCheckpointNumberForBlock(blockNumber: BlockNumber, checkpointNumber: CheckpointNumber): Promise<void>;
|
|
21
|
+
protected deleteBlockToCheckpointBefore(blockNumber: BlockNumber): Promise<void>;
|
|
22
|
+
protected getCheckpoint(checkpointNumber: CheckpointNumber): Promise<PublishedCheckpoint | undefined>;
|
|
23
|
+
protected saveCheckpointData(checkpoint: PublishedCheckpoint): Promise<void>;
|
|
24
|
+
protected deleteCheckpointsBefore(checkpointNumber: CheckpointNumber): Promise<void>;
|
|
25
|
+
protected runInTransaction<T>(fn: () => Promise<T>): Promise<T>;
|
|
18
26
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19tZW1vcnlfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9jay9sMl9ibG9ja19zdHJlYW0vbDJfdGlwc19tZW1vcnlfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhGLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFEOzs7R0FHRztBQUNILHFCQUFhLGlCQUFrQixTQUFRLGVBQWU7SUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQXNDO0lBQzNELE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUE2QjtJQUN6RCxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUF1QztJQUN6RSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBMEM7SUFFdEUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBRWxFO0lBRUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUd6RTtJQUVELFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRWxGO0lBRUQsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUc1RTtJQUVELFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FPekU7SUFFRCxTQUFTLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBRXJHO0lBRUQsU0FBUyxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdqSDtJQUVELFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FPL0U7SUFFRCxTQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsQ0FFcEc7SUFFRCxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHM0U7SUFFRCxTQUFTLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU9uRjtJQUVELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FHOUQ7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l2_tips_memory_store.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_tips_memory_store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"l2_tips_memory_store.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_tips_memory_store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IAEtE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAElE;IAED,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;IAED,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAElF;IAED,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;IAED,SAAS,CAAC,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;IAED,SAAS,CAAC,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAErG;IAED,SAAS,CAAC,2BAA2B,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjH;IAED,SAAS,CAAC,6BAA6B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/E;IAED,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAEpG;IAED,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E;IAED,SAAS,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnF;IAED,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG9D;CACF"}
|
|
@@ -1,72 +1,66 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
|
+
import { L2TipsStoreBase } from './l2_tips_store_base.js';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @dev
|
|
6
|
-
*/ export class L2TipsMemoryStore {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
* In-memory implementation of L2 tips store. Useful for testing and lightweight clients.
|
|
4
|
+
* @dev Tests in kv-store/src/stores/l2_tips_memory_store.test.ts
|
|
5
|
+
*/ export class L2TipsMemoryStore extends L2TipsStoreBase {
|
|
6
|
+
tips = new Map();
|
|
7
|
+
blockHashes = new Map();
|
|
8
|
+
blockToCheckpoint = new Map();
|
|
9
|
+
checkpoints = new Map();
|
|
10
|
+
getTip(tag) {
|
|
11
|
+
return Promise.resolve(this.tips.get(tag));
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
finalized: this.getL2Tip('finalized'),
|
|
16
|
-
proven: this.getL2Tip('proven')
|
|
17
|
-
});
|
|
13
|
+
setTip(tag, blockNumber) {
|
|
14
|
+
this.tips.set(tag, blockNumber);
|
|
15
|
+
return Promise.resolve();
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
getStoredBlockHash(blockNumber) {
|
|
18
|
+
return Promise.resolve(this.blockHashes.get(blockNumber));
|
|
19
|
+
}
|
|
20
|
+
setBlockHash(blockNumber, hash) {
|
|
21
|
+
this.blockHashes.set(blockNumber, hash);
|
|
22
|
+
return Promise.resolve();
|
|
23
|
+
}
|
|
24
|
+
deleteBlockHashesBefore(blockNumber) {
|
|
25
|
+
for (const key of this.blockHashes.keys()){
|
|
26
|
+
if (key < blockNumber) {
|
|
27
|
+
this.blockHashes.delete(key);
|
|
28
|
+
}
|
|
30
29
|
}
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
return Promise.resolve();
|
|
31
|
+
}
|
|
32
|
+
getCheckpointNumberForBlock(blockNumber) {
|
|
33
|
+
return Promise.resolve(this.blockToCheckpoint.get(blockNumber));
|
|
35
34
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
case 'chain-pruned':
|
|
48
|
-
this.saveTag('latest', event.block);
|
|
49
|
-
break;
|
|
50
|
-
case 'chain-proven':
|
|
51
|
-
this.saveTag('proven', event.block);
|
|
52
|
-
break;
|
|
53
|
-
case 'chain-finalized':
|
|
54
|
-
this.saveTag('finalized', event.block);
|
|
55
|
-
for (const key of this.l2BlockHashesStore.keys()){
|
|
56
|
-
if (key < event.block.number) {
|
|
57
|
-
this.l2BlockHashesStore.delete(key);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
break;
|
|
35
|
+
setCheckpointNumberForBlock(blockNumber, checkpointNumber) {
|
|
36
|
+
this.blockToCheckpoint.set(blockNumber, checkpointNumber);
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
deleteBlockToCheckpointBefore(blockNumber) {
|
|
40
|
+
for (const key of this.blockToCheckpoint.keys()){
|
|
41
|
+
if (key < blockNumber) {
|
|
42
|
+
this.blockToCheckpoint.delete(key);
|
|
43
|
+
}
|
|
61
44
|
}
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
}
|
|
47
|
+
getCheckpoint(checkpointNumber) {
|
|
48
|
+
return Promise.resolve(this.checkpoints.get(checkpointNumber));
|
|
49
|
+
}
|
|
50
|
+
saveCheckpointData(checkpoint) {
|
|
51
|
+
this.checkpoints.set(checkpoint.checkpoint.number, checkpoint);
|
|
52
|
+
return Promise.resolve();
|
|
62
53
|
}
|
|
63
|
-
|
|
64
|
-
this.
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
deleteCheckpointsBefore(checkpointNumber) {
|
|
55
|
+
for (const key of this.checkpoints.keys()){
|
|
56
|
+
if (key < checkpointNumber) {
|
|
57
|
+
this.checkpoints.delete(key);
|
|
58
|
+
}
|
|
67
59
|
}
|
|
60
|
+
return Promise.resolve();
|
|
68
61
|
}
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
runInTransaction(fn) {
|
|
63
|
+
// Memory store doesn't need transactions - just execute immediately
|
|
64
|
+
return fn();
|
|
71
65
|
}
|
|
72
66
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
|
|
3
|
+
import type { L2BlockNew } from '../l2_block_new.js';
|
|
4
|
+
import { type L2BlockTag, type L2Tips } from '../l2_block_source.js';
|
|
5
|
+
import type { L2BlockStreamEvent, L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider } from './interfaces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Abstract base class for L2 tips stores. Provides common event handling logic
|
|
8
|
+
* while delegating storage operations to subclasses.
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class L2TipsStoreBase implements L2BlockStreamEventHandler, L2BlockStreamLocalDataProvider {
|
|
11
|
+
/** Gets the block number for a given tag. */
|
|
12
|
+
protected abstract getTip(tag: L2BlockTag): Promise<BlockNumber | undefined>;
|
|
13
|
+
/** Sets the block number for a given tag. */
|
|
14
|
+
protected abstract setTip(tag: L2BlockTag, blockNumber: BlockNumber): Promise<void>;
|
|
15
|
+
/** Gets the block hash for a given block number. */
|
|
16
|
+
protected abstract getStoredBlockHash(blockNumber: BlockNumber): Promise<string | undefined>;
|
|
17
|
+
/** Sets the block hash for a given block number. */
|
|
18
|
+
protected abstract setBlockHash(blockNumber: BlockNumber, hash: string): Promise<void>;
|
|
19
|
+
/** Deletes all block hashes for blocks before the given block number. */
|
|
20
|
+
protected abstract deleteBlockHashesBefore(blockNumber: BlockNumber): Promise<void>;
|
|
21
|
+
/** Gets the checkpoint number for a given block number. */
|
|
22
|
+
protected abstract getCheckpointNumberForBlock(blockNumber: BlockNumber): Promise<CheckpointNumber | undefined>;
|
|
23
|
+
/** Sets the checkpoint number for a given block number. */
|
|
24
|
+
protected abstract setCheckpointNumberForBlock(blockNumber: BlockNumber, checkpointNumber: CheckpointNumber): Promise<void>;
|
|
25
|
+
/** Deletes all block-to-checkpoint mappings for blocks before the given block number. */
|
|
26
|
+
protected abstract deleteBlockToCheckpointBefore(blockNumber: BlockNumber): Promise<void>;
|
|
27
|
+
/** Gets a checkpoint by its number. */
|
|
28
|
+
protected abstract getCheckpoint(checkpointNumber: CheckpointNumber): Promise<PublishedCheckpoint | undefined>;
|
|
29
|
+
/** Saves a checkpoint. */
|
|
30
|
+
protected abstract saveCheckpointData(checkpoint: PublishedCheckpoint): Promise<void>;
|
|
31
|
+
/** Deletes all checkpoints before the given checkpoint number. */
|
|
32
|
+
protected abstract deleteCheckpointsBefore(checkpointNumber: CheckpointNumber): Promise<void>;
|
|
33
|
+
/** Runs the given function in a transaction. Memory stores can just execute immediately. */
|
|
34
|
+
protected abstract runInTransaction<T>(fn: () => Promise<T>): Promise<T>;
|
|
35
|
+
getL2BlockHash(number: BlockNumber): Promise<string | undefined>;
|
|
36
|
+
getL2Tips(): Promise<L2Tips>;
|
|
37
|
+
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
38
|
+
protected computeBlockHash(block: L2BlockNew): Promise<string>;
|
|
39
|
+
private getBlockId;
|
|
40
|
+
private getCheckpointId;
|
|
41
|
+
private handleBlocksAdded;
|
|
42
|
+
private handleChainCheckpointed;
|
|
43
|
+
private handleChainPruned;
|
|
44
|
+
private handleChainProven;
|
|
45
|
+
private handleChainFinalized;
|
|
46
|
+
private saveTag;
|
|
47
|
+
private saveCheckpoint;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfdGlwc19zdG9yZV9iYXNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX3RpcHNfc3RvcmVfYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEYsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBSUwsS0FBSyxVQUFVLEVBQ2YsS0FBSyxNQUFNLEVBQ1osTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJIOzs7R0FHRztBQUNILDhCQUFzQixlQUFnQixZQUFXLHlCQUF5QixFQUFFLDhCQUE4QjtJQUd4Ryw2Q0FBNkM7SUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRTdFLDZDQUE2QztJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBGLG9EQUFvRDtJQUNwRCxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUU3RixvREFBb0Q7SUFDcEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2Rix5RUFBeUU7SUFDekUsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwRiwyREFBMkQ7SUFDM0QsU0FBUyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUVoSCwyREFBMkQ7SUFDM0QsU0FBUyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FDNUMsV0FBVyxFQUFFLFdBQVcsRUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQix5RkFBeUY7SUFDekYsU0FBUyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxRix1Q0FBdUM7SUFDdkMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRS9HLDBCQUEwQjtJQUMxQixTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEYsa0VBQWtFO0lBQ2xFLFNBQVMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlGLDRGQUE0RjtJQUM1RixTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBSWxFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRXRFO0lBRU0sU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FzQmxDO0lBRVksc0JBQXNCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FrQjVFO0lBR0QsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUU3RDtZQUlhLFVBQVU7WUFZVixlQUFlO1lBaUJmLGlCQUFpQjtZQWFqQix1QkFBdUI7WUFVdkIsaUJBQWlCO1lBY2pCLGlCQUFpQjtZQVNqQixvQkFBb0I7WUFpQnBCLE9BQU87WUFPUCxjQUFjO0NBUzdCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"l2_tips_store_base.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_tips_store_base.ts"],"names":[],"mappings":"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"}
|