@aztec/prover-node 0.76.2 → 0.76.4-devnet-test
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/config.d.ts +1 -7
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -23
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +3 -32
- package/dest/job/epoch-proving-job.d.ts +1 -0
- package/dest/job/epoch-proving-job.d.ts.map +1 -1
- package/dest/job/epoch-proving-job.js +4 -1
- package/dest/monitors/epoch-monitor.d.ts +0 -1
- package/dest/monitors/epoch-monitor.d.ts.map +1 -1
- package/dest/monitors/epoch-monitor.js +2 -2
- package/dest/monitors/index.d.ts +0 -1
- package/dest/monitors/index.d.ts.map +1 -1
- package/dest/monitors/index.js +1 -2
- package/dest/prover-node-publisher.d.ts +0 -7
- package/dest/prover-node-publisher.d.ts.map +1 -1
- package/dest/prover-node-publisher.js +9 -10
- package/dest/prover-node.d.ts +12 -26
- package/dest/prover-node.d.ts.map +1 -1
- package/dest/prover-node.js +24 -89
- package/package.json +20 -20
- package/src/config.ts +1 -37
- package/src/factory.ts +2 -40
- package/src/job/epoch-proving-job.ts +4 -0
- package/src/monitors/epoch-monitor.ts +1 -2
- package/src/monitors/index.ts +0 -1
- package/src/prover-node-publisher.ts +8 -10
- package/src/prover-node.ts +29 -106
- package/dest/bond/bond-manager.d.ts +0 -22
- package/dest/bond/bond-manager.d.ts.map +0 -1
- package/dest/bond/bond-manager.js +0 -42
- package/dest/bond/config.d.ts +0 -8
- package/dest/bond/config.d.ts.map +0 -1
- package/dest/bond/config.js +0 -17
- package/dest/bond/escrow-contract.d.ts +0 -19
- package/dest/bond/escrow-contract.d.ts.map +0 -1
- package/dest/bond/escrow-contract.js +0 -32
- package/dest/bond/factory.d.ts +0 -6
- package/dest/bond/factory.d.ts.map +0 -1
- package/dest/bond/factory.js +0 -17
- package/dest/bond/index.d.ts +0 -3
- package/dest/bond/index.d.ts.map +0 -1
- package/dest/bond/index.js +0 -3
- package/dest/bond/token-contract.d.ts +0 -26
- package/dest/bond/token-contract.d.ts.map +0 -1
- package/dest/bond/token-contract.js +0 -58
- package/dest/monitors/claims-monitor.d.ts +0 -24
- package/dest/monitors/claims-monitor.d.ts.map +0 -1
- package/dest/monitors/claims-monitor.js +0 -54
- package/dest/quote-provider/http.d.ts +0 -15
- package/dest/quote-provider/http.d.ts.map +0 -1
- package/dest/quote-provider/http.js +0 -33
- package/dest/quote-provider/index.d.ts +0 -6
- package/dest/quote-provider/index.d.ts.map +0 -1
- package/dest/quote-provider/index.js +0 -2
- package/dest/quote-provider/simple.d.ts +0 -9
- package/dest/quote-provider/simple.d.ts.map +0 -1
- package/dest/quote-provider/simple.js +0 -11
- package/dest/quote-provider/utils.d.ts +0 -4
- package/dest/quote-provider/utils.d.ts.map +0 -1
- package/dest/quote-provider/utils.js +0 -8
- package/dest/quote-signer.d.ts +0 -13
- package/dest/quote-signer.d.ts.map +0 -1
- package/dest/quote-signer.js +0 -18
- package/src/bond/bond-manager.ts +0 -48
- package/src/bond/config.ts +0 -25
- package/src/bond/escrow-contract.ts +0 -50
- package/src/bond/factory.ts +0 -28
- package/src/bond/index.ts +0 -2
- package/src/bond/token-contract.ts +0 -72
- package/src/monitors/claims-monitor.ts +0 -69
- package/src/quote-provider/http.ts +0 -48
- package/src/quote-provider/index.ts +0 -8
- package/src/quote-provider/simple.ts +0 -15
- package/src/quote-provider/utils.ts +0 -10
- package/src/quote-signer.ts +0 -24
package/dest/prover-node.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { EpochProvingJobTerminalState, getTimestampRangeForEpoch, tryStop, } from '@aztec/circuit-types';
|
|
3
3
|
import { compact } from '@aztec/foundation/collection';
|
|
4
4
|
import { memoize } from '@aztec/foundation/decorators';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -23,7 +23,7 @@ let ProverNode = (() => {
|
|
|
23
23
|
let _checkForTxs_decorators;
|
|
24
24
|
let _gatherEpochData_decorators;
|
|
25
25
|
return _a = class ProverNode {
|
|
26
|
-
constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination,
|
|
26
|
+
constructor(prover, publisher, l2BlockSource, l1ToL2MessageSource, contractDataSource, worldState, coordination, epochsMonitor, options = {}, telemetryClient = getTelemetryClient()) {
|
|
27
27
|
this.prover = (__runInitializers(this, _instanceExtraInitializers), prover);
|
|
28
28
|
this.publisher = publisher;
|
|
29
29
|
this.l2BlockSource = l2BlockSource;
|
|
@@ -31,11 +31,7 @@ let ProverNode = (() => {
|
|
|
31
31
|
this.contractDataSource = contractDataSource;
|
|
32
32
|
this.worldState = worldState;
|
|
33
33
|
this.coordination = coordination;
|
|
34
|
-
this.quoteProvider = quoteProvider;
|
|
35
|
-
this.quoteSigner = quoteSigner;
|
|
36
|
-
this.claimsMonitor = claimsMonitor;
|
|
37
34
|
this.epochsMonitor = epochsMonitor;
|
|
38
|
-
this.bondManager = bondManager;
|
|
39
35
|
this.telemetryClient = telemetryClient;
|
|
40
36
|
this.log = createLogger('prover-node');
|
|
41
37
|
this.dateProvider = new DateProvider();
|
|
@@ -61,81 +57,24 @@ let ProverNode = (() => {
|
|
|
61
57
|
}
|
|
62
58
|
return undefined;
|
|
63
59
|
}
|
|
64
|
-
async handleClaim(proofClaim) {
|
|
65
|
-
if (proofClaim.epochToProve === this.latestEpochWeAreProving) {
|
|
66
|
-
this.log.verbose(`Already proving claim for epoch ${proofClaim.epochToProve}`);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const provenEpoch = await this.l2BlockSource.getProvenL2EpochNumber();
|
|
70
|
-
if (provenEpoch !== undefined && proofClaim.epochToProve <= provenEpoch) {
|
|
71
|
-
this.log.verbose(`Claim for epoch ${proofClaim.epochToProve} is already proven`);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
try {
|
|
75
|
-
await this.startProof(proofClaim.epochToProve);
|
|
76
|
-
this.latestEpochWeAreProving = proofClaim.epochToProve;
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
this.log.error(`Error handling claim for epoch ${proofClaim.epochToProve}`, err);
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
// Staked amounts are lowered after a claim, so this is a good time for doing a top-up if needed
|
|
83
|
-
await this.bondManager.ensureBond();
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
this.log.error(`Error ensuring prover bond after handling claim for epoch ${proofClaim.epochToProve}`, err);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
60
|
/**
|
|
90
|
-
* Handles
|
|
91
|
-
* is an existing claim for it. If not, it creates and sends a quote for it.
|
|
92
|
-
* @param epochNumber - The epoch immediately before the current one when the prover node starts.
|
|
93
|
-
*/
|
|
94
|
-
async handleInitialEpochSync(epochNumber) {
|
|
95
|
-
try {
|
|
96
|
-
const claim = await this.publisher.getProofClaim();
|
|
97
|
-
if (!claim || claim.epochToProve < epochNumber) {
|
|
98
|
-
this.log.verbose(`Handling epoch ${epochNumber} completed as initial sync`);
|
|
99
|
-
await this.handleEpochCompleted(epochNumber);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
this.log.error(`Error handling initial epoch sync`, err);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Handles an epoch being completed by sending a quote for proving it.
|
|
61
|
+
* Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
|
|
108
62
|
* @param epochNumber - The epoch number that was just completed.
|
|
109
63
|
*/
|
|
110
64
|
async handleEpochCompleted(epochNumber) {
|
|
111
65
|
try {
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// Construct a quote for the epoch
|
|
117
|
-
const partialQuote = await this.quoteProvider.getQuote(Number(epochNumber), blocks);
|
|
118
|
-
if (!partialQuote) {
|
|
119
|
-
this.log.info(`No quote produced for epoch ${epochNumber}`);
|
|
66
|
+
this.log.debug('jobs', JSON.stringify(this.jobs, null, 2));
|
|
67
|
+
const activeJobs = await this.getActiveJobsForEpoch(epochNumber);
|
|
68
|
+
if (activeJobs.length > 0) {
|
|
69
|
+
this.log.info(`Not starting proof for ${epochNumber} since there are active jobs`);
|
|
120
70
|
return;
|
|
121
71
|
}
|
|
122
|
-
//
|
|
123
|
-
await this.
|
|
124
|
-
// Assemble and sign full quote
|
|
125
|
-
const quote = EpochProofQuotePayload.from({
|
|
126
|
-
...partialQuote,
|
|
127
|
-
epochToProve: BigInt(epochNumber),
|
|
128
|
-
prover: this.publisher.getSenderAddress(),
|
|
129
|
-
validUntilSlot: partialQuote.validUntilSlot ?? BigInt(Number.MAX_SAFE_INTEGER), // Should we constrain this?
|
|
130
|
-
});
|
|
131
|
-
const signed = await this.quoteSigner.sign(quote);
|
|
132
|
-
// Send it to the coordinator
|
|
133
|
-
this.log.info(`Sending quote for epoch ${epochNumber} with blocks ${blocks[0].number} to ${blocks.at(-1).number}`, quote.toViemArgs());
|
|
134
|
-
await this.doSendEpochProofQuote(signed);
|
|
72
|
+
// TODO: we probably want to skip starting a proof if we are too far into the current epoch
|
|
73
|
+
await this.startProof(epochNumber);
|
|
135
74
|
}
|
|
136
75
|
catch (err) {
|
|
137
76
|
if (err instanceof EmptyEpochError) {
|
|
138
|
-
this.log.info(`Not
|
|
77
|
+
this.log.info(`Not starting proof for ${epochNumber} since no blocks were found`);
|
|
139
78
|
}
|
|
140
79
|
else {
|
|
141
80
|
this.log.error(`Error handling epoch completed`, err);
|
|
@@ -143,15 +82,12 @@ let ProverNode = (() => {
|
|
|
143
82
|
}
|
|
144
83
|
}
|
|
145
84
|
/**
|
|
146
|
-
* Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
|
|
147
|
-
*
|
|
148
|
-
* This method returns once the prover node has deposited an initial bond into the escrow contract.
|
|
85
|
+
* Starts the prover node so it periodically checks for unproven epochs in the unfinalised chain from L1 and
|
|
86
|
+
* starts proving jobs for them.
|
|
149
87
|
*/
|
|
150
|
-
|
|
88
|
+
start() {
|
|
151
89
|
this.txFetcher.start();
|
|
152
|
-
await this.bondManager.ensureBond();
|
|
153
90
|
this.epochsMonitor.start(this);
|
|
154
|
-
this.claimsMonitor.start(this);
|
|
155
91
|
this.log.info('Started ProverNode', this.options);
|
|
156
92
|
}
|
|
157
93
|
/**
|
|
@@ -161,7 +97,6 @@ let ProverNode = (() => {
|
|
|
161
97
|
this.log.info('Stopping ProverNode');
|
|
162
98
|
await this.txFetcher.stop();
|
|
163
99
|
await this.epochsMonitor.stop();
|
|
164
|
-
await this.claimsMonitor.stop();
|
|
165
100
|
await this.prover.stop();
|
|
166
101
|
await tryStop(this.l2BlockSource);
|
|
167
102
|
this.publisher.interrupt();
|
|
@@ -171,14 +106,6 @@ let ProverNode = (() => {
|
|
|
171
106
|
await this.telemetryClient.stop();
|
|
172
107
|
this.log.info('Stopped ProverNode');
|
|
173
108
|
}
|
|
174
|
-
/** Sends an epoch proof quote to the coordinator. */
|
|
175
|
-
sendEpochProofQuote(quote) {
|
|
176
|
-
this.log.info(`Sending quote for epoch`, quote.toViemArgs().quote);
|
|
177
|
-
return this.doSendEpochProofQuote(quote);
|
|
178
|
-
}
|
|
179
|
-
doSendEpochProofQuote(quote) {
|
|
180
|
-
return this.coordination.addEpochProofQuote(quote);
|
|
181
|
-
}
|
|
182
109
|
/**
|
|
183
110
|
* Creates a proof for a block range. Returns once the proof has been submitted to L1.
|
|
184
111
|
*/
|
|
@@ -203,7 +130,16 @@ let ProverNode = (() => {
|
|
|
203
130
|
* Returns an array of jobs being processed.
|
|
204
131
|
*/
|
|
205
132
|
getJobs() {
|
|
206
|
-
return Promise.resolve(Array.from(this.jobs.entries()).map(([uuid, job]) => ({
|
|
133
|
+
return Promise.resolve(Array.from(this.jobs.entries()).map(([uuid, job]) => ({
|
|
134
|
+
uuid,
|
|
135
|
+
status: job.getState(),
|
|
136
|
+
epochNumber: Number(job.getEpochNumber()),
|
|
137
|
+
})));
|
|
138
|
+
}
|
|
139
|
+
async getActiveJobsForEpoch(epochBigInt) {
|
|
140
|
+
const jobs = await this.getJobs();
|
|
141
|
+
const epochNumber = Number(epochBigInt);
|
|
142
|
+
return jobs.filter(job => job.epochNumber === epochNumber && !EpochProvingJobTerminalState.includes(job.status));
|
|
207
143
|
}
|
|
208
144
|
checkMaximumPendingJobs() {
|
|
209
145
|
const { maxPendingJobs } = this.options;
|
|
@@ -283,7 +219,6 @@ let ProverNode = (() => {
|
|
|
283
219
|
/** Extracted for testing purposes. */
|
|
284
220
|
async triggerMonitors() {
|
|
285
221
|
await this.epochsMonitor.work();
|
|
286
|
-
await this.claimsMonitor.work();
|
|
287
222
|
}
|
|
288
223
|
},
|
|
289
224
|
(() => {
|
|
@@ -307,4 +242,4 @@ class EmptyEpochError extends Error {
|
|
|
307
242
|
this.name = 'EmptyEpochError';
|
|
308
243
|
}
|
|
309
244
|
}
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxzQkFBc0IsRUFZdEIseUJBQXlCLEVBQ3pCLE9BQU8sR0FDUixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUNMLFVBQVUsRUFJVixrQkFBa0IsRUFDbEIsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFHakMsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFnQmpEOzs7OztHQUtHO0lBQ1UsVUFBVTs7Ozs7OztzQkFBVixVQUFVO1lBZXJCLFlBQ3FCLE1BQTBCLEVBQzFCLFNBQThCLEVBQzlCLGFBQTZDLEVBQzdDLG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFDdEMsVUFBa0MsRUFDbEMsWUFBaUQsRUFDakQsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsYUFBMkIsRUFDM0IsV0FBd0IsRUFDM0MsVUFBc0MsRUFBRSxFQUNyQixrQkFBbUMsa0JBQWtCLEVBQUU7Z0JBYnZELFdBQU0sSUFoQmhCLG1EQUFVLEVBZ0JBLE1BQU0sRUFBb0I7Z0JBQzFCLGNBQVMsR0FBVCxTQUFTLENBQXFC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
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCw0QkFBNEIsRUFXNUIseUJBQXlCLEVBQ3pCLE9BQU8sR0FDUixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUNMLFVBQVUsRUFJVixrQkFBa0IsRUFDbEIsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFhakQ7Ozs7O0dBS0c7SUFDVSxVQUFVOzs7Ozs7O3NCQUFWLFVBQVU7WUFlckIsWUFDcUIsTUFBMEIsRUFDMUIsU0FBOEIsRUFDOUIsYUFBNkMsRUFDN0MsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxVQUFrQyxFQUNsQyxZQUFpRCxFQUNqRCxhQUEyQixFQUM5QyxVQUFzQyxFQUFFLEVBQ3JCLGtCQUFtQyxrQkFBa0IsRUFBRTtnQkFUdkQsV0FBTSxJQWhCaEIsbURBQVUsRUFnQkEsTUFBTSxFQUFvQjtnQkFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7Z0JBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQztnQkFDN0Msd0JBQW1CLEdBQW5C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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "0.76.
|
|
3
|
+
"version": "0.76.4-devnet-test",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -53,25 +53,25 @@
|
|
|
53
53
|
]
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@aztec/archiver": "0.76.
|
|
57
|
-
"@aztec/bb-prover": "0.76.
|
|
58
|
-
"@aztec/blob-sink": "0.76.
|
|
59
|
-
"@aztec/circuit-types": "0.76.
|
|
60
|
-
"@aztec/circuits.js": "0.76.
|
|
61
|
-
"@aztec/epoch-cache": "0.76.
|
|
62
|
-
"@aztec/ethereum": "0.76.
|
|
63
|
-
"@aztec/foundation": "0.76.
|
|
64
|
-
"@aztec/kv-store": "0.76.
|
|
65
|
-
"@aztec/l1-artifacts": "0.76.
|
|
66
|
-
"@aztec/noir-protocol-circuits-types": "0.76.
|
|
67
|
-
"@aztec/p2p": "0.76.
|
|
68
|
-
"@aztec/protocol-contracts": "0.76.
|
|
69
|
-
"@aztec/prover-client": "0.76.
|
|
70
|
-
"@aztec/sequencer-client": "0.76.
|
|
71
|
-
"@aztec/simulator": "0.76.
|
|
72
|
-
"@aztec/telemetry-client": "0.76.
|
|
73
|
-
"@aztec/types": "0.76.
|
|
74
|
-
"@aztec/world-state": "0.76.
|
|
56
|
+
"@aztec/archiver": "0.76.4-devnet-test",
|
|
57
|
+
"@aztec/bb-prover": "0.76.4-devnet-test",
|
|
58
|
+
"@aztec/blob-sink": "0.76.4-devnet-test",
|
|
59
|
+
"@aztec/circuit-types": "0.76.4-devnet-test",
|
|
60
|
+
"@aztec/circuits.js": "0.76.4-devnet-test",
|
|
61
|
+
"@aztec/epoch-cache": "0.76.4-devnet-test",
|
|
62
|
+
"@aztec/ethereum": "0.76.4-devnet-test",
|
|
63
|
+
"@aztec/foundation": "0.76.4-devnet-test",
|
|
64
|
+
"@aztec/kv-store": "0.76.4-devnet-test",
|
|
65
|
+
"@aztec/l1-artifacts": "0.76.4-devnet-test",
|
|
66
|
+
"@aztec/noir-protocol-circuits-types": "0.76.4-devnet-test",
|
|
67
|
+
"@aztec/p2p": "0.76.4-devnet-test",
|
|
68
|
+
"@aztec/protocol-contracts": "0.76.4-devnet-test",
|
|
69
|
+
"@aztec/prover-client": "0.76.4-devnet-test",
|
|
70
|
+
"@aztec/sequencer-client": "0.76.4-devnet-test",
|
|
71
|
+
"@aztec/simulator": "0.76.4-devnet-test",
|
|
72
|
+
"@aztec/telemetry-client": "0.76.4-devnet-test",
|
|
73
|
+
"@aztec/types": "0.76.4-devnet-test",
|
|
74
|
+
"@aztec/world-state": "0.76.4-devnet-test",
|
|
75
75
|
"source-map-support": "^0.5.21",
|
|
76
76
|
"tslib": "^2.4.0",
|
|
77
77
|
"viem": "2.22.8"
|
package/src/config.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { type ArchiverConfig, archiverConfigMappings, getArchiverConfigFromEnv } from '@aztec/archiver/config';
|
|
2
2
|
import { type ACVMConfig, type BBConfig } from '@aztec/bb-prover/config';
|
|
3
|
-
import {
|
|
4
|
-
type ConfigMappingsType,
|
|
5
|
-
bigintConfigHelper,
|
|
6
|
-
getConfigFromMappings,
|
|
7
|
-
numberConfigHelper,
|
|
8
|
-
} from '@aztec/foundation/config';
|
|
3
|
+
import { type ConfigMappingsType, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
|
|
9
4
|
import { type DataStoreConfig, dataConfigMappings, getDataConfigFromEnv } from '@aztec/kv-store/config';
|
|
10
5
|
import { type P2PConfig, getP2PConfigFromEnv, p2pConfigMappings } from '@aztec/p2p/config';
|
|
11
6
|
import {
|
|
@@ -30,7 +25,6 @@ import {
|
|
|
30
25
|
} from '@aztec/sequencer-client/config';
|
|
31
26
|
import { type WorldStateConfig, getWorldStateConfigFromEnv, worldStateConfigMappings } from '@aztec/world-state/config';
|
|
32
27
|
|
|
33
|
-
import { type ProverBondManagerConfig, proverBondManagerConfigMappings } from './bond/config.js';
|
|
34
28
|
import {
|
|
35
29
|
type ProverCoordinationConfig,
|
|
36
30
|
getTxProviderConfigFromEnv,
|
|
@@ -45,8 +39,6 @@ export type ProverNodeConfig = ArchiverConfig &
|
|
|
45
39
|
TxSenderConfig &
|
|
46
40
|
DataStoreConfig &
|
|
47
41
|
ProverCoordinationConfig &
|
|
48
|
-
ProverBondManagerConfig &
|
|
49
|
-
QuoteProviderConfig &
|
|
50
42
|
SpecificProverNodeConfig;
|
|
51
43
|
|
|
52
44
|
type SpecificProverNodeConfig = {
|
|
@@ -58,12 +50,6 @@ type SpecificProverNodeConfig = {
|
|
|
58
50
|
txGatheringMaxParallelRequests: number;
|
|
59
51
|
};
|
|
60
52
|
|
|
61
|
-
export type QuoteProviderConfig = {
|
|
62
|
-
quoteProviderBasisPointFee: number;
|
|
63
|
-
quoteProviderBondAmount: bigint;
|
|
64
|
-
quoteProviderUrl?: string;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
53
|
const specificProverNodeConfigMappings: ConfigMappingsType<SpecificProverNodeConfig> = {
|
|
68
54
|
proverNodeMaxPendingJobs: {
|
|
69
55
|
env: 'PROVER_NODE_MAX_PENDING_JOBS',
|
|
@@ -97,24 +83,6 @@ const specificProverNodeConfigMappings: ConfigMappingsType<SpecificProverNodeCon
|
|
|
97
83
|
},
|
|
98
84
|
};
|
|
99
85
|
|
|
100
|
-
const quoteProviderConfigMappings: ConfigMappingsType<QuoteProviderConfig> = {
|
|
101
|
-
quoteProviderBasisPointFee: {
|
|
102
|
-
env: 'QUOTE_PROVIDER_BASIS_POINT_FEE',
|
|
103
|
-
description: 'The basis point fee to charge for providing quotes',
|
|
104
|
-
...numberConfigHelper(100),
|
|
105
|
-
},
|
|
106
|
-
quoteProviderBondAmount: {
|
|
107
|
-
env: 'QUOTE_PROVIDER_BOND_AMOUNT',
|
|
108
|
-
description: 'The bond amount to charge for providing quotes',
|
|
109
|
-
...bigintConfigHelper(1000n),
|
|
110
|
-
},
|
|
111
|
-
quoteProviderUrl: {
|
|
112
|
-
env: 'QUOTE_PROVIDER_URL',
|
|
113
|
-
description:
|
|
114
|
-
'The URL of the remote quote provider. Overrides QUOTE_PROVIDER_BASIS_POINT_FEE and QUOTE_PROVIDER_BOND_AMOUNT.',
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
|
|
118
86
|
export const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig> = {
|
|
119
87
|
...dataConfigMappings,
|
|
120
88
|
...archiverConfigMappings,
|
|
@@ -124,8 +92,6 @@ export const proverNodeConfigMappings: ConfigMappingsType<ProverNodeConfig> = {
|
|
|
124
92
|
...getPublisherConfigMappings('PROVER'),
|
|
125
93
|
...getTxSenderConfigMappings('PROVER'),
|
|
126
94
|
...proverCoordinationConfigMappings,
|
|
127
|
-
...quoteProviderConfigMappings,
|
|
128
|
-
...proverBondManagerConfigMappings,
|
|
129
95
|
...specificProverNodeConfigMappings,
|
|
130
96
|
};
|
|
131
97
|
|
|
@@ -139,9 +105,7 @@ export function getProverNodeConfigFromEnv(): ProverNodeConfig {
|
|
|
139
105
|
...getPublisherConfigFromEnv('PROVER'),
|
|
140
106
|
...getTxSenderConfigFromEnv('PROVER'),
|
|
141
107
|
...getTxProviderConfigFromEnv(),
|
|
142
|
-
...getConfigFromMappings(quoteProviderConfigMappings),
|
|
143
108
|
...getConfigFromMappings(specificProverNodeConfigMappings),
|
|
144
|
-
...getConfigFromMappings(proverBondManagerConfigMappings),
|
|
145
109
|
};
|
|
146
110
|
}
|
|
147
111
|
|
package/src/factory.ts
CHANGED
|
@@ -3,28 +3,18 @@ import { type BlobSinkClientInterface, createBlobSinkClient } from '@aztec/blob-
|
|
|
3
3
|
import { type ProverCoordination, type ProvingJobBroker } from '@aztec/circuit-types';
|
|
4
4
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
5
5
|
import { L1TxUtils, RollupContract, createEthereumChain, createL1Clients } from '@aztec/ethereum';
|
|
6
|
-
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
7
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
8
6
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
9
7
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
10
|
-
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
11
8
|
import { createProverClient } from '@aztec/prover-client';
|
|
12
9
|
import { createAndStartProvingBroker } from '@aztec/prover-client/broker';
|
|
13
10
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
14
11
|
import { createWorldStateSynchronizer } from '@aztec/world-state';
|
|
15
12
|
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
import { createBondManager } from './bond/factory.js';
|
|
19
|
-
import { type ProverNodeConfig, type QuoteProviderConfig } from './config.js';
|
|
20
|
-
import { ClaimsMonitor } from './monitors/claims-monitor.js';
|
|
13
|
+
import { type ProverNodeConfig } from './config.js';
|
|
21
14
|
import { EpochMonitor } from './monitors/epoch-monitor.js';
|
|
22
15
|
import { createProverCoordination } from './prover-coordination/factory.js';
|
|
23
16
|
import { ProverNodePublisher } from './prover-node-publisher.js';
|
|
24
17
|
import { ProverNode, type ProverNodeOptions } from './prover-node.js';
|
|
25
|
-
import { HttpQuoteProvider } from './quote-provider/http.js';
|
|
26
|
-
import { SimpleQuoteProvider } from './quote-provider/simple.js';
|
|
27
|
-
import { QuoteSigner } from './quote-signer.js';
|
|
28
18
|
|
|
29
19
|
/** Creates a new prover node given a config. */
|
|
30
20
|
export async function createProverNode(
|
|
@@ -64,7 +54,7 @@ export async function createProverNode(
|
|
|
64
54
|
|
|
65
55
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config);
|
|
66
56
|
|
|
67
|
-
// If config.p2pEnabled is true, createProverCoordination will create a p2p client where
|
|
57
|
+
// If config.p2pEnabled is true, createProverCoordination will create a p2p client where txs are requested
|
|
68
58
|
// If config.p2pEnabled is false, createProverCoordination request information from the AztecNode
|
|
69
59
|
const proverCoordination = await createProverCoordination(config, {
|
|
70
60
|
aztecNodeTxProvider: deps.aztecNodeTxProvider,
|
|
@@ -74,9 +64,6 @@ export async function createProverNode(
|
|
|
74
64
|
telemetry,
|
|
75
65
|
});
|
|
76
66
|
|
|
77
|
-
const quoteProvider = createQuoteProvider(config);
|
|
78
|
-
const quoteSigner = createQuoteSigner(config);
|
|
79
|
-
|
|
80
67
|
const proverNodeConfig: ProverNodeOptions = {
|
|
81
68
|
maxPendingJobs: config.proverNodeMaxPendingJobs,
|
|
82
69
|
pollingIntervalMs: config.proverNodePollingIntervalMs,
|
|
@@ -86,12 +73,8 @@ export async function createProverNode(
|
|
|
86
73
|
txGatheringTimeoutMs: config.txGatheringTimeoutMs,
|
|
87
74
|
};
|
|
88
75
|
|
|
89
|
-
const claimsMonitor = new ClaimsMonitor(publisher, proverNodeConfig, telemetry);
|
|
90
76
|
const epochMonitor = new EpochMonitor(archiver, proverNodeConfig, telemetry);
|
|
91
77
|
|
|
92
|
-
const escrowContractAddress = await rollupContract.getProofCommitmentEscrow();
|
|
93
|
-
const bondManager = await createBondManager(EthAddress.fromString(escrowContractAddress), walletClient, config);
|
|
94
|
-
|
|
95
78
|
return new ProverNode(
|
|
96
79
|
prover,
|
|
97
80
|
publisher,
|
|
@@ -100,29 +83,8 @@ export async function createProverNode(
|
|
|
100
83
|
archiver,
|
|
101
84
|
worldStateSynchronizer,
|
|
102
85
|
proverCoordination,
|
|
103
|
-
quoteProvider,
|
|
104
|
-
quoteSigner,
|
|
105
|
-
claimsMonitor,
|
|
106
86
|
epochMonitor,
|
|
107
|
-
bondManager,
|
|
108
87
|
proverNodeConfig,
|
|
109
88
|
telemetry,
|
|
110
89
|
);
|
|
111
90
|
}
|
|
112
|
-
|
|
113
|
-
function createQuoteProvider(config: QuoteProviderConfig) {
|
|
114
|
-
return config.quoteProviderUrl
|
|
115
|
-
? new HttpQuoteProvider(config.quoteProviderUrl)
|
|
116
|
-
: new SimpleQuoteProvider(config.quoteProviderBasisPointFee, config.quoteProviderBondAmount);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function createQuoteSigner(config: ProverNodeConfig) {
|
|
120
|
-
// REFACTOR: We need a package that just returns an instance of a rollup contract ready to use
|
|
121
|
-
const { l1RpcUrl: rpcUrl, l1ChainId: chainId, l1Contracts } = config;
|
|
122
|
-
const chain = createEthereumChain(rpcUrl, chainId);
|
|
123
|
-
const client = createPublicClient({ chain: chain.chainInfo, transport: http(chain.rpcUrl) });
|
|
124
|
-
const address = getAddress(l1Contracts.rollupAddress.toString());
|
|
125
|
-
const rollupContract = getContract({ address, abi: RollupAbi, client });
|
|
126
|
-
const privateKey = config.publisherPrivateKey;
|
|
127
|
-
return QuoteSigner.new(Buffer32.fromString(privateKey), rollupContract);
|
|
128
|
-
}
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
} from '@aztec/telemetry-client';
|
|
11
11
|
|
|
12
12
|
export interface EpochMonitorHandler {
|
|
13
|
-
handleInitialEpochSync(epochNumber: bigint): Promise<void>;
|
|
14
13
|
handleEpochCompleted(epochNumber: bigint): Promise<void>;
|
|
15
14
|
}
|
|
16
15
|
|
|
@@ -48,7 +47,7 @@ export class EpochMonitor implements Traceable {
|
|
|
48
47
|
if (!this.latestEpochNumber) {
|
|
49
48
|
const epochNumber = await this.l2BlockSource.getL2EpochNumber();
|
|
50
49
|
if (epochNumber > 0n) {
|
|
51
|
-
await this.handler?.
|
|
50
|
+
await this.handler?.handleEpochCompleted(epochNumber - 1n);
|
|
52
51
|
}
|
|
53
52
|
this.latestEpochNumber = epochNumber;
|
|
54
53
|
return;
|
package/src/monitors/index.ts
CHANGED
|
@@ -85,10 +85,6 @@ export class ProverNodePublisher {
|
|
|
85
85
|
return EthAddress.fromString(this.l1TxUtils.getSenderAddress());
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
public getProofClaim() {
|
|
89
|
-
return this.rollupContract.getProofClaim();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
88
|
public async submitEpochProof(args: {
|
|
93
89
|
epochNumber: number;
|
|
94
90
|
fromBlock: number;
|
|
@@ -205,11 +201,12 @@ export class ProverNodePublisher {
|
|
|
205
201
|
|
|
206
202
|
const txArgs = [
|
|
207
203
|
{
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
204
|
+
start: argsArray[0],
|
|
205
|
+
end: argsArray[1],
|
|
206
|
+
args: argsArray[2],
|
|
207
|
+
fees: argsArray[3],
|
|
208
|
+
blobPublicInputs: argsArray[4],
|
|
209
|
+
aggregationObject: argsArray[5],
|
|
213
210
|
proof: proofHex,
|
|
214
211
|
},
|
|
215
212
|
] as const;
|
|
@@ -252,7 +249,8 @@ export class ProverNodePublisher {
|
|
|
252
249
|
proof: Proof;
|
|
253
250
|
}) {
|
|
254
251
|
return [
|
|
255
|
-
BigInt(args.
|
|
252
|
+
BigInt(args.fromBlock),
|
|
253
|
+
BigInt(args.toBlock),
|
|
256
254
|
[
|
|
257
255
|
args.publicInputs.previousArchive.root.toString(),
|
|
258
256
|
args.publicInputs.endArchive.root.toString(),
|