@aztec/prover-client 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108
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/block-factory/index.d.ts +1 -1
- package/dest/block-factory/light.d.ts +5 -3
- package/dest/block-factory/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +32 -11
- package/dest/config.d.ts +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/index.d.ts +1 -1
- package/dest/light/index.d.ts +2 -0
- package/dest/light/index.d.ts.map +1 -0
- package/dest/light/index.js +1 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts +36 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +147 -0
- package/dest/mocks/fixtures.d.ts +5 -5
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +33 -15
- package/dest/mocks/test_context.d.ts +38 -33
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +133 -82
- package/dest/orchestrator/block-building-helpers.d.ts +35 -35
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +151 -187
- package/dest/orchestrator/block-proving-state.d.ts +68 -55
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +273 -185
- package/dest/orchestrator/checkpoint-proving-state.d.ts +63 -0
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -0
- package/dest/orchestrator/checkpoint-proving-state.js +210 -0
- package/dest/orchestrator/epoch-proving-state.d.ts +38 -31
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +128 -84
- package/dest/orchestrator/index.d.ts +1 -1
- package/dest/orchestrator/orchestrator.d.ts +35 -34
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +777 -292
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -3
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator_metrics.js +0 -9
- package/dest/orchestrator/tx-proving-state.d.ts +12 -10
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +23 -29
- package/dest/prover-client/factory.d.ts +3 -3
- package/dest/prover-client/factory.d.ts.map +1 -1
- package/dest/prover-client/index.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts +3 -3
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/prover-client.js +1 -1
- package/dest/prover-client/server-epoch-prover.d.ts +13 -11
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +9 -9
- package/dest/proving_broker/broker_prover_facade.d.ts +23 -18
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +42 -33
- package/dest/proving_broker/config.d.ts +18 -14
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +12 -6
- package/dest/proving_broker/factory.d.ts +1 -1
- package/dest/proving_broker/factory.js +1 -1
- package/dest/proving_broker/fixtures.d.ts +3 -2
- package/dest/proving_broker/fixtures.d.ts.map +1 -1
- package/dest/proving_broker/fixtures.js +3 -2
- package/dest/proving_broker/index.d.ts +1 -1
- package/dest/proving_broker/proof_store/factory.d.ts +2 -2
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/gcs_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.d.ts +2 -1
- package/dest/proving_broker/proof_store/index.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/index.js +1 -0
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts +1 -1
- package/dest/proving_broker/proof_store/inline_proof_store.d.ts.map +1 -1
- package/dest/proving_broker/proof_store/proof_store.d.ts +1 -1
- package/dest/proving_broker/proving_agent.d.ts +3 -8
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent.js +1 -16
- package/dest/proving_broker/proving_broker.d.ts +2 -2
- package/dest/proving_broker/proving_broker.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker.js +35 -29
- package/dest/proving_broker/proving_broker_database/memory.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database/memory.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.d.ts +5 -3
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +397 -8
- package/dest/proving_broker/proving_broker_database.d.ts +3 -2
- package/dest/proving_broker/proving_broker_database.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_broker_instrumentation.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.d.ts +3 -2
- package/dest/proving_broker/proving_job_controller.d.ts.map +1 -1
- package/dest/proving_broker/proving_job_controller.js +40 -21
- package/dest/proving_broker/rpc.d.ts +4 -4
- package/dest/test/mock_proof_store.d.ts +3 -3
- package/dest/test/mock_proof_store.d.ts.map +1 -1
- package/dest/test/mock_prover.d.ts +23 -19
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +36 -21
- package/package.json +21 -19
- package/src/block-factory/light.ts +40 -17
- package/src/config.ts +2 -2
- package/src/light/index.ts +1 -0
- package/src/light/lightweight_checkpoint_builder.ts +198 -0
- package/src/mocks/fixtures.ts +41 -36
- package/src/mocks/test_context.ts +196 -114
- package/src/orchestrator/block-building-helpers.ts +233 -313
- package/src/orchestrator/block-proving-state.ts +315 -247
- package/src/orchestrator/checkpoint-proving-state.ts +303 -0
- package/src/orchestrator/epoch-proving-state.ts +176 -129
- package/src/orchestrator/orchestrator.ts +558 -348
- package/src/orchestrator/orchestrator_metrics.ts +1 -20
- package/src/orchestrator/tx-proving-state.ts +47 -55
- package/src/prover-client/factory.ts +6 -2
- package/src/prover-client/prover-client.ts +4 -11
- package/src/prover-client/server-epoch-prover.ts +30 -21
- package/src/proving_broker/broker_prover_facade.ts +175 -112
- package/src/proving_broker/config.ts +14 -7
- package/src/proving_broker/factory.ts +1 -1
- package/src/proving_broker/fixtures.ts +8 -3
- package/src/proving_broker/proof_store/index.ts +1 -0
- package/src/proving_broker/proving_agent.ts +1 -17
- package/src/proving_broker/proving_broker.ts +42 -27
- package/src/proving_broker/proving_broker_database/memory.ts +2 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +25 -10
- package/src/proving_broker/proving_broker_database.ts +2 -1
- package/src/proving_broker/proving_job_controller.ts +42 -22
- package/src/test/mock_prover.ts +143 -66
- package/dest/bin/get-proof-inputs.d.ts +0 -2
- package/dest/bin/get-proof-inputs.d.ts.map +0 -1
- package/dest/bin/get-proof-inputs.js +0 -51
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +0 -8
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +0 -1
- package/dest/proving_broker/proving_agent_instrumentation.js +0 -16
- package/src/bin/get-proof-inputs.ts +0 -59
- package/src/proving_broker/proving_agent_instrumentation.ts +0 -21
|
@@ -1,216 +1,197 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ARCHIVE_HEIGHT, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT,
|
|
1
|
+
import { BatchedBlobAccumulator, computeBlobsHashFromBlobs, encodeBlockBlobData, getBlobCommitmentsFromBlobs, getBlobsPerL1Block } from '@aztec/blob-lib';
|
|
2
|
+
import { ARCHIVE_HEIGHT, CHONK_PROOF_LENGTH, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_HEIGHT, NOTE_HASH_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_SUBTREE_ROOT_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT } from '@aztec/constants';
|
|
3
3
|
import { makeTuple } from '@aztec/foundation/array';
|
|
4
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
5
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
|
-
import {
|
|
6
|
-
import { BLS12Point, Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
7
|
import { assertLength, toFriendlyJSON } from '@aztec/foundation/serialize';
|
|
8
|
-
import { MembershipWitness
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
9
|
+
import { getVkData } from '@aztec/noir-protocol-circuits-types/server/vks';
|
|
10
|
+
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
11
11
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
12
|
-
import { PublicDataHint } from '@aztec/stdlib/avm';
|
|
13
12
|
import { Body } from '@aztec/stdlib/block';
|
|
14
13
|
import { ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
14
|
+
import { Proof, ProofData, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
15
|
+
import { BlockConstantData, PrivateBaseRollupHints, PublicBaseRollupHints, PublicChonkVerifierPrivateInputs, TreeSnapshotDiffHints } from '@aztec/stdlib/rollup';
|
|
16
|
+
import { AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeafPreimage, getTreeHeight } from '@aztec/stdlib/trees';
|
|
17
|
+
import { BlockHeader, GlobalVariables, PartialStateReference } from '@aztec/stdlib/tx';
|
|
18
|
+
import { VkData } from '@aztec/stdlib/vks';
|
|
18
19
|
import { Attributes, runInSpan } from '@aztec/telemetry-client';
|
|
19
20
|
// Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
|
|
20
|
-
export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx,
|
|
21
|
+
export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, lastArchive, newL1ToL2MessageTreeSnapshot, startSpongeBlob, proverId, db)=>{
|
|
21
22
|
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
22
23
|
// Get trees info before any changes hit
|
|
23
|
-
const lastArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
24
24
|
const start = new PartialStateReference(await getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE, db), await getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE, db), await getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE, db));
|
|
25
|
-
// Get the subtree sibling
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const noteHashes = padArrayEnd(tx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX);
|
|
31
|
-
await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, noteHashes);
|
|
32
|
-
// Create data hint for reading fee payer initial balance in Fee Juice
|
|
33
|
-
const leafSlot = await computeFeePayerBalanceLeafSlot(tx.data.feePayer);
|
|
34
|
-
const feePayerFeeJuiceBalanceReadHint = await getPublicDataHint(db, leafSlot.toBigInt());
|
|
35
|
-
// The read witnesses for a given TX should be generated before the writes of the same TX are applied.
|
|
36
|
-
// All reads that refer to writes in the same tx are transient and can be simplified out.
|
|
37
|
-
const txPublicDataUpdateRequestInfo = await processPublicDataUpdateRequests(tx, db);
|
|
38
|
-
// Update the nullifier tree, capturing the low nullifier info for each individual operation
|
|
39
|
-
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);
|
|
40
|
-
if (nullifierWitnessLeaves === undefined) {
|
|
41
|
-
throw new Error(`Could not craft nullifier batch insertion proofs`);
|
|
42
|
-
}
|
|
43
|
-
// Extract witness objects from returned data
|
|
44
|
-
const nullifierPredecessorMembershipWitnessesWithoutPadding = nullifierWitnessLeaves.map((l)=>MembershipWitness.fromBufferArray(l.index, assertLength(l.siblingPath.toBufferArray(), NULLIFIER_TREE_HEIGHT)));
|
|
45
|
-
const nullifierSubtreeSiblingPathArray = nullifiersSubtreeSiblingPath.toFields();
|
|
46
|
-
const nullifierSubtreeSiblingPath = makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, (i)=>i < nullifierSubtreeSiblingPathArray.length ? nullifierSubtreeSiblingPathArray[i] : Fr.ZERO);
|
|
47
|
-
// Append new data to startSpongeBlob
|
|
48
|
-
const inputSpongeBlob = startSpongeBlob.clone();
|
|
49
|
-
await startSpongeBlob.absorb(tx.txEffect.toBlobFields());
|
|
25
|
+
// Get the note hash subtree root sibling path for insertion.
|
|
26
|
+
const noteHashSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT, db), NOTE_HASH_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
|
|
27
|
+
const { nullifierInsertionResult, publicDataInsertionResult } = await insertSideEffects(tx, db);
|
|
28
|
+
const blockHash = await tx.data.constants.anchorBlockHeader.hash();
|
|
29
|
+
const anchorBlockArchiveSiblingPath = (await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db)).siblingPath;
|
|
50
30
|
const contractClassLogsFields = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, (i)=>tx.txEffect.contractClassLogs[i]?.fields || ContractClassLogFields.empty());
|
|
51
31
|
if (tx.avmProvingRequest) {
|
|
52
|
-
const blockHash = await tx.data.constants.historicalHeader.hash();
|
|
53
|
-
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
54
32
|
return PublicBaseRollupHints.from({
|
|
55
|
-
startSpongeBlob
|
|
33
|
+
startSpongeBlob,
|
|
56
34
|
lastArchive,
|
|
57
|
-
|
|
35
|
+
anchorBlockArchiveSiblingPath,
|
|
58
36
|
contractClassLogsFields
|
|
59
37
|
});
|
|
60
38
|
} else {
|
|
61
|
-
if (
|
|
39
|
+
if (tx.txEffect.publicDataWrites.length > 1) {
|
|
62
40
|
throw new Error(`More than one public data write in a private only tx`);
|
|
63
41
|
}
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
const
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
42
|
+
// Get hints for reading fee payer's balance in the public data tree.
|
|
43
|
+
const feePayerBalanceLeafWitnessData = publicDataInsertionResult.lowLeavesWitnessData[0];
|
|
44
|
+
const feePayerBalanceMembershipWitness = MembershipWitness.fromBufferArray(feePayerBalanceLeafWitnessData.index, assertLength(feePayerBalanceLeafWitnessData.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT));
|
|
45
|
+
const feePayerBalanceLeafPreimage = feePayerBalanceLeafWitnessData.leafPreimage;
|
|
46
|
+
const leafSlot = await computeFeePayerBalanceLeafSlot(tx.data.feePayer);
|
|
47
|
+
if (!leafSlot.equals(feePayerBalanceLeafPreimage.leaf.slot)) {
|
|
48
|
+
throw new Error(`Cannot find the public data tree leaf for the fee payer's balance`);
|
|
49
|
+
}
|
|
50
|
+
// Get hints for inserting the nullifiers.
|
|
51
|
+
const nullifierLowLeavesWitnessData = nullifierInsertionResult.lowLeavesWitnessData;
|
|
52
|
+
const nullifierPredecessorPreimages = padArrayEnd(nullifierLowLeavesWitnessData.map((l)=>l.leafPreimage), NullifierLeafPreimage.empty(), MAX_NULLIFIERS_PER_TX);
|
|
53
|
+
const nullifierPredecessorMembershipWitnesses = padArrayEnd(nullifierLowLeavesWitnessData.map((l)=>MembershipWitness.fromBufferArray(l.index, assertLength(l.siblingPath.toBufferArray(), NULLIFIER_TREE_HEIGHT))), makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT), MAX_NULLIFIERS_PER_TX);
|
|
54
|
+
const sortedNullifiers = assertLength(nullifierInsertionResult.sortedNewLeaves.map((n)=>Fr.fromBuffer(n)), MAX_NULLIFIERS_PER_TX);
|
|
55
|
+
const sortedNullifierIndexes = assertLength(nullifierInsertionResult.sortedNewLeavesIndexes, MAX_NULLIFIERS_PER_TX);
|
|
56
|
+
const nullifierSubtreeRootSiblingPath = assertLength(nullifierInsertionResult.newSubtreeSiblingPath.toFields(), NULLIFIER_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
|
|
57
|
+
const treeSnapshotDiffHints = TreeSnapshotDiffHints.from({
|
|
58
|
+
noteHashSubtreeRootSiblingPath,
|
|
59
|
+
nullifierPredecessorPreimages,
|
|
60
|
+
nullifierPredecessorMembershipWitnesses,
|
|
61
|
+
sortedNullifiers,
|
|
62
|
+
sortedNullifierIndexes,
|
|
63
|
+
nullifierSubtreeRootSiblingPath,
|
|
64
|
+
feePayerBalanceMembershipWitness
|
|
77
65
|
});
|
|
78
|
-
const blockHash = await tx.data.constants.historicalHeader.hash();
|
|
79
|
-
const archiveRootMembershipWitness = await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db);
|
|
80
66
|
const constants = BlockConstantData.from({
|
|
81
67
|
lastArchive,
|
|
82
|
-
|
|
83
|
-
vkTreeRoot:
|
|
84
|
-
|
|
85
|
-
globalVariables
|
|
68
|
+
l1ToL2TreeSnapshot: newL1ToL2MessageTreeSnapshot,
|
|
69
|
+
vkTreeRoot: tx.data.constants.vkTreeRoot,
|
|
70
|
+
protocolContractsHash: tx.data.constants.protocolContractsHash,
|
|
71
|
+
globalVariables: tx.globalVariables,
|
|
72
|
+
proverId
|
|
86
73
|
});
|
|
87
74
|
return PrivateBaseRollupHints.from({
|
|
88
75
|
start,
|
|
89
|
-
startSpongeBlob
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
76
|
+
startSpongeBlob,
|
|
77
|
+
treeSnapshotDiffHints,
|
|
78
|
+
feePayerBalanceLeafPreimage,
|
|
79
|
+
anchorBlockArchiveSiblingPath,
|
|
93
80
|
contractClassLogsFields,
|
|
94
81
|
constants
|
|
95
82
|
});
|
|
96
83
|
}
|
|
97
84
|
});
|
|
98
|
-
export
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
85
|
+
export const insertSideEffects = runInSpan('BlockBuilderHelpers', 'buildBaseRollupHints', async (span, tx, db)=>{
|
|
86
|
+
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
87
|
+
// Insert the note hashes. Padded with zeros to the max number of note hashes per tx.
|
|
88
|
+
const noteHashes = padArrayEnd(tx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX);
|
|
89
|
+
await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, noteHashes);
|
|
90
|
+
// Insert the nullifiers. Padded with zeros to the max number of nullifiers per tx.
|
|
91
|
+
// Capturing the low nullifier info for each individual operation.
|
|
92
|
+
const nullifierInsertionResult = await db.batchInsert(MerkleTreeId.NULLIFIER_TREE, padArrayEnd(tx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map((n)=>n.toBuffer()), NULLIFIER_SUBTREE_HEIGHT);
|
|
93
|
+
if (nullifierInsertionResult.lowLeavesWitnessData === undefined) {
|
|
94
|
+
throw new Error(`Failed to batch insert nullifiers.`);
|
|
102
95
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const leafPreimage = await db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, index);
|
|
106
|
-
if (!leafPreimage) {
|
|
107
|
-
throw new Error(`Cannot find the leaf preimage for public data tree at index ${index}.`);
|
|
96
|
+
if (tx.txEffect.publicDataWrites.some((write)=>write.isEmpty())) {
|
|
97
|
+
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}.`);
|
|
108
98
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
99
|
+
// Insert the public data writes sequentially. No need to pad them to the max array size.
|
|
100
|
+
// Capturing the low leaf info for each individual operation.
|
|
101
|
+
const publicDataInsertionResult = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, tx.txEffect.publicDataWrites.map((write)=>write.toBuffer()));
|
|
102
|
+
return {
|
|
103
|
+
nullifierInsertionResult,
|
|
104
|
+
publicDataInsertionResult
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
export function getChonkProofFromTx(tx) {
|
|
108
|
+
const publicInputs = tx.data.publicInputs().toFields();
|
|
109
|
+
const binaryProof = new Proof(Buffer.concat(tx.chonkProof.attachPublicInputs(publicInputs).fieldsWithPublicInputs.map((field)=>field.toBuffer())), publicInputs.length);
|
|
110
|
+
return new RecursiveProof(tx.chonkProof.fields, binaryProof, true, CHONK_PROOF_LENGTH);
|
|
111
|
+
}
|
|
112
|
+
export function getPublicChonkVerifierPrivateInputsFromTx(tx, proverId) {
|
|
113
|
+
const proofData = new ProofData(tx.data.toPrivateToPublicKernelCircuitPublicInputs(), getChonkProofFromTx(tx), getVkData('HidingKernelToPublic'));
|
|
114
|
+
return new PublicChonkVerifierPrivateInputs(proofData, proverId);
|
|
112
115
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// We may be able to combine these values e.g. blobCommitmentsHash := sha256( ...sha256(sha256(blobshash_0), blobshash_1) ... blobshash_l) for an epoch with l+1 blocks.
|
|
121
|
-
const blobCommitments = blobs.map((b)=>BLS12Point.decompress(b.commitment));
|
|
122
|
-
const blobsHash = new Fr(getBlobsHashFromBlobs(blobs));
|
|
116
|
+
// Build "hints" as the private inputs for the checkpoint root rollup circuit.
|
|
117
|
+
// The `blobCommitments` will be accumulated and checked in the root rollup against the `finalBlobChallenges`.
|
|
118
|
+
// The `blobsHash` will be validated on L1 against the submitted blob data.
|
|
119
|
+
export const buildBlobHints = (blobFields)=>{
|
|
120
|
+
const blobs = getBlobsPerL1Block(blobFields);
|
|
121
|
+
const blobCommitments = getBlobCommitmentsFromBlobs(blobs);
|
|
122
|
+
const blobsHash = computeBlobsHashFromBlobs(blobs);
|
|
123
123
|
return {
|
|
124
|
-
blobFields,
|
|
125
124
|
blobCommitments,
|
|
126
125
|
blobs,
|
|
127
126
|
blobsHash
|
|
128
127
|
};
|
|
129
|
-
}
|
|
130
|
-
export const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
128
|
+
};
|
|
129
|
+
export const buildFinalBlobChallenges = async (blobFieldsPerCheckpoint)=>{
|
|
130
|
+
return await BatchedBlobAccumulator.precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint);
|
|
131
|
+
};
|
|
132
|
+
export const accumulateBlobs = runInSpan('BlockBuilderHelpers', 'accumulateBlobs', async (_span, blobFields, startBlobAccumulator)=>{
|
|
133
|
+
const endBlobAccumulator = await startBlobAccumulator.accumulateFields(blobFields);
|
|
134
134
|
return endBlobAccumulator;
|
|
135
135
|
});
|
|
136
|
-
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', (_span,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
136
|
+
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', async (_span, blockRootRollupOutput)=>{
|
|
137
|
+
const constants = blockRootRollupOutput.constants;
|
|
138
|
+
const globalVariables = GlobalVariables.from({
|
|
139
|
+
chainId: constants.chainId,
|
|
140
|
+
version: constants.version,
|
|
141
|
+
blockNumber: BlockNumber(blockRootRollupOutput.previousArchive.nextAvailableLeafIndex),
|
|
142
|
+
timestamp: blockRootRollupOutput.timestamp,
|
|
143
|
+
slotNumber: constants.slotNumber,
|
|
144
|
+
coinbase: constants.coinbase,
|
|
145
|
+
feeRecipient: constants.feeRecipient,
|
|
146
|
+
gasFees: constants.gasFees
|
|
147
|
+
});
|
|
148
|
+
const spongeBlobHash = await blockRootRollupOutput.endSpongeBlob.clone().squeeze();
|
|
149
|
+
return new BlockHeader(blockRootRollupOutput.previousArchive, blockRootRollupOutput.endState, spongeBlobHash, globalVariables, blockRootRollupOutput.accumulatedFees, blockRootRollupOutput.accumulatedManaUsed);
|
|
148
150
|
});
|
|
149
|
-
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, globalVariables,
|
|
151
|
+
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, lastArchive, endState, globalVariables, startSpongeBlob, isFirstBlock)=>{
|
|
150
152
|
span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber);
|
|
151
|
-
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)));
|
|
152
|
-
const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
153
153
|
const txEffects = txs.map((tx)=>tx.txEffect);
|
|
154
154
|
const body = new Body(txEffects);
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
const
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
155
|
+
const totalFees = txEffects.reduce((acc, tx)=>acc.add(tx.transactionFee), Fr.ZERO);
|
|
156
|
+
const totalManaUsed = txs.reduce((acc, tx)=>acc.add(new Fr(tx.gasUsed.billedGas.l2Gas)), Fr.ZERO);
|
|
157
|
+
const { l1ToL2MessageTree, partial } = endState;
|
|
158
|
+
const blockBlobFields = encodeBlockBlobData({
|
|
159
|
+
blockEndMarker: {
|
|
160
|
+
timestamp: globalVariables.timestamp,
|
|
161
|
+
blockNumber: globalVariables.blockNumber,
|
|
162
|
+
numTxs: txs.length
|
|
163
|
+
},
|
|
164
|
+
blockEndStateField: {
|
|
165
|
+
l1ToL2MessageNextAvailableLeafIndex: l1ToL2MessageTree.nextAvailableLeafIndex,
|
|
166
|
+
noteHashNextAvailableLeafIndex: partial.noteHashTree.nextAvailableLeafIndex,
|
|
167
|
+
nullifierNextAvailableLeafIndex: partial.nullifierTree.nextAvailableLeafIndex,
|
|
168
|
+
publicDataNextAvailableLeafIndex: partial.publicDataTree.nextAvailableLeafIndex,
|
|
169
|
+
totalManaUsed: totalManaUsed.toBigInt()
|
|
170
|
+
},
|
|
171
|
+
lastArchiveRoot: lastArchive.root,
|
|
172
|
+
noteHashRoot: partial.noteHashTree.root,
|
|
173
|
+
nullifierRoot: partial.nullifierTree.root,
|
|
174
|
+
publicDataRoot: partial.publicDataTree.root,
|
|
175
|
+
l1ToL2MessageRoot: isFirstBlock ? l1ToL2MessageTree.root : undefined,
|
|
176
|
+
txs: body.toTxBlobData()
|
|
177
|
+
});
|
|
178
|
+
const endSpongeBlob = startSpongeBlob.clone();
|
|
179
|
+
await endSpongeBlob.absorb(blockBlobFields);
|
|
180
|
+
const spongeBlobHash = await endSpongeBlob.squeeze();
|
|
181
|
+
const header = BlockHeader.from({
|
|
182
|
+
lastArchive,
|
|
183
|
+
state: endState,
|
|
184
|
+
spongeBlobHash,
|
|
185
|
+
globalVariables,
|
|
186
|
+
totalFees,
|
|
187
|
+
totalManaUsed
|
|
188
|
+
});
|
|
163
189
|
return {
|
|
164
190
|
header,
|
|
165
|
-
body
|
|
191
|
+
body,
|
|
192
|
+
blockBlobFields
|
|
166
193
|
};
|
|
167
194
|
});
|
|
168
|
-
/** Computes the inHash for a block's ContentCommitment given its l1 to l2 messages. */ export async function computeInHashFromL1ToL2Messages(unpaddedL1ToL2Messages) {
|
|
169
|
-
const l1ToL2Messages = padArrayEnd(unpaddedL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
170
|
-
const hasher = (left, right)=>Promise.resolve(sha256Trunc(Buffer.concat([
|
|
171
|
-
left,
|
|
172
|
-
right
|
|
173
|
-
])));
|
|
174
|
-
const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
175
|
-
const parityCalculator = await MerkleTreeCalculator.create(parityHeight, Fr.ZERO.toBuffer(), hasher);
|
|
176
|
-
return new Fr(await parityCalculator.computeTreeRoot(l1ToL2Messages.map((msg)=>msg.toBuffer())));
|
|
177
|
-
}
|
|
178
|
-
export function getBlobsHashFromBlobs(inputs) {
|
|
179
|
-
return sha256ToField(inputs.map((b)=>b.getEthVersionedBlobHash()));
|
|
180
|
-
}
|
|
181
|
-
// Note: tested against the constant values in block_root/empty_block_root_rollup_inputs.nr, set by block_building_helpers.test.ts.
|
|
182
|
-
// Having this separate fn hopefully makes it clear how we treat empty blocks and their blobs, and won't break if we decide to change how
|
|
183
|
-
// getBlobsPerBlock() works on empty input.
|
|
184
|
-
export async function getEmptyBlockBlobsHash() {
|
|
185
|
-
const blobHash = (await Blob.getBlobsPerBlock([])).map((b)=>b.getEthVersionedBlobHash());
|
|
186
|
-
return sha256ToField(blobHash);
|
|
187
|
-
}
|
|
188
|
-
// Validate that the roots of all local trees match the output of the root circuit simulation
|
|
189
|
-
// TODO: does this get called?
|
|
190
|
-
export async function validateBlockRootOutput(blockRootOutput, blockHeader, db) {
|
|
191
|
-
await Promise.all([
|
|
192
|
-
validateState(blockHeader.state, db),
|
|
193
|
-
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.ARCHIVE, db), blockRootOutput.newArchive, 'Archive')
|
|
194
|
-
]);
|
|
195
|
-
}
|
|
196
|
-
export const validateState = runInSpan('BlockBuilderHelpers', 'validateState', async (_span, state, db)=>{
|
|
197
|
-
const promises = [
|
|
198
|
-
MerkleTreeId.NOTE_HASH_TREE,
|
|
199
|
-
MerkleTreeId.NULLIFIER_TREE,
|
|
200
|
-
MerkleTreeId.PUBLIC_DATA_TREE
|
|
201
|
-
].map(async (id)=>{
|
|
202
|
-
return {
|
|
203
|
-
key: id,
|
|
204
|
-
value: await getTreeSnapshot(id, db)
|
|
205
|
-
};
|
|
206
|
-
});
|
|
207
|
-
const snapshots = new Map((await Promise.all(promises)).map((obj)=>[
|
|
208
|
-
obj.key,
|
|
209
|
-
obj.value
|
|
210
|
-
]));
|
|
211
|
-
validatePartialState(state.partial, snapshots);
|
|
212
|
-
validateSimulatedTree(await getTreeSnapshot(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, db), state.l1ToL2MessageTree, 'L1ToL2MessageTree');
|
|
213
|
-
});
|
|
214
195
|
export async function getLastSiblingPath(treeId, db) {
|
|
215
196
|
const { size } = await db.getTreeInfo(treeId);
|
|
216
197
|
const path = await db.getSiblingPath(treeId, size - 1n);
|
|
@@ -228,28 +209,6 @@ export async function getTreeSnapshot(id, db) {
|
|
|
228
209
|
export function makeEmptyMembershipWitness(height) {
|
|
229
210
|
return new MembershipWitness(height, 0n, makeTuple(height, ()=>Fr.ZERO));
|
|
230
211
|
}
|
|
231
|
-
const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'processPublicDataUpdateRequests', async (span, tx, db)=>{
|
|
232
|
-
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
233
|
-
const allPublicDataWrites = tx.txEffect.publicDataWrites.map(({ leafSlot, value })=>new PublicDataTreeLeaf(leafSlot, value));
|
|
234
|
-
const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, allPublicDataWrites.map((write)=>{
|
|
235
|
-
if (write.isEmpty()) {
|
|
236
|
-
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
|
|
237
|
-
}
|
|
238
|
-
return write.toBuffer();
|
|
239
|
-
}));
|
|
240
|
-
const lowPublicDataWritesPreimages = lowLeavesWitnessData.map((lowLeafWitness)=>lowLeafWitness.leafPreimage);
|
|
241
|
-
const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map((lowLeafWitness)=>MembershipWitness.fromBufferArray(lowLeafWitness.index, assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT)));
|
|
242
|
-
const publicDataWritesSiblingPaths = insertionWitnessData.map((w)=>{
|
|
243
|
-
const insertionSiblingPath = w.siblingPath.toFields();
|
|
244
|
-
assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
|
|
245
|
-
return insertionSiblingPath;
|
|
246
|
-
});
|
|
247
|
-
return {
|
|
248
|
-
lowPublicDataWritesPreimages,
|
|
249
|
-
lowPublicDataWritesMembershipWitnesses,
|
|
250
|
-
publicDataWritesSiblingPaths
|
|
251
|
-
};
|
|
252
|
-
});
|
|
253
212
|
export async function getSubtreeSiblingPath(treeId, subtreeHeight, db) {
|
|
254
213
|
const nextAvailableLeafIndex = await db.getTreeInfo(treeId).then((t)=>t.size);
|
|
255
214
|
const fullSiblingPath = await db.getSiblingPath(treeId, nextAvailableLeafIndex);
|
|
@@ -286,7 +245,7 @@ function validateSimulatedTree(localTree, simulatedTree, name, label) {
|
|
|
286
245
|
}
|
|
287
246
|
}
|
|
288
247
|
export function validateTx(tx) {
|
|
289
|
-
const txHeader = tx.data.constants.
|
|
248
|
+
const txHeader = tx.data.constants.anchorBlockHeader;
|
|
290
249
|
if (txHeader.state.l1ToL2MessageTree.isEmpty()) {
|
|
291
250
|
throw new Error(`Empty L1 to L2 messages tree in tx: ${toFriendlyJSON(tx)}`);
|
|
292
251
|
}
|
|
@@ -300,3 +259,8 @@ export function validateTx(tx) {
|
|
|
300
259
|
throw new Error(`Empty public data tree in tx: ${toFriendlyJSON(tx)}`);
|
|
301
260
|
}
|
|
302
261
|
}
|
|
262
|
+
export function toProofData({ inputs, proof, verificationKey }, vkIndex) {
|
|
263
|
+
const leafIndex = vkIndex || getVKIndex(verificationKey.keyAsFields);
|
|
264
|
+
const vkData = new VkData(verificationKey, leafIndex, getVKSiblingPath(leafIndex));
|
|
265
|
+
return new ProofData(inputs, proof, vkData);
|
|
266
|
+
}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type ARCHIVE_HEIGHT, type
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { type BlockBlobData, type BlockEndBlobData, type SpongeBlob } from '@aztec/blob-lib';
|
|
2
|
+
import { type ARCHIVE_HEIGHT, type L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH, type NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
|
+
import { type Tuple } from '@aztec/foundation/serialize';
|
|
5
6
|
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
6
|
-
import type { EthAddress, L2Block } from '@aztec/stdlib/block';
|
|
7
7
|
import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
8
|
-
import { type ParityPublicInputs,
|
|
9
|
-
import {
|
|
10
|
-
import { AppendOnlyTreeSnapshot
|
|
11
|
-
import {
|
|
12
|
-
import type {
|
|
8
|
+
import { type ParityPublicInputs, ParityRootPrivateInputs } from '@aztec/stdlib/parity';
|
|
9
|
+
import { BlockRollupPublicInputs, BlockRootEmptyTxFirstRollupPrivateInputs, BlockRootRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs, CheckpointConstantData, TxMergeRollupPrivateInputs, type TxRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
10
|
+
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
11
|
+
import { BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
12
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
13
|
+
import type { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
13
14
|
import type { TxProvingState } from './tx-proving-state.js';
|
|
14
|
-
export type
|
|
15
|
+
export type ProofState<T, PROOF_LENGTH extends number> = {
|
|
16
|
+
provingOutput?: PublicInputsAndRecursiveProof<T, PROOF_LENGTH>;
|
|
17
|
+
isProving?: boolean;
|
|
18
|
+
};
|
|
15
19
|
/**
|
|
16
20
|
* The current state of the proving schedule for a given block. Managed by ProvingState.
|
|
17
21
|
* Contains the raw inputs and intermediate state to generate every constituent proof in the tree.
|
|
@@ -19,60 +23,68 @@ export type TreeSnapshots = Map<MerkleTreeId, AppendOnlyTreeSnapshot>;
|
|
|
19
23
|
export declare class BlockProvingState {
|
|
20
24
|
#private;
|
|
21
25
|
readonly index: number;
|
|
22
|
-
readonly
|
|
23
|
-
readonly
|
|
24
|
-
readonly
|
|
25
|
-
private readonly
|
|
26
|
-
readonly
|
|
27
|
-
private readonly lastArchiveSnapshot;
|
|
26
|
+
readonly blockNumber: BlockNumber;
|
|
27
|
+
readonly totalNumTxs: number;
|
|
28
|
+
private readonly constants;
|
|
29
|
+
private readonly timestamp;
|
|
30
|
+
readonly lastArchiveTreeSnapshot: AppendOnlyTreeSnapshot;
|
|
28
31
|
private readonly lastArchiveSiblingPath;
|
|
29
|
-
private readonly
|
|
30
|
-
private readonly
|
|
31
|
-
|
|
32
|
-
private readonly
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
blobsHash: Fr | undefined;
|
|
43
|
-
totalNumTxs: number;
|
|
32
|
+
private readonly lastL1ToL2MessageTreeSnapshot;
|
|
33
|
+
private readonly lastL1ToL2MessageSubtreeRootSiblingPath;
|
|
34
|
+
readonly newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot;
|
|
35
|
+
private readonly headerOfLastBlockInPreviousCheckpoint;
|
|
36
|
+
private readonly startSpongeBlob;
|
|
37
|
+
parentCheckpoint: CheckpointProvingState;
|
|
38
|
+
private baseOrMergeProofs;
|
|
39
|
+
private baseParityProofs;
|
|
40
|
+
private rootParityProof;
|
|
41
|
+
private blockRootProof;
|
|
42
|
+
private builtBlockHeader;
|
|
43
|
+
private endState;
|
|
44
|
+
private endSpongeBlob;
|
|
44
45
|
private txs;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
private isFirstBlock;
|
|
47
|
+
private error;
|
|
48
|
+
constructor(index: number, blockNumber: BlockNumber, totalNumTxs: number, constants: CheckpointConstantData, timestamp: UInt64, lastArchiveTreeSnapshot: AppendOnlyTreeSnapshot, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, lastL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, headerOfLastBlockInPreviousCheckpoint: BlockHeader, startSpongeBlob: SpongeBlob, parentCheckpoint: CheckpointProvingState);
|
|
49
|
+
get epochNumber(): number;
|
|
49
50
|
addNewTx(tx: TxProvingState): number;
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
isAcceptingTxs(): boolean;
|
|
52
|
+
getProcessedTxs(): import("@aztec/stdlib/tx").ProcessedTx[];
|
|
53
|
+
tryStartProvingBase(txIndex: number): boolean;
|
|
54
|
+
setBaseRollupProof(txIndex: number, provingOutput: PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
55
|
+
tryStartProvingMerge(location: TreeNodeLocation): boolean;
|
|
56
|
+
setMergeRollupProof(location: TreeNodeLocation, provingOutput: PublicInputsAndRecursiveProof<TxRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): void;
|
|
57
|
+
tryStartProvingBaseParity(index: number): boolean;
|
|
52
58
|
setBaseParityProof(index: number, provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
|
|
59
|
+
tryStartProvingRootParity(): boolean;
|
|
53
60
|
setRootParityProof(provingOutput: PublicInputsAndRecursiveProof<ParityPublicInputs>): void;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
tryStartProvingBlockRoot(): boolean;
|
|
62
|
+
setBlockRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
63
|
+
getBlockRootRollupOutput(): BlockRollupPublicInputs | undefined;
|
|
64
|
+
buildBlockHeader(): Promise<BlockHeader>;
|
|
65
|
+
getBuiltBlockHeader(): BlockHeader | undefined;
|
|
66
|
+
getStartSpongeBlob(): SpongeBlob;
|
|
67
|
+
setEndSpongeBlob(endSpongeBlob: SpongeBlob): void;
|
|
68
|
+
getEndSpongeBlob(): SpongeBlob | undefined;
|
|
69
|
+
setEndState(endState: StateReference): void;
|
|
70
|
+
hasEndState(): boolean;
|
|
71
|
+
getBlockEndBlobFields(): Fr[];
|
|
72
|
+
getBlockEndBlobData(): BlockEndBlobData;
|
|
73
|
+
getBlockBlobData(): BlockBlobData;
|
|
74
|
+
getTxEffects(): import("@aztec/stdlib/tx").TxEffect[];
|
|
62
75
|
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
63
|
-
getMergeRollupInputs(mergeLocation: TreeNodeLocation):
|
|
64
|
-
getBlockRootRollupTypeAndInputs():
|
|
76
|
+
getMergeRollupInputs(mergeLocation: TreeNodeLocation): TxMergeRollupPrivateInputs;
|
|
77
|
+
getBlockRootRollupTypeAndInputs(): {
|
|
65
78
|
rollupType: string;
|
|
66
|
-
inputs:
|
|
79
|
+
inputs: BlockRootSingleTxRollupPrivateInputs;
|
|
67
80
|
} | {
|
|
68
81
|
rollupType: string;
|
|
69
|
-
inputs:
|
|
82
|
+
inputs: BlockRootRollupPrivateInputs;
|
|
70
83
|
} | {
|
|
71
84
|
rollupType: string;
|
|
72
|
-
inputs:
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
getRootParityInputs(): RootParityInputs;
|
|
85
|
+
inputs: BlockRootEmptyTxFirstRollupPrivateInputs;
|
|
86
|
+
};
|
|
87
|
+
getParityRootInputs(): ParityRootPrivateInputs;
|
|
76
88
|
getTxProvingState(txIndex: number): TxProvingState;
|
|
77
89
|
buildHeaderFromProvingOutputs(): Promise<BlockHeader>;
|
|
78
90
|
isReadyForMergeRollup(location: TreeNodeLocation): boolean;
|
|
@@ -80,6 +92,7 @@ export declare class BlockProvingState {
|
|
|
80
92
|
isReadyForRootParity(): boolean;
|
|
81
93
|
isComplete(): boolean;
|
|
82
94
|
verifyState(): boolean;
|
|
95
|
+
getError(): string | undefined;
|
|
83
96
|
reject(reason: string): void;
|
|
84
97
|
}
|
|
85
|
-
//# sourceMappingURL=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvdmluZy1zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9ibG9jay1wcm92aW5nLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLGdCQUFnQixFQUFFLEtBQUssVUFBVSxFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3JILE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsS0FBSyw2Q0FBNkMsRUFFbEQsS0FBSyx5Q0FBeUMsRUFFL0MsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBdUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3Q0FBd0MsRUFFeEMsNEJBQTRCLEVBRTVCLG9DQUFvQyxFQUNwQyxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLEtBQUssb0JBQW9CLEVBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBbUIsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbEQsT0FBTyxLQUFL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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|