@aztec/world-state 0.0.0-test.1 → 0.0.1-commit.001888fc
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/index.d.ts +1 -1
- package/dest/instrumentation/instrumentation.d.ts +6 -4
- package/dest/instrumentation/instrumentation.d.ts.map +1 -1
- package/dest/instrumentation/instrumentation.js +25 -41
- package/dest/native/bench_metrics.d.ts +23 -0
- package/dest/native/bench_metrics.d.ts.map +1 -0
- package/dest/native/bench_metrics.js +81 -0
- package/dest/native/fork_checkpoint.d.ts +7 -1
- package/dest/native/fork_checkpoint.d.ts.map +1 -1
- package/dest/native/fork_checkpoint.js +15 -3
- package/dest/native/index.d.ts +1 -1
- package/dest/native/merkle_trees_facade.d.ts +20 -8
- package/dest/native/merkle_trees_facade.d.ts.map +1 -1
- package/dest/native/merkle_trees_facade.js +80 -15
- package/dest/native/message.d.ts +83 -53
- package/dest/native/message.d.ts.map +1 -1
- package/dest/native/message.js +61 -61
- package/dest/native/native_world_state.d.ts +27 -19
- package/dest/native/native_world_state.d.ts.map +1 -1
- package/dest/native/native_world_state.js +103 -41
- package/dest/native/native_world_state_instance.d.ts +20 -4
- package/dest/native/native_world_state_instance.d.ts.map +1 -1
- package/dest/native/native_world_state_instance.js +43 -4
- package/dest/native/world_state_ops_queue.d.ts +1 -1
- package/dest/native/world_state_ops_queue.d.ts.map +1 -1
- package/dest/native/world_state_ops_queue.js +1 -1
- package/dest/synchronizer/config.d.ts +14 -6
- package/dest/synchronizer/config.d.ts.map +1 -1
- package/dest/synchronizer/config.js +33 -10
- package/dest/synchronizer/errors.d.ts +4 -0
- package/dest/synchronizer/errors.d.ts.map +1 -0
- package/dest/synchronizer/errors.js +5 -0
- package/dest/synchronizer/factory.d.ts +12 -4
- package/dest/synchronizer/factory.d.ts.map +1 -1
- package/dest/synchronizer/factory.js +13 -8
- package/dest/synchronizer/index.d.ts +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.d.ts +21 -31
- package/dest/synchronizer/server_world_state_synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/server_world_state_synchronizer.js +191 -96
- package/dest/test/index.d.ts +1 -1
- package/dest/test/utils.d.ts +12 -5
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +54 -47
- package/dest/testing.d.ts +3 -3
- package/dest/testing.d.ts.map +1 -1
- package/dest/testing.js +7 -11
- package/dest/world-state-db/index.d.ts +1 -1
- package/dest/world-state-db/merkle_tree_db.d.ts +12 -18
- package/dest/world-state-db/merkle_tree_db.d.ts.map +1 -1
- package/package.json +23 -24
- package/src/instrumentation/instrumentation.ts +31 -43
- package/src/native/bench_metrics.ts +91 -0
- package/src/native/fork_checkpoint.ts +19 -3
- package/src/native/merkle_trees_facade.ts +92 -20
- package/src/native/message.ts +105 -75
- package/src/native/native_world_state.ts +132 -52
- package/src/native/native_world_state_instance.ts +63 -10
- package/src/native/world_state_ops_queue.ts +1 -1
- package/src/synchronizer/config.ts +55 -21
- package/src/synchronizer/errors.ts +5 -0
- package/src/synchronizer/factory.ts +39 -10
- package/src/synchronizer/server_world_state_synchronizer.ts +227 -121
- package/src/test/utils.ts +92 -82
- package/src/testing.ts +4 -8
- package/src/world-state-db/merkle_tree_db.ts +16 -18
package/dest/index.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ export * from './synchronizer/index.js';
|
|
|
2
2
|
export * from './world-state-db/index.js';
|
|
3
3
|
export * from './synchronizer/config.js';
|
|
4
4
|
export * from './native/index.js';
|
|
5
|
-
//# sourceMappingURL=
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDIn0=
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
1
2
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
3
|
import { WorldStateMessageType, type WorldStateStatusFull } from '../native/message.js';
|
|
3
4
|
export declare class WorldStateInstrumentation {
|
|
4
5
|
readonly telemetry: TelemetryClient;
|
|
5
6
|
private log;
|
|
6
7
|
private dbMapSize;
|
|
8
|
+
private dbPhysicalSize;
|
|
7
9
|
private treeSize;
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
+
private unfinalizedHeight;
|
|
11
|
+
private finalizedHeight;
|
|
10
12
|
private oldestBlock;
|
|
11
13
|
private dbNumItems;
|
|
12
14
|
private dbUsedSize;
|
|
13
15
|
private requestHistogram;
|
|
14
16
|
private criticalErrors;
|
|
15
|
-
constructor(telemetry: TelemetryClient, log?:
|
|
17
|
+
constructor(telemetry: TelemetryClient, log?: Logger);
|
|
16
18
|
private updateTreeStats;
|
|
17
19
|
private updateTreeDBStats;
|
|
18
20
|
updateWorldStateMetrics(worldStateStatus: WorldStateStatusFull): void;
|
|
19
21
|
recordRoundTrip(timeUs: number, request: WorldStateMessageType): void;
|
|
20
22
|
incCriticalErrors(errorType: 'synch_pending_block' | 'finalize_block' | 'prune_pending_block' | 'prune_historical_block'): void;
|
|
21
23
|
}
|
|
22
|
-
//# sourceMappingURL=
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5zdHJ1bWVudGF0aW9uL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUtMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFJTCxxQkFBcUIsRUFDckIsS0FBSyxvQkFBb0IsRUFDMUIsTUFBTSxzQkFBc0IsQ0FBQztBQWE5QixxQkFBYSx5QkFBeUI7YUFhbEIsU0FBUyxFQUFFLGVBQWU7SUFDMUMsT0FBTyxDQUFDLEdBQUc7SUFiYixPQUFPLENBQUMsU0FBUyxDQUFRO0lBQ3pCLE9BQU8sQ0FBQyxjQUFjLENBQVE7SUFDOUIsT0FBTyxDQUFDLFFBQVEsQ0FBUTtJQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQVE7SUFDakMsT0FBTyxDQUFDLGVBQWUsQ0FBUTtJQUMvQixPQUFPLENBQUMsV0FBVyxDQUFRO0lBQzNCLE9BQU8sQ0FBQyxVQUFVLENBQVE7SUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBUTtJQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQVk7SUFDcEMsT0FBTyxDQUFDLGNBQWMsQ0FBZ0I7SUFFdEMsWUFDa0IsU0FBUyxFQUFFLGVBQWUsRUFDbEMsR0FBRyxHQUFFLE1BQW9ELEVBNkJsRTtJQUVELE9BQU8sQ0FBQyxlQUFlO0lBMkJ2QixPQUFPLENBQUMsaUJBQWlCO0lBV2xCLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixRQThCcEU7SUFFTSxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUscUJBQXFCLFFBTXBFO0lBRU0saUJBQWlCLENBQ3RCLFNBQVMsRUFBRSxxQkFBcUIsR0FBRyxnQkFBZ0IsR0FBRyxxQkFBcUIsR0FBRyx3QkFBd0IsUUFLdkc7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAKL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAIL,qBAAqB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAa9B,qBAAa,yBAAyB;aAalB,SAAS,EAAE,eAAe;IAC1C,OAAO,CAAC,GAAG;IAbb,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,cAAc,CAAgB;IAEtC,YACkB,SAAS,EAAE,eAAe,EAClC,GAAG,GAAE,MAAoD,EA6BlE;IAED,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,iBAAiB;IAWlB,uBAAuB,CAAC,gBAAgB,EAAE,oBAAoB,QA8BpE;IAEM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,QAMpE;IAEM,iBAAiB,CACtB,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,wBAAwB,QAKvG;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
3
|
-
import { Attributes, Metrics,
|
|
3
|
+
import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
|
|
4
4
|
import { WorldStateMessageType } from '../native/message.js';
|
|
5
5
|
const durationTrackDenylist = new Set([
|
|
6
6
|
WorldStateMessageType.GET_INITIAL_STATE_REFERENCE,
|
|
@@ -13,9 +13,10 @@ export class WorldStateInstrumentation {
|
|
|
13
13
|
telemetry;
|
|
14
14
|
log;
|
|
15
15
|
dbMapSize;
|
|
16
|
+
dbPhysicalSize;
|
|
16
17
|
treeSize;
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
unfinalizedHeight;
|
|
19
|
+
finalizedHeight;
|
|
19
20
|
oldestBlock;
|
|
20
21
|
dbNumItems;
|
|
21
22
|
dbUsedSize;
|
|
@@ -25,55 +26,38 @@ export class WorldStateInstrumentation {
|
|
|
25
26
|
this.telemetry = telemetry;
|
|
26
27
|
this.log = log;
|
|
27
28
|
const meter = telemetry.getMeter('World State');
|
|
28
|
-
this.dbMapSize = meter.createGauge(Metrics.WORLD_STATE_DB_MAP_SIZE
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.oldestBlock = meter.createGauge(Metrics.WORLD_STATE_OLDEST_BLOCK, {
|
|
45
|
-
description: `The oldest historical block of each merkle tree`,
|
|
46
|
-
valueType: ValueType.INT
|
|
47
|
-
});
|
|
48
|
-
this.dbUsedSize = meter.createGauge(Metrics.WORLD_STATE_DB_USED_SIZE, {
|
|
49
|
-
description: `The current used database size for each db of each merkle tree`,
|
|
50
|
-
valueType: ValueType.INT
|
|
51
|
-
});
|
|
52
|
-
this.dbNumItems = meter.createGauge(Metrics.WORLD_STATE_DB_NUM_ITEMS, {
|
|
53
|
-
description: `The current number of items in each database of each merkle tree`,
|
|
54
|
-
valueType: ValueType.INT
|
|
55
|
-
});
|
|
56
|
-
this.requestHistogram = meter.createHistogram(Metrics.WORLD_STATE_REQUEST_TIME, {
|
|
57
|
-
description: 'The round trip time of world state requests',
|
|
58
|
-
unit: 'us',
|
|
59
|
-
valueType: ValueType.INT
|
|
60
|
-
});
|
|
61
|
-
this.criticalErrors = meter.createUpDownCounter(Metrics.WORLD_STATE_CRITICAL_ERROR_COUNT, {
|
|
62
|
-
description: 'The number of critical errors in the world state',
|
|
63
|
-
valueType: ValueType.INT
|
|
29
|
+
this.dbMapSize = meter.createGauge(Metrics.WORLD_STATE_DB_MAP_SIZE);
|
|
30
|
+
this.dbPhysicalSize = meter.createGauge(Metrics.WORLD_STATE_DB_PHYSICAL_SIZE);
|
|
31
|
+
this.treeSize = meter.createGauge(Metrics.WORLD_STATE_TREE_SIZE);
|
|
32
|
+
this.unfinalizedHeight = meter.createGauge(Metrics.WORLD_STATE_UNFINALIZED_HEIGHT);
|
|
33
|
+
this.finalizedHeight = meter.createGauge(Metrics.WORLD_STATE_FINALIZED_HEIGHT);
|
|
34
|
+
this.oldestBlock = meter.createGauge(Metrics.WORLD_STATE_OLDEST_BLOCK);
|
|
35
|
+
this.dbUsedSize = meter.createGauge(Metrics.WORLD_STATE_DB_USED_SIZE);
|
|
36
|
+
this.dbNumItems = meter.createGauge(Metrics.WORLD_STATE_DB_NUM_ITEMS);
|
|
37
|
+
this.requestHistogram = meter.createHistogram(Metrics.WORLD_STATE_REQUEST_TIME);
|
|
38
|
+
this.criticalErrors = createUpDownCounterWithDefault(meter, Metrics.WORLD_STATE_CRITICAL_ERROR_COUNT, {
|
|
39
|
+
[Attributes.ERROR_TYPE]: [
|
|
40
|
+
'synch_pending_block',
|
|
41
|
+
'finalize_block',
|
|
42
|
+
'prune_pending_block',
|
|
43
|
+
'prune_historical_block'
|
|
44
|
+
]
|
|
64
45
|
});
|
|
65
46
|
}
|
|
66
47
|
updateTreeStats(treeDbStats, treeMeta, tree) {
|
|
67
48
|
this.dbMapSize.record(Number(treeDbStats.mapSize), {
|
|
68
49
|
[Attributes.MERKLE_TREE_NAME]: MerkleTreeId[tree]
|
|
69
50
|
});
|
|
51
|
+
this.dbPhysicalSize.record(Number(treeDbStats.physicalFileSize), {
|
|
52
|
+
[Attributes.MERKLE_TREE_NAME]: MerkleTreeId[tree]
|
|
53
|
+
});
|
|
70
54
|
this.treeSize.record(Number(treeMeta.size), {
|
|
71
55
|
[Attributes.MERKLE_TREE_NAME]: MerkleTreeId[tree]
|
|
72
56
|
});
|
|
73
|
-
this.
|
|
57
|
+
this.unfinalizedHeight.record(Number(treeMeta.unfinalizedBlockHeight), {
|
|
74
58
|
[Attributes.MERKLE_TREE_NAME]: MerkleTreeId[tree]
|
|
75
59
|
});
|
|
76
|
-
this.
|
|
60
|
+
this.finalizedHeight.record(Number(treeMeta.finalizedBlockHeight), {
|
|
77
61
|
[Attributes.MERKLE_TREE_NAME]: MerkleTreeId[tree]
|
|
78
62
|
});
|
|
79
63
|
this.oldestBlock.record(Number(treeMeta.oldestHistoricBlock), {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
2
|
+
export declare enum InsertionType {
|
|
3
|
+
BATCH = 0,
|
|
4
|
+
SEQUENTIAL = 1
|
|
5
|
+
}
|
|
6
|
+
export declare enum DataRetrievalType {
|
|
7
|
+
SIBLING_PATH = 0,
|
|
8
|
+
LEAF_PREIMAGE = 1,
|
|
9
|
+
LEAF_VALUE = 2,
|
|
10
|
+
LEAF_INDICES = 3,
|
|
11
|
+
LOW_LEAF = 4
|
|
12
|
+
}
|
|
13
|
+
export declare class NativeBenchMetics {
|
|
14
|
+
private blockSyncMetrics;
|
|
15
|
+
private insertionMetrics;
|
|
16
|
+
private dataRetrievalMetrics;
|
|
17
|
+
toPrettyString(): string;
|
|
18
|
+
addBlockSyncMetric(numTxs: number, numLeaves: number, value: number): void;
|
|
19
|
+
addInsertionMetric(treeId: MerkleTreeId, insertionType: InsertionType, numLeaves: number, value: number): void;
|
|
20
|
+
addDataRetrievalMetric(retrievalType: DataRetrievalType, value: number): void;
|
|
21
|
+
toGithubActionBenchmarkJSON(indent?: number): string;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2hfbWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9iZW5jaF9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFuRCxvQkFBWSxhQUFhO0lBQ3ZCLEtBQUssSUFBQTtJQUNMLFVBQVUsSUFBQTtDQUNYO0FBU0Qsb0JBQVksaUJBQWlCO0lBQzNCLFlBQVksSUFBQTtJQUNaLGFBQWEsSUFBQTtJQUNiLFVBQVUsSUFBQTtJQUNWLFlBQVksSUFBQTtJQUNaLFFBQVEsSUFBQTtDQUNUO0FBT0QscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBMEI7SUFDbEQsT0FBTyxDQUFDLGdCQUFnQixDQUEwQjtJQUNsRCxPQUFPLENBQUMsb0JBQW9CLENBQThCO0lBRW5ELGNBQWMsV0FlcEI7SUFFTSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFFekU7SUFDTSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUU3RztJQUNNLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUU1RTtJQUVNLDJCQUEyQixDQUFDLE1BQU0sU0FBSSxVQXdCNUM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench_metrics.d.ts","sourceRoot":"","sources":["../../src/native/bench_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD,oBAAY,aAAa;IACvB,KAAK,IAAA;IACL,UAAU,IAAA;CACX;AASD,oBAAY,iBAAiB;IAC3B,YAAY,IAAA;IACZ,aAAa,IAAA;IACb,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,QAAQ,IAAA;CACT;AAOD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,oBAAoB,CAA8B;IAEnD,cAAc,WAepB;IAEM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAEzE;IACM,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAE7G;IACM,sBAAsB,CAAC,aAAa,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,QAE5E;IAEM,2BAA2B,CAAC,MAAM,SAAI,UAwB5C;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
2
|
+
export var InsertionType = /*#__PURE__*/ function(InsertionType) {
|
|
3
|
+
InsertionType[InsertionType["BATCH"] = 0] = "BATCH";
|
|
4
|
+
InsertionType[InsertionType["SEQUENTIAL"] = 1] = "SEQUENTIAL";
|
|
5
|
+
return InsertionType;
|
|
6
|
+
}({});
|
|
7
|
+
export var DataRetrievalType = /*#__PURE__*/ function(DataRetrievalType) {
|
|
8
|
+
DataRetrievalType[DataRetrievalType["SIBLING_PATH"] = 0] = "SIBLING_PATH";
|
|
9
|
+
DataRetrievalType[DataRetrievalType["LEAF_PREIMAGE"] = 1] = "LEAF_PREIMAGE";
|
|
10
|
+
DataRetrievalType[DataRetrievalType["LEAF_VALUE"] = 2] = "LEAF_VALUE";
|
|
11
|
+
DataRetrievalType[DataRetrievalType["LEAF_INDICES"] = 3] = "LEAF_INDICES";
|
|
12
|
+
DataRetrievalType[DataRetrievalType["LOW_LEAF"] = 4] = "LOW_LEAF";
|
|
13
|
+
return DataRetrievalType;
|
|
14
|
+
}({});
|
|
15
|
+
export class NativeBenchMetics {
|
|
16
|
+
blockSyncMetrics = [];
|
|
17
|
+
insertionMetrics = [];
|
|
18
|
+
dataRetrievalMetrics = [];
|
|
19
|
+
toPrettyString() {
|
|
20
|
+
let pretty = '';
|
|
21
|
+
pretty += `Block sync metrics:\n`;
|
|
22
|
+
for (const metric of this.blockSyncMetrics){
|
|
23
|
+
pretty += ` ${metric.numTxs} txs, ${metric.numLeaves} leaves: ${metric.value} ms\n`;
|
|
24
|
+
}
|
|
25
|
+
pretty += `Insertion metrics:\n`;
|
|
26
|
+
for (const metric of this.insertionMetrics){
|
|
27
|
+
pretty += ` ${MerkleTreeId[metric.treeType]}: ${InsertionType[metric.insertionType]} (${metric.numLeaves} leaves): ${metric.value} ms\n`;
|
|
28
|
+
}
|
|
29
|
+
pretty += `Data retrieval metrics:\n`;
|
|
30
|
+
for (const metric of this.dataRetrievalMetrics){
|
|
31
|
+
pretty += ` ${DataRetrievalType[metric.retrievalType]}: ${metric.value} us\n`;
|
|
32
|
+
}
|
|
33
|
+
return pretty;
|
|
34
|
+
}
|
|
35
|
+
addBlockSyncMetric(numTxs, numLeaves, value) {
|
|
36
|
+
this.blockSyncMetrics.push({
|
|
37
|
+
numTxs,
|
|
38
|
+
numLeaves,
|
|
39
|
+
value
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
addInsertionMetric(treeId, insertionType, numLeaves, value) {
|
|
43
|
+
this.insertionMetrics.push({
|
|
44
|
+
treeType: treeId,
|
|
45
|
+
insertionType,
|
|
46
|
+
numLeaves,
|
|
47
|
+
value
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
addDataRetrievalMetric(retrievalType, value) {
|
|
51
|
+
this.dataRetrievalMetrics.push({
|
|
52
|
+
retrievalType,
|
|
53
|
+
value: value
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
toGithubActionBenchmarkJSON(indent = 2) {
|
|
57
|
+
const data = [];
|
|
58
|
+
for (const blockSync of this.blockSyncMetrics){
|
|
59
|
+
data.push({
|
|
60
|
+
name: `Block Sync/${blockSync.numTxs} txs/${blockSync.numLeaves} leaves per tx`,
|
|
61
|
+
value: blockSync.value,
|
|
62
|
+
unit: 'ms'
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
for (const insertion of this.insertionMetrics){
|
|
66
|
+
data.push({
|
|
67
|
+
name: `Tree Insertion/${MerkleTreeId[insertion.treeType]}/${InsertionType[insertion.insertionType]}/${insertion.numLeaves} leaves`,
|
|
68
|
+
value: insertion.value,
|
|
69
|
+
unit: 'ms'
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
for (const retrieval of this.dataRetrievalMetrics){
|
|
73
|
+
data.push({
|
|
74
|
+
name: `Data Retrieval/${DataRetrievalType[retrieval.retrievalType]}`,
|
|
75
|
+
value: retrieval.value,
|
|
76
|
+
unit: 'us'
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return JSON.stringify(data, null, indent);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { MerkleTreeCheckpointOperations } from '@aztec/stdlib/interfaces/server';
|
|
2
2
|
export declare class ForkCheckpoint {
|
|
3
3
|
private readonly fork;
|
|
4
|
+
readonly depth: number;
|
|
4
5
|
private completed;
|
|
5
6
|
private constructor();
|
|
6
7
|
static new(fork: MerkleTreeCheckpointOperations): Promise<ForkCheckpoint>;
|
|
7
8
|
commit(): Promise<void>;
|
|
8
9
|
revert(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Reverts this checkpoint and any nested checkpoints created on top of it,
|
|
12
|
+
* leaving the checkpoint depth at the level it was before this checkpoint was created.
|
|
13
|
+
*/
|
|
14
|
+
revertToCheckpoint(): Promise<void>;
|
|
9
15
|
}
|
|
10
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ya19jaGVja3BvaW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlL2ZvcmtfY2hlY2twb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRGLHFCQUFhLGNBQWM7SUFJdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2FBQ0wsS0FBSyxFQUFFLE1BQU07SUFKL0IsT0FBTyxDQUFDLFNBQVMsQ0FBUztJQUUxQixPQUFPLGVBR0g7SUFFSixPQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUc5RTtJQUVLLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBTzVCO0lBRUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FPNUI7SUFFRDs7O09BR0c7SUFDRyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBT3hDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fork_checkpoint.d.ts","sourceRoot":"","sources":["../../src/native/fork_checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAEtF,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"fork_checkpoint.d.ts","sourceRoot":"","sources":["../../src/native/fork_checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAEtF,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,IAAI;aACL,KAAK,EAAE,MAAM;IAJ/B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,eAGH;IAEJ,OAAa,GAAG,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,cAAc,CAAC,CAG9E;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAO5B;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAO5B;IAED;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOxC;CACF"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
export class ForkCheckpoint {
|
|
2
2
|
fork;
|
|
3
|
+
depth;
|
|
3
4
|
completed;
|
|
4
|
-
constructor(fork){
|
|
5
|
+
constructor(fork, depth){
|
|
5
6
|
this.fork = fork;
|
|
7
|
+
this.depth = depth;
|
|
6
8
|
this.completed = false;
|
|
7
9
|
}
|
|
8
10
|
static async new(fork) {
|
|
9
|
-
await fork.createCheckpoint();
|
|
10
|
-
return new ForkCheckpoint(fork);
|
|
11
|
+
const depth = await fork.createCheckpoint();
|
|
12
|
+
return new ForkCheckpoint(fork, depth);
|
|
11
13
|
}
|
|
12
14
|
async commit() {
|
|
13
15
|
if (this.completed) {
|
|
@@ -23,4 +25,14 @@ export class ForkCheckpoint {
|
|
|
23
25
|
await this.fork.revertCheckpoint();
|
|
24
26
|
this.completed = true;
|
|
25
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Reverts this checkpoint and any nested checkpoints created on top of it,
|
|
30
|
+
* leaving the checkpoint depth at the level it was before this checkpoint was created.
|
|
31
|
+
*/ async revertToCheckpoint() {
|
|
32
|
+
if (this.completed) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await this.fork.revertAllCheckpointsTo(this.depth - 1);
|
|
36
|
+
this.completed = true;
|
|
37
|
+
}
|
|
26
38
|
}
|
package/dest/native/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './native_world_state.js';
|
|
2
2
|
export * from './fork_checkpoint.js';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHNCQUFzQixDQUFDIn0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
3
|
import { type IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
|
|
5
4
|
import type { BatchInsertionResult, IndexedTreeId, MerkleTreeLeafType, MerkleTreeReadOperations, MerkleTreeWriteOperations, SequentialInsertionResult, TreeInfo } from '@aztec/stdlib/interfaces/server';
|
|
6
5
|
import { MerkleTreeId, NullifierLeaf, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
7
6
|
import { type BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
8
|
-
import { type
|
|
7
|
+
import { type WorldStateRevision, WorldStateRevisionWithHandle } from '@aztec/stdlib/world-state';
|
|
8
|
+
import { type SerializedLeafValue } from './message.js';
|
|
9
9
|
import type { NativeWorldStateInstance } from './native_world_state_instance.js';
|
|
10
10
|
export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
11
11
|
protected readonly instance: NativeWorldStateInstance;
|
|
@@ -13,7 +13,12 @@ export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
|
13
13
|
protected readonly revision: WorldStateRevision;
|
|
14
14
|
constructor(instance: NativeWorldStateInstance, initialHeader: BlockHeader, revision: WorldStateRevision);
|
|
15
15
|
getInitialHeader(): BlockHeader;
|
|
16
|
+
getRevision(): WorldStateRevisionWithHandle;
|
|
16
17
|
findLeafIndices(treeId: MerkleTreeId, values: MerkleTreeLeafType<MerkleTreeId>[]): Promise<(bigint | undefined)[]>;
|
|
18
|
+
findSiblingPaths<N extends number>(treeId: MerkleTreeId, values: MerkleTreeLeafType<MerkleTreeId>[]): Promise<({
|
|
19
|
+
path: SiblingPath<N>;
|
|
20
|
+
index: bigint;
|
|
21
|
+
} | undefined)[]>;
|
|
17
22
|
findLeafIndicesAfter(treeId: MerkleTreeId, leaves: MerkleTreeLeafType<MerkleTreeId>[], startIndex: bigint): Promise<(bigint | undefined)[]>;
|
|
18
23
|
getLeafPreimage(treeId: IndexedTreeId, leafIndex: bigint): Promise<IndexedTreeLeafPreimage | undefined>;
|
|
19
24
|
getLeafValue<ID extends MerkleTreeId>(treeId: ID, leafIndex: bigint): Promise<MerkleTreeLeafType<ID> | undefined>;
|
|
@@ -25,18 +30,25 @@ export declare class MerkleTreesFacade implements MerkleTreeReadOperations {
|
|
|
25
30
|
getStateReference(): Promise<StateReference>;
|
|
26
31
|
getInitialStateReference(): Promise<StateReference>;
|
|
27
32
|
getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo>;
|
|
28
|
-
getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(treeId: ID, leafIndices: bigint[]): Promise<(
|
|
33
|
+
getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(treeId: ID, leafIndices: bigint[]): Promise<(BlockNumber | undefined)[]>;
|
|
29
34
|
}
|
|
30
35
|
export declare class MerkleTreesForkFacade extends MerkleTreesFacade implements MerkleTreeWriteOperations {
|
|
31
|
-
|
|
36
|
+
private opts;
|
|
37
|
+
private log;
|
|
38
|
+
constructor(instance: NativeWorldStateInstance, initialHeader: BlockHeader, revision: WorldStateRevision, opts: {
|
|
39
|
+
closeDelayMs?: number;
|
|
40
|
+
});
|
|
32
41
|
updateArchive(header: BlockHeader): Promise<void>;
|
|
33
42
|
appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void>;
|
|
34
43
|
batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(treeId: ID, rawLeaves: Buffer[], subtreeHeight: number): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>>;
|
|
35
44
|
sequentialInsert<TreeHeight extends number, ID extends IndexedTreeId>(treeId: ID, rawLeaves: Buffer[]): Promise<SequentialInsertionResult<TreeHeight>>;
|
|
36
45
|
close(): Promise<void>;
|
|
37
|
-
|
|
46
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
47
|
+
createCheckpoint(): Promise<number>;
|
|
38
48
|
commitCheckpoint(): Promise<void>;
|
|
39
49
|
revertCheckpoint(): Promise<void>;
|
|
50
|
+
commitAllCheckpointsTo(depth: number): Promise<void>;
|
|
51
|
+
revertAllCheckpointsTo(depth: number): Promise<void>;
|
|
40
52
|
}
|
|
41
53
|
export declare function serializeLeaf(leaf: Fr | NullifierLeaf | PublicDataTreeLeaf): SerializedLeafValue;
|
|
42
|
-
//# sourceMappingURL=
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVya2xlX3RyZWVzX2ZhY2FkZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS9tZXJrbGVfdHJlZXNfZmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEQsT0FBTyxFQUFFLEtBQUssdUJBQXVCLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxLQUFLLEVBQ1Ysb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsUUFBUSxFQUNULE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBRWIsa0JBQWtCLEVBRW5CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUF5QixjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSWxHLE9BQU8sRUFFTCxLQUFLLG1CQUFtQixFQUl6QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLHFCQUFhLGlCQUFrQixZQUFXLHdCQUF3QjtJQUU5RCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSx3QkFBd0I7SUFDckQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsV0FBVztJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxrQkFBa0I7SUFIakQsWUFDcUIsUUFBUSxFQUFFLHdCQUF3QixFQUNsQyxhQUFhLEVBQUUsV0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkle_trees_facade.d.ts","sourceRoot":"","sources":["../../src/native/merkle_trees_facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
var _computedKey;
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
5
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
3
7
|
import { SiblingPath } from '@aztec/foundation/trees';
|
|
4
8
|
import { MerkleTreeId, NullifierLeaf, NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
|
|
5
9
|
import { PartialStateReference, StateReference } from '@aztec/stdlib/tx';
|
|
10
|
+
import { WorldStateRevisionWithHandle } from '@aztec/stdlib/world-state';
|
|
6
11
|
import assert from 'assert';
|
|
7
12
|
import { WorldStateMessageType, blockStateReference, treeStateReferenceToSnapshot } from './message.js';
|
|
8
13
|
export class MerkleTreesFacade {
|
|
@@ -17,9 +22,28 @@ export class MerkleTreesFacade {
|
|
|
17
22
|
getInitialHeader() {
|
|
18
23
|
return this.initialHeader;
|
|
19
24
|
}
|
|
25
|
+
getRevision() {
|
|
26
|
+
return WorldStateRevisionWithHandle.fromWorldStateRevision(this.revision, this.instance.getHandle());
|
|
27
|
+
}
|
|
20
28
|
findLeafIndices(treeId, values) {
|
|
21
29
|
return this.findLeafIndicesAfter(treeId, values, 0n);
|
|
22
30
|
}
|
|
31
|
+
async findSiblingPaths(treeId, values) {
|
|
32
|
+
const response = await this.instance.call(WorldStateMessageType.FIND_SIBLING_PATHS, {
|
|
33
|
+
leaves: values.map((leaf)=>serializeLeaf(hydrateLeaf(treeId, leaf))),
|
|
34
|
+
revision: this.revision,
|
|
35
|
+
treeId
|
|
36
|
+
});
|
|
37
|
+
return response.paths.map((path)=>{
|
|
38
|
+
if (!path) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
path: new SiblingPath(path.path.length, path.path),
|
|
43
|
+
index: BigInt(path.index)
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
23
47
|
async findLeafIndicesAfter(treeId, leaves, startIndex) {
|
|
24
48
|
const response = await this.instance.call(WorldStateMessageType.FIND_LEAF_INDICES, {
|
|
25
49
|
leaves: leaves.map((leaf)=>serializeLeaf(hydrateLeaf(treeId, leaf))),
|
|
@@ -108,14 +132,17 @@ export class MerkleTreesFacade {
|
|
|
108
132
|
revision: this.revision,
|
|
109
133
|
leafIndices
|
|
110
134
|
});
|
|
111
|
-
return response.blockNumbers.map((x)=>x === undefined || x === null ? undefined :
|
|
135
|
+
return response.blockNumbers.map((x)=>x === undefined || x === null ? undefined : BlockNumber(Number(x)));
|
|
112
136
|
}
|
|
113
137
|
}
|
|
138
|
+
_computedKey = Symbol.asyncDispose;
|
|
114
139
|
export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
115
|
-
|
|
140
|
+
opts;
|
|
141
|
+
log;
|
|
142
|
+
constructor(instance, initialHeader, revision, opts){
|
|
116
143
|
assert.notEqual(revision.forkId, 0, 'Fork ID must be set');
|
|
117
144
|
assert.equal(revision.includeUncommitted, true, 'Fork must include uncommitted data');
|
|
118
|
-
super(instance, initialHeader, revision);
|
|
145
|
+
super(instance, initialHeader, revision), this.opts = opts, this.log = createLogger('world-state:merkle-trees-fork-facade');
|
|
119
146
|
}
|
|
120
147
|
async updateArchive(header) {
|
|
121
148
|
await this.instance.call(WorldStateMessageType.UPDATE_ARCHIVE, {
|
|
@@ -172,15 +199,39 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
172
199
|
}
|
|
173
200
|
async close() {
|
|
174
201
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
202
|
+
try {
|
|
203
|
+
await this.instance.call(WorldStateMessageType.DELETE_FORK, {
|
|
204
|
+
forkId: this.revision.forkId
|
|
205
|
+
});
|
|
206
|
+
} catch (err) {
|
|
207
|
+
// Ignore errors due to native instance being closed during shutdown.
|
|
208
|
+
// This can happen when validators are still processing block proposals while the node is stopping.
|
|
209
|
+
if (err?.message === 'Native instance is closed') {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async [_computedKey]() {
|
|
216
|
+
if (this.opts.closeDelayMs) {
|
|
217
|
+
void sleep(this.opts.closeDelayMs).then(()=>this.close()).catch((err)=>{
|
|
218
|
+
if (err && 'message' in err && err.message === 'Native instance is closed') {
|
|
219
|
+
return; // Ignore errors due to native instance being closed
|
|
220
|
+
}
|
|
221
|
+
this.log.warn('Error closing MerkleTreesForkFacade after delay', {
|
|
222
|
+
err
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
} else {
|
|
226
|
+
await this.close();
|
|
227
|
+
}
|
|
178
228
|
}
|
|
179
229
|
async createCheckpoint() {
|
|
180
230
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
181
|
-
await this.instance.call(WorldStateMessageType.CREATE_CHECKPOINT, {
|
|
231
|
+
const resp = await this.instance.call(WorldStateMessageType.CREATE_CHECKPOINT, {
|
|
182
232
|
forkId: this.revision.forkId
|
|
183
233
|
});
|
|
234
|
+
return resp.depth;
|
|
184
235
|
}
|
|
185
236
|
async commitCheckpoint() {
|
|
186
237
|
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
@@ -194,6 +245,20 @@ export class MerkleTreesForkFacade extends MerkleTreesFacade {
|
|
|
194
245
|
forkId: this.revision.forkId
|
|
195
246
|
});
|
|
196
247
|
}
|
|
248
|
+
async commitAllCheckpointsTo(depth) {
|
|
249
|
+
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
250
|
+
await this.instance.call(WorldStateMessageType.COMMIT_ALL_CHECKPOINTS, {
|
|
251
|
+
forkId: this.revision.forkId,
|
|
252
|
+
depth
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async revertAllCheckpointsTo(depth) {
|
|
256
|
+
assert.notEqual(this.revision.forkId, 0, 'Fork ID must be set');
|
|
257
|
+
await this.instance.call(WorldStateMessageType.REVERT_ALL_CHECKPOINTS, {
|
|
258
|
+
forkId: this.revision.forkId,
|
|
259
|
+
depth
|
|
260
|
+
});
|
|
261
|
+
}
|
|
197
262
|
}
|
|
198
263
|
function hydrateLeaf(treeId, leaf) {
|
|
199
264
|
if (leaf instanceof Fr) {
|
|
@@ -211,7 +276,7 @@ export function serializeLeaf(leaf) {
|
|
|
211
276
|
return leaf.toBuffer();
|
|
212
277
|
} else if (leaf instanceof NullifierLeaf) {
|
|
213
278
|
return {
|
|
214
|
-
|
|
279
|
+
nullifier: leaf.nullifier.toBuffer()
|
|
215
280
|
};
|
|
216
281
|
} else {
|
|
217
282
|
return {
|
|
@@ -226,14 +291,14 @@ function deserializeLeafValue(leaf) {
|
|
|
226
291
|
} else if ('slot' in leaf) {
|
|
227
292
|
return new PublicDataTreeLeaf(Fr.fromBuffer(leaf.slot), Fr.fromBuffer(leaf.value));
|
|
228
293
|
} else {
|
|
229
|
-
return new NullifierLeaf(Fr.fromBuffer(leaf.
|
|
294
|
+
return new NullifierLeaf(Fr.fromBuffer(leaf.nullifier));
|
|
230
295
|
}
|
|
231
296
|
}
|
|
232
|
-
function deserializeIndexedLeaf(
|
|
233
|
-
if ('slot' in leaf
|
|
234
|
-
return new PublicDataTreeLeafPreimage(Fr.fromBuffer(leaf.
|
|
235
|
-
} else if ('
|
|
236
|
-
return new NullifierLeafPreimage(Fr.fromBuffer(leaf.
|
|
297
|
+
function deserializeIndexedLeaf(leafPreimage) {
|
|
298
|
+
if ('slot' in leafPreimage.leaf) {
|
|
299
|
+
return new PublicDataTreeLeafPreimage(new PublicDataTreeLeaf(Fr.fromBuffer(leafPreimage.leaf.slot), Fr.fromBuffer(leafPreimage.leaf.value)), Fr.fromBuffer(leafPreimage.nextKey), BigInt(leafPreimage.nextIndex));
|
|
300
|
+
} else if ('nullifier' in leafPreimage.leaf) {
|
|
301
|
+
return new NullifierLeafPreimage(new NullifierLeaf(Fr.fromBuffer(leafPreimage.leaf.nullifier)), Fr.fromBuffer(leafPreimage.nextKey), BigInt(leafPreimage.nextIndex));
|
|
237
302
|
} else {
|
|
238
303
|
throw new Error('Invalid leaf type');
|
|
239
304
|
}
|