@aztec/archiver 0.0.0-test.0 → 0.0.1-commit.21caa21
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 +27 -6
- package/dest/archiver/archiver.d.ts +147 -57
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +841 -333
- package/dest/archiver/archiver_store.d.ts +85 -50
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +708 -213
- package/dest/archiver/config.d.ts +5 -21
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +21 -12
- package/dest/archiver/data_retrieval.d.ts +32 -27
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +197 -94
- package/dest/archiver/errors.d.ts +9 -1
- package/dest/archiver/errors.d.ts.map +1 -1
- package/dest/archiver/errors.js +12 -0
- package/dest/archiver/index.d.ts +3 -4
- package/dest/archiver/index.d.ts.map +1 -1
- package/dest/archiver/index.js +1 -2
- package/dest/archiver/instrumentation.d.ts +12 -6
- package/dest/archiver/instrumentation.d.ts.map +1 -1
- package/dest/archiver/instrumentation.js +58 -17
- package/dest/archiver/kv_archiver_store/block_store.d.ts +48 -11
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +216 -63
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +3 -3
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +12 -18
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +11 -8
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.js +30 -16
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +50 -35
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +88 -46
- package/dest/archiver/kv_archiver_store/log_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +18 -46
- package/dest/archiver/kv_archiver_store/message_store.d.ts +23 -17
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +150 -48
- package/dest/archiver/structs/data_retrieval.d.ts +1 -1
- package/dest/archiver/structs/inbox_message.d.ts +15 -0
- package/dest/archiver/structs/inbox_message.d.ts.map +1 -0
- package/dest/archiver/structs/inbox_message.js +38 -0
- package/dest/archiver/structs/published.d.ts +3 -11
- package/dest/archiver/structs/published.d.ts.map +1 -1
- package/dest/archiver/structs/published.js +1 -1
- package/dest/archiver/validation.d.ts +17 -0
- package/dest/archiver/validation.d.ts.map +1 -0
- package/dest/archiver/validation.js +98 -0
- package/dest/factory.d.ts +8 -13
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +18 -49
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/rpc/index.d.ts +2 -3
- package/dest/rpc/index.d.ts.map +1 -1
- package/dest/rpc/index.js +1 -4
- package/dest/test/index.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts +2 -2
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.d.ts +5 -3
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +14 -1
- package/dest/test/mock_l2_block_source.d.ts +38 -10
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +119 -8
- package/dest/test/mock_structs.d.ts +9 -0
- package/dest/test/mock_structs.d.ts.map +1 -0
- package/dest/test/mock_structs.js +37 -0
- package/package.json +28 -30
- package/src/archiver/archiver.ts +1087 -410
- package/src/archiver/archiver_store.ts +97 -55
- package/src/archiver/archiver_store_test_suite.ts +664 -210
- package/src/archiver/config.ts +28 -41
- package/src/archiver/data_retrieval.ts +279 -125
- package/src/archiver/errors.ts +21 -0
- package/src/archiver/index.ts +2 -3
- package/src/archiver/instrumentation.ts +77 -22
- package/src/archiver/kv_archiver_store/block_store.ts +270 -72
- package/src/archiver/kv_archiver_store/contract_class_store.ts +13 -23
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +35 -27
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +127 -63
- package/src/archiver/kv_archiver_store/log_store.ts +24 -62
- package/src/archiver/kv_archiver_store/message_store.ts +209 -53
- package/src/archiver/structs/inbox_message.ts +41 -0
- package/src/archiver/structs/published.ts +2 -11
- package/src/archiver/validation.ts +124 -0
- package/src/factory.ts +24 -66
- package/src/index.ts +1 -1
- package/src/rpc/index.ts +1 -5
- package/src/test/mock_archiver.ts +1 -1
- package/src/test/mock_l1_to_l2_message_source.ts +14 -3
- package/src/test/mock_l2_block_source.ts +158 -13
- package/src/test/mock_structs.ts +49 -0
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +0 -12
- package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/nullifier_store.js +0 -73
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +0 -23
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +0 -1
- package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +0 -49
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +0 -175
- package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +0 -1
- package/dest/archiver/memory_archiver_store/memory_archiver_store.js +0 -636
- package/src/archiver/kv_archiver_store/nullifier_store.ts +0 -97
- package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +0 -61
- package/src/archiver/memory_archiver_store/memory_archiver_store.ts +0 -801
|
@@ -1,81 +1,165 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlobDeserializationError, SpongeBlob, decodeCheckpointBlobDataFromBlobs, encodeBlockBlobData } from '@aztec/blob-lib';
|
|
2
2
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
3
|
+
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
3
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
6
|
+
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
7
|
+
import { Body, CommitteeAttestation, L2BlockNew } from '@aztec/stdlib/block';
|
|
8
|
+
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
9
9
|
import { Proof } from '@aztec/stdlib/proofs';
|
|
10
|
+
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
10
11
|
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
11
|
-
import { BlockHeader } from '@aztec/stdlib/tx';
|
|
12
|
-
import { decodeFunctionData, getAbiItem, hexToBytes } from 'viem';
|
|
12
|
+
import { BlockHeader, GlobalVariables, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
|
|
13
|
+
import { decodeFunctionData, getAbiItem, hexToBytes, multicall3Abi } from 'viem';
|
|
13
14
|
import { NoBlobBodiesFoundError } from './errors.js';
|
|
15
|
+
export async function retrievedToPublishedCheckpoint({ checkpointNumber, archiveRoot, header: checkpointHeader, checkpointBlobData, l1, chainId, version, attestations }) {
|
|
16
|
+
const { blocks: blocksBlobData } = checkpointBlobData;
|
|
17
|
+
// The lastArchiveRoot of a block is the new archive for the previous block.
|
|
18
|
+
const newArchiveRoots = blocksBlobData.map((b)=>b.lastArchiveRoot).slice(1).concat([
|
|
19
|
+
archiveRoot
|
|
20
|
+
]);
|
|
21
|
+
// `blocksBlobData` is created from `decodeCheckpointBlobDataFromBlobs`. An error will be thrown if it can't read a
|
|
22
|
+
// field for the `l1ToL2MessageRoot` of the first block. So below we can safely assume it exists:
|
|
23
|
+
const l1toL2MessageTreeRoot = blocksBlobData[0].l1ToL2MessageRoot;
|
|
24
|
+
const spongeBlob = SpongeBlob.init();
|
|
25
|
+
const l2Blocks = [];
|
|
26
|
+
for(let i = 0; i < blocksBlobData.length; i++){
|
|
27
|
+
const blockBlobData = blocksBlobData[i];
|
|
28
|
+
const { blockEndMarker, blockEndStateField, lastArchiveRoot, noteHashRoot, nullifierRoot, publicDataRoot } = blockBlobData;
|
|
29
|
+
const l2BlockNumber = blockEndMarker.blockNumber;
|
|
30
|
+
const globalVariables = GlobalVariables.from({
|
|
31
|
+
chainId,
|
|
32
|
+
version,
|
|
33
|
+
blockNumber: l2BlockNumber,
|
|
34
|
+
slotNumber: checkpointHeader.slotNumber,
|
|
35
|
+
timestamp: blockEndMarker.timestamp,
|
|
36
|
+
coinbase: checkpointHeader.coinbase,
|
|
37
|
+
feeRecipient: checkpointHeader.feeRecipient,
|
|
38
|
+
gasFees: checkpointHeader.gasFees
|
|
39
|
+
});
|
|
40
|
+
const state = StateReference.from({
|
|
41
|
+
l1ToL2MessageTree: new AppendOnlyTreeSnapshot(l1toL2MessageTreeRoot, blockEndStateField.l1ToL2MessageNextAvailableLeafIndex),
|
|
42
|
+
partial: PartialStateReference.from({
|
|
43
|
+
noteHashTree: new AppendOnlyTreeSnapshot(noteHashRoot, blockEndStateField.noteHashNextAvailableLeafIndex),
|
|
44
|
+
nullifierTree: new AppendOnlyTreeSnapshot(nullifierRoot, blockEndStateField.nullifierNextAvailableLeafIndex),
|
|
45
|
+
publicDataTree: new AppendOnlyTreeSnapshot(publicDataRoot, blockEndStateField.publicDataNextAvailableLeafIndex)
|
|
46
|
+
})
|
|
47
|
+
});
|
|
48
|
+
const body = Body.fromTxBlobData(checkpointBlobData.blocks[0].txs);
|
|
49
|
+
const blobFields = encodeBlockBlobData(blockBlobData);
|
|
50
|
+
await spongeBlob.absorb(blobFields);
|
|
51
|
+
const clonedSpongeBlob = spongeBlob.clone();
|
|
52
|
+
const spongeBlobHash = await clonedSpongeBlob.squeeze();
|
|
53
|
+
const header = BlockHeader.from({
|
|
54
|
+
lastArchive: new AppendOnlyTreeSnapshot(lastArchiveRoot, l2BlockNumber),
|
|
55
|
+
state,
|
|
56
|
+
spongeBlobHash,
|
|
57
|
+
globalVariables,
|
|
58
|
+
totalFees: body.txEffects.reduce((accum, txEffect)=>accum.add(txEffect.transactionFee), Fr.ZERO),
|
|
59
|
+
totalManaUsed: new Fr(blockEndStateField.totalManaUsed)
|
|
60
|
+
});
|
|
61
|
+
const newArchive = new AppendOnlyTreeSnapshot(newArchiveRoots[i], l2BlockNumber + 1);
|
|
62
|
+
l2Blocks.push(new L2BlockNew(newArchive, header, body));
|
|
63
|
+
}
|
|
64
|
+
const lastBlock = l2Blocks.at(-1);
|
|
65
|
+
const checkpoint = Checkpoint.from({
|
|
66
|
+
archive: new AppendOnlyTreeSnapshot(archiveRoot, lastBlock.number + 1),
|
|
67
|
+
header: checkpointHeader,
|
|
68
|
+
blocks: l2Blocks,
|
|
69
|
+
number: checkpointNumber
|
|
70
|
+
});
|
|
71
|
+
return PublishedCheckpoint.from({
|
|
72
|
+
checkpoint,
|
|
73
|
+
l1,
|
|
74
|
+
attestations
|
|
75
|
+
});
|
|
76
|
+
}
|
|
14
77
|
/**
|
|
15
|
-
* Fetches new
|
|
78
|
+
* Fetches new checkpoints.
|
|
16
79
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
17
80
|
* @param rollupAddress - The address of the rollup contract.
|
|
18
81
|
* @param searchStartBlock - The block number to use for starting the search.
|
|
19
82
|
* @param searchEndBlock - The highest block number that we should search up to.
|
|
20
83
|
* @param expectedNextL2BlockNum - The next L2 block number that we expect to find.
|
|
21
84
|
* @returns An array of block; as well as the next eth block to search from.
|
|
22
|
-
*/ export async function
|
|
23
|
-
const
|
|
85
|
+
*/ export async function retrieveCheckpointsFromRollup(rollup, publicClient, blobSinkClient, searchStartBlock, searchEndBlock, logger = createLogger('archiver')) {
|
|
86
|
+
const retrievedCheckpoints = [];
|
|
87
|
+
let rollupConstants;
|
|
24
88
|
do {
|
|
25
89
|
if (searchStartBlock > searchEndBlock) {
|
|
26
90
|
break;
|
|
27
91
|
}
|
|
28
|
-
const
|
|
92
|
+
const checkpointProposedLogs = (await rollup.getEvents.CheckpointProposed({}, {
|
|
29
93
|
fromBlock: searchStartBlock,
|
|
30
94
|
toBlock: searchEndBlock
|
|
31
95
|
})).filter((log)=>log.blockNumber >= searchStartBlock && log.blockNumber <= searchEndBlock);
|
|
32
|
-
if (
|
|
96
|
+
if (checkpointProposedLogs.length === 0) {
|
|
33
97
|
break;
|
|
34
98
|
}
|
|
35
|
-
const lastLog =
|
|
36
|
-
logger.debug(`Got ${
|
|
37
|
-
|
|
38
|
-
|
|
99
|
+
const lastLog = checkpointProposedLogs.at(-1);
|
|
100
|
+
logger.debug(`Got ${checkpointProposedLogs.length} processed logs for checkpoints ${checkpointProposedLogs[0].args.checkpointNumber}-${lastLog.args.checkpointNumber} between L1 blocks ${searchStartBlock}-${searchEndBlock}`);
|
|
101
|
+
if (rollupConstants === undefined) {
|
|
102
|
+
const [chainId, version, targetCommitteeSize] = await Promise.all([
|
|
103
|
+
publicClient.getChainId(),
|
|
104
|
+
rollup.read.getVersion(),
|
|
105
|
+
rollup.read.getTargetCommitteeSize()
|
|
106
|
+
]);
|
|
107
|
+
rollupConstants = {
|
|
108
|
+
chainId: new Fr(chainId),
|
|
109
|
+
version: new Fr(version),
|
|
110
|
+
targetCommitteeSize: Number(targetCommitteeSize)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const newCheckpoints = await processCheckpointProposedLogs(rollup, publicClient, blobSinkClient, checkpointProposedLogs, rollupConstants, logger);
|
|
114
|
+
retrievedCheckpoints.push(...newCheckpoints);
|
|
39
115
|
searchStartBlock = lastLog.blockNumber + 1n;
|
|
40
116
|
}while (searchStartBlock <= searchEndBlock)
|
|
41
|
-
// The
|
|
42
|
-
return
|
|
117
|
+
// The asyncPool from processCheckpointProposedLogs will not necessarily return the checkpoints in order, so we sort them before returning.
|
|
118
|
+
return retrievedCheckpoints.sort((a, b)=>Number(a.l1.blockNumber - b.l1.blockNumber));
|
|
43
119
|
}
|
|
44
120
|
/**
|
|
45
|
-
* Processes newly received
|
|
121
|
+
* Processes newly received CheckpointProposed logs.
|
|
46
122
|
* @param rollup - The rollup contract
|
|
47
123
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
48
|
-
* @param logs -
|
|
49
|
-
* @returns - An array
|
|
50
|
-
*/
|
|
51
|
-
const
|
|
124
|
+
* @param logs - CheckpointProposed logs.
|
|
125
|
+
* @returns - An array of checkpoints.
|
|
126
|
+
*/ async function processCheckpointProposedLogs(rollup, publicClient, blobSinkClient, logs, { chainId, version, targetCommitteeSize }, logger) {
|
|
127
|
+
const retrievedCheckpoints = [];
|
|
52
128
|
await asyncPool(10, logs, async (log)=>{
|
|
53
|
-
const
|
|
129
|
+
const checkpointNumber = Number(log.args.checkpointNumber);
|
|
54
130
|
const archive = log.args.archive;
|
|
55
131
|
const archiveFromChain = await rollup.read.archiveAt([
|
|
56
|
-
|
|
132
|
+
BigInt(checkpointNumber)
|
|
57
133
|
]);
|
|
58
134
|
const blobHashes = log.args.versionedBlobHashes.map((blobHash)=>Buffer.from(blobHash.slice(2), 'hex'));
|
|
59
|
-
// The value from the event and contract will match only if the
|
|
135
|
+
// The value from the event and contract will match only if the checkpoint is in the chain.
|
|
60
136
|
if (archive === archiveFromChain) {
|
|
61
|
-
const
|
|
137
|
+
const checkpoint = await getCheckpointFromRollupTx(publicClient, blobSinkClient, log.transactionHash, blobHashes, checkpointNumber, rollup.address, targetCommitteeSize, logger);
|
|
62
138
|
const l1 = {
|
|
63
139
|
blockNumber: log.blockNumber,
|
|
64
140
|
blockHash: log.blockHash,
|
|
65
141
|
timestamp: await getL1BlockTime(publicClient, log.blockNumber)
|
|
66
142
|
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
l1
|
|
143
|
+
retrievedCheckpoints.push({
|
|
144
|
+
...checkpoint,
|
|
145
|
+
l1,
|
|
146
|
+
chainId,
|
|
147
|
+
version
|
|
148
|
+
});
|
|
149
|
+
logger.trace(`Retrieved checkpoint ${checkpointNumber} from L1 tx ${log.transactionHash}`, {
|
|
150
|
+
l1BlockNumber: log.blockNumber,
|
|
151
|
+
checkpointNumber,
|
|
152
|
+
archive: archive.toString(),
|
|
153
|
+
attestations: checkpoint.attestations
|
|
70
154
|
});
|
|
71
155
|
} else {
|
|
72
|
-
logger.warn(`Ignoring
|
|
156
|
+
logger.warn(`Ignoring checkpoint ${checkpointNumber} due to archive root mismatch`, {
|
|
73
157
|
actual: archive,
|
|
74
158
|
expected: archiveFromChain
|
|
75
159
|
});
|
|
76
160
|
}
|
|
77
161
|
});
|
|
78
|
-
return
|
|
162
|
+
return retrievedCheckpoints;
|
|
79
163
|
}
|
|
80
164
|
export async function getL1BlockTime(publicClient, blockNumber) {
|
|
81
165
|
const block = await publicClient.getBlock({
|
|
@@ -85,31 +169,30 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
85
169
|
return block.timestamp;
|
|
86
170
|
}
|
|
87
171
|
/**
|
|
88
|
-
* Extracts the first 'propose' method calldata from a
|
|
89
|
-
* @param
|
|
172
|
+
* Extracts the first 'propose' method calldata from a multicall3 transaction's data.
|
|
173
|
+
* @param multicall3Data - The multicall3 transaction input data
|
|
90
174
|
* @param rollupAddress - The address of the rollup contract
|
|
91
175
|
* @returns The calldata for the first 'propose' method call to the rollup contract
|
|
92
|
-
*/ function extractRollupProposeCalldata(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
data: forwarderData
|
|
176
|
+
*/ function extractRollupProposeCalldata(multicall3Data, rollupAddress) {
|
|
177
|
+
const { functionName: multicall3FunctionName, args: multicall3Args } = decodeFunctionData({
|
|
178
|
+
abi: multicall3Abi,
|
|
179
|
+
data: multicall3Data
|
|
97
180
|
});
|
|
98
|
-
if (
|
|
99
|
-
throw new Error(`Unexpected
|
|
181
|
+
if (multicall3FunctionName !== 'aggregate3') {
|
|
182
|
+
throw new Error(`Unexpected multicall3 method called ${multicall3FunctionName}`);
|
|
100
183
|
}
|
|
101
|
-
if (
|
|
102
|
-
throw new Error(`Unexpected number of arguments for
|
|
184
|
+
if (multicall3Args.length !== 1) {
|
|
185
|
+
throw new Error(`Unexpected number of arguments for multicall3`);
|
|
103
186
|
}
|
|
104
|
-
const [
|
|
187
|
+
const [calls] = multicall3Args;
|
|
105
188
|
// Find all rollup calls
|
|
106
189
|
const rollupAddressLower = rollupAddress.toLowerCase();
|
|
107
|
-
for(let i = 0; i <
|
|
108
|
-
const addr =
|
|
190
|
+
for(let i = 0; i < calls.length; i++){
|
|
191
|
+
const addr = calls[i].target;
|
|
109
192
|
if (addr.toLowerCase() !== rollupAddressLower) {
|
|
110
193
|
continue;
|
|
111
194
|
}
|
|
112
|
-
const callData =
|
|
195
|
+
const callData = calls[i].callData;
|
|
113
196
|
try {
|
|
114
197
|
const { functionName: rollupFunctionName } = decodeFunctionData({
|
|
115
198
|
abi: RollupAbi,
|
|
@@ -118,21 +201,22 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
118
201
|
if (rollupFunctionName === 'propose') {
|
|
119
202
|
return callData;
|
|
120
203
|
}
|
|
121
|
-
} catch
|
|
204
|
+
} catch {
|
|
122
205
|
continue;
|
|
123
206
|
}
|
|
124
207
|
}
|
|
125
|
-
throw new Error(`Rollup address not found in
|
|
208
|
+
throw new Error(`Rollup address not found in multicall3 args`);
|
|
126
209
|
}
|
|
127
210
|
/**
|
|
128
|
-
* Gets
|
|
129
|
-
* Assumes that the
|
|
211
|
+
* Gets checkpoint from the calldata of an L1 transaction.
|
|
212
|
+
* Assumes that the checkpoint was published from an EOA.
|
|
130
213
|
* TODO: Add retries and error management.
|
|
131
214
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
132
215
|
* @param txHash - Hash of the tx that published it.
|
|
133
|
-
* @param
|
|
134
|
-
* @returns
|
|
135
|
-
*/ async function
|
|
216
|
+
* @param checkpointNumber - Checkpoint number.
|
|
217
|
+
* @returns Checkpoint from the calldata, deserialized
|
|
218
|
+
*/ async function getCheckpointFromRollupTx(publicClient, blobSinkClient, txHash, blobHashes, checkpointNumber, rollupAddress, targetCommitteeSize, logger) {
|
|
219
|
+
logger.trace(`Fetching checkpoint ${checkpointNumber} from rollup tx ${txHash}`);
|
|
136
220
|
const { input: forwarderData, blockHash } = await publicClient.getTransaction({
|
|
137
221
|
hash: txHash
|
|
138
222
|
});
|
|
@@ -144,15 +228,27 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
144
228
|
if (rollupFunctionName !== 'propose') {
|
|
145
229
|
throw new Error(`Unexpected rollup method called ${rollupFunctionName}`);
|
|
146
230
|
}
|
|
147
|
-
const [decodedArgs] = rollupArgs;
|
|
148
|
-
const
|
|
231
|
+
const [decodedArgs, packedAttestations, _signers, _blobInput] = rollupArgs;
|
|
232
|
+
const attestations = CommitteeAttestation.fromPacked(packedAttestations, targetCommitteeSize);
|
|
233
|
+
logger.trace(`Recovered propose calldata from tx ${txHash}`, {
|
|
234
|
+
checkpointNumber,
|
|
235
|
+
archive: decodedArgs.archive,
|
|
236
|
+
header: decodedArgs.header,
|
|
237
|
+
l1BlockHash: blockHash,
|
|
238
|
+
blobHashes,
|
|
239
|
+
attestations,
|
|
240
|
+
packedAttestations,
|
|
241
|
+
targetCommitteeSize
|
|
242
|
+
});
|
|
243
|
+
const header = CheckpointHeader.fromViem(decodedArgs.header);
|
|
149
244
|
const blobBodies = await blobSinkClient.getBlobSidecar(blockHash, blobHashes);
|
|
150
245
|
if (blobBodies.length === 0) {
|
|
151
|
-
throw new NoBlobBodiesFoundError(
|
|
246
|
+
throw new NoBlobBodiesFoundError(checkpointNumber);
|
|
152
247
|
}
|
|
153
|
-
let
|
|
248
|
+
let checkpointBlobData;
|
|
154
249
|
try {
|
|
155
|
-
|
|
250
|
+
// Attempt to decode the checkpoint blob data.
|
|
251
|
+
checkpointBlobData = decodeCheckpointBlobDataFromBlobs(blobBodies.map((b)=>b.blob));
|
|
156
252
|
} catch (err) {
|
|
157
253
|
if (err instanceof BlobDeserializationError) {
|
|
158
254
|
logger.fatal(err.message);
|
|
@@ -161,17 +257,24 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
161
257
|
}
|
|
162
258
|
throw err;
|
|
163
259
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
260
|
+
const archiveRoot = new Fr(Buffer.from(hexToBytes(decodedArgs.archive)));
|
|
261
|
+
return {
|
|
262
|
+
checkpointNumber,
|
|
263
|
+
archiveRoot,
|
|
264
|
+
header,
|
|
265
|
+
checkpointBlobData,
|
|
266
|
+
attestations
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/** Given an L1 to L2 message, retrieves its corresponding event from the Inbox within a specific block range. */ export async function retrieveL1ToL2Message(inbox, leaf, fromBlock, toBlock) {
|
|
270
|
+
const logs = await inbox.getEvents.MessageSent({
|
|
271
|
+
hash: leaf.toString()
|
|
272
|
+
}, {
|
|
273
|
+
fromBlock,
|
|
274
|
+
toBlock
|
|
275
|
+
});
|
|
276
|
+
const messages = mapLogsInboxMessage(logs);
|
|
277
|
+
return messages.length > 0 ? messages[0] : undefined;
|
|
175
278
|
}
|
|
176
279
|
/**
|
|
177
280
|
* Fetch L1 to L2 messages.
|
|
@@ -183,10 +286,7 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
183
286
|
* @returns An array of InboxLeaf and next eth block to search from.
|
|
184
287
|
*/ export async function retrieveL1ToL2Messages(inbox, searchStartBlock, searchEndBlock) {
|
|
185
288
|
const retrievedL1ToL2Messages = [];
|
|
186
|
-
|
|
187
|
-
if (searchStartBlock > searchEndBlock) {
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
289
|
+
while(searchStartBlock <= searchEndBlock){
|
|
190
290
|
const messageSentLogs = (await inbox.getEvents.MessageSent({}, {
|
|
191
291
|
fromBlock: searchStartBlock,
|
|
192
292
|
toBlock: searchEndBlock
|
|
@@ -194,17 +294,23 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
194
294
|
if (messageSentLogs.length === 0) {
|
|
195
295
|
break;
|
|
196
296
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
297
|
+
retrievedL1ToL2Messages.push(...mapLogsInboxMessage(messageSentLogs));
|
|
298
|
+
searchStartBlock = messageSentLogs.at(-1).blockNumber + 1n;
|
|
299
|
+
}
|
|
300
|
+
return retrievedL1ToL2Messages;
|
|
301
|
+
}
|
|
302
|
+
function mapLogsInboxMessage(logs) {
|
|
303
|
+
return logs.map((log)=>{
|
|
304
|
+
const { index, hash, checkpointNumber, rollingHash } = log.args;
|
|
305
|
+
return {
|
|
306
|
+
index: index,
|
|
307
|
+
leaf: Fr.fromHexString(hash),
|
|
308
|
+
l1BlockNumber: log.blockNumber,
|
|
309
|
+
l1BlockHash: Buffer32.fromString(log.blockHash),
|
|
310
|
+
l2BlockNumber: Number(checkpointNumber),
|
|
311
|
+
rollingHash: Buffer16.fromString(rollingHash)
|
|
312
|
+
};
|
|
313
|
+
});
|
|
208
314
|
}
|
|
209
315
|
/** Retrieves L2ProofVerified events from the rollup contract. */ export async function retrieveL2ProofVerifiedEvents(publicClient, rollupAddress, searchStartBlock, searchEndBlock) {
|
|
210
316
|
const logs = await publicClient.getLogs({
|
|
@@ -219,7 +325,7 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
219
325
|
});
|
|
220
326
|
return logs.map((log)=>({
|
|
221
327
|
l1BlockNumber: log.blockNumber,
|
|
222
|
-
|
|
328
|
+
checkpointNumber: Number(log.args.checkpointNumber),
|
|
223
329
|
proverId: Fr.fromHexString(log.args.proverId),
|
|
224
330
|
txHash: log.transactionHash
|
|
225
331
|
}));
|
|
@@ -228,12 +334,12 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
228
334
|
const logs = await retrieveL2ProofVerifiedEvents(publicClient, rollupAddress, searchStartBlock, searchEndBlock);
|
|
229
335
|
const retrievedData = [];
|
|
230
336
|
const lastProcessedL1BlockNumber = logs.length > 0 ? logs.at(-1).l1BlockNumber : searchStartBlock - 1n;
|
|
231
|
-
for (const { txHash, proverId,
|
|
337
|
+
for (const { txHash, proverId, checkpointNumber } of logs){
|
|
232
338
|
const proofData = await getProofFromSubmitProofTx(publicClient, txHash, proverId);
|
|
233
339
|
retrievedData.push({
|
|
234
340
|
proof: proofData.proof,
|
|
235
341
|
proverId: proofData.proverId,
|
|
236
|
-
|
|
342
|
+
checkpointNumber,
|
|
237
343
|
txHash
|
|
238
344
|
});
|
|
239
345
|
}
|
|
@@ -243,13 +349,13 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
243
349
|
};
|
|
244
350
|
}
|
|
245
351
|
/**
|
|
246
|
-
* Gets
|
|
352
|
+
* Gets epoch proof metadata (archive root and proof) from the calldata of an L1 transaction.
|
|
247
353
|
* Assumes that the block was published from an EOA.
|
|
248
354
|
* TODO: Add retries and error management.
|
|
249
355
|
* @param publicClient - The viem public client to use for transaction retrieval.
|
|
250
356
|
* @param txHash - Hash of the tx that published it.
|
|
251
|
-
* @param
|
|
252
|
-
* @returns
|
|
357
|
+
* @param expectedProverId - Expected prover ID.
|
|
358
|
+
* @returns Epoch proof metadata from the calldata, deserialized.
|
|
253
359
|
*/ export async function getProofFromSubmitProofTx(publicClient, txHash, expectedProverId) {
|
|
254
360
|
const { input: data } = await publicClient.getTransaction({
|
|
255
361
|
hash: txHash
|
|
@@ -260,11 +366,9 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
260
366
|
});
|
|
261
367
|
let proverId;
|
|
262
368
|
let archiveRoot;
|
|
263
|
-
let aggregationObject;
|
|
264
369
|
let proof;
|
|
265
370
|
if (functionName === 'submitEpochRootProof') {
|
|
266
371
|
const [decodedArgs] = args;
|
|
267
|
-
aggregationObject = Buffer.from(hexToBytes(decodedArgs.aggregationObject));
|
|
268
372
|
proverId = Fr.fromHexString(decodedArgs.args.proverId);
|
|
269
373
|
archiveRoot = Fr.fromHexString(decodedArgs.args.endArchive);
|
|
270
374
|
proof = Proof.fromBuffer(Buffer.from(hexToBytes(decodedArgs.proof)));
|
|
@@ -276,7 +380,6 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
276
380
|
}
|
|
277
381
|
return {
|
|
278
382
|
proverId,
|
|
279
|
-
aggregationObject,
|
|
280
383
|
archiveRoot,
|
|
281
384
|
proof
|
|
282
385
|
};
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export declare class NoBlobBodiesFoundError extends Error {
|
|
2
2
|
constructor(l2BlockNum: number);
|
|
3
3
|
}
|
|
4
|
-
|
|
4
|
+
export declare class InitialBlockNumberNotSequentialError extends Error {
|
|
5
|
+
readonly newBlockNumber: number;
|
|
6
|
+
readonly previousBlockNumber: number | undefined;
|
|
7
|
+
constructor(newBlockNumber: number, previousBlockNumber: number | undefined);
|
|
8
|
+
}
|
|
9
|
+
export declare class BlockNumberNotSequentialError extends Error {
|
|
10
|
+
constructor(newBlockNumber: number, previous: number | undefined);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFCQUFhLHNCQUF1QixTQUFRLEtBQUs7SUFDL0MsWUFBWSxVQUFVLEVBQUUsTUFBTSxFQUU3QjtDQUNGO0FBRUQscUJBQWEsb0NBQXFDLFNBQVEsS0FBSzthQUUzQyxjQUFjLEVBQUUsTUFBTTthQUN0QixtQkFBbUIsRUFBRSxNQUFNLEdBQUcsU0FBUztJQUZ6RCxZQUNrQixjQUFjLEVBQUUsTUFBTSxFQUN0QixtQkFBbUIsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQU94RDtDQUNGO0FBRUQscUJBQWEsNkJBQThCLFNBQVEsS0FBSztJQUN0RCxZQUFZLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBSS9EO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/archiver/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/archiver/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,UAAU,EAAE,MAAM,EAE7B;CACF;AAED,qBAAa,oCAAqC,SAAQ,KAAK;aAE3C,cAAc,EAAE,MAAM;aACtB,mBAAmB,EAAE,MAAM,GAAG,SAAS;IAFzD,YACkB,cAAc,EAAE,MAAM,EACtB,mBAAmB,EAAE,MAAM,GAAG,SAAS,EAOxD;CACF;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,YAAY,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAI/D;CACF"}
|
package/dest/archiver/errors.js
CHANGED
|
@@ -3,3 +3,15 @@ export class NoBlobBodiesFoundError extends Error {
|
|
|
3
3
|
super(`No blob bodies found for block ${l2BlockNum}`);
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
|
+
export class InitialBlockNumberNotSequentialError extends Error {
|
|
7
|
+
newBlockNumber;
|
|
8
|
+
previousBlockNumber;
|
|
9
|
+
constructor(newBlockNumber, previousBlockNumber){
|
|
10
|
+
super(`Cannot insert new block ${newBlockNumber} given previous block number in store is ${previousBlockNumber ?? 'undefined'}`), this.newBlockNumber = newBlockNumber, this.previousBlockNumber = previousBlockNumber;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class BlockNumberNotSequentialError extends Error {
|
|
14
|
+
constructor(newBlockNumber, previous){
|
|
15
|
+
super(`Cannot insert new block ${newBlockNumber} given previous block number in batch is ${previous ?? 'undefined'}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
package/dest/archiver/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export * from './archiver.js';
|
|
2
2
|
export * from './config.js';
|
|
3
|
-
export { type
|
|
4
|
-
export { MemoryArchiverStore } from './memory_archiver_store/memory_archiver_store.js';
|
|
3
|
+
export { type PublishedL2Block, type L1PublishedData } from './structs/published.js';
|
|
5
4
|
export type { ArchiverDataStore } from './archiver_store.js';
|
|
6
|
-
export { KVArchiverDataStore } from './kv_archiver_store/kv_archiver_store.js';
|
|
5
|
+
export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './kv_archiver_store/kv_archiver_store.js';
|
|
7
6
|
export { ContractInstanceStore } from './kv_archiver_store/contract_instance_store.js';
|
|
8
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBRSxLQUFLLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/archiver/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/archiver/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC"}
|
package/dest/archiver/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export * from './archiver.js';
|
|
2
2
|
export * from './config.js';
|
|
3
|
-
export {
|
|
4
|
-
export { KVArchiverDataStore } from './kv_archiver_store/kv_archiver_store.js';
|
|
3
|
+
export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './kv_archiver_store/kv_archiver_store.js';
|
|
5
4
|
export { ContractInstanceStore } from './kv_archiver_store/contract_instance_store.js';
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { L2BlockNew } from '@aztec/stdlib/block';
|
|
2
2
|
import { type LmdbStatsCallback, type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
3
3
|
export declare class ArchiverInstrumentation {
|
|
4
4
|
private telemetry;
|
|
5
5
|
readonly tracer: Tracer;
|
|
6
6
|
private blockHeight;
|
|
7
7
|
private txCount;
|
|
8
|
-
private syncDuration;
|
|
9
|
-
private l1BlocksSynced;
|
|
10
8
|
private l1BlockHeight;
|
|
11
9
|
private proofsSubmittedDelay;
|
|
12
10
|
private proofsSubmittedCount;
|
|
13
11
|
private dbMetrics;
|
|
12
|
+
private pruneDuration;
|
|
14
13
|
private pruneCount;
|
|
14
|
+
private syncDurationPerBlock;
|
|
15
|
+
private syncBlockCount;
|
|
16
|
+
private manaPerBlock;
|
|
17
|
+
private txsPerBlock;
|
|
18
|
+
private syncDurationPerMessage;
|
|
19
|
+
private syncMessageCount;
|
|
15
20
|
private log;
|
|
16
21
|
private constructor();
|
|
17
22
|
static new(telemetry: TelemetryClient, lmdbStats?: LmdbStatsCallback): Promise<ArchiverInstrumentation>;
|
|
18
23
|
isEnabled(): boolean;
|
|
19
|
-
processNewBlocks(syncTimePerBlock: number, blocks:
|
|
20
|
-
|
|
24
|
+
processNewBlocks(syncTimePerBlock: number, blocks: L2BlockNew[]): void;
|
|
25
|
+
processNewMessages(count: number, syncPerMessageMs: number): void;
|
|
26
|
+
processPrune(duration: number): void;
|
|
21
27
|
updateLastProvenBlock(blockNumber: number): void;
|
|
22
28
|
processProofsVerified(logs: {
|
|
23
29
|
proverId: string;
|
|
@@ -26,4 +32,4 @@ export declare class ArchiverInstrumentation {
|
|
|
26
32
|
}[]): void;
|
|
27
33
|
updateL1BlockHeight(blockNumber: bigint): void;
|
|
28
34
|
}
|
|
29
|
-
//# sourceMappingURL=
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFLTCxLQUFLLGlCQUFpQixFQUV0QixLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxxQkFBYSx1QkFBdUI7SUF3QmhDLE9BQU8sQ0FBQyxTQUFTO0lBdkJuQixTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLE9BQU8sQ0FBQyxXQUFXLENBQVE7SUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBZ0I7SUFDL0IsT0FBTyxDQUFDLGFBQWEsQ0FBUTtJQUM3QixPQUFPLENBQUMsb0JBQW9CLENBQVk7SUFDeEMsT0FBTyxDQUFDLG9CQUFvQixDQUFnQjtJQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFjO0lBRS9CLE9BQU8sQ0FBQyxhQUFhLENBQVk7SUFDakMsT0FBTyxDQUFDLFVBQVUsQ0FBZ0I7SUFFbEMsT0FBTyxDQUFDLG9CQUFvQixDQUFZO0lBQ3hDLE9BQU8sQ0FBQyxjQUFjLENBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxZQUFZLENBQVk7SUFDaEMsT0FBTyxDQUFDLFdBQVcsQ0FBWTtJQUUvQixPQUFPLENBQUMsc0JBQXNCLENBQVk7SUFDMUMsT0FBTyxDQUFDLGdCQUFnQixDQUFnQjtJQUV4QyxPQUFPLENBQUMsR0FBRyxDQUE0QztJQUV2RCxPQUFPLGVBcUZOO0lBRUQsT0FBb0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLEVBQUUsaUJBQWlCLG9DQVVoRjtJQUVNLFNBQVMsSUFBSSxPQUFPLENBRTFCO0lBRU0sZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFVckU7SUFFTSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sUUFNaEU7SUFFTSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sUUFHbkM7SUFFTSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxRQUUvQztJQUVNLHFCQUFxQixDQUFDLElBQUksRUFBRTtRQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO1FBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQUUsUUFXOUY7SUFFTSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxRQUU3QztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/archiver/instrumentation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/archiver/instrumentation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAKL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,uBAAuB;IAwBhC,OAAO,CAAC,SAAS;IAvBnB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,WAAW,CAAY;IAE/B,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,gBAAgB,CAAgB;IAExC,OAAO,CAAC,GAAG,CAA4C;IAEvD,OAAO,eAqFN;IAED,OAAoB,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,iBAAiB,oCAUhF;IAEM,SAAS,IAAI,OAAO,CAE1B;IAEM,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAUrE;IAEM,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,QAMhE;IAEM,YAAY,CAAC,QAAQ,EAAE,MAAM,QAGnC;IAEM,qBAAqB,CAAC,WAAW,EAAE,MAAM,QAE/C;IAEM,qBAAqB,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,QAW9F;IAEM,mBAAmB,CAAC,WAAW,EAAE,MAAM,QAE7C;CACF"}
|