Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
97e2a01
feat: blob batching methods - nr only
MirandaWood Apr 15, 2025
52801e6
chore: fmt, more tests, rearranging
MirandaWood Apr 16, 2025
35e8be2
feat: BLS12 field, curve methods, blob batching methods, ts only
MirandaWood Apr 16, 2025
db03339
chore: lint, cleanup
MirandaWood Apr 16, 2025
68be71e
chore: remove trusted setup file + test using it (size issues)
MirandaWood Apr 16, 2025
1fa5d49
Revert "chore: remove trusted setup file + test using it (size issues)"
MirandaWood Apr 17, 2025
33d62a7
chore: cleanup packages + increase playground size
MirandaWood Apr 17, 2025
46b8866
feat: address some comments, cleanup
MirandaWood Apr 17, 2025
346ca9a
chore: update some comments
MirandaWood Apr 21, 2025
f655bf5
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood Apr 21, 2025
8d57216
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood Apr 21, 2025
9490422
chore: renaming, cleanup
MirandaWood Apr 22, 2025
c300c77
chore: renaming, cleanup
MirandaWood Apr 22, 2025
63ffe96
chore: add issue nums (hopefully force ci cache reset)
MirandaWood Apr 22, 2025
606a942
feat: as isNegative to F, rename proof -> Q
MirandaWood Apr 22, 2025
75d6d35
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood Apr 22, 2025
40ffd8b
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood Apr 22, 2025
951d329
chore: bumped vite kb limit 1700 -> 1720
MirandaWood Apr 22, 2025
307cb09
chore: bumped vite kb limit 1700 -> 1750
MirandaWood Apr 22, 2025
5251cd1
feat: adding helpers, constants, docs, etc. for integration
MirandaWood Apr 24, 2025
de8ec1e
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood Apr 24, 2025
5f2fe64
feat: WIP batch blobs and validate in rollup
MirandaWood Apr 24, 2025
070cbd2
feat: add more tests, cleanup, remove some warnings
MirandaWood Apr 25, 2025
f9e5364
chore: update to fixed noir version
TomAFrench Apr 29, 2025
201711e
feat: add final accumulator pub inputs for root
MirandaWood May 1, 2025
ca0da9d
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 7, 2025
d5f11d4
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 7, 2025
34e9e1a
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 7, 2025
d3ac058
chore: rename v -> blob_commitments_hash, move noir ref further up stack
MirandaWood May 13, 2025
6750476
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 13, 2025
8e968ac
chore: rename v to blobCommitmentsHash
MirandaWood May 13, 2025
7cd9b97
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 13, 2025
8a2570f
chore: renaming, reduce root pub inputs, cleanup
MirandaWood May 13, 2025
95ee6bf
chore: add back testing fixtures (too much effort to remove rn)
MirandaWood May 14, 2025
6051d14
chore: add back more testing fixtures
MirandaWood May 14, 2025
1fc2c0d
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 15, 2025
cda163a
chore: use updated methods from bignum, remove warnings
MirandaWood May 15, 2025
4806435
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 15, 2025
508a11f
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 15, 2025
f92a3d5
chore: update methods to bignum 0.7, cleanup
MirandaWood May 15, 2025
49c7be3
chore: switch bigcurve branch to remove visibility warnings
MirandaWood May 16, 2025
ee900fe
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 16, 2025
2216519
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 16, 2025
05cffba
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 16, 2025
d32742e
chore: cleanup, remove warnings
MirandaWood May 16, 2025
55bc974
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 20, 2025
df48994
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 20, 2025
c1e149b
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 20, 2025
dc1bd18
chore: fmt
MirandaWood May 20, 2025
7a2a1e7
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 20, 2025
cb146ae
fix: include is_inf in all serialization so recursion works
MirandaWood May 20, 2025
18db30a
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 20, 2025
1e6391e
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 20, 2025
3398526
chore: update import
MirandaWood May 20, 2025
e0f687a
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 20, 2025
c8ec933
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 20, 2025
5f02ae1
feat: add point compression unit test
MirandaWood May 20, 2025
480b8de
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 20, 2025
51899bd
chore: add fixture test for point compression, bring down new bls met…
MirandaWood May 21, 2025
f5bc35e
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 21, 2025
4c5c437
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 22, 2025
1b7fbf0
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 22, 2025
c9b39f0
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 22, 2025
8667c5c
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood May 28, 2025
ff52662
chore: bump bignum
MirandaWood May 28, 2025
0c91085
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 28, 2025
09e638a
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 28, 2025
b2c9adb
chore: post merge fixes, bring down small changes
MirandaWood May 28, 2025
3064028
feat: address some comments
MirandaWood May 28, 2025
cef7c07
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 28, 2025
b358b3e
chore: test using toEqual in jest
MirandaWood May 29, 2025
fb8e45a
feat: init bigint and buffer, remove static compress
MirandaWood May 29, 2025
be91807
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 29, 2025
5f56855
feat: rename, add constant
MirandaWood May 29, 2025
c75232b
feat: replace empty blob assumption
MirandaWood May 30, 2025
9e80ff2
feat: address some comments
MirandaWood May 30, 2025
2d1f35e
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood May 30, 2025
df4c693
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood May 30, 2025
ea19acd
chore: add extra check before blob acc init
MirandaWood Jun 2, 2025
e89fd4a
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood Jun 2, 2025
92f6e5f
chore: renaming, bring down changes from integration branch, cleanup
MirandaWood Jun 2, 2025
88b4b28
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils' into…
MirandaWood Jun 2, 2025
0ee11fd
chore: cleanup, bring down changes from other PRs
MirandaWood Jun 2, 2025
7429aac
Merge remote-tracking branch 'origin/mw/blob-batching-bls-utils-ts' i…
MirandaWood Jun 2, 2025
ac78bf3
chore: renaming from methods branch
MirandaWood Jun 2, 2025
4a6ee02
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood Jun 3, 2025
4c0f1a9
chore: bump bignum post merge
MirandaWood Jun 3, 2025
42230da
Merge remote-tracking branch 'origin/mw/blob-batching' into mw/blob-b…
MirandaWood Jun 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ use types::{
utils::reader::Reader,
};

