@aztec/prover-node 4.4.0-nightly.20260521 → 4.4.0-nightly.20260522
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.
|
@@ -53,9 +53,13 @@ export declare class ProverNodePublisher {
|
|
|
53
53
|
batchedBlobInputs: BatchedBlob;
|
|
54
54
|
attestations: ViemCommitteeAttestation[];
|
|
55
55
|
}): Promise<boolean>;
|
|
56
|
+
private waitUntilStartBuildsOnProven;
|
|
57
|
+
private getProvenCheckpoint;
|
|
58
|
+
private isStartBuildingOnProven;
|
|
59
|
+
private getSecondsUntilProofSubmissionWindowEnd;
|
|
56
60
|
private validateEpochProofSubmission;
|
|
57
61
|
private sendSubmitEpochProofTx;
|
|
58
62
|
private getEpochProofPublicInputsArgs;
|
|
59
63
|
private getSubmitEpochProofArgs;
|
|
60
64
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVyLW5vZGUtcHVibGlzaGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvdmVyLW5vZGUtcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR3pELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFPbkYsc0VBQXNFO0FBQ3RFLE1BQU0sTUFBTSxzQkFBc0IsR0FBRztJQUNuQyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDcEIsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxFQUFFLENBQUM7SUFDakIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUNkLENBQUM7QUFFRixxQkFBYSxtQkFBbUI7SUFDOUIsT0FBTyxDQUFDLFdBQVcsQ0FBUztJQUM1QixPQUFPLENBQUMsT0FBTyxDQUE2QjtJQUU1QyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUV0QixTQUFTLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUV6QyxTQUFnQixTQUFTLEVBQUUsU0FBUyxDQUFDO0lBRXJDLFlBQ0UsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEVBQ3hDLElBQUksRUFBRTtRQUNKLGNBQWMsRUFBRSxjQUFjLENBQUM7UUFDL0IsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUNyQixTQUFTLENBQUMsRUFBRSxlQUFlLENBQUM7S0FDN0IsRUFDRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBUzFCO0lBRU0saUJBQWlCLG1CQUV2QjtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxTQUdmO0lBRUQsd0RBQXdEO0lBQ2pELE9BQU8sU0FHYjtJQUVNLGdCQUFnQixlQUV0QjtJQUVZLGdCQUFnQixDQUFDLElBQUksRUFBRTtRQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDO1FBQ3pCLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztRQUNqQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7UUFDL0IsWUFBWSxFQUFFLHNCQUFzQixDQUFDO1FBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUM7UUFDYixpQkFBaUIsRUFBRSxXQUFXLENBQUM7UUFDL0IsWUFBWSxFQUFFLHdCQUF3QixFQUFFLENBQUM7S0FDMUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBc0RuQjtZQUVhLDRCQUE0QjtZQWlDNUIsbUJBQW1CO0lBSWpDLE9BQU8sQ0FBQyx1QkFBdUI7WUFJakIsdUNBQXVDO1lBTXZDLDRCQUE0QjtZQStENUIsc0JBQXNCO0lBNENwQyxPQUFPLENBQUMsNkJBQTZCO0lBMEJyQyxPQUFPLENBQUMsdUJBQXVCO0NBdUJoQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"prover-node-publisher.d.ts","sourceRoot":"","sources":["../src/prover-node-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGzD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAOnF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,EAAE,CAAC;IACf,YAAY,EAAE,EAAE,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,yBAAyB,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA6B;IAE5C,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IAEzC,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,YACE,MAAM,EAAE,cAAc,GAAG,eAAe,EACxC,IAAI,EAAE;QACJ,cAAc,EAAE,cAAc,CAAC;QAC/B,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B,EACD,QAAQ,CAAC,EAAE,cAAc,EAS1B;IAEM,iBAAiB,mBAEvB;IAED;;;;;OAKG;IACI,SAAS,SAGf;IAED,wDAAwD;IACjD,OAAO,SAGb;IAEM,gBAAgB,eAEtB;IAEY,gBAAgB,CAAC,IAAI,EAAE;QAClC,WAAW,EAAE,WAAW,CAAC;QACzB,cAAc,EAAE,gBAAgB,CAAC;QACjC,YAAY,EAAE,gBAAgB,CAAC;QAC/B,YAAY,EAAE,sBAAsB,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC;QACb,iBAAiB,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,CAAC,CAsDnB;YAEa,4BAA4B;YAiC5B,mBAAmB;IAIjC,OAAO,CAAC,uBAAuB;YAIjB,uCAAuC;YAMvC,4BAA4B;YA+D5B,sBAAsB;IA4CpC,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,uBAAuB;CAuBhC"}
|
|
@@ -5,9 +5,11 @@ import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
|
5
5
|
import { areArraysEqual } from '@aztec/foundation/collection';
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
8
9
|
import { Timer } from '@aztec/foundation/timer';
|
|
9
10
|
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
10
11
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
12
|
+
import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
11
13
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
12
14
|
import { inspect } from 'util';
|
|
13
15
|
import { encodeFunctionData } from 'viem';
|
|
@@ -52,6 +54,10 @@ export class ProverNodePublisher {
|
|
|
52
54
|
toCheckpoint
|
|
53
55
|
};
|
|
54
56
|
if (!this.interrupted) {
|
|
57
|
+
if (!await this.waitUntilStartBuildsOnProven(args)) {
|
|
58
|
+
this.log.verbose('Checkpoint data syncing interrupted', ctx);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
55
61
|
const timer = new Timer();
|
|
56
62
|
// Validate epoch proof range and hashes are correct before submitting
|
|
57
63
|
await this.validateEpochProofSubmission(args);
|
|
@@ -92,6 +98,42 @@ export class ProverNodePublisher {
|
|
|
92
98
|
this.log.verbose('Checkpoint data syncing interrupted', ctx);
|
|
93
99
|
return false;
|
|
94
100
|
}
|
|
101
|
+
async waitUntilStartBuildsOnProven(args) {
|
|
102
|
+
const { epochNumber, fromCheckpoint } = args;
|
|
103
|
+
const provenCheckpoint = await this.getProvenCheckpoint();
|
|
104
|
+
if (this.isStartBuildingOnProven(fromCheckpoint, provenCheckpoint)) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
const timeout = await this.getSecondsUntilProofSubmissionWindowEnd(epochNumber);
|
|
108
|
+
this.log.info(`Waiting for proven checkpoint to reach proof start`, {
|
|
109
|
+
epochNumber,
|
|
110
|
+
fromCheckpoint,
|
|
111
|
+
provenCheckpoint,
|
|
112
|
+
timeout
|
|
113
|
+
});
|
|
114
|
+
await retryUntil(async ()=>{
|
|
115
|
+
if (this.interrupted) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
const proven = await this.getProvenCheckpoint();
|
|
119
|
+
this.log.verbose(`Proven checkpoint is at ${proven} (waiting for ${fromCheckpoint - 1})`, {
|
|
120
|
+
epochNumber
|
|
121
|
+
});
|
|
122
|
+
return this.isStartBuildingOnProven(fromCheckpoint, proven) ? true : undefined;
|
|
123
|
+
}, `proven checkpoint to reach ${fromCheckpoint - 1}`, timeout, 4);
|
|
124
|
+
return !this.interrupted;
|
|
125
|
+
}
|
|
126
|
+
async getProvenCheckpoint() {
|
|
127
|
+
return (await this.rollupContract.getTips()).proven;
|
|
128
|
+
}
|
|
129
|
+
isStartBuildingOnProven(fromCheckpoint, provenCheckpoint) {
|
|
130
|
+
return fromCheckpoint - 1 <= provenCheckpoint;
|
|
131
|
+
}
|
|
132
|
+
async getSecondsUntilProofSubmissionWindowEnd(epochNumber) {
|
|
133
|
+
const deadline = getProofSubmissionDeadlineTimestamp(epochNumber, await this.rollupContract.getRollupConstants());
|
|
134
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
135
|
+
return Math.max(Number(deadline - now), 0.001);
|
|
136
|
+
}
|
|
95
137
|
async validateEpochProofSubmission(args) {
|
|
96
138
|
const { fromCheckpoint, toCheckpoint, publicInputs, batchedBlobInputs } = args;
|
|
97
139
|
// Check that the checkpoint numbers match the expected epoch to be proven
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/prover-node",
|
|
3
|
-
"version": "4.4.0-nightly.
|
|
3
|
+
"version": "4.4.0-nightly.20260522",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -56,28 +56,28 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/archiver": "4.4.0-nightly.
|
|
60
|
-
"@aztec/bb-prover": "4.4.0-nightly.
|
|
61
|
-
"@aztec/blob-client": "4.4.0-nightly.
|
|
62
|
-
"@aztec/blob-lib": "4.4.0-nightly.
|
|
63
|
-
"@aztec/constants": "4.4.0-nightly.
|
|
64
|
-
"@aztec/epoch-cache": "4.4.0-nightly.
|
|
65
|
-
"@aztec/ethereum": "4.4.0-nightly.
|
|
66
|
-
"@aztec/foundation": "4.4.0-nightly.
|
|
67
|
-
"@aztec/kv-store": "4.4.0-nightly.
|
|
68
|
-
"@aztec/l1-artifacts": "4.4.0-nightly.
|
|
69
|
-
"@aztec/native": "4.4.0-nightly.
|
|
70
|
-
"@aztec/node-keystore": "4.4.0-nightly.
|
|
71
|
-
"@aztec/node-lib": "4.4.0-nightly.
|
|
72
|
-
"@aztec/noir-protocol-circuits-types": "4.4.0-nightly.
|
|
73
|
-
"@aztec/p2p": "4.4.0-nightly.
|
|
74
|
-
"@aztec/protocol-contracts": "4.4.0-nightly.
|
|
75
|
-
"@aztec/prover-client": "4.4.0-nightly.
|
|
76
|
-
"@aztec/sequencer-client": "4.4.0-nightly.
|
|
77
|
-
"@aztec/simulator": "4.4.0-nightly.
|
|
78
|
-
"@aztec/stdlib": "4.4.0-nightly.
|
|
79
|
-
"@aztec/telemetry-client": "4.4.0-nightly.
|
|
80
|
-
"@aztec/world-state": "4.4.0-nightly.
|
|
59
|
+
"@aztec/archiver": "4.4.0-nightly.20260522",
|
|
60
|
+
"@aztec/bb-prover": "4.4.0-nightly.20260522",
|
|
61
|
+
"@aztec/blob-client": "4.4.0-nightly.20260522",
|
|
62
|
+
"@aztec/blob-lib": "4.4.0-nightly.20260522",
|
|
63
|
+
"@aztec/constants": "4.4.0-nightly.20260522",
|
|
64
|
+
"@aztec/epoch-cache": "4.4.0-nightly.20260522",
|
|
65
|
+
"@aztec/ethereum": "4.4.0-nightly.20260522",
|
|
66
|
+
"@aztec/foundation": "4.4.0-nightly.20260522",
|
|
67
|
+
"@aztec/kv-store": "4.4.0-nightly.20260522",
|
|
68
|
+
"@aztec/l1-artifacts": "4.4.0-nightly.20260522",
|
|
69
|
+
"@aztec/native": "4.4.0-nightly.20260522",
|
|
70
|
+
"@aztec/node-keystore": "4.4.0-nightly.20260522",
|
|
71
|
+
"@aztec/node-lib": "4.4.0-nightly.20260522",
|
|
72
|
+
"@aztec/noir-protocol-circuits-types": "4.4.0-nightly.20260522",
|
|
73
|
+
"@aztec/p2p": "4.4.0-nightly.20260522",
|
|
74
|
+
"@aztec/protocol-contracts": "4.4.0-nightly.20260522",
|
|
75
|
+
"@aztec/prover-client": "4.4.0-nightly.20260522",
|
|
76
|
+
"@aztec/sequencer-client": "4.4.0-nightly.20260522",
|
|
77
|
+
"@aztec/simulator": "4.4.0-nightly.20260522",
|
|
78
|
+
"@aztec/stdlib": "4.4.0-nightly.20260522",
|
|
79
|
+
"@aztec/telemetry-client": "4.4.0-nightly.20260522",
|
|
80
|
+
"@aztec/world-state": "4.4.0-nightly.20260522",
|
|
81
81
|
"source-map-support": "^0.5.21",
|
|
82
82
|
"tslib": "^2.4.0",
|
|
83
83
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
@@ -8,11 +8,13 @@ import { areArraysEqual } from '@aztec/foundation/collection';
|
|
|
8
8
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
10
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
11
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
11
12
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
12
13
|
import { Timer } from '@aztec/foundation/timer';
|
|
13
14
|
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
14
15
|
import type { PublisherConfig, TxSenderConfig } from '@aztec/sequencer-client';
|
|
15
16
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
17
|
+
import { getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
16
18
|
import type { Proof } from '@aztec/stdlib/proofs';
|
|
17
19
|
import type { FeeRecipient, RootRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
18
20
|
import type { L1PublishProofStats } from '@aztec/stdlib/stats';
|
|
@@ -101,6 +103,11 @@ export class ProverNodePublisher {
|
|
|
101
103
|
const ctx = { epochNumber, fromCheckpoint, toCheckpoint };
|
|
102
104
|
|
|
103
105
|
if (!this.interrupted) {
|
|
106
|
+
if (!(await this.waitUntilStartBuildsOnProven(args))) {
|
|
107
|
+
this.log.verbose('Checkpoint data syncing interrupted', ctx);
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
|
|
104
111
|
const timer = new Timer();
|
|
105
112
|
// Validate epoch proof range and hashes are correct before submitting
|
|
106
113
|
await this.validateEpochProofSubmission(args);
|
|
@@ -147,6 +154,53 @@ export class ProverNodePublisher {
|
|
|
147
154
|
return false;
|
|
148
155
|
}
|
|
149
156
|
|
|
157
|
+
private async waitUntilStartBuildsOnProven(args: { epochNumber: EpochNumber; fromCheckpoint: CheckpointNumber }) {
|
|
158
|
+
const { epochNumber, fromCheckpoint } = args;
|
|
159
|
+
const provenCheckpoint = await this.getProvenCheckpoint();
|
|
160
|
+
if (this.isStartBuildingOnProven(fromCheckpoint, provenCheckpoint)) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const timeout = await this.getSecondsUntilProofSubmissionWindowEnd(epochNumber);
|
|
165
|
+
this.log.info(`Waiting for proven checkpoint to reach proof start`, {
|
|
166
|
+
epochNumber,
|
|
167
|
+
fromCheckpoint,
|
|
168
|
+
provenCheckpoint,
|
|
169
|
+
timeout,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
await retryUntil(
|
|
173
|
+
async () => {
|
|
174
|
+
if (this.interrupted) {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const proven = await this.getProvenCheckpoint();
|
|
179
|
+
this.log.verbose(`Proven checkpoint is at ${proven} (waiting for ${fromCheckpoint - 1})`, { epochNumber });
|
|
180
|
+
return this.isStartBuildingOnProven(fromCheckpoint, proven) ? true : undefined;
|
|
181
|
+
},
|
|
182
|
+
`proven checkpoint to reach ${fromCheckpoint - 1}`,
|
|
183
|
+
timeout,
|
|
184
|
+
4,
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
return !this.interrupted;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private async getProvenCheckpoint() {
|
|
191
|
+
return (await this.rollupContract.getTips()).proven;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private isStartBuildingOnProven(fromCheckpoint: CheckpointNumber, provenCheckpoint: CheckpointNumber) {
|
|
195
|
+
return fromCheckpoint - 1 <= provenCheckpoint;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private async getSecondsUntilProofSubmissionWindowEnd(epochNumber: EpochNumber) {
|
|
199
|
+
const deadline = getProofSubmissionDeadlineTimestamp(epochNumber, await this.rollupContract.getRollupConstants());
|
|
200
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
201
|
+
return Math.max(Number(deadline - now), 0.001);
|
|
202
|
+
}
|
|
203
|
+
|
|
150
204
|
private async validateEpochProofSubmission(args: {
|
|
151
205
|
fromCheckpoint: CheckpointNumber;
|
|
152
206
|
toCheckpoint: CheckpointNumber;
|