@aztec/prover-client 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.0
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/bin/get-proof-inputs.d.ts +2 -0
- package/dest/bin/get-proof-inputs.d.ts.map +1 -0
- package/dest/bin/get-proof-inputs.js +16 -18
- package/dest/block_builder/index.d.ts +6 -0
- package/dest/block_builder/index.d.ts.map +1 -0
- package/dest/block_builder/index.js +1 -0
- package/dest/block_builder/light.d.ts +31 -0
- package/dest/block_builder/light.d.ts.map +1 -0
- package/dest/block_builder/light.js +13 -23
- package/dest/config.d.ts +17 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +11 -9
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -0
- package/dest/mocks/fixtures.d.ts +19 -0
- package/dest/mocks/fixtures.d.ts.map +1 -0
- package/dest/mocks/fixtures.js +26 -28
- package/dest/mocks/test_context.d.ts +49 -0
- package/dest/mocks/test_context.d.ts.map +1 -0
- package/dest/mocks/test_context.js +46 -72
- package/dest/orchestrator/block-building-helpers.d.ts +50 -0
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -0
- package/dest/orchestrator/block-building-helpers.js +81 -99
- package/dest/orchestrator/block-proving-state.d.ts +71 -0
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/block-proving-state.js +74 -99
- package/dest/orchestrator/epoch-proving-state.d.ts +56 -0
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/epoch-proving-state.js +41 -57
- package/dest/orchestrator/index.d.ts +2 -0
- package/dest/orchestrator/index.d.ts.map +1 -0
- package/dest/orchestrator/index.js +1 -0
- package/dest/orchestrator/orchestrator.d.ts +108 -0
- package/dest/orchestrator/orchestrator.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator.js +654 -650
- package/dest/orchestrator/orchestrator_metrics.d.ts +8 -0
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -0
- package/dest/orchestrator/orchestrator_metrics.js +3 -4
- package/dest/orchestrator/tx-proving-state.d.ts +31 -0
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/tx-proving-state.js +52 -53
- package/dest/prover-client/factory.d.ts +6 -0
- package/dest/prover-client/factory.d.ts.map +1 -0
- package/dest/prover-client/factory.js +1 -0
- package/dest/prover-client/index.d.ts +3 -0
- package/dest/prover-client/index.d.ts.map +1 -0
- package/dest/prover-client/index.js +1 -0
- package/dest/prover-client/prover-client.d.ts +42 -0
- package/dest/prover-client/prover-client.d.ts.map +1 -0
- package/dest/prover-client/prover-client.js +25 -30
- package/dest/prover-client/server-epoch-prover.d.ts +25 -0
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -0
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +39 -0
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -0
- package/dest/proving_broker/broker_prover_facade.js +59 -70
- package/dest/proving_broker/config.d.ts +61 -0
- package/dest/proving_broker/config.d.ts.map +1 -0
- package/dest/proving_broker/config.js +37 -22
- package/dest/proving_broker/factory.d.ts +5 -0
- package/dest/proving_broker/factory.d.ts.map +1 -0
- package/dest/proving_broker/factory.js +2 -1
- package/dest/proving_broker/fixtures.d.ts +5 -0
- package/dest/proving_broker/fixtures.d.ts.map +1 -0
- package/dest/proving_broker/fixtures.js +1 -0
- package/dest/proving_broker/index.d.ts +10 -0
- package/dest/proving_broker/index.d.ts.map +1 -0
- package/dest/proving_broker/index.js +1 -0
- package/dest/proving_broker/proof_store/factory.d.ts +6 -0
- package/dest/proving_broker/proof_store/factory.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/factory.js +12 -9
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +13 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/gcs_proof_store.js +7 -11
- package/dest/proving_broker/proof_store/index.d.ts +4 -0
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +14 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.js +7 -11
- package/dest/proving_broker/proof_store/proof_store.d.ts +35 -0
- package/dest/proving_broker/proof_store/proof_store.d.ts.map +1 -0
- package/dest/proving_broker/proof_store/proof_store.js +2 -3
- package/dest/proving_broker/proving_agent.d.ts +45 -0
- package/dest/proving_broker/proving_agent.d.ts.map +1 -0
- package/dest/proving_broker/proving_agent.js +124 -120
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +8 -0
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -0
- package/dest/proving_broker/proving_agent_instrumentation.js +3 -3
- package/dest/proving_broker/proving_broker.d.ts +72 -0
- package/dest/proving_broker/proving_broker.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker.js +449 -491
- package/dest/proving_broker/proving_broker_database/memory.d.ts +16 -0
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/memory.js +13 -19
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +21 -0
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database/persisted.js +21 -41
- package/dest/proving_broker/proving_broker_database.d.ts +39 -0
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_database.js +2 -3
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +25 -0
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -0
- package/dest/proving_broker/proving_broker_instrumentation.js +21 -28
- package/dest/proving_broker/proving_job_controller.d.ts +31 -0
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -0
- package/dest/proving_broker/proving_job_controller.js +62 -81
- package/dest/proving_broker/rpc.d.ts +26 -0
- package/dest/proving_broker/rpc.d.ts.map +1 -0
- package/dest/proving_broker/rpc.js +36 -26
- package/dest/test/mock_prover.d.ts +35 -0
- package/dest/test/mock_prover.d.ts.map +1 -0
- package/dest/test/mock_prover.js +13 -11
- package/package.json +12 -13
- package/src/index.ts +1 -1
- package/src/mocks/test_context.ts +23 -22
- package/src/orchestrator/block-building-helpers.ts +1 -38
- package/src/orchestrator/block-proving-state.ts +15 -15
- package/src/orchestrator/epoch-proving-state.ts +7 -10
- package/src/orchestrator/orchestrator.ts +36 -39
- package/src/orchestrator/tx-proving-state.ts +13 -13
- package/src/proving_broker/rpc.ts +24 -4
- package/src/test/mock_prover.ts +7 -1
- package/dest/prover-agent/index.js +0 -3
- package/dest/prover-agent/memory-proving-queue.js +0 -249
- package/dest/prover-agent/prover-agent.js +0 -201
- package/dest/prover-agent/proving-error.js +0 -8
- package/dest/prover-agent/queue_metrics.js +0 -24
- package/dest/prover-agent/rpc.js +0 -20
- package/src/prover-agent/index.ts +0 -3
- package/src/prover-agent/memory-proving-queue.ts +0 -416
- package/src/prover-agent/prover-agent.ts +0 -248
- package/src/prover-agent/proving-error.ts +0 -9
- package/src/prover-agent/queue_metrics.ts +0 -29
- package/src/prover-agent/rpc.ts +0 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Blob } from '@aztec/blob-lib';
|
|
2
|
-
import { Body, MerkleTreeId, TxEffect, getTreeHeight } from '@aztec/circuit-types';
|
|
3
|
-
import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, BlockHeader, ContentCommitment, Fr, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX,
|
|
4
|
-
import { ConstantRollupData, PrivateBaseRollupHints, PrivateBaseStateDiffHints, PublicBaseRollupHints,
|
|
2
|
+
import { Body, MerkleTreeId, TxEffect, getTreeHeight, } from '@aztec/circuit-types';
|
|
3
|
+
import { ARCHIVE_HEIGHT, AppendOnlyTreeSnapshot, BlockHeader, ContentCommitment, Fr, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MembershipWitness, MerkleTreeCalculator, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, PUBLIC_DATA_TREE_HEIGHT, PartialStateReference, PublicDataHint, PublicDataTreeLeaf, PublicDataTreeLeafPreimage, StateReference, } from '@aztec/circuits.js';
|
|
4
|
+
import { ConstantRollupData, PrivateBaseRollupHints, PrivateBaseStateDiffHints, PublicBaseRollupHints, } from '@aztec/circuits.js/rollup';
|
|
5
5
|
import { makeTuple } from '@aztec/foundation/array';
|
|
6
6
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
7
7
|
import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
@@ -13,14 +13,14 @@ import { computeFeePayerBalanceLeafSlot } from '@aztec/simulator/server';
|
|
|
13
13
|
import { Attributes, runInSpan } from '@aztec/telemetry-client';
|
|
14
14
|
import { inspect } from 'util';
|
|
15
15
|
// Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
|
|
16
|
-
export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables, db, startSpongeBlob)=>{
|
|
16
|
+
export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, globalVariables, db, startSpongeBlob) => {
|
|
17
17
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
18
18
|
// Get trees info before any changes hit
|
|
19
19
|
const constants = await getConstantRollupData(globalVariables, db);
|
|
20
20
|
const start = new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db));
|
|
21
21
|
// Get the subtree sibling paths for the circuit
|
|
22
22
|
const noteHashSubtreeSiblingPathArray = await getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT, db);
|
|
23
|
-
const noteHashSubtreeSiblingPath = makeTuple(NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH,
|
|
23
|
+
const noteHashSubtreeSiblingPath = makeTuple(NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, i => i < noteHashSubtreeSiblingPathArray.length ? noteHashSubtreeSiblingPathArray[i] : Fr.ZERO);
|
|
24
24
|
// Update the note hash trees with the new items being inserted to get the new roots
|
|
25
25
|
// that will be used by the next iteration of the base rollup circuit, skipping the empty ones
|
|
26
26
|
const noteHashes = padArrayEnd(tx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX);
|
|
@@ -29,60 +29,57 @@ export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseR
|
|
|
29
29
|
// All reads that refer to writes in the same tx are transient and can be simplified out.
|
|
30
30
|
const txPublicDataUpdateRequestInfo = await processPublicDataUpdateRequests(tx, db);
|
|
31
31
|
// Update the nullifier tree, capturing the low nullifier info for each individual operation
|
|
32
|
-
const { lowLeavesWitnessData: nullifierWitnessLeaves, newSubtreeSiblingPath: nullifiersSubtreeSiblingPath, sortedNewLeaves: sortednullifiers, sortedNewLeavesIndexes } = await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, padArrayEnd(tx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(
|
|
32
|
+
const { lowLeavesWitnessData: nullifierWitnessLeaves, newSubtreeSiblingPath: nullifiersSubtreeSiblingPath, sortedNewLeaves: sortednullifiers, sortedNewLeavesIndexes, } = await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, padArrayEnd(tx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(n => n.toBuffer()), NULLIFIER_SUBTREE_HEIGHT);
|
|
33
33
|
if (nullifierWitnessLeaves === undefined) {
|
|
34
34
|
throw new Error(`Could not craft nullifier batch insertion proofs`);
|
|
35
35
|
}
|
|
36
36
|
// Extract witness objects from returned data
|
|
37
|
-
const nullifierPredecessorMembershipWitnessesWithoutPadding = nullifierWitnessLeaves.map(
|
|
37
|
+
const nullifierPredecessorMembershipWitnessesWithoutPadding = nullifierWitnessLeaves.map(l => MembershipWitness.fromBufferArray(l.index, assertLength(l.siblingPath.toBufferArray(), NULLIFIER_TREE_HEIGHT)));
|
|
38
38
|
const nullifierSubtreeSiblingPathArray = nullifiersSubtreeSiblingPath.toFields();
|
|
39
|
-
const nullifierSubtreeSiblingPath = makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH,
|
|
39
|
+
const nullifierSubtreeSiblingPath = makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, i => i < nullifierSubtreeSiblingPathArray.length ? nullifierSubtreeSiblingPathArray[i] : Fr.ZERO);
|
|
40
40
|
// Append new data to startSpongeBlob
|
|
41
41
|
const inputSpongeBlob = startSpongeBlob.clone();
|
|
42
42
|
await startSpongeBlob.absorb(tx.txEffect.toBlobFields());
|
|
43
43
|
if (tx.avmProvingRequest) {
|
|
44
|
-
// Build public base rollup hints
|
|
45
|
-
const stateDiffHints = PublicBaseStateDiffHints.from({
|
|
46
|
-
nullifierPredecessorPreimages: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>i < nullifierWitnessLeaves.length ? nullifierWitnessLeaves[i].leafPreimage : NullifierLeafPreimage.empty()),
|
|
47
|
-
nullifierPredecessorMembershipWitnesses: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>i < nullifierPredecessorMembershipWitnessesWithoutPadding.length ? nullifierPredecessorMembershipWitnessesWithoutPadding[i] : makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT)),
|
|
48
|
-
sortedNullifiers: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>Fr.fromBuffer(sortednullifiers[i])),
|
|
49
|
-
sortedNullifierIndexes: makeTuple(MAX_NULLIFIERS_PER_TX, (i)=>sortedNewLeavesIndexes[i]),
|
|
50
|
-
noteHashSubtreeSiblingPath,
|
|
51
|
-
nullifierSubtreeSiblingPath,
|
|
52
|
-
lowPublicDataWritesPreimages: padArrayEnd(txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages, PublicDataTreeLeafPreimage.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX),
|
|
53
|
-
lowPublicDataWritesMembershipWitnesses: padArrayEnd(txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses, MembershipWitness.empty(PUBLIC_DATA_TREE_HEIGHT), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX),
|
|
54
|
-
publicDataTreeSiblingPaths: padArrayEnd(txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths, makeTuple(PUBLIC_DATA_TREE_HEIGHT, ()=>Fr.ZERO), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX)
|
|
55
|
-
});
|
|
56
44
|
const blockHash = await tx.constants.historicalHeader.hash();
|
|
57
45
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
58
46
|
return PublicBaseRollupHints.from({
|
|
59
|
-
start,
|
|
60
47
|
startSpongeBlob: inputSpongeBlob,
|
|
61
|
-
stateDiffHints,
|
|
62
48
|
archiveRootMembershipWitness,
|
|
63
|
-
constants
|
|
49
|
+
constants,
|
|
64
50
|
});
|
|
65
|
-
}
|
|
66
|
-
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
if (txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses.length > 1 ||
|
|
54
|
+
txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages.length > 1 ||
|
|
55
|
+
txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths.length > 1) {
|
|
67
56
|
throw new Error(`More than one public data write in a private only tx`);
|
|
68
57
|
}
|
|
69
58
|
// Create data hint for reading fee payer initial balance in Fee Juice
|
|
70
59
|
// If no fee payer is set, read hint should be empty
|
|
71
60
|
const leafSlot = await computeFeePayerBalanceLeafSlot(tx.data.feePayer);
|
|
72
|
-
const feePayerFeeJuiceBalanceReadHint = tx.data.feePayer.isZero()
|
|
61
|
+
const feePayerFeeJuiceBalanceReadHint = tx.data.feePayer.isZero()
|
|
62
|
+
? PublicDataHint.empty()
|
|
63
|
+
: await getPublicDataHint(db, leafSlot.toBigInt());
|
|
73
64
|
const feeWriteLowLeafPreimage = txPublicDataUpdateRequestInfo.lowPublicDataWritesPreimages[0] || PublicDataTreeLeafPreimage.empty();
|
|
74
|
-
const feeWriteLowLeafMembershipWitness = txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses[0] ||
|
|
75
|
-
|
|
65
|
+
const feeWriteLowLeafMembershipWitness = txPublicDataUpdateRequestInfo.lowPublicDataWritesMembershipWitnesses[0] ||
|
|
66
|
+
MembershipWitness.empty(PUBLIC_DATA_TREE_HEIGHT);
|
|
67
|
+
const feeWriteSiblingPath = txPublicDataUpdateRequestInfo.publicDataWritesSiblingPaths[0] ||
|
|
68
|
+
makeTuple(PUBLIC_DATA_TREE_HEIGHT, () => Fr.ZERO);
|
|
76
69
|
const stateDiffHints = PrivateBaseStateDiffHints.from({
|
|
77
|
-
nullifierPredecessorPreimages: makeTuple(MAX_NULLIFIERS_PER_TX,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
nullifierPredecessorPreimages: makeTuple(MAX_NULLIFIERS_PER_TX, i => i < nullifierWitnessLeaves.length
|
|
71
|
+
? nullifierWitnessLeaves[i].leafPreimage
|
|
72
|
+
: NullifierLeafPreimage.empty()),
|
|
73
|
+
nullifierPredecessorMembershipWitnesses: makeTuple(MAX_NULLIFIERS_PER_TX, i => i < nullifierPredecessorMembershipWitnessesWithoutPadding.length
|
|
74
|
+
? nullifierPredecessorMembershipWitnessesWithoutPadding[i]
|
|
75
|
+
: makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT)),
|
|
76
|
+
sortedNullifiers: makeTuple(MAX_NULLIFIERS_PER_TX, i => Fr.fromBuffer(sortednullifiers[i])),
|
|
77
|
+
sortedNullifierIndexes: makeTuple(MAX_NULLIFIERS_PER_TX, i => sortedNewLeavesIndexes[i]),
|
|
81
78
|
noteHashSubtreeSiblingPath,
|
|
82
79
|
nullifierSubtreeSiblingPath,
|
|
83
80
|
feeWriteLowLeafPreimage,
|
|
84
81
|
feeWriteLowLeafMembershipWitness,
|
|
85
|
-
feeWriteSiblingPath
|
|
82
|
+
feeWriteSiblingPath,
|
|
86
83
|
});
|
|
87
84
|
const blockHash = await tx.constants.historicalHeader.hash();
|
|
88
85
|
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
@@ -92,18 +89,18 @@ export const buildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseR
|
|
|
92
89
|
stateDiffHints,
|
|
93
90
|
feePayerFeeJuiceBalanceReadHint: feePayerFeeJuiceBalanceReadHint,
|
|
94
91
|
archiveRootMembershipWitness,
|
|
95
|
-
constants
|
|
92
|
+
constants,
|
|
96
93
|
});
|
|
97
94
|
}
|
|
98
95
|
});
|
|
99
96
|
export async function getPublicDataHint(db, leafSlot) {
|
|
100
|
-
const { index } = await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot) ?? {};
|
|
97
|
+
const { index } = (await db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot)) ?? {};
|
|
101
98
|
if (index === undefined) {
|
|
102
99
|
throw new Error(`Cannot find the previous value index for public data ${leafSlot}.`);
|
|
103
100
|
}
|
|
104
101
|
const siblingPath = await db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, index);
|
|
105
102
|
const membershipWitness = new MembershipWitness(PUBLIC_DATA_TREE_HEIGHT, index, siblingPath.toTuple());
|
|
106
|
-
const leafPreimage = await db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, index);
|
|
103
|
+
const leafPreimage = (await db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, index));
|
|
107
104
|
if (!leafPreimage) {
|
|
108
105
|
throw new Error(`Cannot find the leaf preimage for public data tree at index ${index}.`);
|
|
109
106
|
}
|
|
@@ -111,90 +108,76 @@ export async function getPublicDataHint(db, leafSlot) {
|
|
|
111
108
|
const value = exists ? leafPreimage.value : Fr.ZERO;
|
|
112
109
|
return new PublicDataHint(new Fr(leafSlot), value, membershipWitness, leafPreimage);
|
|
113
110
|
}
|
|
114
|
-
export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints', async (_span, txEffects)=>{
|
|
115
|
-
const blobFields = txEffects.flatMap(
|
|
111
|
+
export const buildBlobHints = runInSpan('BlockBuilderHelpers', 'buildBlobHints', async (_span, txEffects) => {
|
|
112
|
+
const blobFields = txEffects.flatMap(tx => tx.toBlobFields());
|
|
116
113
|
const blobs = await Blob.getBlobs(blobFields);
|
|
117
|
-
const blobCommitments = blobs.map(
|
|
114
|
+
const blobCommitments = blobs.map(b => b.commitmentToFields());
|
|
118
115
|
const blobsHash = new Fr(getBlobsHashFromBlobs(blobs));
|
|
119
|
-
return {
|
|
120
|
-
blobFields,
|
|
121
|
-
blobCommitments,
|
|
122
|
-
blobs,
|
|
123
|
-
blobsHash
|
|
124
|
-
};
|
|
116
|
+
return { blobFields, blobCommitments, blobs, blobsHash };
|
|
125
117
|
});
|
|
126
|
-
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', async (_span, previousRollupData, parityPublicInputs, rootRollupOutputs, endState, logger)=>{
|
|
118
|
+
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', async (_span, previousRollupData, parityPublicInputs, rootRollupOutputs, endState, logger) => {
|
|
127
119
|
if (previousRollupData.length > 2) {
|
|
128
120
|
throw new Error(`There can't be more than 2 previous rollups. Received ${previousRollupData.length}.`);
|
|
129
121
|
}
|
|
130
122
|
const blobsHash = rootRollupOutputs.blobPublicInputs[0].getBlobsHash();
|
|
131
|
-
const numTxs = previousRollupData.reduce((sum, d)=>sum + d.numTxs, 0);
|
|
132
|
-
const outHash = previousRollupData.length === 0
|
|
133
|
-
|
|
134
|
-
previousRollupData
|
|
135
|
-
|
|
123
|
+
const numTxs = previousRollupData.reduce((sum, d) => sum + d.numTxs, 0);
|
|
124
|
+
const outHash = previousRollupData.length === 0
|
|
125
|
+
? Fr.ZERO.toBuffer()
|
|
126
|
+
: previousRollupData.length === 1
|
|
127
|
+
? previousRollupData[0].outHash.toBuffer()
|
|
128
|
+
: sha256Trunc(Buffer.concat([previousRollupData[0].outHash.toBuffer(), previousRollupData[1].outHash.toBuffer()]));
|
|
136
129
|
const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityPublicInputs.shaRoot.toBuffer(), outHash);
|
|
137
|
-
const accumulatedFees = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedFees), Fr.ZERO);
|
|
138
|
-
const accumulatedManaUsed = previousRollupData.reduce((sum, d)=>sum.add(d.accumulatedManaUsed), Fr.ZERO);
|
|
130
|
+
const accumulatedFees = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedFees), Fr.ZERO);
|
|
131
|
+
const accumulatedManaUsed = previousRollupData.reduce((sum, d) => sum.add(d.accumulatedManaUsed), Fr.ZERO);
|
|
139
132
|
const header = new BlockHeader(rootRollupOutputs.previousArchive, contentCommitment, endState, rootRollupOutputs.endGlobalVariables, accumulatedFees, accumulatedManaUsed);
|
|
140
133
|
if (!(await header.hash()).equals(rootRollupOutputs.endBlockHash)) {
|
|
141
|
-
logger?.error(`Block header mismatch when building header from circuit outputs.` +
|
|
134
|
+
logger?.error(`Block header mismatch when building header from circuit outputs.` +
|
|
135
|
+
`\n\nHeader: ${inspect(header)}` +
|
|
136
|
+
`\n\nCircuit: ${toFriendlyJSON(rootRollupOutputs)}`);
|
|
142
137
|
throw new Error(`Block header mismatch when building from circuit outputs`);
|
|
143
138
|
}
|
|
144
139
|
return header;
|
|
145
140
|
});
|
|
146
|
-
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables, l1ToL2Messages, db)=>{
|
|
141
|
+
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables, l1ToL2Messages, db) => {
|
|
147
142
|
span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber.toNumber());
|
|
148
143
|
const stateReference = new StateReference(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db)));
|
|
149
144
|
const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
150
|
-
const txEffects = txs.map(
|
|
145
|
+
const txEffects = txs.map(tx => tx.txEffect);
|
|
151
146
|
const body = new Body(txEffects);
|
|
152
147
|
const numTxs = body.txEffects.length;
|
|
153
|
-
const outHash = numTxs === 0
|
|
148
|
+
const outHash = numTxs === 0
|
|
149
|
+
? Fr.ZERO.toBuffer()
|
|
150
|
+
: numTxs === 1
|
|
151
|
+
? body.txEffects[0].txOutHash()
|
|
152
|
+
: computeUnbalancedMerkleRoot(body.txEffects.map(tx => tx.txOutHash()), TxEffect.empty().txOutHash());
|
|
154
153
|
l1ToL2Messages = padArrayEnd(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
155
|
-
const hasher = (left, right)=>Promise.resolve(sha256Trunc(Buffer.concat([
|
|
156
|
-
left,
|
|
157
|
-
right
|
|
158
|
-
])));
|
|
154
|
+
const hasher = (left, right) => Promise.resolve(sha256Trunc(Buffer.concat([left, right])));
|
|
159
155
|
const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
160
156
|
const parityCalculator = await MerkleTreeCalculator.create(parityHeight, Fr.ZERO.toBuffer(), hasher);
|
|
161
|
-
const parityShaRoot = await parityCalculator.computeTreeRoot(l1ToL2Messages.map(
|
|
157
|
+
const parityShaRoot = await parityCalculator.computeTreeRoot(l1ToL2Messages.map(msg => msg.toBuffer()));
|
|
162
158
|
const blobsHash = getBlobsHashFromBlobs(await Blob.getBlobs(body.toBlobFields()));
|
|
163
159
|
const contentCommitment = new ContentCommitment(new Fr(numTxs), blobsHash, parityShaRoot, outHash);
|
|
164
|
-
const fees = body.txEffects.reduce((acc, tx)=>acc.add(tx.transactionFee), Fr.ZERO);
|
|
165
|
-
const manaUsed = txs.reduce((acc, tx)=>acc.add(new Fr(tx.gasUsed.totalGas.l2Gas)), Fr.ZERO);
|
|
160
|
+
const fees = body.txEffects.reduce((acc, tx) => acc.add(tx.transactionFee), Fr.ZERO);
|
|
161
|
+
const manaUsed = txs.reduce((acc, tx) => acc.add(new Fr(tx.gasUsed.totalGas.l2Gas)), Fr.ZERO);
|
|
166
162
|
const header = new BlockHeader(previousArchive, contentCommitment, stateReference, globalVariables, fees, manaUsed);
|
|
167
|
-
return {
|
|
168
|
-
header,
|
|
169
|
-
body
|
|
170
|
-
};
|
|
163
|
+
return { header, body };
|
|
171
164
|
});
|
|
172
165
|
export function getBlobsHashFromBlobs(inputs) {
|
|
173
|
-
const blobHashes = serializeToBuffer(inputs.map(
|
|
166
|
+
const blobHashes = serializeToBuffer(inputs.map(b => b.getEthVersionedBlobHash()));
|
|
174
167
|
return sha256Trunc(serializeToBuffer(blobHashes));
|
|
175
168
|
}
|
|
176
169
|
// Validate that the roots of all local trees match the output of the root circuit simulation
|
|
177
170
|
export async function validateBlockRootOutput(blockRootOutput, blockHeader, db) {
|
|
178
171
|
await Promise.all([
|
|
179
172
|
validateState(blockHeader.state, db),
|
|
180
|
-
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db), blockRootOutput.newArchive, 'Archive')
|
|
173
|
+
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db), blockRootOutput.newArchive, 'Archive'),
|
|
181
174
|
]);
|
|
182
175
|
}
|
|
183
|
-
export const validateState = runInSpan('BlockBuilderHelpers', 'validateState', async (_span, state, db)=>{
|
|
184
|
-
const promises = [
|
|
185
|
-
|
|
186
|
-
MerkleTreeId.NULLIFIER_TREE,
|
|
187
|
-
MerkleTreeId.PUBLIC_DATA_TREE
|
|
188
|
-
].map(async (id)=>{
|
|
189
|
-
return {
|
|
190
|
-
key: id,
|
|
191
|
-
value: await getTreeSnapshot(id, db)
|
|
192
|
-
};
|
|
176
|
+
export const validateState = runInSpan('BlockBuilderHelpers', 'validateState', async (_span, state, db) => {
|
|
177
|
+
const promises = [MerkleTreeId.NOTE_HASH_TREE, MerkleTreeId.NULLIFIER_TREE, MerkleTreeId.PUBLIC_DATA_TREE].map(async (id) => {
|
|
178
|
+
return { key: id, value: await getTreeSnapshot(id, db) };
|
|
193
179
|
});
|
|
194
|
-
const snapshots = new Map((await Promise.all(promises)).map(
|
|
195
|
-
obj.key,
|
|
196
|
-
obj.value
|
|
197
|
-
]));
|
|
180
|
+
const snapshots = new Map((await Promise.all(promises)).map(obj => [obj.key, obj.value]));
|
|
198
181
|
validatePartialState(state.partial, snapshots);
|
|
199
182
|
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), state.l1ToL2MessageTree, 'L1ToL2MessageTree');
|
|
200
183
|
});
|
|
@@ -203,12 +186,12 @@ export async function getRootTreeSiblingPath(treeId, db) {
|
|
|
203
186
|
const path = await db.getSiblingPath(treeId, size);
|
|
204
187
|
return padArrayEnd(path.toFields(), Fr.ZERO, getTreeHeight(treeId));
|
|
205
188
|
}
|
|
206
|
-
export const getConstantRollupData = runInSpan('BlockBuilderHelpers', 'getConstantRollupData', async (_span, globalVariables, db)=>{
|
|
189
|
+
export const getConstantRollupData = runInSpan('BlockBuilderHelpers', 'getConstantRollupData', async (_span, globalVariables, db) => {
|
|
207
190
|
return ConstantRollupData.from({
|
|
208
|
-
vkTreeRoot:
|
|
191
|
+
vkTreeRoot: getVKTreeRoot(),
|
|
209
192
|
protocolContractTreeRoot,
|
|
210
193
|
lastArchive: await getTreeSnapshot(MerkleTreeId.ARCHIVE, db),
|
|
211
|
-
globalVariables
|
|
194
|
+
globalVariables,
|
|
212
195
|
});
|
|
213
196
|
});
|
|
214
197
|
export async function getTreeSnapshot(id, db) {
|
|
@@ -216,20 +199,20 @@ export async function getTreeSnapshot(id, db) {
|
|
|
216
199
|
return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size));
|
|
217
200
|
}
|
|
218
201
|
export function makeEmptyMembershipWitness(height) {
|
|
219
|
-
return new MembershipWitness(height, 0n, makeTuple(height, ()=>Fr.ZERO));
|
|
202
|
+
return new MembershipWitness(height, 0n, makeTuple(height, () => Fr.ZERO));
|
|
220
203
|
}
|
|
221
|
-
const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'processPublicDataUpdateRequests', async (span, tx, db)=>{
|
|
204
|
+
const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'processPublicDataUpdateRequests', async (span, tx, db) => {
|
|
222
205
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
223
|
-
const allPublicDataWrites = tx.txEffect.publicDataWrites.map(({ leafSlot, value })=>new PublicDataTreeLeaf(leafSlot, value));
|
|
224
|
-
const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, allPublicDataWrites.map(
|
|
206
|
+
const allPublicDataWrites = tx.txEffect.publicDataWrites.map(({ leafSlot, value }) => new PublicDataTreeLeaf(leafSlot, value));
|
|
207
|
+
const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, allPublicDataWrites.map(write => {
|
|
225
208
|
if (write.isEmpty()) {
|
|
226
209
|
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
|
|
227
210
|
}
|
|
228
211
|
return write.toBuffer();
|
|
229
212
|
}));
|
|
230
|
-
const lowPublicDataWritesPreimages = lowLeavesWitnessData.map(
|
|
231
|
-
const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map(
|
|
232
|
-
const publicDataWritesSiblingPaths = insertionWitnessData.map(
|
|
213
|
+
const lowPublicDataWritesPreimages = lowLeavesWitnessData.map(lowLeafWitness => lowLeafWitness.leafPreimage);
|
|
214
|
+
const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map(lowLeafWitness => MembershipWitness.fromBufferArray(lowLeafWitness.index, assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT)));
|
|
215
|
+
const publicDataWritesSiblingPaths = insertionWitnessData.map(w => {
|
|
233
216
|
const insertionSiblingPath = w.siblingPath.toFields();
|
|
234
217
|
assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
|
|
235
218
|
return insertionSiblingPath;
|
|
@@ -237,11 +220,11 @@ const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'proces
|
|
|
237
220
|
return {
|
|
238
221
|
lowPublicDataWritesPreimages,
|
|
239
222
|
lowPublicDataWritesMembershipWitnesses,
|
|
240
|
-
publicDataWritesSiblingPaths
|
|
223
|
+
publicDataWritesSiblingPaths,
|
|
241
224
|
};
|
|
242
225
|
});
|
|
243
226
|
export async function getSubtreeSiblingPath(treeId, subtreeHeight, db) {
|
|
244
|
-
const nextAvailableLeafIndex = await db.getTreeInfo(treeId).then(
|
|
227
|
+
const nextAvailableLeafIndex = await db.getTreeInfo(treeId).then(t => t.size);
|
|
245
228
|
const fullSiblingPath = await db.getSiblingPath(treeId, nextAvailableLeafIndex);
|
|
246
229
|
// Drop the first subtreeHeight items since we only care about the path to the subtree root
|
|
247
230
|
return fullSiblingPath.getSubtreeSiblingPath(subtreeHeight).toFields();
|
|
@@ -252,9 +235,7 @@ export async function getMembershipWitnessFor(value, treeId, height, db) {
|
|
|
252
235
|
if (value.isZero()) {
|
|
253
236
|
return makeEmptyMembershipWitness(height);
|
|
254
237
|
}
|
|
255
|
-
const index = (await db.findLeafIndices(treeId, [
|
|
256
|
-
value.toBuffer()
|
|
257
|
-
]))[0];
|
|
238
|
+
const index = (await db.findLeafIndices(treeId, [value.toBuffer()]))[0];
|
|
258
239
|
if (index === undefined) {
|
|
259
240
|
throw new Error(`Leaf with value ${value} not found in tree ${MerkleTreeId[treeId]}`);
|
|
260
241
|
}
|
|
@@ -290,3 +271,4 @@ export function validateTx(tx) {
|
|
|
290
271
|
throw new Error(`Empty public data tree in tx: ${toFriendlyJSON(tx)}`);
|
|
291
272
|
}
|
|
292
273
|
}
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stYnVpbGRpbmctaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcmNoZXN0cmF0b3IvYmxvY2stYnVpbGRpbmctaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUNMLElBQUksRUFDSixZQUFZLEVBR1osUUFBUSxFQUNSLGFBQWEsR0FDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsRUFBRSxFQUVGLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIscUNBQXFDLEVBQ3JDLHdCQUF3QixFQUN4QixxQ0FBcUMsRUFDckMscUJBQXFCLEVBQ3JCLG1DQUFtQyxFQUNuQyxxQkFBcUIsRUFDckIsdUJBQXVCLEVBRXZCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixjQUFjLEdBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIscUJBQXFCLEdBQ3RCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFjLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxP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
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type L2Block, type MerkleTreeId, type PublicInputsAndRecursiveProof } from '@aztec/circuit-types';
|
|
2
|
+
import { type ARCHIVE_HEIGHT, type AppendOnlyTreeSnapshot, type BlockHeader, Fr, type GlobalVariables, type L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, type ParityPublicInputs, RootParityInputs } from '@aztec/circuits.js';
|
|
3
|
+
import { SpongeBlob } from '@aztec/circuits.js/blobs';
|
|
4
|
+
import { type BaseOrMergeRollupPublicInputs, type BlockRootOrBlockMergePublicInputs, BlockRootRollupInputs, EmptyBlockRootRollupInputs, MergeRollupInputs, SingleTxBlockRootRollupInputs } from '@aztec/circuits.js/rollup';
|
|
5
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
6
|
+
import { type Tuple } from '@aztec/foundation/serialize';
|
|
7
|
+
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
8
|
+
import { type EpochProvingState } from './epoch-proving-state.js';
|
|
9
|
+
import { type TxProvingState } from './tx-proving-state.js';
|
|
10
|
+
export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
|
|
11
|
+
/**
|
|
12
|
+
* The current state of the proving schedule for a given block. Managed by ProvingState.
|
|
13
|
+
* Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
|
|
14
|
+
*/
|
|
15
|
+
export declare class BlockProvingState {
|
|
16
|
+
#private;
|
|
17
|
+
readonly index: number;
|
|
18
|
+
readonly globalVariables: GlobalVariables;
|
|
19
|
+
readonly newL1ToL2Messages: Fr[];
|
|
20
|
+
private readonly l1ToL2MessageSubtreeSiblingPath;
|
|
21
|
+
private readonly l1ToL2MessageTreeSnapshotAfterInsertion;
|
|
22
|
+
private readonly lastArchiveSnapshot;
|
|
23
|
+
private readonly newArchiveSiblingPath;
|
|
24
|
+
private readonly previousBlockHeader;
|
|
25
|
+
private readonly parentEpoch;
|
|
26
|
+
private baseOrMergeProvingOutputs;
|
|
27
|
+
private baseParityProvingOutputs;
|
|
28
|
+
private rootParityProvingOutput;
|
|
29
|
+
private blockRootProvingOutput;
|
|
30
|
+
blockRootRollupStarted: boolean;
|
|
31
|
+
block: L2Block | undefined;
|
|
32
|
+
spongeBlobState: SpongeBlob | undefined;
|
|
33
|
+
totalNumTxs: number;
|
|
34
|
+
private txs;
|
|
35
|
+
error: string | undefined;
|
|
36
|
+
constructor(index: number, globalVariables: GlobalVariables, newL1ToL2Messages: Fr[], l1ToL2MessageSubtreeSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH>, l1ToL2MessageTreeSnapshotAfterInsertion: AppendOnlyTreeSnapshot, lastArchiveSnapshot: AppendOnlyTreeSnapshot, newArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, previousBlockHeader: BlockHeader, parentEpoch: EpochProvingState);
|
|
37
|
+
get blockNumber(): number;
|
|
38
|
+
startNewBlock(numTxs: number, numBlobFields: number): void;
|
|
39
|
+
addNewTx(tx: TxProvingState): number;
|
|
40
|
+
setBaseRollupProof(txIndex: number, provingOutput: PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
41
|
+
setMergeRollupProof(location: TreeNodeLocation, provingOutput: PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
42
|
+
setBaseParityProof(index: number, provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
|
|
43
|
+
setRootParityProof(provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
|
|
44
|
+
setBlockRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
45
|
+
get allTxs(): TxProvingState[];
|
|
46
|
+
/** Returns the block number as an epoch number. Used for prioritizing proof requests. */
|
|
47
|
+
get epochNumber(): number;
|
|
48
|
+
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
49
|
+
getMergeRollupInputs(mergeLocation: TreeNodeLocation): MergeRollupInputs;
|
|
50
|
+
getBlockRootRollupTypeAndInputs(proverId: Fr): Promise<{
|
|
51
|
+
rollupType: string;
|
|
52
|
+
inputs: EmptyBlockRootRollupInputs;
|
|
53
|
+
} | {
|
|
54
|
+
rollupType: string;
|
|
55
|
+
inputs: SingleTxBlockRootRollupInputs;
|
|
56
|
+
} | {
|
|
57
|
+
rollupType: string;
|
|
58
|
+
inputs: BlockRootRollupInputs;
|
|
59
|
+
}>;
|
|
60
|
+
getPaddingBlockRootInputs(proverId: Fr): Promise<EmptyBlockRootRollupInputs>;
|
|
61
|
+
getRootParityInputs(): RootParityInputs;
|
|
62
|
+
getTxProvingState(txIndex: number): TxProvingState;
|
|
63
|
+
buildHeaderFromProvingOutputs(logger?: Logger): Promise<BlockHeader>;
|
|
64
|
+
isReadyForMergeRollup(location: TreeNodeLocation): boolean;
|
|
65
|
+
isReadyForBlockRootRollup(): boolean;
|
|
66
|
+
isReadyForRootParity(): boolean;
|
|
67
|
+
isComplete(): boolean;
|
|
68
|
+
verifyState(): boolean;
|
|
69
|
+
reject(reason: string): void;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=block-proving-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|