@aztec/aztec-node 0.86.0-nightly.20250508 → 0.86.0-nightly.20250509
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.
|
@@ -297,5 +297,8 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
297
297
|
flushTxs(): Promise<void>;
|
|
298
298
|
getValidatorsStats(): Promise<ValidatorsStats>;
|
|
299
299
|
startSnapshotUpload(location: string): Promise<void>;
|
|
300
|
+
rollbackTo(targetBlock: number, force?: boolean): Promise<void>;
|
|
301
|
+
pauseSync(): Promise<void>;
|
|
302
|
+
resumeSync(): Promise<void>;
|
|
300
303
|
}
|
|
301
304
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,mBAAmB,EAAyC,MAAM,iBAAiB,CAAC;AAGlG,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
15
15
|
import { Fr } from '@aztec/foundation/fields';
|
|
16
16
|
import { createLogger } from '@aztec/foundation/log';
|
|
17
17
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
18
|
+
import { count } from '@aztec/foundation/string';
|
|
18
19
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
19
20
|
import { SiblingPath } from '@aztec/foundation/trees';
|
|
20
21
|
import { openTmpStore } from '@aztec/kv-store/lmdb';
|
|
@@ -677,9 +678,9 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
677
678
|
});
|
|
678
679
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
679
680
|
try {
|
|
680
|
-
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, skipFeeEnforcement);
|
|
681
|
+
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, skipFeeEnforcement, /*clientInitiatedSimulation*/ true);
|
|
681
682
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
682
|
-
const [processedTxs, failedTxs, returns] = await processor.process([
|
|
683
|
+
const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([
|
|
683
684
|
tx
|
|
684
685
|
]);
|
|
685
686
|
// REFACTOR: Consider returning the error rather than throwing
|
|
@@ -774,6 +775,50 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
774
775
|
});
|
|
775
776
|
return Promise.resolve();
|
|
776
777
|
}
|
|
778
|
+
async rollbackTo(targetBlock, force) {
|
|
779
|
+
const archiver = this.blockSource;
|
|
780
|
+
if (!('rollbackTo' in archiver)) {
|
|
781
|
+
throw new Error('Archiver implementation does not support rollbacks.');
|
|
782
|
+
}
|
|
783
|
+
const finalizedBlock = await archiver.getL2Tips().then((tips)=>tips.finalized.number);
|
|
784
|
+
if (targetBlock < finalizedBlock) {
|
|
785
|
+
if (force) {
|
|
786
|
+
this.log.warn(`Clearing world state database to allow rolling back behind finalized block ${finalizedBlock}`);
|
|
787
|
+
await this.worldStateSynchronizer.clear();
|
|
788
|
+
await this.p2pClient.clear();
|
|
789
|
+
} else {
|
|
790
|
+
throw new Error(`Cannot rollback to block ${targetBlock} as it is before finalized ${finalizedBlock}`);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
try {
|
|
794
|
+
this.log.info(`Pausing archiver and world state sync to start rollback`);
|
|
795
|
+
await archiver.stop();
|
|
796
|
+
await this.worldStateSynchronizer.stopSync();
|
|
797
|
+
const currentBlock = await archiver.getBlockNumber();
|
|
798
|
+
const blocksToUnwind = currentBlock - targetBlock;
|
|
799
|
+
this.log.info(`Unwinding ${count(blocksToUnwind, 'block')} from L2 block ${currentBlock} to ${targetBlock}`);
|
|
800
|
+
await archiver.rollbackTo(targetBlock);
|
|
801
|
+
this.log.info(`Unwinding complete.`);
|
|
802
|
+
} catch (err) {
|
|
803
|
+
this.log.error(`Error during rollback`, err);
|
|
804
|
+
throw err;
|
|
805
|
+
} finally{
|
|
806
|
+
this.log.info(`Resuming world state and archiver sync.`);
|
|
807
|
+
this.worldStateSynchronizer.resumeSync();
|
|
808
|
+
archiver.resume();
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
async pauseSync() {
|
|
812
|
+
this.log.info(`Pausing archiver and world state sync`);
|
|
813
|
+
await this.blockSource.stop();
|
|
814
|
+
await this.worldStateSynchronizer.stopSync();
|
|
815
|
+
}
|
|
816
|
+
resumeSync() {
|
|
817
|
+
this.log.info(`Resuming world state and archiver sync.`);
|
|
818
|
+
this.worldStateSynchronizer.resumeSync();
|
|
819
|
+
this.blockSource.resume();
|
|
820
|
+
return Promise.resolve();
|
|
821
|
+
}
|
|
777
822
|
/**
|
|
778
823
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
779
824
|
* @param blockNumber - The block number at which to get the data.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "0.86.0-nightly.
|
|
3
|
+
"version": "0.86.0-nightly.20250509",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -61,27 +61,27 @@
|
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@aztec/archiver": "0.86.0-nightly.
|
|
65
|
-
"@aztec/bb-prover": "0.86.0-nightly.
|
|
66
|
-
"@aztec/blob-sink": "0.86.0-nightly.
|
|
67
|
-
"@aztec/constants": "0.86.0-nightly.
|
|
68
|
-
"@aztec/epoch-cache": "0.86.0-nightly.
|
|
69
|
-
"@aztec/ethereum": "0.86.0-nightly.
|
|
70
|
-
"@aztec/foundation": "0.86.0-nightly.
|
|
71
|
-
"@aztec/kv-store": "0.86.0-nightly.
|
|
72
|
-
"@aztec/l1-artifacts": "0.86.0-nightly.
|
|
73
|
-
"@aztec/merkle-tree": "0.86.0-nightly.
|
|
74
|
-
"@aztec/node-lib": "0.86.0-nightly.
|
|
75
|
-
"@aztec/noir-protocol-circuits-types": "0.86.0-nightly.
|
|
76
|
-
"@aztec/p2p": "0.86.0-nightly.
|
|
77
|
-
"@aztec/protocol-contracts": "0.86.0-nightly.
|
|
78
|
-
"@aztec/prover-client": "0.86.0-nightly.
|
|
79
|
-
"@aztec/sequencer-client": "0.86.0-nightly.
|
|
80
|
-
"@aztec/simulator": "0.86.0-nightly.
|
|
81
|
-
"@aztec/stdlib": "0.86.0-nightly.
|
|
82
|
-
"@aztec/telemetry-client": "0.86.0-nightly.
|
|
83
|
-
"@aztec/validator-client": "0.86.0-nightly.
|
|
84
|
-
"@aztec/world-state": "0.86.0-nightly.
|
|
64
|
+
"@aztec/archiver": "0.86.0-nightly.20250509",
|
|
65
|
+
"@aztec/bb-prover": "0.86.0-nightly.20250509",
|
|
66
|
+
"@aztec/blob-sink": "0.86.0-nightly.20250509",
|
|
67
|
+
"@aztec/constants": "0.86.0-nightly.20250509",
|
|
68
|
+
"@aztec/epoch-cache": "0.86.0-nightly.20250509",
|
|
69
|
+
"@aztec/ethereum": "0.86.0-nightly.20250509",
|
|
70
|
+
"@aztec/foundation": "0.86.0-nightly.20250509",
|
|
71
|
+
"@aztec/kv-store": "0.86.0-nightly.20250509",
|
|
72
|
+
"@aztec/l1-artifacts": "0.86.0-nightly.20250509",
|
|
73
|
+
"@aztec/merkle-tree": "0.86.0-nightly.20250509",
|
|
74
|
+
"@aztec/node-lib": "0.86.0-nightly.20250509",
|
|
75
|
+
"@aztec/noir-protocol-circuits-types": "0.86.0-nightly.20250509",
|
|
76
|
+
"@aztec/p2p": "0.86.0-nightly.20250509",
|
|
77
|
+
"@aztec/protocol-contracts": "0.86.0-nightly.20250509",
|
|
78
|
+
"@aztec/prover-client": "0.86.0-nightly.20250509",
|
|
79
|
+
"@aztec/sequencer-client": "0.86.0-nightly.20250509",
|
|
80
|
+
"@aztec/simulator": "0.86.0-nightly.20250509",
|
|
81
|
+
"@aztec/stdlib": "0.86.0-nightly.20250509",
|
|
82
|
+
"@aztec/telemetry-client": "0.86.0-nightly.20250509",
|
|
83
|
+
"@aztec/validator-client": "0.86.0-nightly.20250509",
|
|
84
|
+
"@aztec/world-state": "0.86.0-nightly.20250509",
|
|
85
85
|
"koa": "^2.16.1",
|
|
86
86
|
"koa-router": "^12.0.0",
|
|
87
87
|
"tslib": "^2.4.0",
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
16
16
|
import { Fr } from '@aztec/foundation/fields';
|
|
17
17
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
18
18
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
19
|
+
import { count } from '@aztec/foundation/string';
|
|
19
20
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
20
21
|
import { SiblingPath } from '@aztec/foundation/trees';
|
|
21
22
|
import type { AztecKVStore } from '@aztec/kv-store';
|
|
@@ -959,10 +960,15 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
959
960
|
|
|
960
961
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
961
962
|
try {
|
|
962
|
-
const processor = publicProcessorFactory.create(
|
|
963
|
+
const processor = publicProcessorFactory.create(
|
|
964
|
+
merkleTreeFork,
|
|
965
|
+
newGlobalVariables,
|
|
966
|
+
skipFeeEnforcement,
|
|
967
|
+
/*clientInitiatedSimulation*/ true,
|
|
968
|
+
);
|
|
963
969
|
|
|
964
970
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
965
|
-
const [processedTxs, failedTxs, returns] = await processor.process([tx]);
|
|
971
|
+
const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([tx]);
|
|
966
972
|
// REFACTOR: Consider returning the error rather than throwing
|
|
967
973
|
if (failedTxs.length) {
|
|
968
974
|
this.log.warn(`Simulated tx ${txHash} fails: ${failedTxs[0].error}`, { txHash });
|
|
@@ -1075,6 +1081,55 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1075
1081
|
return Promise.resolve();
|
|
1076
1082
|
}
|
|
1077
1083
|
|
|
1084
|
+
public async rollbackTo(targetBlock: number, force?: boolean): Promise<void> {
|
|
1085
|
+
const archiver = this.blockSource as Archiver;
|
|
1086
|
+
if (!('rollbackTo' in archiver)) {
|
|
1087
|
+
throw new Error('Archiver implementation does not support rollbacks.');
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
const finalizedBlock = await archiver.getL2Tips().then(tips => tips.finalized.number);
|
|
1091
|
+
if (targetBlock < finalizedBlock) {
|
|
1092
|
+
if (force) {
|
|
1093
|
+
this.log.warn(`Clearing world state database to allow rolling back behind finalized block ${finalizedBlock}`);
|
|
1094
|
+
await this.worldStateSynchronizer.clear();
|
|
1095
|
+
await this.p2pClient.clear();
|
|
1096
|
+
} else {
|
|
1097
|
+
throw new Error(`Cannot rollback to block ${targetBlock} as it is before finalized ${finalizedBlock}`);
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
try {
|
|
1102
|
+
this.log.info(`Pausing archiver and world state sync to start rollback`);
|
|
1103
|
+
await archiver.stop();
|
|
1104
|
+
await this.worldStateSynchronizer.stopSync();
|
|
1105
|
+
const currentBlock = await archiver.getBlockNumber();
|
|
1106
|
+
const blocksToUnwind = currentBlock - targetBlock;
|
|
1107
|
+
this.log.info(`Unwinding ${count(blocksToUnwind, 'block')} from L2 block ${currentBlock} to ${targetBlock}`);
|
|
1108
|
+
await archiver.rollbackTo(targetBlock);
|
|
1109
|
+
this.log.info(`Unwinding complete.`);
|
|
1110
|
+
} catch (err) {
|
|
1111
|
+
this.log.error(`Error during rollback`, err);
|
|
1112
|
+
throw err;
|
|
1113
|
+
} finally {
|
|
1114
|
+
this.log.info(`Resuming world state and archiver sync.`);
|
|
1115
|
+
this.worldStateSynchronizer.resumeSync();
|
|
1116
|
+
archiver.resume();
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
public async pauseSync(): Promise<void> {
|
|
1121
|
+
this.log.info(`Pausing archiver and world state sync`);
|
|
1122
|
+
await (this.blockSource as Archiver).stop();
|
|
1123
|
+
await this.worldStateSynchronizer.stopSync();
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
public resumeSync(): Promise<void> {
|
|
1127
|
+
this.log.info(`Resuming world state and archiver sync.`);
|
|
1128
|
+
this.worldStateSynchronizer.resumeSync();
|
|
1129
|
+
(this.blockSource as Archiver).resume();
|
|
1130
|
+
return Promise.resolve();
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1078
1133
|
/**
|
|
1079
1134
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
1080
1135
|
* @param blockNumber - The block number at which to get the data.
|