@aztec/prover-client 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.
|
@@ -22,6 +22,13 @@ export declare class LightweightCheckpointBuilder {
|
|
|
22
22
|
private blobFields;
|
|
23
23
|
constructor(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations);
|
|
24
24
|
static startNewCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations): Promise<LightweightCheckpointBuilder>;
|
|
25
|
+
/**
|
|
26
|
+
* Resumes building a checkpoint from existing blocks. This is used for validator re-execution
|
|
27
|
+
* where blocks have already been built and their effects are already in the database.
|
|
28
|
+
* Unlike startNewCheckpoint, this does NOT append l1ToL2Messages to the tree since they
|
|
29
|
+
* were already added when the blocks were originally built.
|
|
30
|
+
*/
|
|
31
|
+
static resumeCheckpoint(checkpointNumber: CheckpointNumber, constants: CheckpointGlobalVariables, l1ToL2Messages: Fr[], db: MerkleTreeWriteOperations, existingBlocks: L2BlockNew[]): Promise<LightweightCheckpointBuilder>;
|
|
25
32
|
/**
|
|
26
33
|
* Adds a new block to the checkpoint. The tx effects must have already been inserted into the db if
|
|
27
34
|
* this is called after tx processing, if that's not the case, then set `insertTxsEffects` to true.
|
|
@@ -33,4 +40,4 @@ export declare class LightweightCheckpointBuilder {
|
|
|
33
40
|
completeCheckpoint(): Promise<Checkpoint>;
|
|
34
41
|
clone(): LightweightCheckpointBuilder;
|
|
35
42
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHR3ZWlnaHRfY2hlY2twb2ludF9idWlsZGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlnaHQvbGlnaHR3ZWlnaHRfY2hlY2twb2ludF9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlqRixPQUFPLEVBQ0wsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyxlQUFlLEVBQ3BCLEtBQUssV0FBVyxFQUNoQixjQUFjLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQVExQjs7Ozs7R0FLRztBQUNILHFCQUFhLDRCQUE0QjthQVNyQixnQkFBZ0IsRUFBRSxnQkFBZ0I7YUFDbEMsU0FBUyxFQUFFLHlCQUF5QjthQUNwQyxjQUFjLEVBQUUsRUFBRSxFQUFFO2FBQ3BCLEVBQUUsRUFBRSx5QkFBeUI7SUFYL0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQWtEO0lBRXpFLE9BQU8sQ0FBQyxZQUFZLENBQWdDO0lBQ3BELE9BQU8sQ0FBQyxVQUFVLENBQWE7SUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBb0I7SUFDbEMsT0FBTyxDQUFDLFVBQVUsQ0FBWTtJQUU5QixZQUNrQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLHlCQUF5QixFQUNwQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQ3BCLEVBQUUsRUFBRSx5QkFBeUIsRUFJOUM7SUFFRCxPQUFhLGtCQUFrQixDQUM3QixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLHlCQUF5QixFQUNwQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQ3BCLEVBQUUsRUFBRSx5QkFBeUIsR0FDNUIsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBUXZDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFhLGdCQUFnQixDQUMzQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsU0FBUyxFQUFFLHlCQUF5QixFQUNwQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQ3BCLEVBQUUsRUFBRSx5QkFBeUIsRUFDN0IsY0FBYyxFQUFFLFVBQVUsRUFBRSxHQUMzQixPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0F1Q3ZDO0lBRUQ7OztPQUdHO0lBQ1UsUUFBUSxDQUNuQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQ2xCLElBQUksR0FBRTtRQUFFLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQUMsZ0JBQWdCLENBQUMsRUFBRSxjQUFjLENBQUE7S0FBTyxHQUMzRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBaUVyQjtJQUVLLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0F5QzlDO0lBRUQsS0FBSyxpQ0FZSjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightweight_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/light/lightweight_checkpoint_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAQ1B;;;;;GAKG;AACH,qBAAa,4BAA4B;aASrB,gBAAgB,EAAE,gBAAgB;aAClC,SAAS,EAAE,yBAAyB;aACpC,cAAc,EAAE,EAAE,EAAE;aACpB,EAAE,EAAE,yBAAyB;IAX/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IAEzE,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAY;IAE9B,YACkB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAI9C;IAED,OAAa,kBAAkB,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,GAC5B,OAAO,CAAC,4BAA4B,CAAC,CAQvC;IAED;;;OAGG;IACU,QAAQ,CACnB,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,WAAW,EAAE,EAClB,IAAI,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,cAAc,CAAA;KAAO,GAC3E,OAAO,CAAC,UAAU,CAAC,CAiErB;IAEK,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAyC9C;IAED,KAAK,iCAYJ;CACF"}
|
|
1
|
+
{"version":3,"file":"lightweight_checkpoint_builder.d.ts","sourceRoot":"","sources":["../../src/light/lightweight_checkpoint_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAIjF,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAQ1B;;;;;GAKG;AACH,qBAAa,4BAA4B;aASrB,gBAAgB,EAAE,gBAAgB;aAClC,SAAS,EAAE,yBAAyB;aACpC,cAAc,EAAE,EAAE,EAAE;aACpB,EAAE,EAAE,yBAAyB;IAX/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IAEzE,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAY;IAE9B,YACkB,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAI9C;IAED,OAAa,kBAAkB,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,GAC5B,OAAO,CAAC,4BAA4B,CAAC,CAQvC;IAED;;;;;OAKG;IACH,OAAa,gBAAgB,CAC3B,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,yBAAyB,EACpC,cAAc,EAAE,EAAE,EAAE,EACpB,EAAE,EAAE,yBAAyB,EAC7B,cAAc,EAAE,UAAU,EAAE,GAC3B,OAAO,CAAC,4BAA4B,CAAC,CAuCvC;IAED;;;OAGG;IACU,QAAQ,CACnB,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,WAAW,EAAE,EAClB,IAAI,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,cAAc,CAAA;KAAO,GAC3E,OAAO,CAAC,UAAU,CAAC,CAiErB;IAEK,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAyC9C;IAED,KAAK,iCAYJ;CACF"}
|
|
@@ -45,6 +45,43 @@ import { buildHeaderAndBodyFromTxs, getTreeSnapshot, insertSideEffects } from '.
|
|
|
45
45
|
return new LightweightCheckpointBuilder(checkpointNumber, constants, l1ToL2Messages, db);
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
+
* Resumes building a checkpoint from existing blocks. This is used for validator re-execution
|
|
49
|
+
* where blocks have already been built and their effects are already in the database.
|
|
50
|
+
* Unlike startNewCheckpoint, this does NOT append l1ToL2Messages to the tree since they
|
|
51
|
+
* were already added when the blocks were originally built.
|
|
52
|
+
*/ static async resumeCheckpoint(checkpointNumber, constants, l1ToL2Messages, db, existingBlocks) {
|
|
53
|
+
const builder = new LightweightCheckpointBuilder(checkpointNumber, constants, l1ToL2Messages, db);
|
|
54
|
+
builder.logger.debug('Resuming checkpoint from existing blocks', {
|
|
55
|
+
checkpointNumber,
|
|
56
|
+
numExistingBlocks: existingBlocks.length,
|
|
57
|
+
blockNumbers: existingBlocks.map((b)=>b.header.getBlockNumber())
|
|
58
|
+
});
|
|
59
|
+
// Validate block order and consistency
|
|
60
|
+
for(let i = 1; i < existingBlocks.length; i++){
|
|
61
|
+
const prev = existingBlocks[i - 1];
|
|
62
|
+
const curr = existingBlocks[i];
|
|
63
|
+
if (curr.number !== prev.number + 1) {
|
|
64
|
+
throw new Error(`Non-sequential block numbers in resumeCheckpoint: ${prev.number} -> ${curr.number}`);
|
|
65
|
+
}
|
|
66
|
+
if (!prev.archive.root.equals(curr.header.lastArchive.root)) {
|
|
67
|
+
throw new Error(`Archive root mismatch between blocks ${prev.number} and ${curr.number}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
for(let i = 0; i < existingBlocks.length; i++){
|
|
71
|
+
const block = existingBlocks[i];
|
|
72
|
+
const isFirstBlock = i === 0;
|
|
73
|
+
if (isFirstBlock) {
|
|
74
|
+
builder.lastArchives.push(block.header.lastArchive);
|
|
75
|
+
}
|
|
76
|
+
builder.lastArchives.push(block.archive);
|
|
77
|
+
const blockBlobFields = block.toBlobFields();
|
|
78
|
+
await builder.spongeBlob.absorb(blockBlobFields);
|
|
79
|
+
builder.blobFields.push(...blockBlobFields);
|
|
80
|
+
builder.blocks.push(block);
|
|
81
|
+
}
|
|
82
|
+
return builder;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
48
85
|
* Adds a new block to the checkpoint. The tx effects must have already been inserted into the db if
|
|
49
86
|
* this is called after tx processing, if that's not the case, then set `insertTxsEffects` to true.
|
|
50
87
|
*/ async addBlock(globalVariables, txs, opts = {}) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-client",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260113",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -69,19 +69,19 @@
|
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@aztec/bb-prover": "4.0.0-nightly.
|
|
73
|
-
"@aztec/blob-lib": "4.0.0-nightly.
|
|
74
|
-
"@aztec/constants": "4.0.0-nightly.
|
|
75
|
-
"@aztec/ethereum": "4.0.0-nightly.
|
|
76
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
77
|
-
"@aztec/kv-store": "4.0.0-nightly.
|
|
78
|
-
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.
|
|
79
|
-
"@aztec/noir-types": "4.0.0-nightly.
|
|
80
|
-
"@aztec/protocol-contracts": "4.0.0-nightly.
|
|
81
|
-
"@aztec/simulator": "4.0.0-nightly.
|
|
82
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
83
|
-
"@aztec/telemetry-client": "4.0.0-nightly.
|
|
84
|
-
"@aztec/world-state": "4.0.0-nightly.
|
|
72
|
+
"@aztec/bb-prover": "4.0.0-nightly.20260113",
|
|
73
|
+
"@aztec/blob-lib": "4.0.0-nightly.20260113",
|
|
74
|
+
"@aztec/constants": "4.0.0-nightly.20260113",
|
|
75
|
+
"@aztec/ethereum": "4.0.0-nightly.20260113",
|
|
76
|
+
"@aztec/foundation": "4.0.0-nightly.20260113",
|
|
77
|
+
"@aztec/kv-store": "4.0.0-nightly.20260113",
|
|
78
|
+
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260113",
|
|
79
|
+
"@aztec/noir-types": "4.0.0-nightly.20260113",
|
|
80
|
+
"@aztec/protocol-contracts": "4.0.0-nightly.20260113",
|
|
81
|
+
"@aztec/simulator": "4.0.0-nightly.20260113",
|
|
82
|
+
"@aztec/stdlib": "4.0.0-nightly.20260113",
|
|
83
|
+
"@aztec/telemetry-client": "4.0.0-nightly.20260113",
|
|
84
|
+
"@aztec/world-state": "4.0.0-nightly.20260113",
|
|
85
85
|
"@google-cloud/storage": "^7.15.0",
|
|
86
86
|
"@iarna/toml": "^2.2.5",
|
|
87
87
|
"commander": "^12.1.0",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"zod": "^3.23.8"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
|
-
"@aztec/noir-contracts.js": "4.0.0-nightly.
|
|
94
|
+
"@aztec/noir-contracts.js": "4.0.0-nightly.20260113",
|
|
95
95
|
"@jest/globals": "^30.0.0",
|
|
96
96
|
"@types/jest": "^30.0.0",
|
|
97
97
|
"@types/node": "^22.15.17",
|
|
@@ -62,6 +62,59 @@ export class LightweightCheckpointBuilder {
|
|
|
62
62
|
return new LightweightCheckpointBuilder(checkpointNumber, constants, l1ToL2Messages, db);
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Resumes building a checkpoint from existing blocks. This is used for validator re-execution
|
|
67
|
+
* where blocks have already been built and their effects are already in the database.
|
|
68
|
+
* Unlike startNewCheckpoint, this does NOT append l1ToL2Messages to the tree since they
|
|
69
|
+
* were already added when the blocks were originally built.
|
|
70
|
+
*/
|
|
71
|
+
static async resumeCheckpoint(
|
|
72
|
+
checkpointNumber: CheckpointNumber,
|
|
73
|
+
constants: CheckpointGlobalVariables,
|
|
74
|
+
l1ToL2Messages: Fr[],
|
|
75
|
+
db: MerkleTreeWriteOperations,
|
|
76
|
+
existingBlocks: L2BlockNew[],
|
|
77
|
+
): Promise<LightweightCheckpointBuilder> {
|
|
78
|
+
const builder = new LightweightCheckpointBuilder(checkpointNumber, constants, l1ToL2Messages, db);
|
|
79
|
+
|
|
80
|
+
builder.logger.debug('Resuming checkpoint from existing blocks', {
|
|
81
|
+
checkpointNumber,
|
|
82
|
+
numExistingBlocks: existingBlocks.length,
|
|
83
|
+
blockNumbers: existingBlocks.map(b => b.header.getBlockNumber()),
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Validate block order and consistency
|
|
87
|
+
for (let i = 1; i < existingBlocks.length; i++) {
|
|
88
|
+
const prev = existingBlocks[i - 1];
|
|
89
|
+
const curr = existingBlocks[i];
|
|
90
|
+
if (curr.number !== prev.number + 1) {
|
|
91
|
+
throw new Error(`Non-sequential block numbers in resumeCheckpoint: ${prev.number} -> ${curr.number}`);
|
|
92
|
+
}
|
|
93
|
+
if (!prev.archive.root.equals(curr.header.lastArchive.root)) {
|
|
94
|
+
throw new Error(`Archive root mismatch between blocks ${prev.number} and ${curr.number}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
for (let i = 0; i < existingBlocks.length; i++) {
|
|
99
|
+
const block = existingBlocks[i];
|
|
100
|
+
const isFirstBlock = i === 0;
|
|
101
|
+
|
|
102
|
+
if (isFirstBlock) {
|
|
103
|
+
builder.lastArchives.push(block.header.lastArchive);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
builder.lastArchives.push(block.archive);
|
|
107
|
+
|
|
108
|
+
const blockBlobFields = block.toBlobFields();
|
|
109
|
+
await builder.spongeBlob.absorb(blockBlobFields);
|
|
110
|
+
builder.blobFields.push(...blockBlobFields);
|
|
111
|
+
|
|
112
|
+
builder.blocks.push(block);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return builder;
|
|
116
|
+
}
|
|
117
|
+
|
|
65
118
|
/**
|
|
66
119
|
* Adds a new block to the checkpoint. The tx effects must have already been inserted into the db if
|
|
67
120
|
* this is called after tx processing, if that's not the case, then set `insertTxsEffects` to true.
|