@aztec/world-state 0.0.1-commit.7d4e6cd → 0.0.1-commit.858058eac
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/instrumentation/instrumentation.d.ts +1 -1
- package/dest/instrumentation/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation/instrumentation.js +9 -2
- package/dest/native/merkle_trees_facade.d.ts +1 -1
- package/dest/native/merkle_trees_facade.d.ts.map +1 -1
- package/dest/native/merkle_trees_facade.js +12 -3
- package/dest/native/message.d.ts +3 -2
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/native_world_state.d.ts +7 -7
- package/dest/native/native_world_state.d.ts.map +1 -1
- package/dest/native/native_world_state.js +9 -8
- package/dest/native/native_world_state_instance.d.ts +3 -3
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +3 -3
- package/dest/synchronizer/config.d.ts +1 -3
- package/dest/synchronizer/config.d.ts.map +1 -1
- package/dest/synchronizer/config.js +1 -6
- package/dest/synchronizer/factory.d.ts +4 -3
- package/dest/synchronizer/factory.d.ts.map +1 -1
- package/dest/synchronizer/factory.js +5 -5
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +1 -2
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +19 -19
- package/dest/test/utils.d.ts +7 -7
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +5 -5
- package/dest/world-state-db/merkle_tree_db.d.ts +3 -3
- package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/instrumentation/instrumentation.ts +9 -1
- package/src/native/merkle_trees_facade.ts +10 -1
- package/src/native/message.ts +2 -1
- package/src/native/native_world_state.ts +22 -10
- package/src/native/native_world_state_instance.ts +5 -3
- package/src/synchronizer/config.ts +1 -14
- package/src/synchronizer/factory.ts +7 -1
- package/src/synchronizer/server_world_state_synchronizer.ts +24 -26
- package/src/test/utils.ts +6 -6
- package/src/world-state-db/merkle_tree_db.ts +2 -2
|
@@ -6,8 +6,8 @@ import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
|
6
6
|
import { elapsed } from '@aztec/foundation/timer';
|
|
7
7
|
import {
|
|
8
8
|
GENESIS_CHECKPOINT_HEADER_HASH,
|
|
9
|
+
type L2Block,
|
|
9
10
|
type L2BlockId,
|
|
10
|
-
type L2BlockNew,
|
|
11
11
|
type L2BlockSource,
|
|
12
12
|
L2BlockStream,
|
|
13
13
|
type L2BlockStreamEvent,
|
|
@@ -48,7 +48,6 @@ export class ServerWorldStateSynchronizer
|
|
|
48
48
|
private latestBlockNumberAtStart = BlockNumber.ZERO;
|
|
49
49
|
private historyToKeep: number | undefined;
|
|
50
50
|
private currentState: WorldStateRunningState = WorldStateRunningState.IDLE;
|
|
51
|
-
private latestBlockHashQuery: { blockNumber: BlockNumber; hash: string | undefined } | undefined = undefined;
|
|
52
51
|
|
|
53
52
|
private syncPromise = promiseWithResolvers<void>();
|
|
54
53
|
protected blockStream: L2BlockStream | undefined;
|
|
@@ -102,11 +101,7 @@ export class ServerWorldStateSynchronizer
|
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
// Get the current latest block number
|
|
105
|
-
this.latestBlockNumberAtStart = BlockNumber(
|
|
106
|
-
await (this.config.worldStateProvenBlocksOnly
|
|
107
|
-
? this.l2BlockSource.getProvenBlockNumber()
|
|
108
|
-
: this.l2BlockSource.getBlockNumber()),
|
|
109
|
-
);
|
|
104
|
+
this.latestBlockNumberAtStart = BlockNumber(await this.l2BlockSource.getBlockNumber());
|
|
110
105
|
|
|
111
106
|
const blockToDownloadFrom = (await this.getLatestBlockNumber()) + 1;
|
|
112
107
|
|
|
@@ -130,7 +125,6 @@ export class ServerWorldStateSynchronizer
|
|
|
130
125
|
protected createBlockStream(): L2BlockStream {
|
|
131
126
|
const logger = createLogger('world-state:block_stream');
|
|
132
127
|
return new L2BlockStream(this.l2BlockSource, this, this, logger, {
|
|
133
|
-
proven: this.config.worldStateProvenBlocksOnly,
|
|
134
128
|
pollIntervalMS: this.config.worldStateBlockCheckIntervalMS,
|
|
135
129
|
batchSize: this.config.worldStateBlockRequestBatchSize,
|
|
136
130
|
ignoreCheckpoints: true,
|
|
@@ -241,21 +235,24 @@ export class ServerWorldStateSynchronizer
|
|
|
241
235
|
if (number === BlockNumber.ZERO) {
|
|
242
236
|
return (await this.merkleTreeCommitted.getInitialHeader().hash()).toString();
|
|
243
237
|
}
|
|
244
|
-
|
|
245
|
-
this.latestBlockHashQuery = {
|
|
246
|
-
hash: await this.merkleTreeCommitted
|
|
247
|
-
.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(number))
|
|
248
|
-
.then(leaf => leaf?.toString()),
|
|
249
|
-
blockNumber: number,
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
return this.latestBlockHashQuery.hash;
|
|
238
|
+
return this.merkleTreeCommitted.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(number)).then(leaf => leaf?.toString());
|
|
253
239
|
}
|
|
254
240
|
|
|
255
241
|
/** Returns the latest L2 block number for each tip of the chain (latest, proven, finalized). */
|
|
256
242
|
public async getL2Tips(): Promise<L2Tips> {
|
|
257
243
|
const status = await this.merkleTreeDb.getStatusSummary();
|
|
258
|
-
const
|
|
244
|
+
const unfinalizedBlockHashPromise = this.getL2BlockHash(status.unfinalizedBlockNumber);
|
|
245
|
+
const finalizedBlockHashPromise = this.getL2BlockHash(status.finalizedBlockNumber);
|
|
246
|
+
|
|
247
|
+
const provenBlockNumber = this.provenBlockNumber ?? status.finalizedBlockNumber;
|
|
248
|
+
const provenBlockHashPromise =
|
|
249
|
+
this.provenBlockNumber === undefined ? finalizedBlockHashPromise : this.getL2BlockHash(this.provenBlockNumber);
|
|
250
|
+
|
|
251
|
+
const [unfinalizedBlockHash, finalizedBlockHash, provenBlockHash] = await Promise.all([
|
|
252
|
+
unfinalizedBlockHashPromise,
|
|
253
|
+
finalizedBlockHashPromise,
|
|
254
|
+
provenBlockHashPromise,
|
|
255
|
+
]);
|
|
259
256
|
const latestBlockId: L2BlockId = { number: status.unfinalizedBlockNumber, hash: unfinalizedBlockHash! };
|
|
260
257
|
|
|
261
258
|
// World state doesn't track checkpointed blocks or checkpoints themselves.
|
|
@@ -269,13 +266,13 @@ export class ServerWorldStateSynchronizer
|
|
|
269
266
|
checkpoint: { number: INITIAL_L2_CHECKPOINT_NUM, hash: genesisCheckpointHeaderHash },
|
|
270
267
|
},
|
|
271
268
|
finalized: {
|
|
272
|
-
block: { number: status.finalizedBlockNumber, hash: '' },
|
|
269
|
+
block: { number: status.finalizedBlockNumber, hash: finalizedBlockHash ?? '' },
|
|
273
270
|
checkpoint: { number: INITIAL_L2_CHECKPOINT_NUM, hash: genesisCheckpointHeaderHash },
|
|
274
271
|
},
|
|
275
272
|
proven: {
|
|
276
|
-
block: { number:
|
|
273
|
+
block: { number: provenBlockNumber, hash: provenBlockHash ?? '' },
|
|
277
274
|
checkpoint: { number: INITIAL_L2_CHECKPOINT_NUM, hash: genesisCheckpointHeaderHash },
|
|
278
|
-
},
|
|
275
|
+
},
|
|
279
276
|
};
|
|
280
277
|
}
|
|
281
278
|
|
|
@@ -302,8 +299,8 @@ export class ServerWorldStateSynchronizer
|
|
|
302
299
|
* @param l2Blocks - The L2 blocks to handle.
|
|
303
300
|
* @returns Whether the block handled was produced by this same node.
|
|
304
301
|
*/
|
|
305
|
-
private async handleL2Blocks(l2Blocks:
|
|
306
|
-
this.log.
|
|
302
|
+
private async handleL2Blocks(l2Blocks: L2Block[]) {
|
|
303
|
+
this.log.debug(`Handling L2 blocks ${l2Blocks[0].number} to ${l2Blocks.at(-1)!.number}`);
|
|
307
304
|
|
|
308
305
|
// Fetch the L1->L2 messages for the first block in a checkpoint.
|
|
309
306
|
const messagesForBlocks = new Map<BlockNumber, Fr[]>();
|
|
@@ -343,11 +340,13 @@ export class ServerWorldStateSynchronizer
|
|
|
343
340
|
* @param l1ToL2Messages - The L1 to L2 messages for the block.
|
|
344
341
|
* @returns Whether the block handled was produced by this same node.
|
|
345
342
|
*/
|
|
346
|
-
private async handleL2Block(l2Block:
|
|
347
|
-
this.log.
|
|
343
|
+
private async handleL2Block(l2Block: L2Block, l1ToL2Messages: Fr[]): Promise<WorldStateStatusFull> {
|
|
344
|
+
this.log.debug(`Pushing L2 block ${l2Block.number} to merkle tree db `, {
|
|
348
345
|
blockNumber: l2Block.number,
|
|
349
346
|
blockHash: await l2Block.hash().then(h => h.toString()),
|
|
350
347
|
l1ToL2Messages: l1ToL2Messages.map(msg => msg.toString()),
|
|
348
|
+
blockHeader: l2Block.header.toInspect(),
|
|
349
|
+
blockStats: l2Block.getStats(),
|
|
351
350
|
});
|
|
352
351
|
const result = await this.merkleTreeDb.handleL2BlockAndMessages(l2Block, l1ToL2Messages);
|
|
353
352
|
|
|
@@ -383,7 +382,6 @@ export class ServerWorldStateSynchronizer
|
|
|
383
382
|
private async handleChainPruned(blockNumber: BlockNumber) {
|
|
384
383
|
this.log.warn(`Chain pruned to block ${blockNumber}`);
|
|
385
384
|
const status = await this.merkleTreeDb.unwindBlocks(blockNumber);
|
|
386
|
-
this.latestBlockHashQuery = undefined;
|
|
387
385
|
this.provenBlockNumber = undefined;
|
|
388
386
|
this.instrumentation.updateWorldStateMetrics(status);
|
|
389
387
|
}
|
package/src/test/utils.ts
CHANGED
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
6
6
|
} from '@aztec/constants';
|
|
7
7
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
8
|
-
import { BlockNumber, type CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
8
|
+
import { BlockNumber, type CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
9
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
10
10
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
11
|
-
import {
|
|
11
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
12
12
|
import type {
|
|
13
13
|
IndexedTreeId,
|
|
14
14
|
MerkleTreeReadOperations,
|
|
@@ -20,7 +20,7 @@ import { BlockHeader } from '@aztec/stdlib/tx';
|
|
|
20
20
|
|
|
21
21
|
import type { NativeWorldStateService } from '../native/native_world_state.js';
|
|
22
22
|
|
|
23
|
-
export async function updateBlockState(block:
|
|
23
|
+
export async function updateBlockState(block: L2Block, l1ToL2Messages: Fr[], fork: MerkleTreeWriteOperations) {
|
|
24
24
|
const insertData = async (
|
|
25
25
|
treeId: IndexedTreeId,
|
|
26
26
|
data: Buffer[][],
|
|
@@ -76,8 +76,8 @@ export async function mockBlock(
|
|
|
76
76
|
numL1ToL2Messages: number = NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP,
|
|
77
77
|
isFirstBlockInCheckpoint: boolean = true,
|
|
78
78
|
) {
|
|
79
|
-
const block = await
|
|
80
|
-
indexWithinCheckpoint: isFirstBlockInCheckpoint ? 0 : 1,
|
|
79
|
+
const block = await L2Block.random(blockNum, {
|
|
80
|
+
indexWithinCheckpoint: isFirstBlockInCheckpoint ? IndexWithinCheckpoint(0) : IndexWithinCheckpoint(1),
|
|
81
81
|
txsPerBlock: size,
|
|
82
82
|
txOptions: { maxEffects },
|
|
83
83
|
});
|
|
@@ -92,7 +92,7 @@ export async function mockBlock(
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export async function mockEmptyBlock(blockNum: BlockNumber, fork: MerkleTreeWriteOperations) {
|
|
95
|
-
const l2Block =
|
|
95
|
+
const l2Block = L2Block.empty();
|
|
96
96
|
const l1ToL2Messages = Array(16).fill(0).map(Fr.zero);
|
|
97
97
|
|
|
98
98
|
l2Block.header.globalVariables.blockNumber = blockNum;
|
|
@@ -2,7 +2,7 @@ import { MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } f
|
|
|
2
2
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import type { IndexedTreeSnapshot, TreeSnapshot } from '@aztec/merkle-tree';
|
|
5
|
-
import type {
|
|
5
|
+
import type { L2Block } from '@aztec/stdlib/block';
|
|
6
6
|
import type {
|
|
7
7
|
ForkMerkleTreeOperations,
|
|
8
8
|
MerkleTreeReadOperations,
|
|
@@ -45,7 +45,7 @@ export interface MerkleTreeAdminDatabase extends ForkMerkleTreeOperations, Reado
|
|
|
45
45
|
* @param block - The L2 block to handle.
|
|
46
46
|
* @param l1ToL2Messages - The L1 to L2 messages for the block.
|
|
47
47
|
*/
|
|
48
|
-
handleL2BlockAndMessages(block:
|
|
48
|
+
handleL2BlockAndMessages(block: L2Block, l1ToL2Messages: Fr[]): Promise<WorldStateStatusFull>;
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
51
|
* Gets a handle that allows reading the latest committed state
|