Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Typings generator with generics #6235

Merged
merged 12 commits into from
May 7, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ impl PublicKernelTailCircuitPrivateInputs {
hint.leaf_slot,
exists_in_tree,
hint.leaf_preimage,
MembershipWitness { leaf_index: hint.membership_witness.leaf_index, sibling_path: hint.membership_witness.sibling_path },
hint.membership_witness,
public_data_tree_root
);
}
Expand Down Expand Up @@ -115,19 +115,20 @@ mod tests {
use dep::types::{
abis::{
kernel_circuit_public_inputs::KernelCircuitPublicInputs, kernel_data::PublicKernelData,
nullifier_leaf_preimage::NullifierLeafPreimage, membership_witness::PublicDataMembershipWitness
nullifier_leaf_preimage::NullifierLeafPreimage
},
constants::{
MAX_NEW_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PUBLIC_DATA_HINTS,
MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT,
NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT, PUBLIC_DATA_SUBTREE_HEIGHT,
PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_TREE_HEIGHT, MAX_ENCRYPTED_LOGS_PER_TX,
MAX_UNENCRYPTED_LOGS_PER_TX,
MAX_UNENCRYPTED_LOGS_PER_TX
},
hash::{silo_nullifier, sha256_to_field},
public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage,
tests::{fixture_builder::FixtureBuilder, merkle_tree_utils::NonEmptyMerkleTree},
partial_state_reference::PartialStateReference, utils::arrays::array_merge
partial_state_reference::PartialStateReference, utils::arrays::array_merge,
merkle_tree::MembershipWitness
};

fn build_nullifier_tree<N>() -> NonEmptyMerkleTree<MAX_NEW_NULLIFIERS_PER_TX, NULLIFIER_TREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT> {
Expand Down Expand Up @@ -264,7 +265,7 @@ mod tests {

pub fn add_public_data_hint_for_settled_public_data(&mut self, leaf_index: u64) {
let leaf_preimage = get_settled_public_data_leaves()[leaf_index];
let membership_witness = PublicDataMembershipWitness { leaf_index: leaf_index as Field, sibling_path: self.public_data_tree.get_sibling_path(leaf_index) };
let membership_witness = MembershipWitness { leaf_index: leaf_index as Field, sibling_path: self.public_data_tree.get_sibling_path(leaf_index) };
let hint = PublicDataHint {
leaf_slot: leaf_preimage.slot,
value: leaf_preimage.value,
Expand All @@ -277,7 +278,7 @@ mod tests {

pub fn add_public_data_hint_for_non_existent_public_data(&mut self, leaf_slot: Field, low_leaf_index: u64) {
let leaf_preimage = get_settled_public_data_leaves()[low_leaf_index];
let membership_witness = PublicDataMembershipWitness {
let membership_witness = MembershipWitness {
leaf_index: low_leaf_index as Field,
sibling_path: self.public_data_tree.get_sibling_path(low_leaf_index)
};
Expand Down Expand Up @@ -360,18 +361,11 @@ mod tests {
public_inputs.end.unencrypted_log_preimages_length, unencrypted_log_preimages_length + prev_unencrypted_log_preimages_length
);

let hash_bytes: [u8; MAX_ENCRYPTED_LOGS_PER_TX * 32] = prev_encrypted_logs_hash
.to_be_bytes(32)
.append(&[0; MAX_ENCRYPTED_LOGS_PER_TX * 32 - 32])
.as_array();
let hash_bytes: [u8; MAX_ENCRYPTED_LOGS_PER_TX * 32] = prev_encrypted_logs_hash.to_be_bytes(32).append(&[0; MAX_ENCRYPTED_LOGS_PER_TX * 32 - 32]).as_array();
let expected_encrypted_logs_hash = sha256_to_field(hash_bytes);
assert_eq(public_inputs.end.encrypted_logs_hash, expected_encrypted_logs_hash);

let hash_bytes: [u8; MAX_UNENCRYPTED_LOGS_PER_TX * 32] = prev_unencrypted_logs_hash
.to_be_bytes(32)
.append(unencrypted_logs_hash.to_be_bytes(32))
.append(&[0; MAX_UNENCRYPTED_LOGS_PER_TX * 32 - 64])
.as_array();
let hash_bytes: [u8; MAX_UNENCRYPTED_LOGS_PER_TX * 32] = prev_unencrypted_logs_hash.to_be_bytes(32).append(unencrypted_logs_hash.to_be_bytes(32)).append(&[0; MAX_UNENCRYPTED_LOGS_PER_TX * 32 - 64]).as_array();
let expected_unencrypted_logs_hash = sha256_to_field(hash_bytes);
assert_eq(public_inputs.end.unencrypted_logs_hash, expected_unencrypted_logs_hash);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// This will be moved to a separate Read Request Reset Circuit.
use crate::reset::read_request::{PendingReadHint, ReadRequestStatus, ReadValueHint, SettledReadHint};
use dep::types::{
abis::{membership_witness::NoteHashMembershipWitness, note_hash_leaf_preimage::NoteHashLeafPreimage},
abis::{note_hash_leaf_preimage::NoteHashLeafPreimage},
constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_TX, NOTE_HASH_TREE_HEIGHT},
merkle_tree::MembershipWitness
};

struct NoteHashSettledReadHint {
read_request_index: u64,
membership_witness: NoteHashMembershipWitness, // Should be MembershipWitness<NOTE_HASH_TREE_HEIGHT> when we can handle generics when converting to ts types.
membership_witness: MembershipWitness<NOTE_HASH_TREE_HEIGHT>,
leaf_preimage: NoteHashLeafPreimage,
}

Expand All @@ -20,7 +20,7 @@ impl ReadValueHint for NoteHashSettledReadHint {

impl SettledReadHint<NOTE_HASH_TREE_HEIGHT, NoteHashLeafPreimage> for NoteHashSettledReadHint {
fn membership_witness(self) -> MembershipWitness<NOTE_HASH_TREE_HEIGHT> {
MembershipWitness { leaf_index: self.membership_witness.leaf_index, sibling_path: self.membership_witness.sibling_path }
self.membership_witness
}

fn leaf_preimage(self) -> NoteHashLeafPreimage {
Expand All @@ -30,7 +30,7 @@ impl SettledReadHint<NOTE_HASH_TREE_HEIGHT, NoteHashLeafPreimage> for NoteHashSe
fn nada(read_request_len: u64) -> Self {
NoteHashSettledReadHint {
read_request_index: read_request_len,
membership_witness: NoteHashMembershipWitness::empty(),
membership_witness: MembershipWitness::empty(),
leaf_preimage: NoteHashLeafPreimage::empty()
}
}
Expand All @@ -46,10 +46,10 @@ mod tests {
use crate::note_hash_read_request_reset::NoteHashSettledReadHint;
use crate::reset::read_request::{PendingReadHint, ReadRequestState, ReadRequestStatus, reset_read_requests};
use dep::types::{
address::AztecAddress,
address::AztecAddress, merkle_tree::MembershipWitness,
abis::{
membership_witness::NoteHashMembershipWitness, note_hash::NoteHashContext,
note_hash_leaf_preimage::NoteHashLeafPreimage, read_request::ReadRequestContext
note_hash::NoteHashContext, note_hash_leaf_preimage::NoteHashLeafPreimage,
read_request::ReadRequestContext
},
constants::NOTE_HASH_TREE_HEIGHT, hash::silo_note_hash,
tests::merkle_tree_utils::NonEmptyMerkleTree
Expand Down Expand Up @@ -108,12 +108,12 @@ mod tests {
let hints = [
NoteHashSettledReadHint {
read_request_index: 0,
membership_witness: NoteHashMembershipWitness { leaf_index: 1, sibling_path: tree.get_sibling_path(1) },
membership_witness: MembershipWitness { leaf_index: 1, sibling_path: tree.get_sibling_path(1) },
leaf_preimage: leaf_preimages[1]
},
NoteHashSettledReadHint {
read_request_index: 3,
membership_witness: NoteHashMembershipWitness { leaf_index: 0, sibling_path: tree.get_sibling_path(0) },
membership_witness: MembershipWitness { leaf_index: 0, sibling_path: tree.get_sibling_path(0) },
leaf_preimage: leaf_preimages[0]
}
];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use crate::reset::{mutable_data_read_request::LeafDataHint};
use dep::types::{
abis::membership_witness::PublicDataMembershipWitness,
public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage
public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage, merkle_tree::MembershipWitness,
constants::PUBLIC_DATA_TREE_HEIGHT
};

struct PublicDataHint {
leaf_slot: Field,
value: Field,
override_counter: u32,
membership_witness: PublicDataMembershipWitness, // Should be MembershipWitness<PUBLIC_DATA_TREE_HEIGHT> when we can handle generics when converting to ts types.
membership_witness: MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>, // Should be MembershipWitness<PUBLIC_DATA_TREE_HEIGHT> when we can handle generics when converting to ts types.
leaf_preimage: PublicDataTreeLeafPreimage,
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
use crate::abis::base_or_merge_rollup_public_inputs::BaseOrMergeRollupPublicInputs;
use dep::types::{
abis::membership_witness::VKMembershipWitness,
constants::ROLLUP_VK_TREE_HEIGHT,
mocked::{Proof, VerificationKey},
traits::Empty
constants::ROLLUP_VK_TREE_HEIGHT, mocked::{Proof, VerificationKey}, traits::Empty,
merkle_tree::MembershipWitness
};

struct PreviousRollupData{
base_or_merge_rollup_public_inputs : BaseOrMergeRollupPublicInputs,
proof : Proof,
vk : VerificationKey,
vk_index : u32,
vk_sibling_path : VKMembershipWitness,
vk_sibling_path : MembershipWitness<ROLLUP_VK_TREE_HEIGHT>,
}

impl Empty for PreviousRollupData {
Expand All @@ -21,7 +19,7 @@ impl Empty for PreviousRollupData {
proof : Proof::empty(),
vk : VerificationKey::empty(),
vk_index : 0 as u32,
vk_sibling_path : VKMembershipWitness::empty(),
vk_sibling_path : MembershipWitness::empty(),
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,17 @@ use crate::{
use dep::types::{
hash::sha256_to_field,
abis::{
append_only_tree_snapshot::AppendOnlyTreeSnapshot,
membership_witness::{ArchiveRootMembershipWitness, NullifierMembershipWitness, PublicDataMembershipWitness},
nullifier_leaf_preimage::NullifierLeafPreimage, public_data_update_request::PublicDataUpdateRequest,
public_data_read::PublicDataRead, kernel_data::KernelData
append_only_tree_snapshot::AppendOnlyTreeSnapshot, nullifier_leaf_preimage::NullifierLeafPreimage,
public_data_update_request::PublicDataUpdateRequest, public_data_read::PublicDataRead,
kernel_data::KernelData
},
constants::{
NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH,
PUBLIC_DATA_TREE_HEIGHT, NOTE_HASH_SUBTREE_HEIGHT, MAX_NEW_NOTE_HASHES_PER_TX,
MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_PUBLIC_DATA_READS_PER_TX, MAX_NEW_NULLIFIERS_PER_TX,
NUM_ENCRYPTED_LOGS_HASHES_PER_TX, MAX_NEW_L2_TO_L1_MSGS_PER_TX, NUM_UNENCRYPTED_LOGS_HASHES_PER_TX,
NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH,
PUBLIC_DATA_SUBTREE_HEIGHT
PUBLIC_DATA_SUBTREE_HEIGHT, ARCHIVE_HEIGHT
},
merkle_tree::{
append_only_tree, assert_check_membership, calculate_empty_tree_root, calculate_subtree_root,
Expand All @@ -43,9 +42,9 @@ struct BaseRollupInputs {
sorted_public_data_writes: [PublicDataTreeLeaf; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
sorted_public_data_writes_indexes: [u64; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_preimages: [PublicDataTreeLeafPreimage; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_witnesses: [PublicDataMembershipWitness; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_witnesses: [MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],

archive_root_membership_witness: ArchiveRootMembershipWitness,
archive_root_membership_witness: MembershipWitness<ARCHIVE_HEIGHT>,

constants: ConstantRollupData,
}
Expand Down Expand Up @@ -148,7 +147,7 @@ impl BaseRollupInputs {
self.state_diff_hints.nullifier_subtree_sibling_path,
self.state_diff_hints.nullifier_predecessor_preimages,
self.state_diff_hints.nullifier_predecessor_membership_witnesses.map(
|witness: NullifierMembershipWitness| {
|witness: MembershipWitness<NULLIFIER_TREE_HEIGHT>| {
MembershipWitness {
leaf_index: witness.leaf_index,
sibling_path: witness.sibling_path,
Expand Down Expand Up @@ -266,7 +265,7 @@ fn insert_public_data_update_requests(
sorted_public_data_writes: [PublicDataTreeLeaf; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
sorted_public_data_writes_indexes: [u64; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_preimages: [PublicDataTreeLeafPreimage; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_witnesses: [PublicDataMembershipWitness; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
low_public_data_writes_witnesses: [MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX],
public_data_writes_subtree_sibling_path: [Field; PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH]
) -> AppendOnlyTreeSnapshot {
indexed_tree::batch_insert(
Expand All @@ -277,7 +276,7 @@ fn insert_public_data_update_requests(
public_data_writes_subtree_sibling_path,
low_public_data_writes_preimages,
low_public_data_writes_witnesses.map(
|witness: PublicDataMembershipWitness| {
|witness: MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>| {
MembershipWitness {
leaf_index: witness.leaf_index,
sibling_path: witness.sibling_path,
Expand Down Expand Up @@ -369,12 +368,11 @@ mod tests {
use dep::types::{
abis::{
append_only_tree_snapshot::AppendOnlyTreeSnapshot,
membership_witness::{ArchiveRootMembershipWitness, NullifierMembershipWitness, PublicDataMembershipWitness},
nullifier_leaf_preimage::NullifierLeafPreimage, public_data_read::PublicDataRead,
public_data_update_request::PublicDataUpdateRequest, kernel_data::KernelData,
side_effect::SideEffect, accumulated_data::CombinedAccumulatedData
},
address::{AztecAddress, EthAddress},
merkle_tree::MembershipWitness, address::{AztecAddress, EthAddress},
constants::{
ARCHIVE_HEIGHT, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
MAX_NEW_NOTE_HASHES_PER_TX, MAX_NEW_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH,
Expand Down Expand Up @@ -409,12 +407,12 @@ mod tests {
snapshot: AppendOnlyTreeSnapshot,
public_data_writes: BoundedVec<(u64, PublicDataTreeLeaf), 2>,
mut pre_existing_public_data: [PublicDataTreeLeafPreimage; EXISTING_LEAVES]
) -> ([Field; 35], [PublicDataTreeLeaf; 32], [u64; 32], [PublicDataTreeLeafPreimage; 32], [PublicDataMembershipWitness; 32], [PublicDataTreeLeafPreimage; EXISTING_LEAVES]) {
) -> ([Field; 35], [PublicDataTreeLeaf; 32], [u64; 32], [PublicDataTreeLeafPreimage; 32], [MembershipWitness<PUBLIC_DATA_TREE_HEIGHT>; 32], [PublicDataTreeLeafPreimage; EXISTING_LEAVES]) {
let mut subtree_path = [0; PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH];
let mut sorted_public_data_writes = [PublicDataTreeLeaf::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];
let mut sorted_public_data_writes_indexes = [0 as u64; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];
let mut low_public_data_writes_preimages = [PublicDataTreeLeafPreimage::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];
let mut low_public_data_writes_witnesses = [PublicDataMembershipWitness::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];
let mut low_public_data_writes_witnesses = [MembershipWitness::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];
let mut new_subtree = [PublicDataTreeLeafPreimage::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX];

for i in 0..MAX_PUBLIC_DATA_WRITES_PER_TEST {
Expand Down Expand Up @@ -458,7 +456,7 @@ mod tests {
};
}
low_public_data_writes_preimages[i] = low_leaf;
low_public_data_writes_witnesses[i] = PublicDataMembershipWitness {
low_public_data_writes_witnesses[i] = MembershipWitness {
leaf_index: low_leaf_index as Field,
sibling_path: public_data_tree.get_sibling_path(low_leaf_index)
};
Expand Down Expand Up @@ -526,9 +524,9 @@ mod tests {
nullifier_tree: &mut NonEmptyMerkleTree<MAX_NEW_NULLIFIERS_PER_TX, NULLIFIER_TREE_HEIGHT, NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_SUBTREE_HEIGHT>,
kernel_data: &mut KernelData,
start_nullifier_tree_snapshot: AppendOnlyTreeSnapshot
) -> ([NullifierLeafPreimage; MAX_NEW_NULLIFIERS_PER_TX], [NullifierMembershipWitness; MAX_NEW_NULLIFIERS_PER_TX], [Field; MAX_NEW_NULLIFIERS_PER_TX], [u64; MAX_NEW_NULLIFIERS_PER_TX]) {
) -> ([NullifierLeafPreimage; MAX_NEW_NULLIFIERS_PER_TX], [MembershipWitness<NULLIFIER_TREE_HEIGHT>; MAX_NEW_NULLIFIERS_PER_TX], [Field; MAX_NEW_NULLIFIERS_PER_TX], [u64; MAX_NEW_NULLIFIERS_PER_TX]) {
let mut nullifier_predecessor_preimages = [NullifierLeafPreimage::empty(); MAX_NEW_NULLIFIERS_PER_TX];
let mut low_nullifier_membership_witness = [NullifierMembershipWitness::empty(); MAX_NEW_NULLIFIERS_PER_TX];
let mut low_nullifier_membership_witness = [MembershipWitness::empty(); MAX_NEW_NULLIFIERS_PER_TX];

let sorted_new_nullifier_tuples = sort_high_to_low(
self.new_nullifiers.storage.map(|insertion: NullifierInsertion| insertion.value),
Expand Down Expand Up @@ -562,7 +560,7 @@ mod tests {

let mut low_preimage = pre_existing_nullifiers[low_index];
nullifier_predecessor_preimages[i] = low_preimage;
low_nullifier_membership_witness[i] = NullifierMembershipWitness {
low_nullifier_membership_witness[i] = MembershipWitness {
leaf_index: low_index as Field,
sibling_path: nullifier_tree.get_sibling_path(low_index)
};
Expand Down Expand Up @@ -687,7 +685,7 @@ mod tests {
sorted_public_data_writes_indexes,
low_public_data_writes_preimages,
low_public_data_writes_witnesses,
archive_root_membership_witness: ArchiveRootMembershipWitness { leaf_index: 0, sibling_path: start_archive.get_sibling_path(0) },
archive_root_membership_witness: MembershipWitness { leaf_index: 0, sibling_path: start_archive.get_sibling_path(0) },
constants: self.constants
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
use dep::types::{
abis::{membership_witness::NullifierMembershipWitness, nullifier_leaf_preimage::NullifierLeafPreimage},
abis::{nullifier_leaf_preimage::NullifierLeafPreimage},
constants::{
MAX_NEW_NULLIFIERS_PER_TX, NOTE_HASH_SUBTREE_SIBLING_PATH_LENGTH,
NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH
}
NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_SUBTREE_SIBLING_PATH_LENGTH,
NULLIFIER_TREE_HEIGHT
},
merkle_tree::MembershipWitness
};

struct StateDiffHints {
nullifier_predecessor_preimages: [NullifierLeafPreimage; MAX_NEW_NULLIFIERS_PER_TX],
nullifier_predecessor_membership_witnesses: [NullifierMembershipWitness; MAX_NEW_NULLIFIERS_PER_TX],
nullifier_predecessor_membership_witnesses: [MembershipWitness<NULLIFIER_TREE_HEIGHT>; MAX_NEW_NULLIFIERS_PER_TX],

sorted_nullifiers: [Field; MAX_NEW_NULLIFIERS_PER_TX],
sorted_nullifier_indexes: [u64; MAX_NEW_NULLIFIERS_PER_TX],
Expand Down
3 changes: 0 additions & 3 deletions noir-projects/noir-protocol-circuits/crates/types/src/abis.nr
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ mod function_selector;
mod function_data;

mod global_variables;

mod membership_witness;

mod note_hash_leaf_preimage;
mod nullifier_leaf_preimage;

Expand Down
Loading
Loading