@aztec/prover-client 3.0.0-devnet.5 → 3.0.0-devnet.6-patch.1
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 +8 -8
- package/dest/block-factory/light.d.ts.map +1 -1
- package/dest/block-factory/light.js +37 -23
- package/dest/config.d.ts +1 -1
- package/dest/config.js +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/light/lightweight_checkpoint_builder.d.ts +29 -0
- package/dest/light/lightweight_checkpoint_builder.d.ts.map +1 -0
- package/dest/light/lightweight_checkpoint_builder.js +108 -0
- package/dest/mocks/fixtures.d.ts +1 -4
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +7 -17
- package/dest/mocks/test_context.d.ts +27 -46
- package/dest/mocks/test_context.d.ts.map +1 -1
- package/dest/mocks/test_context.js +102 -116
- package/dest/orchestrator/block-building-helpers.d.ts +19 -21
- package/dest/orchestrator/block-building-helpers.d.ts.map +1 -1
- package/dest/orchestrator/block-building-helpers.js +93 -118
- package/dest/orchestrator/block-proving-state.d.ts +17 -11
- package/dest/orchestrator/block-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/block-proving-state.js +81 -20
- package/dest/orchestrator/checkpoint-proving-state.d.ts +8 -8
- package/dest/orchestrator/checkpoint-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/checkpoint-proving-state.js +15 -16
- package/dest/orchestrator/epoch-proving-state.d.ts +10 -9
- package/dest/orchestrator/epoch-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/epoch-proving-state.js +6 -6
- package/dest/orchestrator/index.d.ts +1 -1
- package/dest/orchestrator/orchestrator.d.ts +13 -13
- package/dest/orchestrator/orchestrator.d.ts.map +1 -1
- package/dest/orchestrator/orchestrator.js +54 -60
- package/dest/orchestrator/orchestrator_metrics.d.ts +1 -1
- package/dest/orchestrator/orchestrator_metrics.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.d.ts +6 -6
- package/dest/orchestrator/tx-proving-state.d.ts.map +1 -1
- package/dest/orchestrator/tx-proving-state.js +14 -23
- package/dest/prover-client/factory.d.ts +1 -1
- package/dest/prover-client/index.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts +1 -1
- package/dest/prover-client/prover-client.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.d.ts +9 -8
- package/dest/prover-client/server-epoch-prover.d.ts.map +1 -1
- package/dest/prover-client/server-epoch-prover.js +4 -4
- package/dest/proving_broker/broker_prover_facade.d.ts +21 -21
- package/dest/proving_broker/broker_prover_facade.d.ts.map +1 -1
- package/dest/proving_broker/broker_prover_facade.js +7 -6
- package/dest/proving_broker/config.d.ts +12 -8
- package/dest/proving_broker/config.d.ts.map +1 -1
- package/dest/proving_broker/config.js +8 -2
- package/dest/proving_broker/factory.d.ts +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 +1 -1
- 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 +1 -1
- package/dest/proving_broker/proving_agent.d.ts.map +1 -1
- package/dest/proving_broker/proving_agent_instrumentation.d.ts +1 -1
- package/dest/proving_broker/proving_agent_instrumentation.d.ts.map +1 -1
- 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 +4 -3
- 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 +3 -2
- package/dest/proving_broker/proving_broker_database/persisted.d.ts.map +1 -1
- package/dest/proving_broker/proving_broker_database/persisted.js +3 -2
- 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 +3 -3
- 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 +5 -6
- package/dest/test/mock_prover.d.ts.map +1 -1
- package/dest/test/mock_prover.js +3 -3
- package/package.json +18 -17
- package/src/block-factory/light.ts +40 -43
- package/src/config.ts +1 -1
- package/src/light/lightweight_checkpoint_builder.ts +144 -0
- package/src/mocks/fixtures.ts +7 -30
- package/src/mocks/test_context.ts +145 -177
- package/src/orchestrator/block-building-helpers.ts +133 -215
- package/src/orchestrator/block-proving-state.ts +103 -25
- package/src/orchestrator/checkpoint-proving-state.ts +24 -20
- package/src/orchestrator/epoch-proving-state.ts +15 -11
- package/src/orchestrator/orchestrator.ts +76 -74
- package/src/orchestrator/tx-proving-state.ts +24 -33
- package/src/prover-client/server-epoch-prover.ts +8 -9
- package/src/proving_broker/broker_prover_facade.ts +32 -29
- package/src/proving_broker/config.ts +8 -1
- package/src/proving_broker/fixtures.ts +8 -3
- package/src/proving_broker/proving_broker.ts +4 -3
- package/src/proving_broker/proving_broker_database/memory.ts +2 -1
- package/src/proving_broker/proving_broker_database/persisted.ts +5 -4
- package/src/proving_broker/proving_broker_database.ts +2 -1
- package/src/proving_broker/proving_job_controller.ts +5 -4
- package/src/test/mock_prover.ts +9 -7
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ARCHIVE_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 { 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
|
|
8
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
9
9
|
import { getVkData } from '@aztec/noir-protocol-circuits-types/server/vks';
|
|
10
10
|
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
11
11
|
import { computeFeePayerBalanceLeafSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
12
|
-
import { Body
|
|
13
|
-
import { getCheckpointBlobFields } from '@aztec/stdlib/checkpoint';
|
|
12
|
+
import { Body } from '@aztec/stdlib/block';
|
|
14
13
|
import { ContractClassLogFields } from '@aztec/stdlib/logs';
|
|
15
14
|
import { Proof, ProofData, RecursiveProof } from '@aztec/stdlib/proofs';
|
|
16
|
-
import { BlockConstantData, PrivateBaseRollupHints, PublicBaseRollupHints,
|
|
17
|
-
import { AppendOnlyTreeSnapshot, MerkleTreeId, NullifierLeafPreimage,
|
|
18
|
-
import { BlockHeader,
|
|
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';
|
|
19
18
|
import { VkData } from '@aztec/stdlib/vks';
|
|
20
19
|
import { Attributes, runInSpan } from '@aztec/telemetry-client';
|
|
21
20
|
// Builds the hints for base rollup. Updating the contract, nullifier, and data trees in the process.
|
|
@@ -25,18 +24,7 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderH
|
|
|
25
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));
|
|
26
25
|
// Get the note hash subtree root sibling path for insertion.
|
|
27
26
|
const noteHashSubtreeRootSiblingPath = assertLength(await getSubtreeSiblingPath(MerkleTreeId.NOTE_HASH_TREE, NOTE_HASH_SUBTREE_HEIGHT, db), NOTE_HASH_SUBTREE_ROOT_SIBLING_PATH_LENGTH);
|
|
28
|
-
|
|
29
|
-
// that will be used by the next iteration of the base rollup circuit, skipping the empty ones
|
|
30
|
-
const noteHashes = padArrayEnd(tx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX);
|
|
31
|
-
await db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, noteHashes);
|
|
32
|
-
// The read witnesses for a given TX should be generated before the writes of the same TX are applied.
|
|
33
|
-
// All reads that refer to writes in the same tx are transient and can be simplified out.
|
|
34
|
-
const txPublicDataUpdateRequestInfo = await processPublicDataUpdateRequests(tx, db);
|
|
35
|
-
// Update the nullifier tree, capturing the low nullifier info for each individual operation
|
|
36
|
-
const { lowLeavesWitnessData: nullifierWitnessLeaves, newSubtreeSiblingPath: nullifiersSubtreeRootSiblingPath, 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);
|
|
37
|
-
if (nullifierWitnessLeaves === undefined) {
|
|
38
|
-
throw new Error(`Could not craft nullifier batch insertion proofs`);
|
|
39
|
-
}
|
|
27
|
+
const { nullifierInsertionResult, publicDataInsertionResult } = await insertSideEffects(tx, db);
|
|
40
28
|
const blockHash = await tx.data.constants.anchorBlockHeader.hash();
|
|
41
29
|
const anchorBlockArchiveSiblingPath = (await getMembershipWitnessFor(blockHash, MerkleTreeId.ARCHIVE, ARCHIVE_HEIGHT, db)).siblingPath;
|
|
42
30
|
const contractClassLogsFields = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, (i)=>tx.txEffect.contractClassLogs[i]?.fields || ContractClassLogFields.empty());
|
|
@@ -48,25 +36,31 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderH
|
|
|
48
36
|
contractClassLogsFields
|
|
49
37
|
});
|
|
50
38
|
} else {
|
|
51
|
-
if (
|
|
39
|
+
if (tx.txEffect.publicDataWrites.length > 1) {
|
|
52
40
|
throw new Error(`More than one public data write in a private only tx`);
|
|
53
41
|
}
|
|
54
42
|
// Get hints for reading fee payer's balance in the public data tree.
|
|
55
|
-
const
|
|
56
|
-
const
|
|
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;
|
|
57
46
|
const leafSlot = await computeFeePayerBalanceLeafSlot(tx.data.feePayer);
|
|
58
|
-
if (!
|
|
47
|
+
if (!leafSlot.equals(feePayerBalanceLeafPreimage.leaf.slot)) {
|
|
59
48
|
throw new Error(`Cannot find the public data tree leaf for the fee payer's balance`);
|
|
60
49
|
}
|
|
61
|
-
//
|
|
62
|
-
const
|
|
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);
|
|
63
57
|
const treeSnapshotDiffHints = TreeSnapshotDiffHints.from({
|
|
64
58
|
noteHashSubtreeRootSiblingPath,
|
|
65
|
-
nullifierPredecessorPreimages
|
|
66
|
-
nullifierPredecessorMembershipWitnesses
|
|
67
|
-
sortedNullifiers
|
|
68
|
-
sortedNullifierIndexes
|
|
69
|
-
nullifierSubtreeRootSiblingPath
|
|
59
|
+
nullifierPredecessorPreimages,
|
|
60
|
+
nullifierPredecessorMembershipWitnesses,
|
|
61
|
+
sortedNullifiers,
|
|
62
|
+
sortedNullifierIndexes,
|
|
63
|
+
nullifierSubtreeRootSiblingPath,
|
|
70
64
|
feePayerBalanceMembershipWitness
|
|
71
65
|
});
|
|
72
66
|
const constants = BlockConstantData.from({
|
|
@@ -88,14 +82,36 @@ export const insertSideEffectsAndBuildBaseRollupHints = runInSpan('BlockBuilderH
|
|
|
88
82
|
});
|
|
89
83
|
}
|
|
90
84
|
});
|
|
91
|
-
export
|
|
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.`);
|
|
95
|
+
}
|
|
96
|
+
if (tx.txEffect.publicDataWrites.some((write)=>write.isEmpty())) {
|
|
97
|
+
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}.`);
|
|
98
|
+
}
|
|
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) {
|
|
92
108
|
const publicInputs = tx.data.publicInputs().toFields();
|
|
93
|
-
const binaryProof = new Proof(Buffer.concat(tx.
|
|
94
|
-
return new RecursiveProof(tx.
|
|
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);
|
|
95
111
|
}
|
|
96
|
-
export function
|
|
97
|
-
const proofData = new ProofData(tx.data.toPrivateToPublicKernelCircuitPublicInputs(),
|
|
98
|
-
return new
|
|
112
|
+
export function getPublicChonkVerifierPrivateInputsFromTx(tx, proverId) {
|
|
113
|
+
const proofData = new ProofData(tx.data.toPrivateToPublicKernelCircuitPublicInputs(), getChonkProofFromTx(tx), getVkData('HidingKernelToPublic'));
|
|
114
|
+
return new PublicChonkVerifierPrivateInputs(proofData, proverId);
|
|
99
115
|
}
|
|
100
116
|
// Build "hints" as the private inputs for the checkpoint root rollup circuit.
|
|
101
117
|
// The `blobCommitments` will be accumulated and checked in the root rollup against the `finalBlobChallenges`.
|
|
@@ -110,24 +126,11 @@ export const buildBlobHints = (blobFields)=>{
|
|
|
110
126
|
blobsHash
|
|
111
127
|
};
|
|
112
128
|
};
|
|
113
|
-
// Build the data required to prove the txs in an epoch. Currently only used in tests. It assumes 1 block per checkpoint.
|
|
114
|
-
export const buildBlobDataFromTxs = async (txsPerCheckpoint)=>{
|
|
115
|
-
const blobFields = txsPerCheckpoint.map((txs)=>getCheckpointBlobFields([
|
|
116
|
-
txs.map((tx)=>tx.txEffect)
|
|
117
|
-
]));
|
|
118
|
-
const finalBlobChallenges = await buildFinalBlobChallenges(blobFields);
|
|
119
|
-
return {
|
|
120
|
-
blobFieldsLengths: blobFields.map((fields)=>fields.length),
|
|
121
|
-
finalBlobChallenges
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
129
|
export const buildFinalBlobChallenges = async (blobFieldsPerCheckpoint)=>{
|
|
125
|
-
|
|
126
|
-
return await BatchedBlob.precomputeBatchedBlobChallenges(blobs);
|
|
130
|
+
return await BatchedBlobAccumulator.precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint);
|
|
127
131
|
};
|
|
128
132
|
export const accumulateBlobs = runInSpan('BlockBuilderHelpers', 'accumulateBlobs', async (_span, blobFields, startBlobAccumulator)=>{
|
|
129
|
-
const
|
|
130
|
-
const endBlobAccumulator = await startBlobAccumulator.accumulateBlobs(blobs);
|
|
133
|
+
const endBlobAccumulator = await startBlobAccumulator.accumulateFields(blobFields);
|
|
131
134
|
return endBlobAccumulator;
|
|
132
135
|
});
|
|
133
136
|
export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'buildHeaderFromCircuitOutputs', async (_span, blockRootRollupOutput)=>{
|
|
@@ -135,7 +138,7 @@ export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'b
|
|
|
135
138
|
const globalVariables = GlobalVariables.from({
|
|
136
139
|
chainId: constants.chainId,
|
|
137
140
|
version: constants.version,
|
|
138
|
-
blockNumber: blockRootRollupOutput.previousArchive.nextAvailableLeafIndex,
|
|
141
|
+
blockNumber: BlockNumber(blockRootRollupOutput.previousArchive.nextAvailableLeafIndex),
|
|
139
142
|
timestamp: blockRootRollupOutput.endTimestamp,
|
|
140
143
|
slotNumber: constants.slotNumber,
|
|
141
144
|
coinbase: constants.coinbase,
|
|
@@ -145,56 +148,50 @@ export const buildHeaderFromCircuitOutputs = runInSpan('BlockBuilderHelpers', 'b
|
|
|
145
148
|
const spongeBlobHash = await blockRootRollupOutput.endSpongeBlob.clone().squeeze();
|
|
146
149
|
return new BlockHeader(blockRootRollupOutput.previousArchive, blockRootRollupOutput.endState, spongeBlobHash, globalVariables, blockRootRollupOutput.accumulatedFees, blockRootRollupOutput.accumulatedManaUsed);
|
|
147
150
|
});
|
|
148
|
-
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs,
|
|
151
|
+
export const buildHeaderAndBodyFromTxs = runInSpan('BlockBuilderHelpers', 'buildHeaderAndBodyFromTxs', async (span, txs, lastArchive, endState, globalVariables, startSpongeBlob, isFirstBlock)=>{
|
|
149
152
|
span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber);
|
|
150
|
-
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)));
|
|
151
|
-
const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
152
153
|
const txEffects = txs.map((tx)=>tx.txEffect);
|
|
153
154
|
const body = new Body(txEffects);
|
|
154
|
-
const
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
const blockBlobFields =
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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();
|
|
167
179
|
await endSpongeBlob.absorb(blockBlobFields);
|
|
168
180
|
const spongeBlobHash = await endSpongeBlob.squeeze();
|
|
169
|
-
const header =
|
|
181
|
+
const header = BlockHeader.from({
|
|
182
|
+
lastArchive,
|
|
183
|
+
state: endState,
|
|
184
|
+
spongeBlobHash,
|
|
185
|
+
globalVariables,
|
|
186
|
+
totalFees,
|
|
187
|
+
totalManaUsed
|
|
188
|
+
});
|
|
170
189
|
return {
|
|
171
190
|
header,
|
|
172
|
-
body
|
|
191
|
+
body,
|
|
192
|
+
blockBlobFields
|
|
173
193
|
};
|
|
174
194
|
});
|
|
175
|
-
export const buildBlockHeaderFromTxs = runInSpan('BlockBuilderHelpers', 'buildBlockHeaderFromTxs', async (span, txs, globalVariables, startSpongeBlob, db)=>{
|
|
176
|
-
span.setAttribute(Attributes.BLOCK_NUMBER, globalVariables.blockNumber);
|
|
177
|
-
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)));
|
|
178
|
-
const previousArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, db);
|
|
179
|
-
const blobFields = getBlockBlobFields(txs.map((tx)=>tx.txEffect));
|
|
180
|
-
const endSpongeBlob = startSpongeBlob.clone();
|
|
181
|
-
await endSpongeBlob.absorb(blobFields);
|
|
182
|
-
const spongeBlobHash = await endSpongeBlob.squeeze();
|
|
183
|
-
const txEffects = txs.map((tx)=>tx.txEffect);
|
|
184
|
-
const fees = txEffects.reduce((acc, tx)=>acc.add(tx.transactionFee), Fr.ZERO);
|
|
185
|
-
const manaUsed = txs.reduce((acc, tx)=>acc.add(new Fr(tx.gasUsed.billedGas.l2Gas)), Fr.ZERO);
|
|
186
|
-
return new BlockHeader(previousArchive, stateReference, spongeBlobHash, globalVariables, fees, manaUsed);
|
|
187
|
-
});
|
|
188
|
-
/** Computes the inHash for a block's ContentCommitment given its l1 to l2 messages. */ export async function computeInHashFromL1ToL2Messages(unpaddedL1ToL2Messages) {
|
|
189
|
-
const l1ToL2Messages = padArrayEnd(unpaddedL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
190
|
-
const hasher = (left, right)=>Promise.resolve(sha256Trunc(Buffer.concat([
|
|
191
|
-
left,
|
|
192
|
-
right
|
|
193
|
-
])));
|
|
194
|
-
const parityHeight = Math.ceil(Math.log2(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
195
|
-
const parityCalculator = await MerkleTreeCalculator.create(parityHeight, Fr.ZERO.toBuffer(), hasher);
|
|
196
|
-
return new Fr(await parityCalculator.computeTreeRoot(l1ToL2Messages.map((msg)=>msg.toBuffer())));
|
|
197
|
-
}
|
|
198
195
|
export async function getLastSiblingPath(treeId, db) {
|
|
199
196
|
const { size } = await db.getTreeInfo(treeId);
|
|
200
197
|
const path = await db.getSiblingPath(treeId, size - 1n);
|
|
@@ -212,28 +209,6 @@ export async function getTreeSnapshot(id, db) {
|
|
|
212
209
|
export function makeEmptyMembershipWitness(height) {
|
|
213
210
|
return new MembershipWitness(height, 0n, makeTuple(height, ()=>Fr.ZERO));
|
|
214
211
|
}
|
|
215
|
-
const processPublicDataUpdateRequests = runInSpan('BlockBuilderHelpers', 'processPublicDataUpdateRequests', async (span, tx, db)=>{
|
|
216
|
-
span.setAttribute(Attributes.TX_HASH, tx.hash.toString());
|
|
217
|
-
const allPublicDataWrites = tx.txEffect.publicDataWrites.map(({ leafSlot, value })=>new PublicDataTreeLeaf(leafSlot, value));
|
|
218
|
-
const { lowLeavesWitnessData, insertionWitnessData } = await db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, allPublicDataWrites.map((write)=>{
|
|
219
|
-
if (write.isEmpty()) {
|
|
220
|
-
throw new Error(`Empty public data write in tx: ${toFriendlyJSON(tx)}`);
|
|
221
|
-
}
|
|
222
|
-
return write.toBuffer();
|
|
223
|
-
}));
|
|
224
|
-
const lowPublicDataWritesPreimages = lowLeavesWitnessData.map((lowLeafWitness)=>lowLeafWitness.leafPreimage);
|
|
225
|
-
const lowPublicDataWritesMembershipWitnesses = lowLeavesWitnessData.map((lowLeafWitness)=>MembershipWitness.fromBufferArray(lowLeafWitness.index, assertLength(lowLeafWitness.siblingPath.toBufferArray(), PUBLIC_DATA_TREE_HEIGHT)));
|
|
226
|
-
const publicDataWritesSiblingPaths = insertionWitnessData.map((w)=>{
|
|
227
|
-
const insertionSiblingPath = w.siblingPath.toFields();
|
|
228
|
-
assertLength(insertionSiblingPath, PUBLIC_DATA_TREE_HEIGHT);
|
|
229
|
-
return insertionSiblingPath;
|
|
230
|
-
});
|
|
231
|
-
return {
|
|
232
|
-
lowPublicDataWritesPreimages,
|
|
233
|
-
lowPublicDataWritesMembershipWitnesses,
|
|
234
|
-
publicDataWritesSiblingPaths
|
|
235
|
-
};
|
|
236
|
-
});
|
|
237
212
|
export async function getSubtreeSiblingPath(treeId, subtreeHeight, db) {
|
|
238
213
|
const nextAvailableLeafIndex = await db.getTreeInfo(treeId).then((t)=>t.size);
|
|
239
214
|
const fullSiblingPath = await db.getSiblingPath(treeId, nextAvailableLeafIndex);
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BlockBlobData, type BlockEndBlobData, type SpongeBlob } from '@aztec/blob-lib';
|
|
2
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 {
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { type Tuple } from '@aztec/foundation/serialize';
|
|
5
6
|
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
6
7
|
import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
7
8
|
import { type ParityPublicInputs, ParityRootPrivateInputs } from '@aztec/stdlib/parity';
|
|
8
9
|
import { BlockRollupPublicInputs, BlockRootEmptyTxFirstRollupPrivateInputs, BlockRootRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs, CheckpointConstantData, TxMergeRollupPrivateInputs, type TxRollupPublicInputs } from '@aztec/stdlib/rollup';
|
|
9
10
|
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
10
|
-
import {
|
|
11
|
+
import { BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
11
12
|
import type { UInt64 } from '@aztec/stdlib/types';
|
|
12
13
|
import type { CheckpointProvingState } from './checkpoint-proving-state.js';
|
|
13
14
|
import type { TxProvingState } from './tx-proving-state.js';
|
|
@@ -22,7 +23,7 @@ export type ProofState<T, PROOF_LENGTH extends number> = {
|
|
|
22
23
|
export declare class BlockProvingState {
|
|
23
24
|
#private;
|
|
24
25
|
readonly index: number;
|
|
25
|
-
readonly blockNumber:
|
|
26
|
+
readonly blockNumber: BlockNumber;
|
|
26
27
|
readonly totalNumTxs: number;
|
|
27
28
|
private readonly constants;
|
|
28
29
|
private readonly timestamp;
|
|
@@ -39,11 +40,12 @@ export declare class BlockProvingState {
|
|
|
39
40
|
private rootParityProof;
|
|
40
41
|
private blockRootProof;
|
|
41
42
|
private builtBlockHeader;
|
|
43
|
+
private endState;
|
|
42
44
|
private endSpongeBlob;
|
|
43
45
|
private txs;
|
|
44
46
|
private isFirstBlock;
|
|
45
47
|
private error;
|
|
46
|
-
constructor(index: number, blockNumber:
|
|
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);
|
|
47
49
|
get epochNumber(): number;
|
|
48
50
|
addNewTx(tx: TxProvingState): number;
|
|
49
51
|
isAcceptingTxs(): boolean;
|
|
@@ -59,24 +61,28 @@ export declare class BlockProvingState {
|
|
|
59
61
|
tryStartProvingBlockRoot(): boolean;
|
|
60
62
|
setBlockRootRollupProof(provingOutput: PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
61
63
|
getBlockRootRollupOutput(): BlockRollupPublicInputs | undefined;
|
|
62
|
-
|
|
64
|
+
buildBlockHeader(): Promise<BlockHeader>;
|
|
63
65
|
getBuiltBlockHeader(): BlockHeader | undefined;
|
|
64
|
-
getGlobalVariables(): GlobalVariables;
|
|
65
66
|
getStartSpongeBlob(): SpongeBlob;
|
|
66
67
|
setEndSpongeBlob(endSpongeBlob: SpongeBlob): void;
|
|
67
68
|
getEndSpongeBlob(): SpongeBlob | undefined;
|
|
69
|
+
setEndState(endState: StateReference): void;
|
|
70
|
+
hasEndState(): boolean;
|
|
71
|
+
getBlockEndBlobFields(): Fr[];
|
|
72
|
+
getBlockEndBlobData(): BlockEndBlobData;
|
|
73
|
+
getBlockBlobData(): BlockBlobData;
|
|
68
74
|
getTxEffects(): import("@aztec/stdlib/tx").TxEffect[];
|
|
69
75
|
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
70
76
|
getMergeRollupInputs(mergeLocation: TreeNodeLocation): TxMergeRollupPrivateInputs;
|
|
71
77
|
getBlockRootRollupTypeAndInputs(): {
|
|
72
|
-
rollupType: string;
|
|
73
|
-
inputs: BlockRootEmptyTxFirstRollupPrivateInputs;
|
|
74
|
-
} | {
|
|
75
78
|
rollupType: string;
|
|
76
79
|
inputs: BlockRootSingleTxRollupPrivateInputs;
|
|
77
80
|
} | {
|
|
78
81
|
rollupType: string;
|
|
79
82
|
inputs: BlockRootRollupPrivateInputs;
|
|
83
|
+
} | {
|
|
84
|
+
rollupType: string;
|
|
85
|
+
inputs: BlockRootEmptyTxFirstRollupPrivateInputs;
|
|
80
86
|
};
|
|
81
87
|
getParityRootInputs(): ParityRootPrivateInputs;
|
|
82
88
|
getTxProvingState(txIndex: number): TxProvingState;
|
|
@@ -89,4 +95,4 @@ export declare class BlockProvingState {
|
|
|
89
95
|
getError(): string | undefined;
|
|
90
96
|
reject(reason: string): void;
|
|
91
97
|
}
|
|
92
|
-
//# sourceMappingURL=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcHJvdmluZy1zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29yY2hlc3RyYXRvci9ibG9jay1wcm92aW5nLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLGdCQUFnQixFQUFFLEtBQUssVUFBVSxFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3JILE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsS0FBSyw2Q0FBNkMsRUFFbEQsS0FBSyx5Q0FBeUMsRUFFL0MsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBdUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3Q0FBd0MsRUFFeEMsNEJBQTRCLEVBRTVCLG9DQUFvQyxFQUNwQyxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLEtBQUssb0JBQW9CLEVBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBbUIsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbEQsT0FBTyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxNQUFNLE1BQU0sVUFBVSxDQUFDLENBQUMsRUFBRSxZQUFZLFNBQVMsTUFBTSxJQUFJO0lBQ3ZELGFBQWEsQ0FBQyxFQUFFLDZCQUE2QixDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvRCxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDckIsQ0FBQztBQUVGOzs7R0FHRztBQUNILHFCQUFhLGlCQUFpQjs7YUFvQlYsS0FBSyxFQUFFLE1BQU07YUFDYixXQUFXLEVBQUUsV0FBVzthQUN4QixXQUFXLEVBQUUsTUFBTTtJQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO2FBQ1YsdUJBQXVCLEVBQUUsc0JBQXNCO0lBQy9ELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsNkJBQTZCO0lBQzlDLE9BQU8sQ0FBQyxRQUFRLENBQUMsdUNBQXVDO2FBSXhDLDRCQUE0QixFQUFFLHNCQUFzQjtJQUNwRSxPQUFPLENBQUMsUUFBUSxDQUFDLHFDQUFxQztJQUN0RCxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFDekIsZ0JBQWdCLEVBQUUsc0JBQXNCO0lBbENqRCxPQUFPLENBQUMsaUJBQWlCLENBRU07SUFDL0IsT0FBTyxDQUFDLGdCQUFnQixDQUdDO0lBQ3pCLE9BQU8sQ0FBQyxlQUFlLENBQW1GO0lBQzFHLE9BQU8sQ0FBQyxjQUFjLENBRVI7SUFDZCxPQUFPLENBQUMsZ0JBQWdCLENBQTBCO0lBQ2xELE9BQU8sQ0FBQyxRQUFRLENBQTZCO0lBQzdDLE9BQU8sQ0FBQyxhQUFhLENBQXlCO0lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQXdCO0lBQ25DLE9BQU8sQ0FBQyxZQUFZLENBQVU7SUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBcUI7SUFFbEMsWUFDa0IsS0FBSyxFQUFFLE1BQU0sRUFDYixXQUFXLEVBQUUsV0FBVyxFQUN4QixXQUFXLEVBQUUsTUFBTSxFQUNsQixTQUFTLEVBQUUsc0JBQXNCLEVBQ2pDLFNBQVMsRUFBRSxNQUFNLEVBQ2xCLHVCQUF1QixFQUFFLHNCQUFzQixFQUM5QyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sY0FBYyxDQUFDLEVBQ3hELDZCQUE2QixFQUFFLHNCQUFzQixFQUNyRCx1Q0FBdUMsRUFBRSxLQUFLLENBQzdELEVBQUUsRUFDRixPQUFPLDZDQUE2QyxDQUNyRCxFQUNlLDRCQUE0QixFQUFFLHNCQUFzQixFQUNuRCxxQ0FBcUMsRUFBRSxXQUFXLEVBQ2xELGVBQWUsRUFBRSxVQUFVLEVBQ3JDLGdCQUFnQixFQUFFLHNCQUFzQixFQVFoRDtJQUVELElBQVcsV0FBVyxJQUFJLE1BQU0sQ0FFL0I7SUFHTSxRQUFRLENBQUMsRUFBRSxFQUFFLGNBQWMsVUFPakM7SUFFTSxjQUFjLFlBRXBCO0lBRU0sZUFBZSw2Q0FFckI7SUFFTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxXQU96QztJQUVNLGtCQUFrQixDQUN2QixPQUFPLEVBQUUsTUFBTSxFQUNmLGFBQWEsRUFBRSw2QkFBNkIsQ0FDMUMsb0JBQW9CLEVBQ3BCLE9BQU8seUNBQXlDLENBQ2pELEdBQ0EsZ0JBQWdCLENBRWxCO0lBRU0sb0JBQW9CLENBQUMsUUFBUSxFQUFFLGdCQUFnQixXQU9yRDtJQUVNLG1CQUFtQixDQUN4QixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLGFBQWEsRUFBRSw2QkFBNkIsQ0FDMUMsb0JBQW9CLEVBQ3BCLE9BQU8seUNBQXlDLENBQ2pELFFBR0Y7SUFFTSx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxXQU83QztJQUdNLGtCQUFrQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLDZCQUE2QixDQUFDLGtCQUFrQixDQUFDLFFBT3hHO0lBRU0seUJBQXlCLFlBTy9CO0lBRU0sa0JBQWtCLENBQUMsYUFBYSxFQUFFLDZCQUE2QixDQUFDLGtCQUFrQixDQUFDLFFBRXpGO0lBRU0sd0JBQXdCLFlBTzlCO0lBRU0sdUJBQXVCLENBQzVCLGFBQWEsRUFBRSw2QkFBNkIsQ0FDMUMsdUJBQXVCLEVBQ3ZCLE9BQU8seUNBQXlDLENBQ2pELEdBQ0EsZ0JBQWdCLENBR2xCO0lBRU0sd0JBQXdCLHdDQUU5QjtJQUVZLGdCQUFnQix5QkF3QjVCO0lBRU0sbUJBQW1CLDRCQUV6QjtJQUVNLGtCQUFrQixlQUV4QjtJQUVNLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxVQUFVLFFBRWhEO0lBRU0sZ0JBQWdCLDJCQUV0QjtJQUVNLFdBQVcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxRQUUxQztJQUVNLFdBQVcsWUFFakI7SUFFTSxxQkFBcUIsSUFBSSxFQUFFLEVBQUUsQ0FFbkM7SUFFRCxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0F5QnRDO0lBRU0sZ0JBQWdCLElBQUksYUFBYSxDQUt2QztJQUVNLFlBQVksMENBRWxCO0lBRU0saUJBQWlCLENBQUMsUUFBUSxFQUFFLGdCQUFnQixvQkFFbEQ7SUFFTSxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLDhCQU8xRDtJQUVNLCtCQUErQjs7Ozs7Ozs7O01Bd0JyQztJQThDTSxtQkFBbUIsNEJBUXpCO0lBR00saUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sa0JBRXZDO0lBRVksNkJBQTZCLHlCQU16QztJQUVNLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsV0FFdEQ7SUFHTSx5QkFBeUIsWUFHL0I7SUFHTSxvQkFBb0IsWUFFMUI7SUFFTSxVQUFVLFlBRWhCO0lBRU0sV0FBVyxZQUVqQjtJQUVNLFFBQVEsdUJBRWQ7SUFFTSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFHM0I7Q0F3Q0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"block-proving-state.d.ts","sourceRoot":"","sources":["../../src/orchestrator/block-proving-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { encodeBlockEndBlobData } from '@aztec/blob-lib';
|
|
1
2
|
import { NUM_BASE_PARITY_PER_ROOT_PARITY } from '@aztec/constants';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
4
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
3
5
|
import { UnbalancedTreeStore } from '@aztec/foundation/trees';
|
|
4
6
|
import { ParityRootPrivateInputs } from '@aztec/stdlib/parity';
|
|
5
7
|
import { BlockRootEmptyTxFirstRollupPrivateInputs, BlockRootFirstRollupPrivateInputs, BlockRootRollupPrivateInputs, BlockRootSingleTxFirstRollupPrivateInputs, BlockRootSingleTxRollupPrivateInputs, TxMergeRollupPrivateInputs } from '@aztec/stdlib/rollup';
|
|
6
|
-
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
8
|
+
import { BlockHeader, GlobalVariables } from '@aztec/stdlib/tx';
|
|
7
9
|
import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-helpers.js';
|
|
8
10
|
/**
|
|
9
11
|
* The current state of the proving schedule for a given block. Managed by ProvingState.
|
|
@@ -27,6 +29,7 @@ import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-hel
|
|
|
27
29
|
rootParityProof;
|
|
28
30
|
blockRootProof;
|
|
29
31
|
builtBlockHeader;
|
|
32
|
+
endState;
|
|
30
33
|
endSpongeBlob;
|
|
31
34
|
txs;
|
|
32
35
|
isFirstBlock;
|
|
@@ -157,28 +160,24 @@ import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-hel
|
|
|
157
160
|
getBlockRootRollupOutput() {
|
|
158
161
|
return this.blockRootProof?.provingOutput?.inputs;
|
|
159
162
|
}
|
|
160
|
-
|
|
161
|
-
this.
|
|
163
|
+
async buildBlockHeader() {
|
|
164
|
+
if (this.isAcceptingTxs()) {
|
|
165
|
+
throw new Error('All txs must be added to the block before building the header.');
|
|
166
|
+
}
|
|
167
|
+
if (!this.endState) {
|
|
168
|
+
throw new Error('Call `setEndState` first.');
|
|
169
|
+
}
|
|
170
|
+
if (!this.endSpongeBlob) {
|
|
171
|
+
throw new Error('Call `setEndSpongeBlob` first.');
|
|
172
|
+
}
|
|
173
|
+
const endSpongeBlob = this.endSpongeBlob.clone();
|
|
174
|
+
const endSpongeBlobHash = await endSpongeBlob.squeeze();
|
|
175
|
+
this.builtBlockHeader = new BlockHeader(this.lastArchiveTreeSnapshot, this.endState, endSpongeBlobHash, this.#getGlobalVariables(), this.#getTotalFees(), new Fr(this.#getTotalManaUsed()));
|
|
176
|
+
return this.builtBlockHeader;
|
|
162
177
|
}
|
|
163
178
|
getBuiltBlockHeader() {
|
|
164
179
|
return this.builtBlockHeader;
|
|
165
180
|
}
|
|
166
|
-
getGlobalVariables() {
|
|
167
|
-
if (this.txs.length) {
|
|
168
|
-
return this.txs[0].processedTx.globalVariables;
|
|
169
|
-
}
|
|
170
|
-
const constants = this.constants;
|
|
171
|
-
return GlobalVariables.from({
|
|
172
|
-
chainId: constants.chainId,
|
|
173
|
-
version: constants.version,
|
|
174
|
-
blockNumber: this.blockNumber,
|
|
175
|
-
slotNumber: constants.slotNumber,
|
|
176
|
-
timestamp: this.timestamp,
|
|
177
|
-
coinbase: constants.coinbase,
|
|
178
|
-
feeRecipient: constants.feeRecipient,
|
|
179
|
-
gasFees: constants.gasFees
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
181
|
getStartSpongeBlob() {
|
|
183
182
|
return this.startSpongeBlob;
|
|
184
183
|
}
|
|
@@ -188,6 +187,46 @@ import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-hel
|
|
|
188
187
|
getEndSpongeBlob() {
|
|
189
188
|
return this.endSpongeBlob;
|
|
190
189
|
}
|
|
190
|
+
setEndState(endState) {
|
|
191
|
+
this.endState = endState;
|
|
192
|
+
}
|
|
193
|
+
hasEndState() {
|
|
194
|
+
return !!this.endState;
|
|
195
|
+
}
|
|
196
|
+
getBlockEndBlobFields() {
|
|
197
|
+
return encodeBlockEndBlobData(this.getBlockEndBlobData());
|
|
198
|
+
}
|
|
199
|
+
getBlockEndBlobData() {
|
|
200
|
+
if (!this.endState) {
|
|
201
|
+
throw new Error('Call `setEndState` first.');
|
|
202
|
+
}
|
|
203
|
+
const partial = this.endState.partial;
|
|
204
|
+
return {
|
|
205
|
+
blockEndMarker: {
|
|
206
|
+
numTxs: this.totalNumTxs,
|
|
207
|
+
timestamp: this.timestamp,
|
|
208
|
+
blockNumber: this.blockNumber
|
|
209
|
+
},
|
|
210
|
+
blockEndStateField: {
|
|
211
|
+
l1ToL2MessageNextAvailableLeafIndex: this.newL1ToL2MessageTreeSnapshot.nextAvailableLeafIndex,
|
|
212
|
+
noteHashNextAvailableLeafIndex: partial.noteHashTree.nextAvailableLeafIndex,
|
|
213
|
+
nullifierNextAvailableLeafIndex: partial.nullifierTree.nextAvailableLeafIndex,
|
|
214
|
+
publicDataNextAvailableLeafIndex: partial.publicDataTree.nextAvailableLeafIndex,
|
|
215
|
+
totalManaUsed: this.#getTotalManaUsed()
|
|
216
|
+
},
|
|
217
|
+
lastArchiveRoot: this.lastArchiveTreeSnapshot.root,
|
|
218
|
+
noteHashRoot: partial.noteHashTree.root,
|
|
219
|
+
nullifierRoot: partial.nullifierTree.root,
|
|
220
|
+
publicDataRoot: partial.publicDataTree.root,
|
|
221
|
+
l1ToL2MessageRoot: this.isFirstBlock ? this.newL1ToL2MessageTreeSnapshot.root : undefined
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
getBlockBlobData() {
|
|
225
|
+
return {
|
|
226
|
+
...this.getBlockEndBlobData(),
|
|
227
|
+
txs: this.getTxEffects().map((t)=>t.toTxBlobData())
|
|
228
|
+
};
|
|
229
|
+
}
|
|
191
230
|
getTxEffects() {
|
|
192
231
|
return this.txs.map((t)=>t.processedTx.txEffect);
|
|
193
232
|
}
|
|
@@ -237,7 +276,7 @@ import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-hel
|
|
|
237
276
|
if (!leftRollup) {
|
|
238
277
|
return {
|
|
239
278
|
rollupType: 'rollup-block-root-first-empty-tx',
|
|
240
|
-
inputs: new BlockRootEmptyTxFirstRollupPrivateInputs(l1ToL2Roots, this.lastArchiveTreeSnapshot, this.headerOfLastBlockInPreviousCheckpoint.state, this.constants, this.
|
|
279
|
+
inputs: new BlockRootEmptyTxFirstRollupPrivateInputs(l1ToL2Roots, this.lastArchiveTreeSnapshot, this.headerOfLastBlockInPreviousCheckpoint.state, this.constants, this.timestamp, this.lastL1ToL2MessageSubtreeRootSiblingPath, this.lastArchiveSiblingPath)
|
|
241
280
|
};
|
|
242
281
|
} else if (!rightRollup) {
|
|
243
282
|
return {
|
|
@@ -310,4 +349,26 @@ import { buildHeaderFromCircuitOutputs, toProofData } from './block-building-hel
|
|
|
310
349
|
this.baseOrMergeProofs.getNode(rootLocation)?.provingOutput
|
|
311
350
|
] : this.baseOrMergeProofs.getChildren(rootLocation).map((c)=>c?.provingOutput);
|
|
312
351
|
}
|
|
352
|
+
#getGlobalVariables() {
|
|
353
|
+
if (this.txs.length) {
|
|
354
|
+
return this.txs[0].processedTx.globalVariables;
|
|
355
|
+
}
|
|
356
|
+
const constants = this.constants;
|
|
357
|
+
return GlobalVariables.from({
|
|
358
|
+
chainId: constants.chainId,
|
|
359
|
+
version: constants.version,
|
|
360
|
+
blockNumber: this.blockNumber,
|
|
361
|
+
slotNumber: constants.slotNumber,
|
|
362
|
+
timestamp: this.timestamp,
|
|
363
|
+
coinbase: constants.coinbase,
|
|
364
|
+
feeRecipient: constants.feeRecipient,
|
|
365
|
+
gasFees: constants.gasFees
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
#getTotalFees() {
|
|
369
|
+
return this.txs.reduce((acc, tx)=>acc.add(tx.processedTx.txEffect.transactionFee), Fr.ZERO);
|
|
370
|
+
}
|
|
371
|
+
#getTotalManaUsed() {
|
|
372
|
+
return this.txs.reduce((acc, tx)=>acc + BigInt(tx.processedTx.gasUsed.billedGas.l2Gas), 0n);
|
|
373
|
+
}
|
|
313
374
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BatchedBlobAccumulator, type FinalBlobBatchingChallenges } from '@aztec/blob-lib';
|
|
2
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 {
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import type { Tuple } from '@aztec/foundation/serialize';
|
|
5
6
|
import { type TreeNodeLocation } from '@aztec/foundation/trees';
|
|
6
7
|
import type { PublicInputsAndRecursiveProof } from '@aztec/stdlib/interfaces/server';
|
|
@@ -17,7 +18,6 @@ export declare class CheckpointProvingState {
|
|
|
17
18
|
readonly index: number;
|
|
18
19
|
readonly constants: CheckpointConstantData;
|
|
19
20
|
readonly totalNumBlocks: number;
|
|
20
|
-
private readonly totalNumBlobFields;
|
|
21
21
|
private readonly finalBlobBatchingChallenges;
|
|
22
22
|
private readonly headerOfLastBlockInPreviousCheckpoint;
|
|
23
23
|
private readonly lastArchiveSiblingPath;
|
|
@@ -35,10 +35,10 @@ export declare class CheckpointProvingState {
|
|
|
35
35
|
private endBlobAccumulator;
|
|
36
36
|
private blobFields;
|
|
37
37
|
private error;
|
|
38
|
-
readonly firstBlockNumber:
|
|
39
|
-
constructor(index: number, constants: CheckpointConstantData, totalNumBlocks: number,
|
|
38
|
+
readonly firstBlockNumber: BlockNumber;
|
|
39
|
+
constructor(index: number, constants: CheckpointConstantData, totalNumBlocks: number, finalBlobBatchingChallenges: FinalBlobBatchingChallenges, headerOfLastBlockInPreviousCheckpoint: BlockHeader, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>, l1ToL2Messages: Fr[], lastL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, lastL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>, newL1ToL2MessageTreeSnapshot: AppendOnlyTreeSnapshot, newL1ToL2MessageSubtreeRootSiblingPath: Tuple<Fr, typeof L1_TO_L2_MSG_SUBTREE_ROOT_SIBLING_PATH_LENGTH>, parentEpoch: EpochProvingState, onBlobAccumulatorSet: (checkpoint: CheckpointProvingState) => void);
|
|
40
40
|
get epochNumber(): number;
|
|
41
|
-
startNewBlock(blockNumber:
|
|
41
|
+
startNewBlock(blockNumber: BlockNumber, timestamp: UInt64, totalNumTxs: number, lastArchiveTreeSnapshot: AppendOnlyTreeSnapshot, lastArchiveSiblingPath: Tuple<Fr, typeof ARCHIVE_HEIGHT>): BlockProvingState;
|
|
42
42
|
isAcceptingBlocks(): boolean;
|
|
43
43
|
setBlockRootRollupProof(blockIndex: number, provingOutput: PublicInputsAndRecursiveProof<BlockRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>): TreeNodeLocation;
|
|
44
44
|
tryStartProvingBlockMerge(location: TreeNodeLocation): boolean;
|
|
@@ -51,8 +51,8 @@ export declare class CheckpointProvingState {
|
|
|
51
51
|
getParentLocation(location: TreeNodeLocation): TreeNodeLocation;
|
|
52
52
|
getBlockMergeRollupInputs(mergeLocation: TreeNodeLocation): BlockMergeRollupPrivateInputs;
|
|
53
53
|
getCheckpointRootRollupType(): CircuitName;
|
|
54
|
-
getCheckpointRootRollupInputs():
|
|
55
|
-
getBlockProvingStateByBlockNumber(blockNumber:
|
|
54
|
+
getCheckpointRootRollupInputs(): CheckpointRootRollupPrivateInputs | CheckpointRootSingleBlockRollupPrivateInputs;
|
|
55
|
+
getBlockProvingStateByBlockNumber(blockNumber: BlockNumber): BlockProvingState | undefined;
|
|
56
56
|
isReadyForBlockMerge(location: TreeNodeLocation): boolean;
|
|
57
57
|
isReadyForCheckpointRoot(): boolean;
|
|
58
58
|
verifyState(): boolean;
|
|
@@ -60,4 +60,4 @@ export declare class CheckpointProvingState {
|
|
|
60
60
|
cancel(): void;
|
|
61
61
|
reject(reason: string): void;
|
|
62
62
|
}
|
|
63
|
-
//# sourceMappingURL=
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1wcm92aW5nLXN0YXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3JjaGVzdHJhdG9yL2NoZWNrcG9pbnQtcHJvdmluZy1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLEtBQUssMkJBQTJCLEVBR2pDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUduQixLQUFLLDZDQUE2QyxFQUNsRCxLQUFLLHlDQUF5QyxFQUUvQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQXVCLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBRTVCLGlDQUFpQyxFQUNqQyw0Q0FBNEMsRUFDN0MsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2xELE9BQU8s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
|