@aztec/archiver 5.0.0-rc.2 → 5.0.1
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.d.ts +1 -1
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +28 -5
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +5 -0
- package/dest/factory.d.ts +8 -1
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +31 -0
- package/dest/l1/calldata_retriever.d.ts +8 -1
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +7 -6
- package/dest/l1/data_retrieval.d.ts +7 -2
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/modules/data_source_base.d.ts +1 -2
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +8 -25
- package/dest/modules/data_store_updater.d.ts +1 -1
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +4 -3
- package/dest/modules/instrumentation.d.ts +9 -1
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +23 -2
- package/dest/modules/l1_synchronizer.d.ts +3 -3
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +16 -2
- package/dest/modules/validation.d.ts +12 -8
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +4 -11
- package/dest/store/block_store.d.ts +13 -3
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +32 -4
- package/dest/store/contract_class_store.d.ts +1 -1
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +7 -1
- 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 +7 -1
- package/dest/test/fake_l1_state.js +3 -3
- package/dest/test/mock_l2_block_source.d.ts +1 -1
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +5 -0
- package/dest/test/noop_l1_archiver.d.ts +1 -1
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +1 -1
- package/package.json +14 -13
- package/src/archiver.ts +32 -6
- package/src/config.ts +8 -0
- package/src/factory.ts +34 -0
- package/src/l1/calldata_retriever.ts +13 -6
- package/src/l1/data_retrieval.ts +6 -0
- package/src/modules/data_source_base.ts +8 -26
- package/src/modules/data_store_updater.ts +4 -3
- package/src/modules/instrumentation.ts +15 -2
- package/src/modules/l1_synchronizer.ts +29 -4
- package/src/modules/validation.ts +15 -18
- package/src/store/block_store.ts +31 -5
- package/src/store/contract_class_store.ts +7 -1
- package/src/store/contract_instance_store.ts +7 -1
- package/src/test/fake_l1_state.ts +3 -3
- package/src/test/mock_l2_block_source.ts +7 -0
- package/src/test/noop_l1_archiver.ts +3 -3
|
@@ -436,7 +436,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
436
436
|
// valid-looking signature for the attestationsAndSigners struct.
|
|
437
437
|
const proposerSigner = signers[0] ?? Secp256k1Signer.random();
|
|
438
438
|
const attestationsAndSignersSignature = proposerSigner.sign(getHashedSignaturePayloadTypedData(attestationsAndSigners));
|
|
439
|
-
const
|
|
439
|
+
const verbatimAttestations = attestationsAndSigners.getPackedAttestations();
|
|
440
440
|
const rollupInput = encodeFunctionData({
|
|
441
441
|
abi: RollupAbi,
|
|
442
442
|
functionName: 'propose',
|
|
@@ -448,7 +448,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
448
448
|
feeAssetPriceModifier: 0n
|
|
449
449
|
}
|
|
450
450
|
},
|
|
451
|
-
|
|
451
|
+
verbatimAttestations,
|
|
452
452
|
attestationsAndSigners.getSigners().map((signer)=>signer.toString()),
|
|
453
453
|
attestationsAndSignersSignature.toViemSignature(),
|
|
454
454
|
blobInput
|
|
@@ -471,7 +471,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
471
471
|
const attestationsHash = Buffer32.fromString(keccak256(encodeAbiParameters([
|
|
472
472
|
this.getCommitteeAttestationsStructDef()
|
|
473
473
|
], [
|
|
474
|
-
|
|
474
|
+
verbatimAttestations
|
|
475
475
|
])));
|
|
476
476
|
// Compute payloadDigest (same logic as CalldataRetriever)
|
|
477
477
|
const payloadDigest = getHashedSignaturePayloadTypedData(consensusPayload);
|
|
@@ -136,4 +136,4 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
136
136
|
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
|
|
137
137
|
private findCheckpointNumberForBlock;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFFWCxVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLEtBQUssU0FBUyxFQUNkLEtBQUssVUFBVSxFQUVmLEtBQUssV0FBVyxFQUVoQixLQUFLLGVBQWUsRUFDcEIsS0FBSyxnQkFBZ0IsRUFHckIsT0FBTyxFQUNQLEtBQUssYUFBYSxFQUNsQixLQUFLLE1BQU0sRUFDWCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHdCQUF3QixFQUM5QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxjQUFjLEVBRW5CLEtBQUssc0JBQXNCLEVBQzNCLG1CQUFtQixFQUNwQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkgsT0FBTyxFQUEwQixLQUFLLGlCQUFpQixFQUF3QixNQUFNLDZCQUE2QixDQUFDO0FBSW5ILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
|
|
@@ -228,6 +228,11 @@ import { BlockHeader } from '@aztec/stdlib/tx';
|
|
|
228
228
|
if ('from' in query) {
|
|
229
229
|
return this.checkpointList.slice(query.from - 1, query.from - 1 + query.limit);
|
|
230
230
|
}
|
|
231
|
+
if ('fromSlot' in query) {
|
|
232
|
+
const matching = this.checkpointList.filter((c)=>query.reverse ? c.header.slotNumber <= query.fromSlot : c.header.slotNumber >= query.fromSlot);
|
|
233
|
+
const nearestFirst = query.reverse ? matching.reverse() : matching;
|
|
234
|
+
return nearestFirst.slice(0, query.limit);
|
|
235
|
+
}
|
|
231
236
|
return this.getCheckpointsInEpoch(query.epoch);
|
|
232
237
|
}
|
|
233
238
|
getBlocksForSlot(slotNumber) {
|
|
@@ -31,4 +31,4 @@ export declare function createNoopL1Archiver(dataStores: ArchiverDataStores, l1C
|
|
|
31
31
|
genesisArchiveRoot: Fr;
|
|
32
32
|
}, telemetry: TelemetryClient | undefined, initialHeader: BlockHeader, dateProvider?: DateProvider, configOverrides?: NoopL1ArchiverConfigOverrides): Promise<NoopL1Archiver>;
|
|
33
33
|
export {};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9vcF9sMV9hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvbm9vcF9sMV9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBbUIsU0FBUyxFQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFLaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELEtBQUssNkJBQTZCLEdBQUcsT0FBTyxDQUFDO0lBQzNDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQztDQUN6QyxDQUFDLENBQUM7QUF5Qkg7Ozs7R0FJRztBQUNILHFCQUFhLGNBQWUsU0FBUSxRQUFRO0lBQzFDLFlBQ0UsVUFBVSxFQUFFLGtCQUFrQixFQUM5QixXQUFXLEVBQUUsaUJBQWlCLEdBQUc7UUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUE7S0FBRSxFQUMzRCxlQUFlLEVBQUUsdUJBQXVCLEVBQ3hDLGFBQWEsRUFBRSxXQUFXLEVBQzFCLGdCQUFnQixFQUFFLFNBQVMsRUFDM0IsV0FBVyxFQUFFLFdBQVcsRUFDeEIsWUFBWSxHQUFFLFlBQWlDLEVBQy9DLGVBQWUsR0FBRSw2QkFBa0MsRUFvRHBEO0lBRUQsbURBQW1EO0lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSWhFO0lBRUQsNkVBQTZFO0lBQzdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBRXZFO0NBQ0Y7QUFFRCxtRUFBbUU7QUFDbkUsd0JBQXNCLG9CQUFvQixDQUN4QyxVQUFVLEVBQUUsa0JBQWtCLEVBQzlCLFdBQVcsRUFBRSxpQkFBaUIsR0FBRztJQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtDQUFFLEVBQzNELFNBQVMsNkJBQXdDLEVBQ2pELGFBQWEsRUFBRSxXQUFXLEVBQzFCLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFDM0IsZUFBZSxDQUFDLEVBQUUsNkJBQTZCLEdBQzlDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FrQnpCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAmB,SAAS,
|
|
1
|
+
{"version":3,"file":"noop_l1_archiver.d.ts","sourceRoot":"","sources":["../../src/test/noop_l1_archiver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAmB,SAAS,EAAW,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,yBAAyB,CAAC;AAKhG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,KAAK,6BAA6B,GAAG,OAAO,CAAC;IAC3C,8BAA8B,EAAE,OAAO,CAAC;CACzC,CAAC,CAAC;AAyBH;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YACE,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;QAAE,kBAAkB,EAAE,EAAE,CAAA;KAAE,EAC3D,eAAe,EAAE,uBAAuB,EACxC,aAAa,EAAE,WAAW,EAC1B,gBAAgB,EAAE,SAAS,EAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,GAAE,YAAiC,EAC/C,eAAe,GAAE,6BAAkC,EAoDpD;IAED,mDAAmD;IACnC,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;IAED,6EAA6E;IAC7D,qBAAqB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAEvE;CACF;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,kBAAkB,EAC9B,WAAW,EAAE,iBAAiB,GAAG;IAAE,kBAAkB,EAAE,EAAE,CAAA;CAAE,EAC3D,SAAS,6BAAwC,EACjD,aAAa,EAAE,WAAW,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,eAAe,CAAC,EAAE,6BAA6B,GAC9C,OAAO,CAAC,cAAc,CAAC,CAkBzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -65,18 +65,19 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aztec/blob-client": "5.0.
|
|
69
|
-
"@aztec/blob-lib": "5.0.
|
|
70
|
-
"@aztec/constants": "5.0.
|
|
71
|
-
"@aztec/epoch-cache": "5.0.
|
|
72
|
-
"@aztec/ethereum": "5.0.
|
|
73
|
-
"@aztec/foundation": "5.0.
|
|
74
|
-
"@aztec/kv-store": "5.0.
|
|
75
|
-
"@aztec/l1-artifacts": "5.0.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "5.0.
|
|
77
|
-
"@aztec/protocol-contracts": "5.0.
|
|
78
|
-
"@aztec/
|
|
79
|
-
"@aztec/
|
|
68
|
+
"@aztec/blob-client": "5.0.1",
|
|
69
|
+
"@aztec/blob-lib": "5.0.1",
|
|
70
|
+
"@aztec/constants": "5.0.1",
|
|
71
|
+
"@aztec/epoch-cache": "5.0.1",
|
|
72
|
+
"@aztec/ethereum": "5.0.1",
|
|
73
|
+
"@aztec/foundation": "5.0.1",
|
|
74
|
+
"@aztec/kv-store": "5.0.1",
|
|
75
|
+
"@aztec/l1-artifacts": "5.0.1",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "5.0.1",
|
|
77
|
+
"@aztec/protocol-contracts": "5.0.1",
|
|
78
|
+
"@aztec/standard-contracts": "5.0.1",
|
|
79
|
+
"@aztec/stdlib": "5.0.1",
|
|
80
|
+
"@aztec/telemetry-client": "5.0.1",
|
|
80
81
|
"lodash.groupby": "^4.6.0",
|
|
81
82
|
"lodash.omit": "^4.5.0",
|
|
82
83
|
"tslib": "^2.5.0",
|
package/src/archiver.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
L2BlockSourceEvents,
|
|
21
21
|
type L2Tips,
|
|
22
22
|
type ValidateCheckpointResult,
|
|
23
|
+
l2TipsEqual,
|
|
23
24
|
} from '@aztec/stdlib/block';
|
|
24
25
|
import { type ProposedCheckpointInput, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
25
26
|
import {
|
|
@@ -339,9 +340,10 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
339
340
|
* Called at the beginning of each sync iteration.
|
|
340
341
|
* Items are processed in the order they were queued.
|
|
341
342
|
*/
|
|
342
|
-
private async processInboundQueue(): Promise<
|
|
343
|
+
private async processInboundQueue(): Promise<L2Block[]> {
|
|
344
|
+
const blocksAdded: L2Block[] = [];
|
|
343
345
|
if (this.inboundQueue.length === 0) {
|
|
344
|
-
return;
|
|
346
|
+
return blocksAdded;
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
// Take all items from the queue
|
|
@@ -378,6 +380,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
378
380
|
if (type === 'block') {
|
|
379
381
|
const [durationMs] = await elapsed(() => this.updater.addProposedBlock(item.block));
|
|
380
382
|
this.instrumentation.processNewProposedBlock(durationMs, item.block);
|
|
383
|
+
blocksAdded.push(item.block);
|
|
381
384
|
} else {
|
|
382
385
|
await this.updater.addProposedCheckpoint(item.checkpoint);
|
|
383
386
|
}
|
|
@@ -386,6 +389,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
386
389
|
} catch (err: any) {
|
|
387
390
|
if (err instanceof BlockAlreadyCheckpointedError) {
|
|
388
391
|
this.log.debug(`Proposed block ${itemNumber} matches already checkpointed block, ignoring late proposal`);
|
|
392
|
+
// A late proposal that matches an already-checkpointed block adds nothing new, so it is not appended.
|
|
389
393
|
resolve();
|
|
390
394
|
continue;
|
|
391
395
|
}
|
|
@@ -396,6 +400,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
396
400
|
reject(err);
|
|
397
401
|
}
|
|
398
402
|
}
|
|
403
|
+
return blocksAdded;
|
|
399
404
|
}
|
|
400
405
|
|
|
401
406
|
public waitForInitialSync() {
|
|
@@ -407,12 +412,31 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
407
412
|
*/
|
|
408
413
|
@trackSpan('Archiver.sync')
|
|
409
414
|
private async sync() {
|
|
415
|
+
// Capture the tips before any mutation so the aggregate event can report what moved this pass.
|
|
416
|
+
const fromTips = await this.getL2Tips();
|
|
417
|
+
|
|
418
|
+
// Accumulate the blocks added across the pass's sub-steps (queued proposals + L1 checkpoint payloads).
|
|
419
|
+
const blocksAdded: L2Block[] = [];
|
|
410
420
|
// Process any queued blocks first, before doing L1 sync
|
|
411
|
-
await this.processInboundQueue();
|
|
421
|
+
blocksAdded.push(...(await this.processInboundQueue()));
|
|
412
422
|
// Now perform L1 sync
|
|
413
|
-
await this.syncFromL1();
|
|
423
|
+
blocksAdded.push(...(await this.syncFromL1()));
|
|
414
424
|
// Prune proposed blocks with no corresponding proposed checkpoint after the appropriate materialization deadline.
|
|
415
425
|
await this.pruneOrphanProposedBlocks();
|
|
426
|
+
|
|
427
|
+
// Emit a single aggregate update event after all pass work has committed and the tips cache has refreshed,
|
|
428
|
+
// so `toTips` and the source state observed by listeners are consistent with the event payload. The pass
|
|
429
|
+
// mutated state if the tips moved (added blocks, a prune, or a thin tier movement) or blocks were added; a
|
|
430
|
+
// fully-synced no-op pass emits nothing.
|
|
431
|
+
const toTips = await this.getL2Tips();
|
|
432
|
+
if (!l2TipsEqual(fromTips, toTips) || blocksAdded.length > 0) {
|
|
433
|
+
this.events.emit(L2BlockSourceEvents.L2BlockSourceUpdated, {
|
|
434
|
+
type: L2BlockSourceEvents.L2BlockSourceUpdated,
|
|
435
|
+
fromTips,
|
|
436
|
+
toTips,
|
|
437
|
+
blocksAdded,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
416
440
|
}
|
|
417
441
|
|
|
418
442
|
/**
|
|
@@ -499,6 +523,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
499
523
|
|
|
500
524
|
const prunedBlocks = await this.updater.removeBlocksWithoutProposedCheckpointAfter(pruneAfterBlockNumber);
|
|
501
525
|
if (prunedBlocks.length > 0) {
|
|
526
|
+
this.instrumentation.recordPrune('orphan');
|
|
502
527
|
this.events.emit(L2BlockSourceEvents.L2PruneUncheckpointed, {
|
|
503
528
|
type: L2BlockSourceEvents.L2PruneUncheckpointed,
|
|
504
529
|
slotNumber: blockSlot,
|
|
@@ -514,9 +539,9 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
514
539
|
});
|
|
515
540
|
}
|
|
516
541
|
|
|
517
|
-
private async syncFromL1() {
|
|
542
|
+
private async syncFromL1(): Promise<L2Block[]> {
|
|
518
543
|
// Delegate to the L1 synchronizer
|
|
519
|
-
await this.synchronizer.syncFromL1(this.initialSyncComplete);
|
|
544
|
+
const blocksAdded = await this.synchronizer.syncFromL1(this.initialSyncComplete);
|
|
520
545
|
|
|
521
546
|
// Check if we've completed initial sync
|
|
522
547
|
const currentL1BlockNumber = this.synchronizer.getL1BlockNumber();
|
|
@@ -533,6 +558,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
533
558
|
this.initialSyncPromise.resolve();
|
|
534
559
|
}
|
|
535
560
|
}
|
|
561
|
+
return blocksAdded;
|
|
536
562
|
}
|
|
537
563
|
|
|
538
564
|
/** Resumes the archiver after a stop. */
|
package/src/config.ts
CHANGED
|
@@ -90,6 +90,14 @@ export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
|
90
90
|
description: 'Skip pruning orphan proposed blocks that have no matching proposed checkpoint.',
|
|
91
91
|
...booleanConfigHelper(false),
|
|
92
92
|
},
|
|
93
|
+
testPreloadStandardContracts: {
|
|
94
|
+
env: 'TEST_PRELOAD_STANDARD_CONTRACTS',
|
|
95
|
+
description:
|
|
96
|
+
'Preload the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the contract store at ' +
|
|
97
|
+
'block 0. For test environments only, and only safe when genesis seeds the matching registration/deployment ' +
|
|
98
|
+
'nullifiers; otherwise a later on-chain publish would collide with the block-0 preload.',
|
|
99
|
+
...booleanConfigHelper(false),
|
|
100
|
+
},
|
|
93
101
|
...chainConfigMappings,
|
|
94
102
|
...l1ReaderConfigMappings,
|
|
95
103
|
viemPollingIntervalMS: {
|
package/src/factory.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
12
12
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
13
13
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
14
14
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
15
|
+
import { getPublishableStandardContracts } from '@aztec/standard-contracts';
|
|
15
16
|
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
16
17
|
import type { ArchiverEmitter, BlockHash } from '@aztec/stdlib/block';
|
|
17
18
|
import { DEFAULT_BLOCK_DURATION_MS } from '@aztec/stdlib/config';
|
|
@@ -68,6 +69,9 @@ export async function createArchiver(
|
|
|
68
69
|
): Promise<Archiver> {
|
|
69
70
|
const archiverStore = await createArchiverStore(config, initialBlockHash);
|
|
70
71
|
await registerProtocolContracts(archiverStore);
|
|
72
|
+
if (config.testPreloadStandardContracts) {
|
|
73
|
+
await registerStandardContracts(archiverStore);
|
|
74
|
+
}
|
|
71
75
|
|
|
72
76
|
// Create Ethereum clients
|
|
73
77
|
const chain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
|
|
@@ -227,3 +231,33 @@ export async function registerProtocolContracts(stores: ArchiverDataStores) {
|
|
|
227
231
|
await stores.contractInstances.addContractInstances([contract.instance], BlockNumber(blockNumber));
|
|
228
232
|
}
|
|
229
233
|
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Preloads the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the archiver store at block 0,
|
|
237
|
+
* mirroring {@link registerProtocolContracts}. Only invoked for test environments (via `testPreloadStandardContracts`),
|
|
238
|
+
* which also seed the matching registration/deployment nullifiers into the genesis nullifier tree so the store and tree
|
|
239
|
+
* stay consistent. Idempotent — skips contracts that already exist (e.g. on node restart).
|
|
240
|
+
*/
|
|
241
|
+
export async function registerStandardContracts(stores: ArchiverDataStores) {
|
|
242
|
+
const blockNumber = 0;
|
|
243
|
+
for (const contract of await getPublishableStandardContracts()) {
|
|
244
|
+
// Skip if already registered (happens on node restart with a persisted store).
|
|
245
|
+
if (await stores.contractClasses.getContractClass(contract.contractClass.id)) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const publicBytecodeCommitment = await computePublicBytecodeCommitment(contract.contractClass.packedBytecode);
|
|
250
|
+
const contractClassPublic: ContractClassPublicWithCommitment = {
|
|
251
|
+
...contract.contractClass,
|
|
252
|
+
publicBytecodeCommitment,
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
const publicFunctionSignatures = contract.artifact.functions
|
|
256
|
+
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
257
|
+
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
258
|
+
|
|
259
|
+
await stores.functionNames.register(publicFunctionSignatures);
|
|
260
|
+
await stores.contractClasses.addContractClasses([contractClassPublic], BlockNumber(blockNumber));
|
|
261
|
+
await stores.contractInstances.addContractInstances([contract.instance], BlockNumber(blockNumber));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
@@ -34,6 +34,12 @@ type CheckpointData = {
|
|
|
34
34
|
archiveRoot: Fr;
|
|
35
35
|
header: CheckpointHeader;
|
|
36
36
|
attestations: CommitteeAttestation[];
|
|
37
|
+
/**
|
|
38
|
+
* The exact packed `CommitteeAttestations` tuple as it appears in the propose calldata, preserved
|
|
39
|
+
* verbatim (never re-derived from {@link attestations}) so invalidation evidence stays byte-faithful to
|
|
40
|
+
* the on-chain `attestationsHash`.
|
|
41
|
+
*/
|
|
42
|
+
verbatimAttestations: ViemCommitteeAttestations;
|
|
37
43
|
blockHash: string;
|
|
38
44
|
feeAssetPriceModifier: bigint;
|
|
39
45
|
};
|
|
@@ -406,14 +412,14 @@ export class CalldataRetriever {
|
|
|
406
412
|
return undefined;
|
|
407
413
|
}
|
|
408
414
|
|
|
409
|
-
const [decodedArgs,
|
|
415
|
+
const [decodedArgs, verbatimAttestations] = args! as readonly [
|
|
410
416
|
{ archive: Hex; oracleInput: { feeAssetPriceModifier: bigint }; header: ViemHeader },
|
|
411
417
|
ViemCommitteeAttestations,
|
|
412
418
|
...unknown[],
|
|
413
419
|
];
|
|
414
420
|
|
|
415
421
|
// Verify attestationsHash
|
|
416
|
-
const computedAttestationsHash = this.computeAttestationsHash(
|
|
422
|
+
const computedAttestationsHash = this.computeAttestationsHash(verbatimAttestations);
|
|
417
423
|
if (
|
|
418
424
|
!Buffer.from(hexToBytes(computedAttestationsHash)).equals(
|
|
419
425
|
Buffer.from(hexToBytes(expectedHashes.attestationsHash)),
|
|
@@ -441,7 +447,7 @@ export class CalldataRetriever {
|
|
|
441
447
|
return undefined;
|
|
442
448
|
}
|
|
443
449
|
|
|
444
|
-
const attestations = CommitteeAttestation.fromPacked(
|
|
450
|
+
const attestations = CommitteeAttestation.fromPacked(verbatimAttestations, this.targetCommitteeSize);
|
|
445
451
|
|
|
446
452
|
this.logger.trace(`Validated and decoded propose calldata for checkpoint ${checkpointNumber}`, {
|
|
447
453
|
checkpointNumber,
|
|
@@ -449,7 +455,7 @@ export class CalldataRetriever {
|
|
|
449
455
|
header: decodedArgs.header,
|
|
450
456
|
l1BlockHash: blockHash,
|
|
451
457
|
attestations,
|
|
452
|
-
|
|
458
|
+
verbatimAttestations,
|
|
453
459
|
targetCommitteeSize: this.targetCommitteeSize,
|
|
454
460
|
});
|
|
455
461
|
|
|
@@ -458,6 +464,7 @@ export class CalldataRetriever {
|
|
|
458
464
|
archiveRoot,
|
|
459
465
|
header,
|
|
460
466
|
attestations,
|
|
467
|
+
verbatimAttestations,
|
|
461
468
|
blockHash,
|
|
462
469
|
feeAssetPriceModifier,
|
|
463
470
|
};
|
|
@@ -467,8 +474,8 @@ export class CalldataRetriever {
|
|
|
467
474
|
}
|
|
468
475
|
|
|
469
476
|
/** Computes the keccak256 hash of ABI-encoded CommitteeAttestations. */
|
|
470
|
-
private computeAttestationsHash(
|
|
471
|
-
return keccak256(encodeAbiParameters([this.getCommitteeAttestationsStructDef()], [
|
|
477
|
+
private computeAttestationsHash(verbatimAttestations: ViemCommitteeAttestations): Hex {
|
|
478
|
+
return keccak256(encodeAbiParameters([this.getCommitteeAttestationsStructDef()], [verbatimAttestations]));
|
|
472
479
|
}
|
|
473
480
|
|
|
474
481
|
/** Computes the keccak256 payload digest from the checkpoint header, archive root, and fee asset price modifier. */
|
package/src/l1/data_retrieval.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
InboxContract,
|
|
13
13
|
MessageSentLog,
|
|
14
14
|
RollupContract,
|
|
15
|
+
ViemCommitteeAttestations,
|
|
15
16
|
ViemHeader,
|
|
16
17
|
} from '@aztec/ethereum/contracts';
|
|
17
18
|
import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
|
|
@@ -56,6 +57,11 @@ export type RetrievedCheckpointFromCalldata = RetrievedCheckpointBase & {
|
|
|
56
57
|
blobHashes: Buffer[];
|
|
57
58
|
/** Parent beacon block root from the L1 block, used for blob fetching. */
|
|
58
59
|
parentBeaconBlockRoot: string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* The exact packed `CommitteeAttestations` tuple from the propose calldata, carried verbatim so that
|
|
62
|
+
* attestation validation can attach byte-faithful invalidation evidence to a negative result.
|
|
63
|
+
*/
|
|
64
|
+
verbatimAttestations: ViemCommitteeAttestations;
|
|
59
65
|
};
|
|
60
66
|
|
|
61
67
|
export async function retrievedToPublishedCheckpoint({
|
|
@@ -224,23 +224,6 @@ export abstract class ArchiverDataSourceBase
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
/**
|
|
228
|
-
* Resolves a {@link CheckpointsQuery} to a concrete `{from, limit}` pair used by BlockStore,
|
|
229
|
-
* or undefined when the epoch has no checkpoints.
|
|
230
|
-
*/
|
|
231
|
-
private async resolveCheckpointsQuery(
|
|
232
|
-
query: CheckpointsQuery,
|
|
233
|
-
): Promise<{ from: CheckpointNumber; limit: number } | undefined> {
|
|
234
|
-
if ('from' in query) {
|
|
235
|
-
return query;
|
|
236
|
-
}
|
|
237
|
-
const numbers = await this.getCheckpointNumbersForEpoch(query.epoch);
|
|
238
|
-
if (numbers.length === 0) {
|
|
239
|
-
return undefined;
|
|
240
|
-
}
|
|
241
|
-
return { from: numbers[0], limit: numbers.length };
|
|
242
|
-
}
|
|
243
|
-
|
|
244
227
|
public async getCheckpoint(query: CheckpointQuery): Promise<PublishedCheckpoint | undefined> {
|
|
245
228
|
const number = await this.resolveCheckpointQuery(query);
|
|
246
229
|
if (number === undefined || number === 0) {
|
|
@@ -254,11 +237,7 @@ export abstract class ArchiverDataSourceBase
|
|
|
254
237
|
}
|
|
255
238
|
|
|
256
239
|
public async getCheckpoints(query: CheckpointsQuery): Promise<PublishedCheckpoint[]> {
|
|
257
|
-
const
|
|
258
|
-
if (!resolved) {
|
|
259
|
-
return [];
|
|
260
|
-
}
|
|
261
|
-
const checkpoints = await this.stores.blocks.getRangeOfCheckpoints(resolved.from, resolved.limit);
|
|
240
|
+
const checkpoints = await this.getCheckpointsData(query);
|
|
262
241
|
return Promise.all(checkpoints.map(ch => this.getPublishedCheckpointFromCheckpointData(ch)));
|
|
263
242
|
}
|
|
264
243
|
|
|
@@ -271,11 +250,14 @@ export abstract class ArchiverDataSourceBase
|
|
|
271
250
|
}
|
|
272
251
|
|
|
273
252
|
public async getCheckpointsData(query: CheckpointsQuery): Promise<CheckpointData[]> {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return [];
|
|
253
|
+
if ('fromSlot' in query) {
|
|
254
|
+
return this.stores.blocks.getCheckpointsBySlot(query.fromSlot, query.limit, query.reverse ?? false);
|
|
277
255
|
}
|
|
278
|
-
|
|
256
|
+
if ('from' in query) {
|
|
257
|
+
return this.stores.blocks.getRangeOfCheckpoints(query.from, query.limit);
|
|
258
|
+
}
|
|
259
|
+
const numbers = await this.getCheckpointNumbersForEpoch(query.epoch);
|
|
260
|
+
return numbers.length > 0 ? this.stores.blocks.getRangeOfCheckpoints(numbers[0], numbers.length) : [];
|
|
279
261
|
}
|
|
280
262
|
|
|
281
263
|
public getProposedCheckpointData(query?: ProposedCheckpointQuery): Promise<ProposedCheckpointData | undefined> {
|
|
@@ -123,10 +123,11 @@ export class ArchiverDataStoreUpdater {
|
|
|
123
123
|
// Before adding checkpoints, check for conflicts with local blocks if any
|
|
124
124
|
const { prunedBlocks, lastAlreadyInsertedBlockNumber } = await this.pruneMismatchingLocalBlocks(checkpoints);
|
|
125
125
|
|
|
126
|
-
await this.stores.blocks.addCheckpoints(checkpoints);
|
|
126
|
+
const insertedCheckpoints = await this.stores.blocks.addCheckpoints(checkpoints);
|
|
127
127
|
|
|
128
|
-
//
|
|
129
|
-
|
|
128
|
+
// Skip blocks already inserted via addProposedBlock() and blocks of already-stored checkpoints
|
|
129
|
+
// re-included by an L1 reorg: their logs/contract data were extracted when first inserted.
|
|
130
|
+
const newBlocks = insertedCheckpoints
|
|
130
131
|
.flatMap((ch: PublishedCheckpoint) => ch.checkpoint.blocks)
|
|
131
132
|
.filter(b => lastAlreadyInsertedBlockNumber === undefined || b.number > lastAlreadyInsertedBlockNumber);
|
|
132
133
|
|
|
@@ -84,7 +84,9 @@ export class ArchiverInstrumentation {
|
|
|
84
84
|
|
|
85
85
|
this.pruneDuration = meter.createHistogram(Metrics.ARCHIVER_PRUNE_DURATION);
|
|
86
86
|
|
|
87
|
-
this.pruneCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_PRUNE_COUNT
|
|
87
|
+
this.pruneCount = createUpDownCounterWithDefault(meter, Metrics.ARCHIVER_PRUNE_COUNT, {
|
|
88
|
+
[Attributes.PRUNE_TYPE]: ['unproven', 'uncheckpointed', 'l1_conflict', 'orphan', 'l1_mismatch'],
|
|
89
|
+
});
|
|
88
90
|
|
|
89
91
|
this.blockProposalTxTargetCount = createUpDownCounterWithDefault(
|
|
90
92
|
meter,
|
|
@@ -150,10 +152,21 @@ export class ArchiverInstrumentation {
|
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
public processPrune(duration: number) {
|
|
153
|
-
this.pruneCount.add(1);
|
|
155
|
+
this.pruneCount.add(1, { [Attributes.PRUNE_TYPE]: 'unproven' });
|
|
154
156
|
this.pruneDuration.record(Math.ceil(duration));
|
|
155
157
|
}
|
|
156
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Records a pending-chain reorg, where the archiver dropped proposed blocks (and world-state follows by pruning). The
|
|
161
|
+
* type distinguishes the cause: 'uncheckpointed' (slot ended without a checkpoint), 'l1_conflict' (proposed blocks
|
|
162
|
+
* conflicting with an L1 checkpoint), 'orphan' (no matching proposed checkpoint arrived before the deadline), or
|
|
163
|
+
* 'l1_mismatch' (the local checkpointed tip diverged from L1 — an L1 reorg or a pruned/missed-proof checkpoint — so
|
|
164
|
+
* already-checkpointed blocks were rewound).
|
|
165
|
+
*/
|
|
166
|
+
public recordPrune(pruneType: 'uncheckpointed' | 'l1_conflict' | 'orphan' | 'l1_mismatch') {
|
|
167
|
+
this.pruneCount.add(1, { [Attributes.PRUNE_TYPE]: pruneType });
|
|
168
|
+
}
|
|
169
|
+
|
|
157
170
|
public updateLastProvenCheckpoint(checkpoint: CheckpointData) {
|
|
158
171
|
const lastBlockNumberInCheckpoint = checkpoint.startBlock + checkpoint.blockCount - 1;
|
|
159
172
|
this.blockHeight.record(lastBlockNumberInCheckpoint, { [Attributes.STATUS]: 'proven' });
|