@aztec/archiver 0.0.1-commit.d431d1c → 0.0.1-commit.d939eb5aa
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/README.md +21 -6
- package/dest/archiver.d.ts +17 -12
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +108 -127
- package/dest/config.d.ts +3 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +3 -2
- package/dest/errors.d.ts +39 -10
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +52 -15
- package/dest/factory.d.ts +4 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +29 -23
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/l1/bin/retrieve-calldata.js +35 -32
- package/dest/l1/calldata_retriever.d.ts +73 -50
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +191 -259
- package/dest/l1/data_retrieval.d.ts +11 -11
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +38 -37
- package/dest/l1/spire_proposer.d.ts +5 -5
- package/dest/l1/spire_proposer.d.ts.map +1 -1
- package/dest/l1/spire_proposer.js +9 -17
- package/dest/l1/validate_trace.d.ts +6 -3
- package/dest/l1/validate_trace.d.ts.map +1 -1
- package/dest/l1/validate_trace.js +13 -9
- package/dest/modules/data_source_base.d.ts +29 -23
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +55 -124
- package/dest/modules/data_store_updater.d.ts +43 -26
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +158 -129
- package/dest/modules/instrumentation.d.ts +19 -4
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +53 -18
- package/dest/modules/l1_synchronizer.d.ts +7 -9
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +186 -145
- package/dest/modules/validation.d.ts +1 -1
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +2 -2
- package/dest/store/block_store.d.ts +86 -34
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +414 -152
- package/dest/store/contract_class_store.d.ts +2 -3
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +16 -72
- package/dest/store/contract_instance_store.d.ts +1 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +6 -2
- package/dest/store/kv_archiver_store.d.ts +80 -39
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +86 -35
- package/dest/store/l2_tips_cache.d.ts +20 -0
- package/dest/store/l2_tips_cache.d.ts.map +1 -0
- package/dest/store/l2_tips_cache.js +109 -0
- package/dest/store/log_store.d.ts +9 -6
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +151 -56
- package/dest/store/message_store.d.ts +5 -1
- package/dest/store/message_store.d.ts.map +1 -1
- package/dest/store/message_store.js +21 -9
- package/dest/test/fake_l1_state.d.ts +24 -4
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +133 -26
- package/dest/test/index.js +3 -1
- package/dest/test/mock_archiver.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +3 -2
- package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +2 -1
- package/dest/test/mock_l2_block_source.d.ts +44 -23
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +185 -115
- package/dest/test/mock_structs.d.ts +6 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +24 -10
- package/dest/test/noop_l1_archiver.d.ts +26 -0
- package/dest/test/noop_l1_archiver.d.ts.map +1 -0
- package/dest/test/noop_l1_archiver.js +71 -0
- package/package.json +14 -13
- package/src/archiver.ts +144 -159
- package/src/config.ts +9 -2
- package/src/errors.ts +82 -26
- package/src/factory.ts +46 -22
- package/src/index.ts +1 -0
- package/src/l1/README.md +25 -68
- package/src/l1/bin/retrieve-calldata.ts +45 -33
- package/src/l1/calldata_retriever.ts +250 -379
- package/src/l1/data_retrieval.ts +35 -41
- package/src/l1/spire_proposer.ts +7 -15
- package/src/l1/validate_trace.ts +24 -6
- package/src/modules/data_source_base.ts +98 -169
- package/src/modules/data_store_updater.ts +178 -160
- package/src/modules/instrumentation.ts +64 -20
- package/src/modules/l1_synchronizer.ts +212 -182
- package/src/modules/validation.ts +2 -2
- package/src/store/block_store.ts +533 -207
- package/src/store/contract_class_store.ts +16 -110
- package/src/store/contract_instance_store.ts +8 -5
- package/src/store/kv_archiver_store.ts +141 -59
- package/src/store/l2_tips_cache.ts +134 -0
- package/src/store/log_store.ts +232 -74
- package/src/store/message_store.ts +27 -10
- package/src/structs/inbox_message.ts +1 -1
- package/src/test/fake_l1_state.ts +180 -32
- package/src/test/index.ts +3 -0
- package/src/test/mock_archiver.ts +3 -2
- package/src/test/mock_l1_to_l2_message_source.ts +1 -0
- package/src/test/mock_l2_block_source.ts +247 -130
- package/src/test/mock_structs.ts +45 -15
- package/src/test/noop_l1_archiver.ts +114 -0
|
@@ -2,20 +2,13 @@ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/bra
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
5
|
+
import { type BlockData, BlockHash, CheckpointedL2Block, L2Block, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
6
|
+
import { type CheckpointData, type CommonCheckpointData, type ProposedCheckpointData, type ProposedCheckpointInput, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
7
|
+
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
9
8
|
import { BlockHeader, type IndexedTxEffect, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
10
9
|
export { TxReceipt, type TxEffect, type TxHash } from '@aztec/stdlib/tx';
|
|
11
|
-
export type
|
|
12
|
-
|
|
13
|
-
header: CheckpointHeader;
|
|
14
|
-
archive: AppendOnlyTreeSnapshot;
|
|
15
|
-
startBlock: number;
|
|
16
|
-
numBlocks: number;
|
|
17
|
-
l1: L1PublishedData;
|
|
18
|
-
attestations: Buffer[];
|
|
10
|
+
export type RemoveCheckpointsResult = {
|
|
11
|
+
blocksRemoved: L2Block[] | undefined;
|
|
19
12
|
};
|
|
20
13
|
/**
|
|
21
14
|
* LMDB-based block storage for the archiver.
|
|
@@ -25,51 +18,92 @@ export declare class BlockStore {
|
|
|
25
18
|
private db;
|
|
26
19
|
constructor(db: AztecAsyncKVStore);
|
|
27
20
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
21
|
+
* Returns the finalized L2 block number. An L2 block is finalized when it was proven
|
|
22
|
+
* in an L1 block that has itself been finalized on Ethereum.
|
|
23
|
+
* @returns The finalized block number.
|
|
24
|
+
*/
|
|
25
|
+
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
26
|
+
/**
|
|
27
|
+
* Append a new proposed block to the store.
|
|
28
|
+
* This is an uncheckpointed block that has been proposed by the sequencer but not yet included in a checkpoint on L1.
|
|
29
|
+
* For checkpointed blocks (already published to L1), use addCheckpoints() instead.
|
|
30
|
+
* @param block - The proposed L2 block to be added to the store.
|
|
30
31
|
* @returns True if the operation is successful.
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
|
+
addProposedBlock(block: L2Block, opts?: {
|
|
33
34
|
force?: boolean;
|
|
34
35
|
}): Promise<boolean>;
|
|
35
36
|
/**
|
|
36
|
-
* Append new
|
|
37
|
+
* Append new checkpoints to the store's list.
|
|
37
38
|
* @param checkpoints - The L2 checkpoints to be added to the store.
|
|
38
39
|
* @returns True if the operation is successful.
|
|
39
40
|
*/
|
|
40
41
|
addCheckpoints(checkpoints: PublishedCheckpoint[], opts?: {
|
|
41
42
|
force?: boolean;
|
|
42
43
|
}): Promise<boolean>;
|
|
44
|
+
private skipOrUpdateAlreadyStoredCheckpoints;
|
|
45
|
+
private getPreviousCheckpointBlock;
|
|
46
|
+
/**
|
|
47
|
+
* Validates that blocks are sequential, have correct indexes, and chain via archive roots.
|
|
48
|
+
* This is the same validation used for both confirmed checkpoints (addCheckpoints) and
|
|
49
|
+
* proposed checkpoints (setProposedCheckpoint).
|
|
50
|
+
*/
|
|
51
|
+
private validateCheckpointBlocks;
|
|
43
52
|
private addBlockToDatabase;
|
|
44
53
|
private deleteBlock;
|
|
45
54
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* @param checkpointsToUnwind - The number of checkpoints we are to unwind
|
|
50
|
-
* @returns True if the operation is successful
|
|
55
|
+
* Removes all checkpoints with checkpoint number > checkpointNumber.
|
|
56
|
+
* Also removes ALL blocks (both checkpointed and uncheckpointed) after the last block of the given checkpoint.
|
|
57
|
+
* @param checkpointNumber - Remove all checkpoints strictly after this one.
|
|
51
58
|
*/
|
|
52
|
-
|
|
59
|
+
removeCheckpointsAfter(checkpointNumber: CheckpointNumber): Promise<RemoveCheckpointsResult>;
|
|
53
60
|
getCheckpointData(checkpointNumber: CheckpointNumber): Promise<CheckpointData | undefined>;
|
|
54
61
|
getRangeOfCheckpoints(from: CheckpointNumber, limit: number): Promise<CheckpointData[]>;
|
|
62
|
+
/** Returns checkpoint data for all checkpoints whose slot falls within the given range (inclusive). */
|
|
63
|
+
getCheckpointDataForSlotRange(startSlot: SlotNumber, endSlot: SlotNumber): Promise<CheckpointData[]>;
|
|
55
64
|
private checkpointDataFromCheckpointStorage;
|
|
56
|
-
getBlocksForCheckpoint(checkpointNumber: CheckpointNumber): Promise<
|
|
65
|
+
getBlocksForCheckpoint(checkpointNumber: CheckpointNumber): Promise<L2Block[] | undefined>;
|
|
57
66
|
/**
|
|
58
67
|
* Gets all blocks that have the given slot number.
|
|
59
68
|
* Iterates backwards through blocks for efficiency since we usually query for the last slot.
|
|
60
69
|
* @param slotNumber - The slot number to search for.
|
|
61
70
|
* @returns All blocks with the given slot number, in ascending block number order.
|
|
62
71
|
*/
|
|
63
|
-
getBlocksForSlot(slotNumber: SlotNumber): Promise<
|
|
72
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
|
|
64
73
|
/**
|
|
65
74
|
* Removes all blocks with block number > blockNumber.
|
|
75
|
+
* Does not remove any associated checkpoints.
|
|
66
76
|
* @param blockNumber - The block number to remove after.
|
|
67
77
|
* @returns The removed blocks (for event emission).
|
|
68
78
|
*/
|
|
69
|
-
|
|
79
|
+
removeBlocksAfter(blockNumber: BlockNumber): Promise<L2Block[]>;
|
|
70
80
|
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
71
|
-
getLatestBlockNumber(): Promise<BlockNumber>;
|
|
72
81
|
getLatestCheckpointNumber(): Promise<CheckpointNumber>;
|
|
82
|
+
hasProposedCheckpoint(): Promise<boolean>;
|
|
83
|
+
/** Deletes the proposed checkpoint from storage. */
|
|
84
|
+
deleteProposedCheckpoint(): Promise<void>;
|
|
85
|
+
/** Clears the proposed checkpoint if the given confirmed checkpoint number supersedes it. */
|
|
86
|
+
clearProposedCheckpointIfSuperseded(confirmedCheckpointNumber: CheckpointNumber): Promise<void>;
|
|
87
|
+
/** Returns the proposed checkpoint data, or undefined if no proposed checkpoint exists. No fallback to confirmed. */
|
|
88
|
+
getProposedCheckpointOnly(): Promise<ProposedCheckpointData | undefined>;
|
|
89
|
+
/**
|
|
90
|
+
* Gets the checkpoint at the proposed tip
|
|
91
|
+
* - pending checkpoint if it exists
|
|
92
|
+
* - fallsback to latest confirmed checkpoint otherwise
|
|
93
|
+
* @returns CommonCheckpointData
|
|
94
|
+
*/
|
|
95
|
+
getProposedCheckpoint(): Promise<CommonCheckpointData | undefined>;
|
|
96
|
+
private convertToProposedCheckpointData;
|
|
97
|
+
/**
|
|
98
|
+
* Attempts to get the proposedCheckpoint's number, if there is not one, then fallback to the latest confirmed checkpoint number.
|
|
99
|
+
* @returns CheckpointNumber
|
|
100
|
+
*/
|
|
101
|
+
getProposedCheckpointNumber(): Promise<CheckpointNumber>;
|
|
102
|
+
/**
|
|
103
|
+
* Attempts to get the proposedCheckpoint's block number, if there is not one, then fallback to the checkpointed block number
|
|
104
|
+
* @returns BlockNumber
|
|
105
|
+
*/
|
|
106
|
+
getProposedCheckpointL2BlockNumber(): Promise<BlockNumber>;
|
|
73
107
|
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
74
108
|
/**
|
|
75
109
|
* Gets up to `limit` amount of Checkpointed L2 blocks starting from `from`.
|
|
@@ -78,7 +112,7 @@ export declare class BlockStore {
|
|
|
78
112
|
* @returns The requested L2 blocks
|
|
79
113
|
*/
|
|
80
114
|
getCheckpointedBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<CheckpointedL2Block>;
|
|
81
|
-
getCheckpointedBlockByHash(blockHash:
|
|
115
|
+
getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
|
|
82
116
|
getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
|
|
83
117
|
/**
|
|
84
118
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
@@ -86,31 +120,43 @@ export declare class BlockStore {
|
|
|
86
120
|
* @param limit - The number of blocks to return.
|
|
87
121
|
* @returns The requested L2 blocks
|
|
88
122
|
*/
|
|
89
|
-
getBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<
|
|
123
|
+
getBlocks(start: BlockNumber, limit: number): AsyncIterableIterator<L2Block>;
|
|
124
|
+
/**
|
|
125
|
+
* Gets block metadata (without tx data) by block number.
|
|
126
|
+
* @param blockNumber - The number of the block to return.
|
|
127
|
+
* @returns The requested block data.
|
|
128
|
+
*/
|
|
129
|
+
getBlockData(blockNumber: BlockNumber): Promise<BlockData | undefined>;
|
|
130
|
+
/**
|
|
131
|
+
* Gets block metadata (without tx data) by archive root.
|
|
132
|
+
* @param archive - The archive root of the block to return.
|
|
133
|
+
* @returns The requested block data.
|
|
134
|
+
*/
|
|
135
|
+
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
90
136
|
/**
|
|
91
137
|
* Gets an L2 block.
|
|
92
138
|
* @param blockNumber - The number of the block to return.
|
|
93
139
|
* @returns The requested L2 block.
|
|
94
140
|
*/
|
|
95
|
-
getBlock(blockNumber: BlockNumber): Promise<
|
|
141
|
+
getBlock(blockNumber: BlockNumber): Promise<L2Block | undefined>;
|
|
96
142
|
/**
|
|
97
143
|
* Gets an L2 block by its hash.
|
|
98
144
|
* @param blockHash - The hash of the block to return.
|
|
99
145
|
* @returns The requested L2 block.
|
|
100
146
|
*/
|
|
101
|
-
getBlockByHash(blockHash:
|
|
147
|
+
getBlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
|
|
102
148
|
/**
|
|
103
149
|
* Gets an L2 block by its archive root.
|
|
104
150
|
* @param archive - The archive root of the block to return.
|
|
105
151
|
* @returns The requested L2 block.
|
|
106
152
|
*/
|
|
107
|
-
getBlockByArchive(archive: Fr): Promise<
|
|
153
|
+
getBlockByArchive(archive: Fr): Promise<L2Block | undefined>;
|
|
108
154
|
/**
|
|
109
155
|
* Gets a block header by its hash.
|
|
110
156
|
* @param blockHash - The hash of the block to return.
|
|
111
157
|
* @returns The requested block header.
|
|
112
158
|
*/
|
|
113
|
-
getBlockHeaderByHash(blockHash:
|
|
159
|
+
getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
|
|
114
160
|
/**
|
|
115
161
|
* Gets a block header by its archive root.
|
|
116
162
|
* @param archive - The archive root of the block to return.
|
|
@@ -125,6 +171,7 @@ export declare class BlockStore {
|
|
|
125
171
|
*/
|
|
126
172
|
getBlockHeaders(start: BlockNumber, limit: number): AsyncIterableIterator<BlockHeader>;
|
|
127
173
|
private getBlockStorages;
|
|
174
|
+
private getBlockDataFromBlockStorage;
|
|
128
175
|
private getBlockFromBlockStorage;
|
|
129
176
|
/**
|
|
130
177
|
* Gets a tx effect.
|
|
@@ -137,7 +184,7 @@ export declare class BlockStore {
|
|
|
137
184
|
* @param txHash - The hash of a tx we try to get the receipt for.
|
|
138
185
|
* @returns The requested tx receipt (or undefined if not found).
|
|
139
186
|
*/
|
|
140
|
-
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
187
|
+
getSettledTxReceipt(txHash: TxHash, l1Constants?: Pick<L1RollupConstants, 'epochDuration'>): Promise<TxReceipt | undefined>;
|
|
141
188
|
/**
|
|
142
189
|
* Looks up which block included the requested tx effect.
|
|
143
190
|
* @param txHash - The txHash of the tx.
|
|
@@ -162,8 +209,13 @@ export declare class BlockStore {
|
|
|
162
209
|
*/
|
|
163
210
|
getSynchedL1BlockNumber(): Promise<bigint | undefined>;
|
|
164
211
|
setSynchedL1BlockNumber(l1BlockNumber: bigint): Promise<boolean>;
|
|
212
|
+
/** Sets the proposed checkpoint (not yet L1-confirmed). Only accepts confirmed + 1.
|
|
213
|
+
* Computes archive and checkpointOutHash from the stored blocks. */
|
|
214
|
+
setProposedCheckpoint(proposed: ProposedCheckpointInput): Promise<void>;
|
|
165
215
|
getProvenCheckpointNumber(): Promise<CheckpointNumber>;
|
|
166
216
|
setProvenCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<boolean>;
|
|
217
|
+
getFinalizedCheckpointNumber(): Promise<CheckpointNumber>;
|
|
218
|
+
setFinalizedCheckpointNumber(checkpointNumber: CheckpointNumber): Promise<boolean>;
|
|
167
219
|
/**
|
|
168
220
|
* Gets the pending chain validation status.
|
|
169
221
|
* @returns The validation status or undefined if not set.
|
|
@@ -175,4 +227,4 @@ export declare class BlockStore {
|
|
|
175
227
|
*/
|
|
176
228
|
setPendingChainValidationStatus(status: ValidateCheckpointResult | undefined): Promise<void>;
|
|
177
229
|
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9ibG9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQTZDLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLFNBQVMsRUFFVCxtQkFBbUIsRUFFbkIsT0FBTyxFQUNQLEtBQUssd0JBQXdCLEVBRzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVMLEtBQUssY0FBYyxFQUNuQixLQUFLLG9CQUFvQixFQUV6QixLQUFLLHNCQUFzQixFQUMzQixLQUFLLHVCQUF1QixFQUM1QixtQkFBbUIsRUFDcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUdyRixPQUFPLEVBQ0wsV0FBVyxFQUNYLEtBQUssZUFBZSxFQUVwQixNQUFNLEVBQ04sU0FBUyxFQUlWLE1BQU0sa0JBQWtCLENBQUM7QUFnQjFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlDekUsTUFBTSxNQUFNLHVCQUF1QixHQUFHO0lBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQTtDQUFFLENBQUM7QUFFL0U7O0dBRUc7QUFDSCxxQkFBYSxVQUFVOztJQTBDVCxPQUFPLENBQUMsRUFBRTtJQUF0QixZQUFvQixFQUFFLEVBQUUs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAyB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAMpD,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"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"}
|