// TODO(MW): delete

// NB: This only exists because a nested array of [[Field; 2]; N] did not build with ci2.5, but was fine otherwise
// For blobs, we use the compressed 48 byte BLS12 commitment to compute the challenge. We never need to operate on it,
// so it's encoded as 2 fields. The first is the first 31 bytes, and the second is the next 17 bytes.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ authors = [""]
compiler_version = ">=0.18.0"

[dependencies]
bigint = { tag = "v0.7.3", git = "https://github.com/noir-lang/noir-bignum" }
types = { path = "../types" }
parity_lib = { path = "../parity-lib" }
blob = { path = "../blob" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use dep::types::{
traits::{Deserialize, Empty, Serialize, ToField},
utils::reader::Reader,
};
use blob::blob_public_inputs::BlockBlobPublicInputs;
use blob::blob_batching_public_inputs::BlockBlobPublicInputs;

pub struct FeeRecipient {
pub recipient: EthAddress,
Expand Down Expand Up @@ -53,7 +53,7 @@ pub struct BlockRootOrBlockMergePublicInputs {
pub vk_tree_root: Field, // Root of allowed vk tree
pub protocol_contract_tree_root: Field, // Root of protocol contract tree
pub prover_id: Field, // TODO(#7346): Temporarily added prover_id while we verify block-root proofs on L1
pub blob_public_inputs: [BlockBlobPublicInputs; AZTEC_MAX_EPOCH_DURATION], // z, y, and C s.t. p(z) = y and C commits to p, for blob verification
pub blob_public_inputs: BlockBlobPublicInputs, // Blob accumulators at the start and end of this block range
}

impl BlockRootOrBlockMergePublicInputs {
Expand All @@ -75,7 +75,7 @@ impl Empty for BlockRootOrBlockMergePublicInputs {
vk_tree_root: 0,
protocol_contract_tree_root: 0,
prover_id: 0,
blob_public_inputs: [BlockBlobPublicInputs::empty(); AZTEC_MAX_EPOCH_DURATION],
blob_public_inputs: BlockBlobPublicInputs::empty(),
}
}
}
Expand Down Expand Up @@ -113,9 +113,7 @@ impl Serialize<BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH> for BlockRootOrBl
fields.push(self.vk_tree_root);
fields.push(self.protocol_contract_tree_root);
fields.push(self.prover_id as Field);
for i in 0..AZTEC_MAX_EPOCH_DURATION {
fields.extend_from_array(self.blob_public_inputs[i].serialize());
}
fields.extend_from_array(self.blob_public_inputs.serialize());
assert_eq(fields.len(), BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH);

fields.storage()
Expand All @@ -141,10 +139,7 @@ impl Deserialize<BLOCK_ROOT_OR_BLOCK_MERGE_PUBLIC_INPUTS_LENGTH> for BlockRootOr
vk_tree_root: reader.read(),
protocol_contract_tree_root: reader.read(),
prover_id: reader.read(),
blob_public_inputs: reader.read_struct_array(
BlockBlobPublicInputs::deserialize,
[BlockBlobPublicInputs::empty(); AZTEC_MAX_EPOCH_DURATION],
),
blob_public_inputs: reader.read_struct(BlockBlobPublicInputs::deserialize),
};

