@aztec/archiver 3.0.0-nightly.20251025 → 3.0.0-nightly.20251030-2
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/archiver/archiver.d.ts +7 -7
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +14 -17
- package/dest/archiver/data_retrieval.d.ts +2 -2
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +11 -10
- package/dest/factory.d.ts +2 -4
- package/dest/factory.d.ts.map +1 -1
- package/package.json +13 -13
- package/src/archiver/archiver.ts +21 -19
- package/src/archiver/data_retrieval.ts +16 -12
- package/src/factory.ts +1 -3
|
@@ -51,9 +51,7 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
51
51
|
private readonly instrumentation;
|
|
52
52
|
private readonly l1constants;
|
|
53
53
|
private readonly log;
|
|
54
|
-
/**
|
|
55
|
-
* A promise in which we will be continually fetching new L2 blocks.
|
|
56
|
-
*/
|
|
54
|
+
/** A loop in which we will be continually fetching new L2 blocks. */
|
|
57
55
|
private runningPromise?;
|
|
58
56
|
private rollup;
|
|
59
57
|
private inbox;
|
|
@@ -61,6 +59,7 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
61
59
|
private l1BlockNumber;
|
|
62
60
|
private l1Timestamp;
|
|
63
61
|
private initialSyncComplete;
|
|
62
|
+
private initialSyncPromise;
|
|
64
63
|
readonly tracer: Tracer;
|
|
65
64
|
/**
|
|
66
65
|
* Creates a new instance of the Archiver.
|
|
@@ -100,6 +99,7 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
100
99
|
*/
|
|
101
100
|
start(blockUntilSynced: boolean): Promise<void>;
|
|
102
101
|
syncImmediate(): Promise<void>;
|
|
102
|
+
waitForInitialSync(): Promise<void>;
|
|
103
103
|
private syncSafe;
|
|
104
104
|
/**
|
|
105
105
|
* Fetches logs from L1 contracts and processes them.
|
|
@@ -130,10 +130,10 @@ export declare class Archiver extends Archiver_base implements ArchiveSource, Tr
|
|
|
130
130
|
}>;
|
|
131
131
|
getRollupAddress(): Promise<EthAddress>;
|
|
132
132
|
getRegistryAddress(): Promise<EthAddress>;
|
|
133
|
-
getL1BlockNumber(): bigint;
|
|
134
|
-
getL1Timestamp(): Promise<bigint>;
|
|
135
|
-
getL2SlotNumber(): Promise<bigint>;
|
|
136
|
-
getL2EpochNumber(): Promise<bigint>;
|
|
133
|
+
getL1BlockNumber(): bigint | undefined;
|
|
134
|
+
getL1Timestamp(): Promise<bigint | undefined>;
|
|
135
|
+
getL2SlotNumber(): Promise<bigint | undefined>;
|
|
136
|
+
getL2EpochNumber(): Promise<bigint | undefined>;
|
|
137
137
|
getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
|
|
138
138
|
getBlockHeadersForEpoch(epochNumber: bigint): Promise<BlockHeader[]>;
|
|
139
139
|
isEpochComplete(epochNumber: bigint): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAY,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
|
11
11
|
import { merge, pick } from '@aztec/foundation/collection';
|
|
12
12
|
import { Fr } from '@aztec/foundation/fields';
|
|
13
13
|
import { createLogger } from '@aztec/foundation/log';
|
|
14
|
+
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
14
15
|
import { RunningPromise, makeLoggingErrorHandler } from '@aztec/foundation/running-promise';
|
|
15
16
|
import { sleep } from '@aztec/foundation/sleep';
|
|
16
17
|
import { count } from '@aztec/foundation/string';
|
|
@@ -49,15 +50,14 @@ function mapArchiverConfig(config) {
|
|
|
49
50
|
instrumentation;
|
|
50
51
|
l1constants;
|
|
51
52
|
log;
|
|
52
|
-
/**
|
|
53
|
-
* A promise in which we will be continually fetching new L2 blocks.
|
|
54
|
-
*/ runningPromise;
|
|
53
|
+
/** A loop in which we will be continually fetching new L2 blocks. */ runningPromise;
|
|
55
54
|
rollup;
|
|
56
55
|
inbox;
|
|
57
56
|
store;
|
|
58
57
|
l1BlockNumber;
|
|
59
58
|
l1Timestamp;
|
|
60
59
|
initialSyncComplete;
|
|
60
|
+
initialSyncPromise;
|
|
61
61
|
tracer;
|
|
62
62
|
/**
|
|
63
63
|
* Creates a new instance of the Archiver.
|
|
@@ -74,6 +74,7 @@ function mapArchiverConfig(config) {
|
|
|
74
74
|
this.store = new ArchiverStoreHelper(dataStore);
|
|
75
75
|
this.rollup = new RollupContract(publicClient, l1Addresses.rollupAddress);
|
|
76
76
|
this.inbox = new InboxContract(publicClient, l1Addresses.inboxAddress);
|
|
77
|
+
this.initialSyncPromise = promiseWithResolvers();
|
|
77
78
|
}
|
|
78
79
|
/**
|
|
79
80
|
* Creates a new instance of the Archiver and blocks until it syncs from chain.
|
|
@@ -148,6 +149,9 @@ function mapArchiverConfig(config) {
|
|
|
148
149
|
}
|
|
149
150
|
return this.runningPromise.trigger();
|
|
150
151
|
}
|
|
152
|
+
waitForInitialSync() {
|
|
153
|
+
return this.initialSyncPromise.promise;
|
|
154
|
+
}
|
|
151
155
|
async syncSafe(initialRun) {
|
|
152
156
|
try {
|
|
153
157
|
await this.sync(initialRun);
|
|
@@ -241,6 +245,7 @@ function mapArchiverConfig(config) {
|
|
|
241
245
|
this.l1Timestamp = currentL1Timestamp;
|
|
242
246
|
this.l1BlockNumber = currentL1BlockNumber;
|
|
243
247
|
this.initialSyncComplete = true;
|
|
248
|
+
this.initialSyncPromise.resolve();
|
|
244
249
|
if (initialRun) {
|
|
245
250
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete.`, {
|
|
246
251
|
l1BlockNumber: currentL1BlockNumber,
|
|
@@ -732,24 +737,16 @@ function mapArchiverConfig(config) {
|
|
|
732
737
|
return Promise.resolve(this.l1Addresses.registryAddress);
|
|
733
738
|
}
|
|
734
739
|
getL1BlockNumber() {
|
|
735
|
-
|
|
736
|
-
if (!l1BlockNumber) {
|
|
737
|
-
throw new Error('L1 block number not yet available. Complete an initial sync first.');
|
|
738
|
-
}
|
|
739
|
-
return l1BlockNumber;
|
|
740
|
+
return this.l1BlockNumber;
|
|
740
741
|
}
|
|
741
742
|
getL1Timestamp() {
|
|
742
|
-
|
|
743
|
-
if (!l1Timestamp) {
|
|
744
|
-
throw new Error('L1 timestamp not yet available. Complete an initial sync first.');
|
|
745
|
-
}
|
|
746
|
-
return Promise.resolve(l1Timestamp);
|
|
743
|
+
return Promise.resolve(this.l1Timestamp);
|
|
747
744
|
}
|
|
748
|
-
|
|
749
|
-
return getSlotAtTimestamp(
|
|
745
|
+
getL2SlotNumber() {
|
|
746
|
+
return Promise.resolve(this.l1Timestamp === undefined ? undefined : getSlotAtTimestamp(this.l1Timestamp, this.l1constants));
|
|
750
747
|
}
|
|
751
|
-
|
|
752
|
-
return getEpochNumberAtTimestamp(
|
|
748
|
+
getL2EpochNumber() {
|
|
749
|
+
return Promise.resolve(this.l1Timestamp === undefined ? undefined : getEpochNumberAtTimestamp(this.l1Timestamp, this.l1constants));
|
|
753
750
|
}
|
|
754
751
|
async getBlocksForEpoch(epochNumber) {
|
|
755
752
|
const [start, end] = getSlotRangeForEpoch(epochNumber, this.l1constants);
|
|
@@ -4,7 +4,7 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { type Logger } from '@aztec/foundation/log';
|
|
6
6
|
import { type InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
7
|
-
import {
|
|
7
|
+
import { CommitteeAttestation, PublishedL2Block } from '@aztec/stdlib/block';
|
|
8
8
|
import { Proof } from '@aztec/stdlib/proofs';
|
|
9
9
|
import { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
10
10
|
import { StateReference } from '@aztec/stdlib/tx';
|
|
@@ -17,7 +17,7 @@ export type RetrievedL2Block = {
|
|
|
17
17
|
archiveRoot: Fr;
|
|
18
18
|
stateReference: StateReference;
|
|
19
19
|
header: CheckpointHeader;
|
|
20
|
-
|
|
20
|
+
blobFields: Fr[];
|
|
21
21
|
l1: L1PublishedData;
|
|
22
22
|
chainId: Fr;
|
|
23
23
|
version: Fr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_retrieval.d.ts","sourceRoot":"","sources":["../../src/archiver/data_retrieval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAEV,UAAU,EAGV,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"data_retrieval.d.ts","sourceRoot":"","sources":["../../src/archiver/data_retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlobDeserializationError, SpongeBlob, getBlobFieldsInCheckpoint } from '@aztec/blob-lib';
|
|
2
2
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
3
3
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
@@ -12,7 +12,7 @@ import { GlobalVariables, StateReference } from '@aztec/stdlib/tx';
|
|
|
12
12
|
import { decodeFunctionData, getAbiItem, hexToBytes, multicall3Abi } from 'viem';
|
|
13
13
|
import { NoBlobBodiesFoundError } from './errors.js';
|
|
14
14
|
export async function retrievedBlockToPublishedL2Block(retrievedBlock) {
|
|
15
|
-
const { l2BlockNumber, archiveRoot, stateReference, header: checkpointHeader,
|
|
15
|
+
const { l2BlockNumber, archiveRoot, stateReference, header: checkpointHeader, blobFields, l1, chainId, version, attestations } = retrievedBlock;
|
|
16
16
|
const archive = new AppendOnlyTreeSnapshot(archiveRoot, l2BlockNumber + 1);
|
|
17
17
|
const globalVariables = GlobalVariables.from({
|
|
18
18
|
chainId,
|
|
@@ -27,10 +27,12 @@ export async function retrievedBlockToPublishedL2Block(retrievedBlock) {
|
|
|
27
27
|
// TODO(#17027)
|
|
28
28
|
// This works when there's only one block in the checkpoint.
|
|
29
29
|
// If there's more than one block, we need to build the spongeBlob from the endSpongeBlob of the previous block.
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const spongeBlob = await SpongeBlob.init(blobFields.length);
|
|
31
|
+
// Skip the first field which is the checkpoint prefix indicating the number of total blob fields in a checkpoint.
|
|
32
|
+
const blockBlobFields = blobFields.slice(1);
|
|
33
|
+
await spongeBlob.absorb(blockBlobFields);
|
|
33
34
|
const spongeBlobHash = await spongeBlob.squeeze();
|
|
35
|
+
const body = Body.fromBlobFields(blockBlobFields);
|
|
34
36
|
const header = L2BlockHeader.from({
|
|
35
37
|
lastArchive: new AppendOnlyTreeSnapshot(checkpointHeader.lastArchiveRoot, l2BlockNumber),
|
|
36
38
|
contentCommitment: checkpointHeader.contentCommitment,
|
|
@@ -217,9 +219,10 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
217
219
|
if (blobBodies.length === 0) {
|
|
218
220
|
throw new NoBlobBodiesFoundError(l2BlockNumber);
|
|
219
221
|
}
|
|
220
|
-
let
|
|
222
|
+
let blobFields;
|
|
221
223
|
try {
|
|
222
|
-
|
|
224
|
+
// Get the fields that were actually added in the checkpoint. And check the encoding of the fields.
|
|
225
|
+
blobFields = getBlobFieldsInCheckpoint(blobBodies.map((b)=>b.blob), true);
|
|
223
226
|
} catch (err) {
|
|
224
227
|
if (err instanceof BlobDeserializationError) {
|
|
225
228
|
logger.fatal(err.message);
|
|
@@ -228,8 +231,6 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
228
231
|
}
|
|
229
232
|
throw err;
|
|
230
233
|
}
|
|
231
|
-
// The blob source gives us blockFields, and we must construct the body from them:
|
|
232
|
-
const body = Body.fromBlobFields(blockFields);
|
|
233
234
|
const archiveRoot = new Fr(Buffer.from(hexToBytes(decodedArgs.archive)));
|
|
234
235
|
const stateReference = StateReference.fromViem(decodedArgs.stateReference);
|
|
235
236
|
return {
|
|
@@ -237,7 +238,7 @@ export async function getL1BlockTime(publicClient, blockNumber) {
|
|
|
237
238
|
archiveRoot,
|
|
238
239
|
stateReference,
|
|
239
240
|
header,
|
|
240
|
-
|
|
241
|
+
blobFields,
|
|
241
242
|
attestations
|
|
242
243
|
};
|
|
243
244
|
}
|
package/dest/factory.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
2
|
-
import type
|
|
3
|
-
import type { ArchiverApi, Service } from '@aztec/stdlib/interfaces/server';
|
|
4
|
-
import { type ArchiverDeps } from './archiver/archiver.js';
|
|
2
|
+
import { Archiver, type ArchiverDeps } from './archiver/archiver.js';
|
|
5
3
|
import type { ArchiverConfig } from './archiver/config.js';
|
|
6
4
|
import { KVArchiverDataStore } from './archiver/kv_archiver_store/kv_archiver_store.js';
|
|
7
5
|
export declare const ARCHIVER_STORE_NAME = "archiver";
|
|
@@ -17,5 +15,5 @@ export declare function createArchiverStore(userConfig: Pick<ArchiverConfig, 'ar
|
|
|
17
15
|
*/
|
|
18
16
|
export declare function createArchiver(config: ArchiverConfig & DataStoreConfig, deps: ArchiverDeps, opts?: {
|
|
19
17
|
blockUntilSync: boolean;
|
|
20
|
-
}): Promise<
|
|
18
|
+
}): Promise<Archiver>;
|
|
21
19
|
//# sourceMappingURL=factory.d.ts.map
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAO9D,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAE7G,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,iCAAiC;AACjC,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC,GAAG,eAAe,gCAQzF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE,YAAY,EAClB,IAAI,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA6B,GAC3D,OAAO,CAAC,QAAQ,CAAC,CAInB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "3.0.0-nightly.
|
|
3
|
+
"version": "3.0.0-nightly.20251030-2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -66,18 +66,18 @@
|
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@aztec/blob-lib": "3.0.0-nightly.
|
|
70
|
-
"@aztec/blob-sink": "3.0.0-nightly.
|
|
71
|
-
"@aztec/constants": "3.0.0-nightly.
|
|
72
|
-
"@aztec/epoch-cache": "3.0.0-nightly.
|
|
73
|
-
"@aztec/ethereum": "3.0.0-nightly.
|
|
74
|
-
"@aztec/foundation": "3.0.0-nightly.
|
|
75
|
-
"@aztec/kv-store": "3.0.0-nightly.
|
|
76
|
-
"@aztec/l1-artifacts": "3.0.0-nightly.
|
|
77
|
-
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.
|
|
78
|
-
"@aztec/protocol-contracts": "3.0.0-nightly.
|
|
79
|
-
"@aztec/stdlib": "3.0.0-nightly.
|
|
80
|
-
"@aztec/telemetry-client": "3.0.0-nightly.
|
|
69
|
+
"@aztec/blob-lib": "3.0.0-nightly.20251030-2",
|
|
70
|
+
"@aztec/blob-sink": "3.0.0-nightly.20251030-2",
|
|
71
|
+
"@aztec/constants": "3.0.0-nightly.20251030-2",
|
|
72
|
+
"@aztec/epoch-cache": "3.0.0-nightly.20251030-2",
|
|
73
|
+
"@aztec/ethereum": "3.0.0-nightly.20251030-2",
|
|
74
|
+
"@aztec/foundation": "3.0.0-nightly.20251030-2",
|
|
75
|
+
"@aztec/kv-store": "3.0.0-nightly.20251030-2",
|
|
76
|
+
"@aztec/l1-artifacts": "3.0.0-nightly.20251030-2",
|
|
77
|
+
"@aztec/noir-protocol-circuits-types": "3.0.0-nightly.20251030-2",
|
|
78
|
+
"@aztec/protocol-contracts": "3.0.0-nightly.20251030-2",
|
|
79
|
+
"@aztec/stdlib": "3.0.0-nightly.20251030-2",
|
|
80
|
+
"@aztec/telemetry-client": "3.0.0-nightly.20251030-2",
|
|
81
81
|
"lodash.groupby": "^4.6.0",
|
|
82
82
|
"lodash.omit": "^4.5.0",
|
|
83
83
|
"tsc-watch": "^6.0.0",
|
package/src/archiver/archiver.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { merge, pick } from '@aztec/foundation/collection';
|
|
|
14
14
|
import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
15
15
|
import { Fr } from '@aztec/foundation/fields';
|
|
16
16
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
17
|
+
import { type PromiseWithResolvers, promiseWithResolvers } from '@aztec/foundation/promise';
|
|
17
18
|
import { RunningPromise, makeLoggingErrorHandler } from '@aztec/foundation/running-promise';
|
|
18
19
|
import { sleep } from '@aztec/foundation/sleep';
|
|
19
20
|
import { count } from '@aztec/foundation/string';
|
|
@@ -116,9 +117,7 @@ function mapArchiverConfig(config: Partial<ArchiverConfig>) {
|
|
|
116
117
|
* concern themselves with it.
|
|
117
118
|
*/
|
|
118
119
|
export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implements ArchiveSource, Traceable {
|
|
119
|
-
/**
|
|
120
|
-
* A promise in which we will be continually fetching new L2 blocks.
|
|
121
|
-
*/
|
|
120
|
+
/** A loop in which we will be continually fetching new L2 blocks. */
|
|
122
121
|
private runningPromise?: RunningPromise;
|
|
123
122
|
|
|
124
123
|
private rollup: RollupContract;
|
|
@@ -129,6 +128,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
129
128
|
private l1BlockNumber: bigint | undefined;
|
|
130
129
|
private l1Timestamp: bigint | undefined;
|
|
131
130
|
private initialSyncComplete: boolean = false;
|
|
131
|
+
private initialSyncPromise: PromiseWithResolvers<void>;
|
|
132
132
|
|
|
133
133
|
public readonly tracer: Tracer;
|
|
134
134
|
|
|
@@ -160,6 +160,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
160
160
|
|
|
161
161
|
this.rollup = new RollupContract(publicClient, l1Addresses.rollupAddress);
|
|
162
162
|
this.inbox = new InboxContract(publicClient, l1Addresses.inboxAddress);
|
|
163
|
+
this.initialSyncPromise = promiseWithResolvers();
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
/**
|
|
@@ -272,6 +273,10 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
272
273
|
return this.runningPromise.trigger();
|
|
273
274
|
}
|
|
274
275
|
|
|
276
|
+
public waitForInitialSync() {
|
|
277
|
+
return this.initialSyncPromise.promise;
|
|
278
|
+
}
|
|
279
|
+
|
|
275
280
|
private async syncSafe(initialRun: boolean) {
|
|
276
281
|
try {
|
|
277
282
|
await this.sync(initialRun);
|
|
@@ -384,6 +389,7 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
384
389
|
this.l1Timestamp = currentL1Timestamp;
|
|
385
390
|
this.l1BlockNumber = currentL1BlockNumber;
|
|
386
391
|
this.initialSyncComplete = true;
|
|
392
|
+
this.initialSyncPromise.resolve();
|
|
387
393
|
|
|
388
394
|
if (initialRun) {
|
|
389
395
|
this.log.info(`Initial archiver sync to L1 block ${currentL1BlockNumber} complete.`, {
|
|
@@ -991,28 +997,24 @@ export class Archiver extends (EventEmitter as new () => ArchiverEmitter) implem
|
|
|
991
997
|
return Promise.resolve(this.l1Addresses.registryAddress);
|
|
992
998
|
}
|
|
993
999
|
|
|
994
|
-
public getL1BlockNumber(): bigint {
|
|
995
|
-
|
|
996
|
-
if (!l1BlockNumber) {
|
|
997
|
-
throw new Error('L1 block number not yet available. Complete an initial sync first.');
|
|
998
|
-
}
|
|
999
|
-
return l1BlockNumber;
|
|
1000
|
+
public getL1BlockNumber(): bigint | undefined {
|
|
1001
|
+
return this.l1BlockNumber;
|
|
1000
1002
|
}
|
|
1001
1003
|
|
|
1002
|
-
public getL1Timestamp(): Promise<bigint> {
|
|
1003
|
-
|
|
1004
|
-
if (!l1Timestamp) {
|
|
1005
|
-
throw new Error('L1 timestamp not yet available. Complete an initial sync first.');
|
|
1006
|
-
}
|
|
1007
|
-
return Promise.resolve(l1Timestamp);
|
|
1004
|
+
public getL1Timestamp(): Promise<bigint | undefined> {
|
|
1005
|
+
return Promise.resolve(this.l1Timestamp);
|
|
1008
1006
|
}
|
|
1009
1007
|
|
|
1010
|
-
public
|
|
1011
|
-
return
|
|
1008
|
+
public getL2SlotNumber(): Promise<bigint | undefined> {
|
|
1009
|
+
return Promise.resolve(
|
|
1010
|
+
this.l1Timestamp === undefined ? undefined : getSlotAtTimestamp(this.l1Timestamp, this.l1constants),
|
|
1011
|
+
);
|
|
1012
1012
|
}
|
|
1013
1013
|
|
|
1014
|
-
public
|
|
1015
|
-
return
|
|
1014
|
+
public getL2EpochNumber(): Promise<bigint | undefined> {
|
|
1015
|
+
return Promise.resolve(
|
|
1016
|
+
this.l1Timestamp === undefined ? undefined : getEpochNumberAtTimestamp(this.l1Timestamp, this.l1constants),
|
|
1017
|
+
);
|
|
1016
1018
|
}
|
|
1017
1019
|
|
|
1018
1020
|
public async getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BlobDeserializationError, SpongeBlob, getBlobFieldsInCheckpoint } from '@aztec/blob-lib';
|
|
2
2
|
import type { BlobSinkClientInterface } from '@aztec/blob-sink/client';
|
|
3
3
|
import type {
|
|
4
4
|
EpochProofPublicInputArgs,
|
|
@@ -41,7 +41,7 @@ export type RetrievedL2Block = {
|
|
|
41
41
|
archiveRoot: Fr;
|
|
42
42
|
stateReference: StateReference;
|
|
43
43
|
header: CheckpointHeader;
|
|
44
|
-
|
|
44
|
+
blobFields: Fr[];
|
|
45
45
|
l1: L1PublishedData;
|
|
46
46
|
chainId: Fr;
|
|
47
47
|
version: Fr;
|
|
@@ -54,7 +54,7 @@ export async function retrievedBlockToPublishedL2Block(retrievedBlock: Retrieved
|
|
|
54
54
|
archiveRoot,
|
|
55
55
|
stateReference,
|
|
56
56
|
header: checkpointHeader,
|
|
57
|
-
|
|
57
|
+
blobFields,
|
|
58
58
|
l1,
|
|
59
59
|
chainId,
|
|
60
60
|
version,
|
|
@@ -80,11 +80,14 @@ export async function retrievedBlockToPublishedL2Block(retrievedBlock: Retrieved
|
|
|
80
80
|
// TODO(#17027)
|
|
81
81
|
// This works when there's only one block in the checkpoint.
|
|
82
82
|
// If there's more than one block, we need to build the spongeBlob from the endSpongeBlob of the previous block.
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
const spongeBlob = await SpongeBlob.init(blobFields.length);
|
|
84
|
+
// Skip the first field which is the checkpoint prefix indicating the number of total blob fields in a checkpoint.
|
|
85
|
+
const blockBlobFields = blobFields.slice(1);
|
|
86
|
+
await spongeBlob.absorb(blockBlobFields);
|
|
86
87
|
const spongeBlobHash = await spongeBlob.squeeze();
|
|
87
88
|
|
|
89
|
+
const body = Body.fromBlobFields(blockBlobFields);
|
|
90
|
+
|
|
88
91
|
const header = L2BlockHeader.from({
|
|
89
92
|
lastArchive: new AppendOnlyTreeSnapshot(checkpointHeader.lastArchiveRoot, l2BlockNumber),
|
|
90
93
|
contentCommitment: checkpointHeader.contentCommitment,
|
|
@@ -353,9 +356,13 @@ async function getBlockFromRollupTx(
|
|
|
353
356
|
throw new NoBlobBodiesFoundError(l2BlockNumber);
|
|
354
357
|
}
|
|
355
358
|
|
|
356
|
-
let
|
|
359
|
+
let blobFields: Fr[];
|
|
357
360
|
try {
|
|
358
|
-
|
|
361
|
+
// Get the fields that were actually added in the checkpoint. And check the encoding of the fields.
|
|
362
|
+
blobFields = getBlobFieldsInCheckpoint(
|
|
363
|
+
blobBodies.map(b => b.blob),
|
|
364
|
+
true /* checkEncoding */,
|
|
365
|
+
);
|
|
359
366
|
} catch (err: any) {
|
|
360
367
|
if (err instanceof BlobDeserializationError) {
|
|
361
368
|
logger.fatal(err.message);
|
|
@@ -365,9 +372,6 @@ async function getBlockFromRollupTx(
|
|
|
365
372
|
throw err;
|
|
366
373
|
}
|
|
367
374
|
|
|
368
|
-
// The blob source gives us blockFields, and we must construct the body from them:
|
|
369
|
-
const body = Body.fromBlobFields(blockFields);
|
|
370
|
-
|
|
371
375
|
const archiveRoot = new Fr(Buffer.from(hexToBytes(decodedArgs.archive)));
|
|
372
376
|
|
|
373
377
|
const stateReference = StateReference.fromViem(decodedArgs.stateReference);
|
|
@@ -377,7 +381,7 @@ async function getBlockFromRollupTx(
|
|
|
377
381
|
archiveRoot,
|
|
378
382
|
stateReference,
|
|
379
383
|
header,
|
|
380
|
-
|
|
384
|
+
blobFields,
|
|
381
385
|
attestations,
|
|
382
386
|
};
|
|
383
387
|
}
|
package/src/factory.ts
CHANGED
|
@@ -4,9 +4,7 @@ import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
|
4
4
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
5
5
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
6
6
|
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
7
|
-
import type { L2BlockSourceEventEmitter } from '@aztec/stdlib/block';
|
|
8
7
|
import { type ContractClassPublic, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
9
|
-
import type { ArchiverApi, Service } from '@aztec/stdlib/interfaces/server';
|
|
10
8
|
|
|
11
9
|
import { Archiver, type ArchiverDeps } from './archiver/archiver.js';
|
|
12
10
|
import type { ArchiverConfig } from './archiver/config.js';
|
|
@@ -38,7 +36,7 @@ export async function createArchiver(
|
|
|
38
36
|
config: ArchiverConfig & DataStoreConfig,
|
|
39
37
|
deps: ArchiverDeps,
|
|
40
38
|
opts: { blockUntilSync: boolean } = { blockUntilSync: true },
|
|
41
|
-
): Promise<
|
|
39
|
+
): Promise<Archiver> {
|
|
42
40
|
const archiverStore = await createArchiverStore(config);
|
|
43
41
|
await registerProtocolContracts(archiverStore);
|
|
44
42
|
return Archiver.createAndSync(config, archiverStore, deps, opts.blockUntilSync);
|