reader.finish();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
use blob::blob_public_inputs::BlobCommitment;
use blob::blob_batching_public_inputs::{
BlobAccumulatorPublicInputs, BLSPoint, FinalBlobBatchingChallenges,
};
use parity_lib::root::root_rollup_parity_input::RootRollupParityInput;
use types::{
block_header::BlockHeader,
Expand All @@ -23,17 +25,29 @@ pub struct BlockRootRollupData {
// Its hash is checked against the previous archive.
pub previous_block_header: BlockHeader,

// <-- NOTE: start_blob_accumulator and final_blob_challenges exist here and not BlockRootRollupBlobData
// so we can inject easily into EmptyBlockRootRollupInputs:

// The current blob accumulation state across the epoch.
// Injected here and checked vs the previous end state in each block merge and root rollup circuit:
pub start_blob_accumulator: BlobAccumulatorPublicInputs,
// Finalized challenges z and gamma for performing blob batching. Shared value across the epoch
// Precompjuted, injected here, and confirmed in the root rollup circuit:
pub final_blob_challenges: FinalBlobBatchingChallenges,

// -->

// TODO(#7346): Temporarily added prover_id while we verify block-root proofs on L1
pub prover_id: Field,
}

pub struct BlockRootRollupBlobData {
// Fields for blob verification made of all tx effects in this block
// (will likely change to be accumulated and sent up to the final root)
pub blobs_fields: [Field; FIELDS_PER_BLOB * BLOBS_PER_BLOCK],
// see blob/src/blob.nr -> evaluate_blob() - these are used for creating the challenge z
pub blob_commitments: [BlobCommitment; BLOBS_PER_BLOCK],
// see blob/src/blob.nr -> evaluate_blob() - these are used for creating each blob's challenge z_i
pub blob_commitments: [BLSPoint; BLOBS_PER_BLOCK],
// Flat sha256 hash of the EVM blob hashes, can be injected here as the contract checks its validity vs the blob_public_inputs
// NB: to fit it into a field, we truncate to 31 bytes
// TODO(MW): Replace with v?
pub blobs_hash: Field,
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use dep::types::{
},
traits::Empty,
};
use blob::blob_batching_public_inputs::BlockBlobPublicInputs;

global ALLOWED_PREVIOUS_CIRCUITS: [u32; 4] = [
BLOCK_ROOT_ROLLUP_INDEX,
Expand Down Expand Up @@ -54,11 +55,11 @@ impl BlockMergeRollupInputs {

let fees = components::accumulate_blocks_fees(left, right);

// TODO: We need to eventually accumulate blob info to a single BlobPublicInputs instance which will verify multiple blobs in one call
// For now, we do them individually
// How we accumulate is being worked on by @Mike
// let blob_public_inputs = left.blob_public_inputs.accumulate(right.blob_public_inputs);
let blob_public_inputs = components::accumulate_blob_public_inputs(left, right);
let blob_public_inputs = BlockBlobPublicInputs {
start_blob_accumulator: left.blob_public_inputs.start_blob_accumulator,
end_blob_accumulator: right.blob_public_inputs.end_blob_accumulator,
final_blob_challenges: left.blob_public_inputs.final_blob_challenges,
};

// TODO(MW): Batching here will consist of checks:
// - left.end_blob_accumulator == right.start_blob_accumulator
Expand Down Expand Up @@ -107,6 +108,14 @@ mod tests {
let _output = inputs.block_merge_rollup_circuit();
}

#[test(should_fail_with = "input blocks have different epoch blob challenges")]
fn blob_different_challenges_fails() {
let mut inputs = default_block_merge_rollup_inputs();
inputs.previous_rollup_data[0].block_root_or_block_merge_public_inputs.blob_public_inputs.final_blob_challenges.z +=
1;
let _output = inputs.block_merge_rollup_circuit();
}

#[test(should_fail_with = "input blocks have different archive tree snapshots")]
fn previous_rollups_dont_follow_archive() {
let mut inputs = default_block_merge_rollup_inputs();
Expand All @@ -126,6 +135,14 @@ mod tests {
let _output = inputs.block_merge_rollup_circuit();
}

#[test(should_fail_with = "input block blob accumulators do not follow on from each other")]
fn previous_rollups_dont_follow_blob_accumulator() {
let mut inputs = default_block_merge_rollup_inputs();
inputs.previous_rollup_data[0].block_root_or_block_merge_public_inputs.blob_public_inputs.end_blob_accumulator.z_acc +=
1;
let _output = inputs.block_merge_rollup_circuit();
}

#[test]
fn block_fees_are_accumulated() {
let mut inputs = default_block_merge_rollup_inputs();
Expand Down Expand Up @@ -156,16 +173,18 @@ mod tests {
let outputs = inputs.block_merge_rollup_circuit();

assert_eq(
outputs.blob_public_inputs[0],
outputs.blob_public_inputs.start_blob_accumulator,
inputs.previous_rollup_data[0]
.block_root_or_block_merge_public_inputs
.blob_public_inputs[0],
.blob_public_inputs
.start_blob_accumulator,
);
assert_eq(
outputs.blob_public_inputs[1],
outputs.blob_public_inputs.end_blob_accumulator,
inputs.previous_rollup_data[1]
.block_root_or_block_merge_public_inputs
.blob_public_inputs[0],
.blob_public_inputs
.end_blob_accumulator,
);
}

Expand Down
Loading
Loading