diff --git a/circuits/cpp/src/aztec3/circuits/abis/combined_accumulated_data.hpp b/circuits/cpp/src/aztec3/circuits/abis/combined_accumulated_data.hpp index 5e47215404e..e3e2800a69c 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/combined_accumulated_data.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/combined_accumulated_data.hpp @@ -31,8 +31,6 @@ template struct CombinedAccumulatedData { AggregationObject aggregation_object{}; std::array read_requests{}; - std::array, MAX_READ_REQUESTS_PER_TX> - read_request_membership_witnesses{}; std::array new_commitments{}; std::array new_nullifiers{}; @@ -62,7 +60,6 @@ template struct CombinedAccumulatedData { // for serialization, update with new fields MSGPACK_FIELDS(aggregation_object, read_requests, - read_request_membership_witnesses, new_commitments, new_nullifiers, nullified_commitments, @@ -79,18 +76,7 @@ template struct CombinedAccumulatedData { public_data_reads); boolean operator==(CombinedAccumulatedData const& other) const { - return aggregation_object == other.aggregation_object && read_requests == other.read_requests && - read_request_membership_witnesses == other.read_request_membership_witnesses && - new_commitments == other.new_commitments && new_nullifiers == other.new_nullifiers && - nullified_commitments == other.nullified_commitments && private_call_stack == other.private_call_stack && - public_call_stack == other.public_call_stack && new_l2_to_l1_msgs == other.new_l2_to_l1_msgs && - encrypted_logs_hash == other.encrypted_logs_hash && - unencrypted_logs_hash == other.unencrypted_logs_hash && - encrypted_log_preimages_length == other.encrypted_log_preimages_length && - unencrypted_log_preimages_length == other.unencrypted_log_preimages_length && - new_contracts == other.new_contracts && optionally_revealed_data == other.optionally_revealed_data && - public_data_update_requests == other.public_data_update_requests && - public_data_reads == other.public_data_reads; + return msgpack_derived_equals(*this, other); }; template CombinedAccumulatedData> to_circuit_type(Builder& builder) const @@ -112,7 +98,6 @@ template struct CombinedAccumulatedData { }, to_ct(read_requests), - map(read_request_membership_witnesses, to_circuit_type), to_ct(new_commitments), to_ct(new_nullifiers), @@ -153,7 +138,6 @@ template struct CombinedAccumulatedData { }, to_nt(read_requests), - map(read_request_membership_witnesses, to_native_type), to_nt(new_commitments), to_nt(new_nullifiers), @@ -184,7 +168,6 @@ template struct CombinedAccumulatedData { aggregation_object.add_proof_outputs_as_public_inputs(); set_array_public(read_requests); - set_array_public(read_request_membership_witnesses); set_array_public(new_commitments); set_array_public(new_nullifiers); @@ -211,15 +194,6 @@ template struct CombinedAccumulatedData { } } - template - void set_array_public(std::array, SIZE>& arr) - { - static_assert(!(std::is_same::value)); - for (auto& e : arr) { - e.set_public(); - } - } - template void set_array_public(std::array, SIZE>& arr) { static_assert(!(std::is_same::value)); diff --git a/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_init.hpp b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_init.hpp index 447f85a7d54..d21935e3217 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_init.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_init.hpp @@ -23,7 +23,7 @@ template struct PrivateKernelInputsInit { MSGPACK_FIELDS(tx_request, private_call); boolean operator==(PrivateKernelInputsInit const& other) const { - return tx_request == other.tx_request && private_call == other.private_call; + return msgpack_derived_equals(*this, other); }; template PrivateKernelInputsInit> to_circuit_type(Builder& builder) const diff --git a/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp index 759a9dad643..d6b5217bbfa 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp @@ -25,7 +25,7 @@ template struct PrivateKernelInputsInner { MSGPACK_FIELDS(previous_kernel, private_call); boolean operator==(PrivateKernelInputsInner const& other) const { - return previous_kernel == other.previous_kernel && private_call == other.private_call; + return msgpack_derived_equals(*this, other); }; template PrivateKernelInputsInner> to_circuit_type(Builder& builder) const diff --git a/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp new file mode 100644 index 00000000000..890da885bbe --- /dev/null +++ b/circuits/cpp/src/aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include "private_call_data.hpp" +#include "../previous_kernel_data.hpp" + +#include "aztec3/utils/types/circuit_types.hpp" +#include "aztec3/utils/types/native_types.hpp" + +#include + +namespace aztec3::circuits::abis::private_kernel { + +using aztec3::utils::types::CircuitTypes; +using aztec3::utils::types::NativeTypes; +using std::is_same; + +template struct PrivateKernelInputsOrdering { + using fr = typename NCT::fr; + using boolean = typename NCT::boolean; + + PreviousKernelData previous_kernel{}; + + std::array hint_to_commitments{}; + + // For serialization, update with new fields + MSGPACK_FIELDS(previous_kernel, hint_to_commitments); + boolean operator==(PrivateKernelInputsOrdering const& other) const + { + return msgpack_derived_equals(*this, other); + }; + + template + PrivateKernelInputsOrdering> to_circuit_type(Builder& builder) const + { + static_assert((std::is_same::value)); + + PrivateKernelInputsOrdering> private_inputs = { + previous_kernel.to_circuit_type(builder), + hint_to_commitments.to_circuit_type(builder), + }; + + return private_inputs; + }; +}; + +} // namespace aztec3::circuits::abis::private_kernel diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/c_bind.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/c_bind.cpp index edeff37235f..4aa054e3986 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/c_bind.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/c_bind.cpp @@ -5,6 +5,8 @@ #include "aztec3/circuits/abis/kernel_circuit_public_inputs.hpp" #include "aztec3/circuits/abis/previous_kernel_data.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp" #include "aztec3/constants.hpp" #include @@ -20,6 +22,7 @@ using aztec3::circuits::abis::TxRequest; using aztec3::circuits::abis::private_kernel::PrivateCallData; using aztec3::circuits::abis::private_kernel::PrivateKernelInputsInit; using aztec3::circuits::abis::private_kernel::PrivateKernelInputsInner; +using aztec3::circuits::abis::private_kernel::PrivateKernelInputsOrdering; using aztec3::circuits::kernel::private_kernel::native_private_kernel_circuit_initial; using aztec3::circuits::kernel::private_kernel::native_private_kernel_circuit_inner; using aztec3::circuits::kernel::private_kernel::native_private_kernel_circuit_ordering; @@ -123,8 +126,8 @@ WASM_EXPORT uint8_t* private_kernel__sim_inner(uint8_t const* previous_kernel_bu return builder.alloc_and_serialize_first_failure(); } -CBIND(private_kernel__sim_ordering, [](PreviousKernelData previous_kernel) { +CBIND(private_kernel__sim_ordering, [](PrivateKernelInputsOrdering private_inputs) { DummyCircuitBuilder builder = DummyCircuitBuilder("private_kernel__sim_ordering"); - auto const& public_inputs = native_private_kernel_circuit_ordering(builder, previous_kernel); + auto const& public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); return builder.result_or_error(public_inputs); }); diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp index 61c45e5c70c..c88ed739a08 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp @@ -72,16 +72,6 @@ void common_validate_read_requests(DummyBuilder& builder, std::array, MAX_READ_REQUESTS_PER_CALL> const& read_request_membership_witnesses) { - // Arrays read_request and read_request_membership_witnesses must be of the same length. Otherwise, - // we might get into trouble when accumulating them in public_inputs.end - builder.do_assert(array_length(read_requests) == array_length(read_request_membership_witnesses), - format("[private kernel circuit] mismatch array length between read_requests and witnesses - " - "read_requests length: ", - array_length(read_requests), - " witnesses length: ", - array_length(read_request_membership_witnesses)), - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); - // membership witnesses must resolve to the same private data root // for every request in all kernel iterations for (size_t rr_idx = 0; rr_idx < aztec3::MAX_READ_REQUESTS_PER_CALL; rr_idx++) { @@ -124,39 +114,6 @@ void common_validate_read_requests(DummyBuilder& builder, } } - -/** - * @brief Ensure that all read requests from previous kernel are transient. - * - * @param builder - * @param read_requests from previous kernel's public inputs - * @param read_request_membership_witnesses from previous kernel's public inputs - */ -void common_validate_previous_kernel_read_requests( - DummyBuilder& builder, - std::array const& read_requests, - std::array, MAX_READ_REQUESTS_PER_TX> const& - read_request_membership_witnesses) -{ - for (size_t rr_idx = 0; rr_idx < MAX_READ_REQUESTS_PER_TX; rr_idx++) { - const auto& read_request = read_requests[rr_idx]; - const auto& witness = read_request_membership_witnesses[rr_idx]; - builder.do_assert(read_request == 0 || witness.is_transient, // rr == 0 means empty - format("Previous kernel's read request[", - rr_idx, - "] is not transient, but kernel should only forward transient reads.", - "\n\tread_request: ", - read_request, - "\n\tleaf_index: ", - witness.leaf_index, - "\n\tis_transient: ", - witness.is_transient, - "\n\thint_to_commitment: ", - witness.hint_to_commitment), - CircuitErrorCode::PRIVATE_KERNEL__UNRESOLVED_NON_TRANSIENT_READ_REQUEST); - } -} - void common_update_end_values(DummyBuilder& builder, PrivateCallData const& private_call, KernelCircuitPublicInputs& public_inputs) @@ -198,11 +155,6 @@ void common_update_end_values(DummyBuilder& builder, siloed_read_request, format(PRIVATE_KERNEL_CIRCUIT_ERROR_MESSAGE_BEGINNING, "too many transient read requests in one tx")); - array_push(builder, - public_inputs.end.read_request_membership_witnesses, - witness, - format(PRIVATE_KERNEL_CIRCUIT_ERROR_MESSAGE_BEGINNING, - "too many transient read request membership witnesses in one tx")); } } } diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/common.hpp b/circuits/cpp/src/aztec3/circuits/kernel/private/common.hpp index fd125983aa4..52e26279d7b 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/common.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/common.hpp @@ -32,12 +32,6 @@ void common_validate_read_requests(DummyBuilder& builder, std::array, MAX_READ_REQUESTS_PER_CALL> const& read_request_membership_witnesses); -void common_validate_previous_kernel_read_requests( - DummyBuilder& builder, - std::array const& read_requests, - std::array, MAX_READ_REQUESTS_PER_TX> const& - read_request_membership_witnesses); - void common_update_end_values(DummyBuilder& builder, PrivateCallData const& private_call, KernelCircuitPublicInputs& public_inputs); diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit.test.cpp index 0ac6741cbad..14fe520d7dc 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit.test.cpp @@ -1,7 +1,12 @@ #include "testing_harness.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_init.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp" +#include "aztec3/circuits/abis/read_request_membership_witness.hpp" #include "aztec3/circuits/apps/test_apps/escrow/deposit.hpp" #include "aztec3/circuits/hash.hpp" +#include "aztec3/circuits/kernel/private/common.hpp" +#include "aztec3/circuits/kernel/private/init.hpp" #include "aztec3/constants.hpp" #include "aztec3/utils/circuit_errors.hpp" @@ -17,14 +22,15 @@ namespace aztec3::circuits::kernel::private_kernel { using aztec3::circuits::apps::test_apps::escrow::deposit; +using abis::private_kernel::PrivateKernelInputsOrdering; using aztec3::circuits::kernel::private_kernel::testing_harness::do_private_call_get_kernel_inputs_init; using aztec3::circuits::kernel::private_kernel::testing_harness::do_private_call_get_kernel_inputs_inner; using aztec3::utils::array_length; using aztec3::utils::CircuitErrorCode; -// TODO(https://github.com/AztecProtocol/aztec-packages/issues/892): test expected kernel failures if transient reads -// (or their hints) don't match +// TODO(https://github.com/AztecProtocol/aztec-packages/issues/892): test expected kernel failures if transient +// reads (or their hints) don't match // TODO(https://github.com/AztecProtocol/aztec-packages/issues/836): test expected kernel failures if nullifiers (or // their hints) don't match @@ -33,9 +39,8 @@ using aztec3::utils::CircuitErrorCode; **************************************************************/ -// NOTE: *DO NOT* call fr constructors in static initializers and assign them to constants. This will fail. Instead, use -// lazy initialization or functions. Lambdas were introduced here. -// amount = 5, asset_id = 1, memo = 999 +// NOTE: *DO NOT* call fr constructors in static initializers and assign them to constants. This will fail. Instead, +// use lazy initialization or functions. Lambdas were introduced here. amount = 5, asset_id = 1, memo = 999 const auto standard_test_args = [] { return std::vector{ NT::fr(5), NT::fr(1), NT::fr(999) }; }; class native_private_kernel_tests : public ::testing::Test { protected: @@ -54,6 +59,9 @@ TEST_F(native_private_kernel_tests, native_accumulate_transient_read_requests) private_inputs_init.private_call.call_stack_item.public_inputs.read_requests[0] = fr(23); private_inputs_init.private_call.read_request_membership_witnesses[0].is_transient = true; + std::array hint_to_commitments{}; + hint_to_commitments[0] = private_inputs_init.private_call.read_request_membership_witnesses[0].hint_to_commitment; + DummyBuilder builder = DummyBuilder("native_private_kernel_tests__native_accumulate_transient_read_requests"); auto public_inputs = native_private_kernel_circuit_initial(builder, private_inputs_init); @@ -61,7 +69,6 @@ TEST_F(native_private_kernel_tests, native_accumulate_transient_read_requests) << " with code: " << builder.get_first_failure().code; ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 1); ASSERT_TRUE(array_length(public_inputs.end.read_requests) == 1); - ASSERT_TRUE(array_length(public_inputs.end.read_request_membership_witnesses) == 1); auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); @@ -69,6 +76,8 @@ TEST_F(native_private_kernel_tests, native_accumulate_transient_read_requests) private_inputs_inner.private_call.call_stack_item.public_inputs.read_requests[0] = fr(12); private_inputs_inner.private_call.read_request_membership_witnesses[0].is_transient = true; + hint_to_commitments[1] = private_inputs_inner.private_call.read_request_membership_witnesses[0].hint_to_commitment; + // We need to update the previous_kernel's private_call_stack because the current_call_stack_item has changed // i.e. we changed the new_commitments and read_requests of the current_call_stack_item's public_inputs private_inputs_inner.previous_kernel.public_inputs.end.private_call_stack[0] = @@ -84,12 +93,12 @@ TEST_F(native_private_kernel_tests, native_accumulate_transient_read_requests) << " with code: " << builder.get_first_failure().code; ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 2); ASSERT_TRUE(array_length(public_inputs.end.read_requests) == 2); - ASSERT_TRUE(array_length(public_inputs.end.read_request_membership_witnesses) == 2); auto& previous_kernel = private_inputs_inner.previous_kernel; previous_kernel.public_inputs = public_inputs; - auto final_public_inputs = native_private_kernel_circuit_ordering(builder, previous_kernel); + PrivateKernelInputsOrdering private_inputs{ previous_kernel, hint_to_commitments }; + auto final_public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure() << " with code: " << builder.get_first_failure().code; @@ -107,6 +116,9 @@ TEST_F(native_private_kernel_tests, native_transient_read_requests_no_match) private_inputs_init.private_call.call_stack_item.public_inputs.read_requests[0] = fr(23); private_inputs_init.private_call.read_request_membership_witnesses[0].is_transient = true; + std::array hint_to_commitments{}; + hint_to_commitments[0] = private_inputs_init.private_call.read_request_membership_witnesses[0].hint_to_commitment; + DummyBuilder builder = DummyBuilder("native_private_kernel_tests__native_transient_read_requests_no_match"); auto public_inputs = native_private_kernel_circuit_initial(builder, private_inputs_init); @@ -114,7 +126,6 @@ TEST_F(native_private_kernel_tests, native_transient_read_requests_no_match) << " with code: " << builder.get_first_failure().code; ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 1); ASSERT_TRUE(array_length(public_inputs.end.read_requests) == 1); - ASSERT_TRUE(array_length(public_inputs.end.read_request_membership_witnesses) == 1); auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); @@ -122,6 +133,8 @@ TEST_F(native_private_kernel_tests, native_transient_read_requests_no_match) private_inputs_inner.private_call.call_stack_item.public_inputs.read_requests[0] = fr(12); private_inputs_inner.private_call.read_request_membership_witnesses[0].is_transient = true; + hint_to_commitments[1] = private_inputs_inner.private_call.read_request_membership_witnesses[0].hint_to_commitment; + // We need to update the previous_kernel's private_call_stack because the current_call_stack_item has changed // i.e. we changed the new_commitments and read_requests of the current_call_stack_item's public_inputs private_inputs_inner.previous_kernel.public_inputs.end.private_call_stack[0] = @@ -137,12 +150,12 @@ TEST_F(native_private_kernel_tests, native_transient_read_requests_no_match) << " with code: " << builder.get_first_failure().code; ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 2); ASSERT_TRUE(array_length(public_inputs.end.read_requests) == 2); - ASSERT_TRUE(array_length(public_inputs.end.read_request_membership_witnesses) == 2); auto& previous_kernel = private_inputs_inner.previous_kernel; previous_kernel.public_inputs = public_inputs; - auto final_public_inputs = native_private_kernel_circuit_ordering(builder, previous_kernel); + PrivateKernelInputsOrdering private_inputs{ previous_kernel, hint_to_commitments }; + auto final_public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_TRUE(builder.failed()); ASSERT_TRUE(builder.get_first_failure().code == CircuitErrorCode::PRIVATE_KERNEL__TRANSIENT_READ_REQUEST_NO_MATCH); @@ -190,7 +203,9 @@ TEST_F(native_private_kernel_tests, native_empty_nullified_commitment_respected) auto& previous_kernel = private_inputs_inner.previous_kernel; previous_kernel.public_inputs = public_inputs; - auto final_public_inputs = native_private_kernel_circuit_ordering(builder, previous_kernel); + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; + + auto final_public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure() << " with code: " << builder.get_first_failure().code; diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.cpp index a406869f3ad..53df785c288 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.cpp @@ -144,10 +144,6 @@ void update_end_values(DummyCircuitBuilder& builder, builder.do_assert(is_array_empty(public_inputs.end.read_requests), "public_inputs.end.read_requests must start as empty in initial kernel iteration", CircuitErrorCode::PRIVATE_KERNEL__UNSUPPORTED_OP); - builder.do_assert( - is_array_empty(public_inputs.end.read_request_membership_witnesses), - "public_inputs.end.read_request_membership_witnesses must start as empty in initial kernel iteration", - CircuitErrorCode::PRIVATE_KERNEL__UNSUPPORTED_OP); builder.do_assert(public_inputs.end.encrypted_log_preimages_length == NT::fr(0), "public_inputs.end.encrypted_log_preimages_length must start as 0 in initial kernel iteration", CircuitErrorCode::PRIVATE_KERNEL__UNSUPPORTED_OP); diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.test.cpp index fc6379eb2b3..d1fecdf6745 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_init.test.cpp @@ -596,62 +596,6 @@ TEST_F(native_private_kernel_init_tests, native_max_read_requests_works) // Check enforcement that inner iterations' read_requests match root in constants // https://github.com/AztecProtocol/aztec-packages/issues/786 -TEST_F(native_private_kernel_init_tests, native_read_requests_less_than_witnesses) -{ - auto private_inputs = do_private_call_get_kernel_inputs_init(false, deposit, standard_test_args()); - - auto const& contract_address = - private_inputs.private_call.call_stack_item.public_inputs.call_context.storage_contract_address; - - auto const first_nullifier = silo_nullifier(contract_address, private_inputs.tx_request.hash()); - auto [read_requests, - read_request_membership_witnesses, - _transient_read_requests, - _transient_read_request_membership_witnesses, - root] = get_random_reads(first_nullifier, contract_address, MAX_READ_REQUESTS_PER_CALL); - - read_requests[MAX_READ_REQUESTS_PER_CALL - 1] = fr(0); - private_inputs.private_call.call_stack_item.public_inputs.historic_block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.read_requests = read_requests; - private_inputs.private_call.read_request_membership_witnesses = read_request_membership_witnesses; - - DummyBuilder builder = DummyBuilder("native_private_kernel_init_tests__native_read_requests_less_than_witnesses"); - native_private_kernel_circuit_initial(builder, private_inputs); - - ASSERT_TRUE(builder.failed()); - ASSERT_EQ(builder.get_first_failure().code, - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); -} - -TEST_F(native_private_kernel_init_tests, native_read_requests_more_than_witnesses) -{ - auto private_inputs = do_private_call_get_kernel_inputs_init(false, deposit, standard_test_args()); - - auto const& contract_address = - private_inputs.private_call.call_stack_item.public_inputs.call_context.storage_contract_address; - - auto const first_nullifier = silo_nullifier(contract_address, private_inputs.tx_request.hash()); - auto [read_requests, - read_request_membership_witnesses, - _transient_read_requests, - _transient_read_request_membership_witnesses, - root] = get_random_reads(first_nullifier, contract_address, MAX_READ_REQUESTS_PER_CALL); - - read_request_membership_witnesses[MAX_READ_REQUESTS_PER_CALL - 1] = - ReadRequestMembershipWitness{}; - - private_inputs.private_call.call_stack_item.public_inputs.historic_block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.read_requests = read_requests; - private_inputs.private_call.read_request_membership_witnesses = read_request_membership_witnesses; - - DummyBuilder builder = DummyBuilder("native_private_kernel_init_tests__native_read_requests_more_than_witnesses"); - native_private_kernel_circuit_initial(builder, private_inputs); - - ASSERT_TRUE(builder.failed()); - ASSERT_EQ(builder.get_first_failure().code, - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); -} - TEST_F(native_private_kernel_init_tests, native_one_transient_read_requests_works) { // one transient read request should work diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.cpp index 1ea1fbf859d..fa8337b6656 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.cpp @@ -30,7 +30,6 @@ void initialise_end_values(PreviousKernelData const& previous_kernel, Kernel auto& end = public_inputs.end; const auto& start = previous_kernel.public_inputs.end; end.read_requests = start.read_requests; - end.read_request_membership_witnesses = start.read_request_membership_witnesses; } } // namespace @@ -113,9 +112,6 @@ void validate_inputs(DummyCircuitBuilder& builder, PrivateKernelInputsInner "Cannot execute private kernel circuit with an empty private call stack", CircuitErrorCode::PRIVATE_KERNEL__PRIVATE_CALL_STACK_EMPTY); - common_validate_previous_kernel_read_requests( - builder, start.read_requests, start.read_request_membership_witnesses); - // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1329): validate that 0th nullifier is nonzero } diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp index 0599fdefd44..bd5865a2f9e 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp @@ -568,78 +568,6 @@ TEST_F(native_private_kernel_inner_tests, native_max_read_requests_works) ASSERT_EQ(array_length(public_inputs.end.read_requests), 0); } -TEST_F(native_private_kernel_inner_tests, native_read_requests_less_than_witnesses) -{ - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); - - auto const& contract_address = - private_inputs.private_call.call_stack_item.public_inputs.call_context.storage_contract_address; - - auto const first_nullifier = - silo_nullifier(contract_address, private_inputs.previous_kernel.public_inputs.end.new_nullifiers[0]); - auto [read_requests, - read_request_membership_witnesses, - _transient_read_requests, - _transient_read_request_membership_witnesses, - root] = get_random_reads(first_nullifier, contract_address, MAX_READ_REQUESTS_PER_CALL); - - read_requests[MAX_READ_REQUESTS_PER_CALL - 1] = fr(0); - private_inputs.previous_kernel.public_inputs.constants.block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.historic_block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.read_requests = read_requests; - private_inputs.private_call.read_request_membership_witnesses = read_request_membership_witnesses; - - // We need to update the previous_kernel's private_call_stack because the current_call_stack_item has changed - // i.e. we changed the public_inputs->read_requests and public_inputs->historic_private_data_tree_root of the - // current_call_stack_item - private_inputs.previous_kernel.public_inputs.end.private_call_stack[0] = - private_inputs.private_call.call_stack_item.hash(); - - DummyBuilder builder = DummyBuilder("native_private_kernel_inner_tests__native_read_requests_less_than_witnesses"); - native_private_kernel_circuit_inner(builder, private_inputs); - - ASSERT_TRUE(builder.failed()); - ASSERT_EQ(builder.get_first_failure().code, - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); -} - -TEST_F(native_private_kernel_inner_tests, native_read_requests_more_than_witnesses) -{ - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); - - auto const& contract_address = - private_inputs.private_call.call_stack_item.public_inputs.call_context.storage_contract_address; - - auto const first_nullifier = - silo_nullifier(contract_address, private_inputs.previous_kernel.public_inputs.end.new_nullifiers[0]); - auto [read_requests, - read_request_membership_witnesses, - _transient_read_requests, - _transient_read_request_membership_witnesses, - root] = get_random_reads(first_nullifier, contract_address, MAX_READ_REQUESTS_PER_CALL); - - read_request_membership_witnesses[MAX_READ_REQUESTS_PER_CALL - 1] = - ReadRequestMembershipWitness{}; - - private_inputs.previous_kernel.public_inputs.constants.block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.historic_block_data.private_data_tree_root = root; - private_inputs.private_call.call_stack_item.public_inputs.read_requests = read_requests; - private_inputs.private_call.read_request_membership_witnesses = read_request_membership_witnesses; - - // We need to update the previous_kernel's private_call_stack because the current_call_stack_item has changed - // i.e. we changed the public_inputs->read_requests and public_inputs->historic_private_data_tree_root of the - // current_call_stack_item - private_inputs.previous_kernel.public_inputs.end.private_call_stack[0] = - private_inputs.private_call.call_stack_item.hash(); - - DummyBuilder builder = DummyBuilder("native_private_kernel_inner_tests__native_read_requests_more_than_witnesses"); - native_private_kernel_circuit_inner(builder, private_inputs); - - ASSERT_TRUE(builder.failed()); - ASSERT_EQ(builder.get_first_failure().code, - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); -} - TEST_F(native_private_kernel_inner_tests, native_one_transient_read_requests_works) { // one transient read request should work diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.cpp index 53ed6899866..78831b63cef 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.cpp @@ -3,6 +3,7 @@ #include "aztec3/circuits/abis/kernel_circuit_public_inputs_final.hpp" #include "aztec3/circuits/abis/previous_kernel_data.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp" #include "aztec3/circuits/hash.hpp" #include "aztec3/constants.hpp" #include "aztec3/utils/array.hpp" @@ -16,8 +17,8 @@ using NT = aztec3::utils::types::NativeTypes; using aztec3::circuits::abis::KernelCircuitPublicInputsFinal; using aztec3::circuits::abis::PreviousKernelData; +using aztec3::circuits::abis::private_kernel::PrivateKernelInputsOrdering; using aztec3::circuits::kernel::private_kernel::common_initialise_end_values; -using aztec3::utils::array_length; using aztec3::utils::array_rearrange; using aztec3::utils::CircuitErrorCode; using aztec3::utils::DummyCircuitBuilder; @@ -38,29 +39,15 @@ namespace aztec3::circuits::kernel::private_kernel { // i.e., we get pairs i,j such that read_requests[i] == new_commitments[j] void match_reads_to_commitments(DummyCircuitBuilder& builder, std::array const& read_requests, - std::array, - MAX_READ_REQUESTS_PER_TX> const& read_request_membership_witnesses, + std::array const& hint_to_commitments, std::array const& new_commitments) { - // Arrays read_request and read_request_membership_witnesses must be of the same length. Otherwise, - // we might get into trouble when accumulating them in public_inputs.end - builder.do_assert(array_length(read_requests) == array_length(read_request_membership_witnesses), - format("[private ordering circuit] mismatch array length between read_requests and witnesses - " - "read_requests length: ", - array_length(read_requests), - " witnesses length: ", - array_length(read_request_membership_witnesses)), - CircuitErrorCode::PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH); - // match reads to commitments from the previous call(s) for (size_t rr_idx = 0; rr_idx < MAX_READ_REQUESTS_PER_TX; rr_idx++) { const auto& read_request = read_requests[rr_idx]; - const auto& witness = read_request_membership_witnesses[rr_idx]; - const auto is_transient_read = witness.is_transient; - const auto& hint_to_commitment = witness.hint_to_commitment; - + const auto& hint_to_commitment = hint_to_commitments[rr_idx]; - if (is_transient_read) { + if (read_request != 0) { size_t match_pos = MAX_NEW_COMMITMENTS_PER_TX; // TODO(https://github.com/AztecProtocol/aztec-packages/issues/892): inefficient // O(n^2) inner loop will be optimized via matching hints @@ -76,37 +63,12 @@ void match_reads_to_commitments(DummyCircuitBuilder& builder, "]* is transient but does not match any new commitment.", "\n\tread_request: ", read_request, - "\n\tis_transient: ", - is_transient_read, "\n\thint_to_commitment: ", hint_to_commitment, "\n\t* the read_request position/index is not expected to match position in app-circuit " "outputs because kernel iterations gradually remove non-transient read_requests as " "membership checks are resolved."), CircuitErrorCode::PRIVATE_KERNEL__TRANSIENT_READ_REQUEST_NO_MATCH); - } else { - // This if-condition means it is a non-empty read request and it is flagged as transient.... - // NON-transient reads MUST be membership-checked and removed during standard kernel iterations - // NONE should be here in (let alone output from) the ordering circuit. - builder.do_assert( - read_request == NT::fr(0), // basically: assert(is_transient_read || empty) - format("read_request at position [", - rr_idx, - "]* is NOT transient but is still unresolved in the final kernel stage! This implies invalid " - "inputs " - "to the final (ordering) stage of the kernel.", - "\n\tread_request: ", - read_request, - "\n\tleaf_index: ", - witness.leaf_index, - "\n\tis_transient: ", - is_transient_read, - "\n\thint_to_commitment: ", - hint_to_commitment, - "\n\t* the read_request position/index is not expected to match position in app-circuit " - "outputs because kernel iterations gradually remove non-transient read_requests as " - "membership checks are resolved."), - CircuitErrorCode::PRIVATE_KERNEL__UNRESOLVED_NON_TRANSIENT_READ_REQUEST); } } } @@ -193,31 +155,27 @@ void apply_commitment_nonces(NT::fr const& first_nullifier, } } -KernelCircuitPublicInputsFinal native_private_kernel_circuit_ordering(DummyCircuitBuilder& builder, - PreviousKernelData const& previous_kernel) +KernelCircuitPublicInputsFinal native_private_kernel_circuit_ordering( + DummyCircuitBuilder& builder, PrivateKernelInputsOrdering const& private_inputs) { // We'll be pushing data to this during execution of this circuit. KernelCircuitPublicInputsFinal public_inputs{}; // Do this before any functions can modify the inputs. - initialise_end_values(previous_kernel, public_inputs); + initialise_end_values(private_inputs.previous_kernel, public_inputs); // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1329): validate that 0th nullifier is nonzero // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1486): validate that `len(new_nullifiers) == // len(nullified_commitments)` - common_validate_previous_kernel_read_requests(builder, - previous_kernel.public_inputs.end.read_requests, - previous_kernel.public_inputs.end.read_request_membership_witnesses); - // Matching read requests to pending commitments requires the full list of new commitments accumulated over // all iterations of the private kernel. Therefore, we match reads against new_commitments in // previous_kernel.public_inputs.end, where "previous kernel" is the last "inner" kernel iteration. // Remark: The commitments in public_inputs.end have already been siloed by contract address! match_reads_to_commitments(builder, - previous_kernel.public_inputs.end.read_requests, - previous_kernel.public_inputs.end.read_request_membership_witnesses, - previous_kernel.public_inputs.end.new_commitments); + private_inputs.previous_kernel.public_inputs.end.read_requests, + private_inputs.hint_to_commitments, + private_inputs.previous_kernel.public_inputs.end.new_commitments); // Matching nullifiers to pending commitments requires the full list of new commitments accumulated over // all iterations of the private kernel. Therefore, we match nullifiers (their nullified_commitments) @@ -230,7 +188,7 @@ KernelCircuitPublicInputsFinal native_private_kernel_circuit_ordering(DummyC public_inputs.end.new_commitments); // tx hash - const auto& first_nullifier = previous_kernel.public_inputs.end.new_nullifiers[0]; + const auto& first_nullifier = private_inputs.previous_kernel.public_inputs.end.new_nullifiers[0]; apply_commitment_nonces(first_nullifier, public_inputs.end.new_commitments); return public_inputs; diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.hpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.hpp index 9122d9a04b3..872396c6178 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.hpp @@ -3,7 +3,7 @@ #include "init.hpp" #include "aztec3/circuits/abis/kernel_circuit_public_inputs_final.hpp" -#include "aztec3/circuits/abis/previous_kernel_data.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_ordering.hpp" #include "aztec3/utils/dummy_circuit_builder.hpp" #include @@ -11,10 +11,10 @@ namespace aztec3::circuits::kernel::private_kernel { using aztec3::circuits::abis::KernelCircuitPublicInputsFinal; -using aztec3::circuits::abis::PreviousKernelData; +using aztec3::circuits::abis::private_kernel::PrivateKernelInputsOrdering; using DummyBuilder = aztec3::utils::DummyCircuitBuilder; KernelCircuitPublicInputsFinal native_private_kernel_circuit_ordering( - DummyBuilder& builder, PreviousKernelData const& previous_kernel); + DummyBuilder& builder, PrivateKernelInputsOrdering const& private_inputs); } // namespace aztec3::circuits::kernel::private_kernel \ No newline at end of file diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.test.cpp index e19e3273899..e0db864ce1d 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_ordering.test.cpp @@ -1,5 +1,6 @@ #include "testing_harness.hpp" +#include "aztec3/circuits/abis/private_kernel/private_kernel_inputs_inner.hpp" #include "aztec3/circuits/apps/test_apps/escrow/deposit.hpp" #include "aztec3/constants.hpp" #include "aztec3/utils/array.hpp" @@ -32,7 +33,7 @@ class native_private_kernel_ordering_tests : public ::testing::Test { TEST_F(native_private_kernel_ordering_tests, native_matching_one_read_request_to_commitment_works) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_nullifiers{}; std::array siloed_commitments{}; @@ -51,16 +52,17 @@ TEST_F(native_private_kernel_ordering_tests, native_matching_one_read_request_to read_requests[0] = siloed_commitments[0]; read_request_membership_witnesses[0].is_transient = true; + auto& previous_kernel = private_inputs_inner.previous_kernel; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.new_commitments = siloed_commitments; - private_inputs.previous_kernel.public_inputs.end.read_requests = read_requests; - private_inputs.previous_kernel.public_inputs.end.read_request_membership_witnesses = - read_request_membership_witnesses; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.new_commitments = siloed_commitments; + previous_kernel.public_inputs.end.read_requests = read_requests; + + PrivateKernelInputsOrdering private_inputs{ previous_kernel, std::array{} }; DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_matching_one_read_request_to_commitment_works"); - auto const& public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto const& public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 1); @@ -69,7 +71,7 @@ TEST_F(native_private_kernel_ordering_tests, native_matching_one_read_request_to TEST_F(native_private_kernel_ordering_tests, native_matching_some_read_requests_to_commitments_works) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_nullifiers{}; std::array siloed_commitments{}; @@ -95,15 +97,17 @@ TEST_F(native_private_kernel_ordering_tests, native_matching_some_read_requests_ read_request_membership_witnesses[0].is_transient = true; read_request_membership_witnesses[1].is_transient = true; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.new_commitments = siloed_commitments; - private_inputs.previous_kernel.public_inputs.end.read_requests = read_requests; - private_inputs.previous_kernel.public_inputs.end.read_request_membership_witnesses = - read_request_membership_witnesses; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.new_commitments = siloed_commitments; + previous_kernel.public_inputs.end.read_requests = read_requests; + + PrivateKernelInputsOrdering private_inputs{ previous_kernel, std::array{} }; DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_matching_some_read_requests_to_commitments_works"); - auto const& public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto const& public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == MAX_NEW_COMMITMENTS_PER_TX); @@ -115,7 +119,7 @@ TEST_F(native_private_kernel_ordering_tests, native_matching_some_read_requests_ TEST_F(native_private_kernel_ordering_tests, native_read_request_unknown_fails) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array siloed_commitments{}; std::array read_requests{}; @@ -130,50 +134,23 @@ TEST_F(native_private_kernel_ordering_tests, native_read_request_unknown_fails) } read_requests[3] = NT::fr::random_element(); // force one read request not to match - private_inputs.previous_kernel.public_inputs.end.new_commitments = siloed_commitments; - private_inputs.previous_kernel.public_inputs.end.read_requests = read_requests; - private_inputs.previous_kernel.public_inputs.end.read_request_membership_witnesses = - read_request_membership_witnesses; + auto& previous_kernel = private_inputs_inner.previous_kernel; - DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_read_request_unknown_fails"); - native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + previous_kernel.public_inputs.end.new_commitments = siloed_commitments; + previous_kernel.public_inputs.end.read_requests = read_requests; - auto failure = builder.get_first_failure(); - ASSERT_EQ(failure.code, CircuitErrorCode::PRIVATE_KERNEL__TRANSIENT_READ_REQUEST_NO_MATCH); -} - -TEST_F(native_private_kernel_ordering_tests, native_unresolved_non_transient_read_fails) -{ - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + PrivateKernelInputsOrdering private_inputs{ previous_kernel, std::array{} }; - std::array siloed_commitments{}; - std::array read_requests{}; - std::array, MAX_READ_REQUESTS_PER_TX> - read_request_membership_witnesses{}; - - siloed_commitments[0] = NT::fr::random_element(); - - - read_requests[0] = siloed_commitments[0]; - read_request_membership_witnesses[0].is_transient = false; // ordering circuit only allows transient reads - - private_inputs.previous_kernel.public_inputs.end.new_commitments = siloed_commitments; - private_inputs.previous_kernel.public_inputs.end.read_requests = read_requests; - private_inputs.previous_kernel.public_inputs.end.read_request_membership_witnesses = - read_request_membership_witnesses; - - - DummyBuilder builder = - DummyBuilder("native_private_kernel_ordering_tests__native_unresolved_non_transient_read_fails"); - native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_read_request_unknown_fails"); + native_private_kernel_circuit_ordering(builder, private_inputs); auto failure = builder.get_first_failure(); - ASSERT_EQ(failure.code, CircuitErrorCode::PRIVATE_KERNEL__UNRESOLVED_NON_TRANSIENT_READ_REQUEST); + ASSERT_EQ(failure.code, CircuitErrorCode::PRIVATE_KERNEL__TRANSIENT_READ_REQUEST_NO_MATCH); } TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_one_transient_matches_works) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_commitments{}; std::array new_nullifiers{}; @@ -185,13 +162,17 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_one_transient_ new_nullifiers[0] = fr(32); nullifier_commitments[0] = commitment0; - private_inputs.previous_kernel.public_inputs.end.new_commitments = new_commitments; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_commitments = new_commitments; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_squash_one_of_one_transient_matches_works"); - auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 0); // 1/1 squashed @@ -200,7 +181,7 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_one_transient_ TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_two_transient_matches_works) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_commitments{}; std::array new_nullifiers{}; @@ -213,13 +194,17 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_two_transient_ new_nullifiers[0] = fr(32); nullifier_commitments[0] = commitment1; - private_inputs.previous_kernel.public_inputs.end.new_commitments = new_commitments; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_commitments = new_commitments; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_squash_one_of_two_transient_matches_works"); - auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 1); // 1/2 squashed @@ -228,7 +213,7 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_one_of_two_transient_ TEST_F(native_private_kernel_ordering_tests, native_squash_two_of_two_transient_matches_works) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_commitments{}; std::array new_nullifiers{}; @@ -244,13 +229,17 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_two_of_two_transient_ nullifier_commitments[0] = commitment1; nullifier_commitments[1] = commitment0; - private_inputs.previous_kernel.public_inputs.end.new_commitments = new_commitments; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_commitments = new_commitments; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; DummyBuilder builder = DummyBuilder("native_private_kernel_ordering_tests__native_squash_two_of_two_transient_matches_works"); - auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 0); // 2/2 squashed @@ -259,7 +248,7 @@ TEST_F(native_private_kernel_ordering_tests, native_squash_two_of_two_transient_ TEST_F(native_private_kernel_ordering_tests, native_empty_nullified_commitment_means_persistent_nullifier_0) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_commitments{}; std::array new_nullifiers{}; @@ -270,13 +259,17 @@ TEST_F(native_private_kernel_ordering_tests, native_empty_nullified_commitment_m new_nullifiers[0] = fr(32); nullifier_commitments[0] = fr(EMPTY_NULLIFIED_COMMITMENT); - private_inputs.previous_kernel.public_inputs.end.new_commitments = new_commitments; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_commitments = new_commitments; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; DummyBuilder builder = DummyBuilder( "native_private_kernel_ordering_tests__native_empty_nullified_commitment_means_persistent_nullifier_0"); - auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); // nullifier and commitment present at output (will become persistant) @@ -287,7 +280,7 @@ TEST_F(native_private_kernel_ordering_tests, native_empty_nullified_commitment_m // same as previous test, but this time there are 0 commitments! TEST_F(native_private_kernel_ordering_tests, native_empty_nullified_commitment_means_persistent_nullifier_1) { - auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + auto private_inputs_inner = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); std::array new_commitments{}; std::array new_nullifiers{}; @@ -296,13 +289,17 @@ TEST_F(native_private_kernel_ordering_tests, native_empty_nullified_commitment_m new_nullifiers[0] = fr(32); nullifier_commitments[0] = fr(EMPTY_NULLIFIED_COMMITMENT); - private_inputs.previous_kernel.public_inputs.end.new_commitments = new_commitments; - private_inputs.previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; - private_inputs.previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + auto& previous_kernel = private_inputs_inner.previous_kernel; + + previous_kernel.public_inputs.end.new_commitments = new_commitments; + previous_kernel.public_inputs.end.new_nullifiers = new_nullifiers; + previous_kernel.public_inputs.end.nullified_commitments = nullifier_commitments; + + PrivateKernelInputsOrdering private_inputs{ .previous_kernel = previous_kernel }; DummyBuilder builder = DummyBuilder( "native_private_kernel_ordering_tests__native_empty_nullified_commitment_means_persistent_nullifier_1"); - auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs.previous_kernel); + auto public_inputs = native_private_kernel_circuit_ordering(builder, private_inputs); ASSERT_FALSE(builder.failed()) << "failure: " << builder.get_first_failure(); ASSERT_TRUE(array_length(public_inputs.end.new_commitments) == 0); diff --git a/yarn-project/aztec-rpc/src/kernel_prover/kernel_prover.ts b/yarn-project/aztec-rpc/src/kernel_prover/kernel_prover.ts index 687c1a21aed..2573c7f6afc 100644 --- a/yarn-project/aztec-rpc/src/kernel_prover/kernel_prover.ts +++ b/yarn-project/aztec-rpc/src/kernel_prover/kernel_prover.ts @@ -5,16 +5,19 @@ import { Fr, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_READ_REQUESTS_PER_CALL, + MAX_READ_REQUESTS_PER_TX, MembershipWitness, PreviousKernelData, PrivateCallData, PrivateCallStackItem, + PrivateKernelInputsOrdering, PrivateKernelPublicInputs, ReadRequestMembershipWitness, TxRequest, VK_TREE_HEIGHT, VerificationKey, makeEmptyProof, + makeTuple, } from '@aztec/circuits.js'; import { assertLength } from '@aztec/foundation/serialize'; @@ -82,6 +85,9 @@ export class KernelProver { proof: makeEmptyProof(), }; + //TODO(#892): Dealing with this ticket we will fill the following hint array with the correct hints. + const hintToCommitments = makeTuple(MAX_READ_REQUESTS_PER_TX, Fr.zero); + while (executionStack.length) { const currentExecution = executionStack.pop()!; executionStack.push(...currentExecution.nestedExecutions); @@ -163,7 +169,8 @@ export class KernelProver { assertLength(previousVkMembershipWitness.siblingPath, VK_TREE_HEIGHT), ); - const outputFinal = await this.proofCreator.createProofOrdering(previousKernelData); + const privateInputs = new PrivateKernelInputsOrdering(previousKernelData, hintToCommitments); + const outputFinal = await this.proofCreator.createProofOrdering(privateInputs); // Only return the notes whose commitment is in the commitments of the final proof. const finalNewCommitments = outputFinal.publicInputs.end.newCommitments; diff --git a/yarn-project/aztec-rpc/src/kernel_prover/proof_creator.ts b/yarn-project/aztec-rpc/src/kernel_prover/proof_creator.ts index c0feff5f4d9..5c301dfbf41 100644 --- a/yarn-project/aztec-rpc/src/kernel_prover/proof_creator.ts +++ b/yarn-project/aztec-rpc/src/kernel_prover/proof_creator.ts @@ -6,6 +6,7 @@ import { PreviousKernelData, PrivateCallData, PrivateCircuitPublicInputs, + PrivateKernelInputsOrdering, Proof, TxRequest, makeEmptyProof, @@ -88,7 +89,7 @@ export interface ProofCreator { * @param previousKernelData - The previous kernel data object. * @returns A Promise resolving to a ProofOutput object containing public inputs and the kernel proof. */ - createProofOrdering(previousKernelData: PreviousKernelData): Promise; + createProofOrdering(previousKernelData: PrivateKernelInputsOrdering): Promise; } /** @@ -141,10 +142,10 @@ export class KernelProofCreator implements ProofCreator { }; } - public async createProofOrdering(previousKernelData: PreviousKernelData): Promise { + public async createProofOrdering(privateInputs: PrivateKernelInputsOrdering): Promise { const wasm = await CircuitsWasm.get(); this.log('Executing private kernel simulation ordering...'); - const result = privateKernelSimOrdering(wasm, previousKernelData); + const result = privateKernelSimOrdering(wasm, privateInputs); if (result instanceof CircuitError) { throw new CircuitError(result.code, result.message); } diff --git a/yarn-project/circuits.js/src/cbind/circuits.gen.ts b/yarn-project/circuits.js/src/cbind/circuits.gen.ts index 25b21e0df04..a955e53cecf 100644 --- a/yarn-project/circuits.js/src/cbind/circuits.gen.ts +++ b/yarn-project/circuits.js/src/cbind/circuits.gen.ts @@ -31,6 +31,7 @@ import { OptionallyRevealedData, Point, PreviousKernelData, + PrivateKernelInputsOrdering, Proof, PublicCallData, PublicCallStackItem, @@ -38,7 +39,6 @@ import { PublicDataRead, PublicDataUpdateRequest, PublicKernelInputs, - ReadRequestMembershipWitness, TxContext, VerificationKeyData, isCircuitError, @@ -180,55 +180,6 @@ export function fromNativeAggregationState(o: NativeAggregationState): MsgpackNa }; } -interface MsgpackReadRequestMembershipWitness { - leaf_index: Buffer; - sibling_path: Tuple; - is_transient: boolean; - hint_to_commitment: Buffer; -} - -export function toReadRequestMembershipWitness(o: MsgpackReadRequestMembershipWitness): ReadRequestMembershipWitness { - if (o.leaf_index === undefined) { - throw new Error('Expected leaf_index in ReadRequestMembershipWitness deserialization'); - } - if (o.sibling_path === undefined) { - throw new Error('Expected sibling_path in ReadRequestMembershipWitness deserialization'); - } - if (o.is_transient === undefined) { - throw new Error('Expected is_transient in ReadRequestMembershipWitness deserialization'); - } - if (o.hint_to_commitment === undefined) { - throw new Error('Expected hint_to_commitment in ReadRequestMembershipWitness deserialization'); - } - return new ReadRequestMembershipWitness( - Fr.fromBuffer(o.leaf_index), - mapTuple(o.sibling_path, (v: Buffer) => Fr.fromBuffer(v)), - o.is_transient, - Fr.fromBuffer(o.hint_to_commitment), - ); -} - -export function fromReadRequestMembershipWitness(o: ReadRequestMembershipWitness): MsgpackReadRequestMembershipWitness { - if (o.leafIndex === undefined) { - throw new Error('Expected leafIndex in ReadRequestMembershipWitness serialization'); - } - if (o.siblingPath === undefined) { - throw new Error('Expected siblingPath in ReadRequestMembershipWitness serialization'); - } - if (o.isTransient === undefined) { - throw new Error('Expected isTransient in ReadRequestMembershipWitness serialization'); - } - if (o.hintToCommitment === undefined) { - throw new Error('Expected hintToCommitment in ReadRequestMembershipWitness serialization'); - } - return { - leaf_index: toBuffer(o.leafIndex), - sibling_path: mapTuple(o.siblingPath, (v: Fr) => toBuffer(v)), - is_transient: o.isTransient, - hint_to_commitment: toBuffer(o.hintToCommitment), - }; -} - interface MsgpackNewContractData { contract_address: Buffer; portal_contract_address: Buffer; @@ -489,7 +440,6 @@ export function fromPublicDataRead(o: PublicDataRead): MsgpackPublicDataRead { interface MsgpackCombinedAccumulatedData { aggregation_object: MsgpackNativeAggregationState; read_requests: Tuple; - read_request_membership_witnesses: Tuple; new_commitments: Tuple; new_nullifiers: Tuple; nullified_commitments: Tuple; @@ -513,9 +463,6 @@ export function toCombinedAccumulatedData(o: MsgpackCombinedAccumulatedData): Co if (o.read_requests === undefined) { throw new Error('Expected read_requests in CombinedAccumulatedData deserialization'); } - if (o.read_request_membership_witnesses === undefined) { - throw new Error('Expected read_request_membership_witnesses in CombinedAccumulatedData deserialization'); - } if (o.new_commitments === undefined) { throw new Error('Expected new_commitments in CombinedAccumulatedData deserialization'); } @@ -561,9 +508,6 @@ export function toCombinedAccumulatedData(o: MsgpackCombinedAccumulatedData): Co return new CombinedAccumulatedData( toNativeAggregationState(o.aggregation_object), mapTuple(o.read_requests, (v: Buffer) => Fr.fromBuffer(v)), - mapTuple(o.read_request_membership_witnesses, (v: MsgpackReadRequestMembershipWitness) => - toReadRequestMembershipWitness(v), - ), mapTuple(o.new_commitments, (v: Buffer) => Fr.fromBuffer(v)), mapTuple(o.new_nullifiers, (v: Buffer) => Fr.fromBuffer(v)), mapTuple(o.nullified_commitments, (v: Buffer) => Fr.fromBuffer(v)), @@ -588,9 +532,6 @@ export function fromCombinedAccumulatedData(o: CombinedAccumulatedData): Msgpack if (o.readRequests === undefined) { throw new Error('Expected readRequests in CombinedAccumulatedData serialization'); } - if (o.readRequestMembershipWitnesses === undefined) { - throw new Error('Expected readRequestMembershipWitnesses in CombinedAccumulatedData serialization'); - } if (o.newCommitments === undefined) { throw new Error('Expected newCommitments in CombinedAccumulatedData serialization'); } @@ -636,9 +577,6 @@ export function fromCombinedAccumulatedData(o: CombinedAccumulatedData): Msgpack return { aggregation_object: fromNativeAggregationState(o.aggregationObject), read_requests: mapTuple(o.readRequests, (v: Fr) => toBuffer(v)), - read_request_membership_witnesses: mapTuple(o.readRequestMembershipWitnesses, (v: ReadRequestMembershipWitness) => - fromReadRequestMembershipWitness(v), - ), new_commitments: mapTuple(o.newCommitments, (v: Fr) => toBuffer(v)), new_nullifiers: mapTuple(o.newNullifiers, (v: Fr) => toBuffer(v)), nullified_commitments: mapTuple(o.nullifiedCommitments, (v: Fr) => toBuffer(v)), @@ -1091,6 +1029,37 @@ export function fromPreviousKernelData(o: PreviousKernelData): MsgpackPreviousKe }; } +interface MsgpackPrivateKernelInputsOrdering { + previous_kernel: MsgpackPreviousKernelData; + hint_to_commitments: Tuple; +} + +export function toPrivateKernelInputsOrdering(o: MsgpackPrivateKernelInputsOrdering): PrivateKernelInputsOrdering { + if (o.previous_kernel === undefined) { + throw new Error('Expected previous_kernel in PrivateKernelInputsOrdering deserialization'); + } + if (o.hint_to_commitments === undefined) { + throw new Error('Expected hint_to_commitments in PrivateKernelInputsOrdering deserialization'); + } + return new PrivateKernelInputsOrdering( + toPreviousKernelData(o.previous_kernel), + mapTuple(o.hint_to_commitments, (v: Buffer) => Fr.fromBuffer(v)), + ); +} + +export function fromPrivateKernelInputsOrdering(o: PrivateKernelInputsOrdering): MsgpackPrivateKernelInputsOrdering { + if (o.previousKernel === undefined) { + throw new Error('Expected previousKernel in PrivateKernelInputsOrdering serialization'); + } + if (o.hintToCommitments === undefined) { + throw new Error('Expected hintToCommitments in PrivateKernelInputsOrdering serialization'); + } + return { + previous_kernel: fromPreviousKernelData(o.previousKernel), + hint_to_commitments: mapTuple(o.hintToCommitments, (v: Fr) => toBuffer(v)), + }; +} + interface MsgpackCircuitError { code: number; message: string; @@ -1767,11 +1736,11 @@ export function privateKernelDummyPreviousKernel(wasm: IWasmModule): PreviousKer } export function privateKernelSimOrdering( wasm: IWasmModule, - arg0: PreviousKernelData, + arg0: PrivateKernelInputsOrdering, ): CircuitError | KernelCircuitPublicInputsFinal { return ((v: MsgpackCircuitError | MsgpackKernelCircuitPublicInputsFinal) => isCircuitError(v) ? toCircuitError(v) : toKernelCircuitPublicInputsFinal(v))( - callCbind(wasm, 'private_kernel__sim_ordering', [fromPreviousKernelData(arg0)]), + callCbind(wasm, 'private_kernel__sim_ordering', [fromPrivateKernelInputsOrdering(arg0)]), ); } export function publicKernelSim(wasm: IWasmModule, arg0: PublicKernelInputs): CircuitError | KernelCircuitPublicInputs { diff --git a/yarn-project/circuits.js/src/cbind/types.ts b/yarn-project/circuits.js/src/cbind/types.ts index a20febec714..de14196c036 100644 --- a/yarn-project/circuits.js/src/cbind/types.ts +++ b/yarn-project/circuits.js/src/cbind/types.ts @@ -52,6 +52,7 @@ export { Point, Coordinate, GlobalVariables, + PrivateKernelInputsOrdering, } from '../structs/index.js'; export { FunctionSelector } from '@aztec/foundation/abi'; diff --git a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap index 6791a7073b4..7ca8864144e 100644 --- a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap @@ -14,71 +14,6 @@ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -read_request_membership_witnesses: [ leaf_index: 0x45ab -sibling_path: [ 0x45ac 0x45ad 0x45ae 0x45af 0x45b0 0x45b1 0x45b2 0x45b3 0x45b4 0x45b5 0x45b6 0x45b7 0x45b8 0x45b9 0x45ba 0x45bb 0x45bc 0x45bd 0x45be 0x45bf 0x45c0 0x45c1 0x45c2 0x45c3 0x45c4 0x45c5 0x45c6 0x45c7 0x45c8 0x45c9 0x45ca 0x45cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4626 -sibling_path: [ 0x4627 0x4628 0x4629 0x462a 0x462b 0x462c 0x462d 0x462e 0x462f 0x4630 0x4631 0x4632 0x4633 0x4634 0x4635 0x4636 0x4637 0x4638 0x4639 0x463a 0x463b 0x463c 0x463d 0x463e 0x463f 0x4640 0x4641 0x4642 0x4643 0x4644 0x4645 0x4646 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x46a1 -sibling_path: [ 0x46a2 0x46a3 0x46a4 0x46a5 0x46a6 0x46a7 0x46a8 0x46a9 0x46aa 0x46ab 0x46ac 0x46ad 0x46ae 0x46af 0x46b0 0x46b1 0x46b2 0x46b3 0x46b4 0x46b5 0x46b6 0x46b7 0x46b8 0x46b9 0x46ba 0x46bb 0x46bc 0x46bd 0x46be 0x46bf 0x46c0 0x46c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x471c -sibling_path: [ 0x471d 0x471e 0x471f 0x4720 0x4721 0x4722 0x4723 0x4724 0x4725 0x4726 0x4727 0x4728 0x4729 0x472a 0x472b 0x472c 0x472d 0x472e 0x472f 0x4730 0x4731 0x4732 0x4733 0x4734 0x4735 0x4736 0x4737 0x4738 0x4739 0x473a 0x473b 0x473c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4797 -sibling_path: [ 0x4798 0x4799 0x479a 0x479b 0x479c 0x479d 0x479e 0x479f 0x47a0 0x47a1 0x47a2 0x47a3 0x47a4 0x47a5 0x47a6 0x47a7 0x47a8 0x47a9 0x47aa 0x47ab 0x47ac 0x47ad 0x47ae 0x47af 0x47b0 0x47b1 0x47b2 0x47b3 0x47b4 0x47b5 0x47b6 0x47b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4812 -sibling_path: [ 0x4813 0x4814 0x4815 0x4816 0x4817 0x4818 0x4819 0x481a 0x481b 0x481c 0x481d 0x481e 0x481f 0x4820 0x4821 0x4822 0x4823 0x4824 0x4825 0x4826 0x4827 0x4828 0x4829 0x482a 0x482b 0x482c 0x482d 0x482e 0x482f 0x4830 0x4831 0x4832 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x488d -sibling_path: [ 0x488e 0x488f 0x4890 0x4891 0x4892 0x4893 0x4894 0x4895 0x4896 0x4897 0x4898 0x4899 0x489a 0x489b 0x489c 0x489d 0x489e 0x489f 0x48a0 0x48a1 0x48a2 0x48a3 0x48a4 0x48a5 0x48a6 0x48a7 0x48a8 0x48a9 0x48aa 0x48ab 0x48ac 0x48ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4908 -sibling_path: [ 0x4909 0x490a 0x490b 0x490c 0x490d 0x490e 0x490f 0x4910 0x4911 0x4912 0x4913 0x4914 0x4915 0x4916 0x4917 0x4918 0x4919 0x491a 0x491b 0x491c 0x491d 0x491e 0x491f 0x4920 0x4921 0x4922 0x4923 0x4924 0x4925 0x4926 0x4927 0x4928 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4983 -sibling_path: [ 0x4984 0x4985 0x4986 0x4987 0x4988 0x4989 0x498a 0x498b 0x498c 0x498d 0x498e 0x498f 0x4990 0x4991 0x4992 0x4993 0x4994 0x4995 0x4996 0x4997 0x4998 0x4999 0x499a 0x499b 0x499c 0x499d 0x499e 0x499f 0x49a0 0x49a1 0x49a2 0x49a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x49fe -sibling_path: [ 0x49ff 0x4a00 0x4a01 0x4a02 0x4a03 0x4a04 0x4a05 0x4a06 0x4a07 0x4a08 0x4a09 0x4a0a 0x4a0b 0x4a0c 0x4a0d 0x4a0e 0x4a0f 0x4a10 0x4a11 0x4a12 0x4a13 0x4a14 0x4a15 0x4a16 0x4a17 0x4a18 0x4a19 0x4a1a 0x4a1b 0x4a1c 0x4a1d 0x4a1e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4a79 -sibling_path: [ 0x4a7a 0x4a7b 0x4a7c 0x4a7d 0x4a7e 0x4a7f 0x4a80 0x4a81 0x4a82 0x4a83 0x4a84 0x4a85 0x4a86 0x4a87 0x4a88 0x4a89 0x4a8a 0x4a8b 0x4a8c 0x4a8d 0x4a8e 0x4a8f 0x4a90 0x4a91 0x4a92 0x4a93 0x4a94 0x4a95 0x4a96 0x4a97 0x4a98 0x4a99 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4af4 -sibling_path: [ 0x4af5 0x4af6 0x4af7 0x4af8 0x4af9 0x4afa 0x4afb 0x4afc 0x4afd 0x4afe 0x4aff 0x4b00 0x4b01 0x4b02 0x4b03 0x4b04 0x4b05 0x4b06 0x4b07 0x4b08 0x4b09 0x4b0a 0x4b0b 0x4b0c 0x4b0d 0x4b0e 0x4b0f 0x4b10 0x4b11 0x4b12 0x4b13 0x4b14 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4b6f -sibling_path: [ 0x4b70 0x4b71 0x4b72 0x4b73 0x4b74 0x4b75 0x4b76 0x4b77 0x4b78 0x4b79 0x4b7a 0x4b7b 0x4b7c 0x4b7d 0x4b7e 0x4b7f 0x4b80 0x4b81 0x4b82 0x4b83 0x4b84 0x4b85 0x4b86 0x4b87 0x4b88 0x4b89 0x4b8a 0x4b8b 0x4b8c 0x4b8d 0x4b8e 0x4b8f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4bea -sibling_path: [ 0x4beb 0x4bec 0x4bed 0x4bee 0x4bef 0x4bf0 0x4bf1 0x4bf2 0x4bf3 0x4bf4 0x4bf5 0x4bf6 0x4bf7 0x4bf8 0x4bf9 0x4bfa 0x4bfb 0x4bfc 0x4bfd 0x4bfe 0x4bff 0x4c00 0x4c01 0x4c02 0x4c03 0x4c04 0x4c05 0x4c06 0x4c07 0x4c08 0x4c09 0x4c0a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4c65 -sibling_path: [ 0x4c66 0x4c67 0x4c68 0x4c69 0x4c6a 0x4c6b 0x4c6c 0x4c6d 0x4c6e 0x4c6f 0x4c70 0x4c71 0x4c72 0x4c73 0x4c74 0x4c75 0x4c76 0x4c77 0x4c78 0x4c79 0x4c7a 0x4c7b 0x4c7c 0x4c7d 0x4c7e 0x4c7f 0x4c80 0x4c81 0x4c82 0x4c83 0x4c84 0x4c85 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4ce0 -sibling_path: [ 0x4ce1 0x4ce2 0x4ce3 0x4ce4 0x4ce5 0x4ce6 0x4ce7 0x4ce8 0x4ce9 0x4cea 0x4ceb 0x4cec 0x4ced 0x4cee 0x4cef 0x4cf0 0x4cf1 0x4cf2 0x4cf3 0x4cf4 0x4cf5 0x4cf6 0x4cf7 0x4cf8 0x4cf9 0x4cfa 0x4cfb 0x4cfc 0x4cfd 0x4cfe 0x4cff 0x4d00 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] @@ -340,71 +275,6 @@ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -read_request_membership_witnesses: [ leaf_index: 0x45ab -sibling_path: [ 0x45ac 0x45ad 0x45ae 0x45af 0x45b0 0x45b1 0x45b2 0x45b3 0x45b4 0x45b5 0x45b6 0x45b7 0x45b8 0x45b9 0x45ba 0x45bb 0x45bc 0x45bd 0x45be 0x45bf 0x45c0 0x45c1 0x45c2 0x45c3 0x45c4 0x45c5 0x45c6 0x45c7 0x45c8 0x45c9 0x45ca 0x45cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4626 -sibling_path: [ 0x4627 0x4628 0x4629 0x462a 0x462b 0x462c 0x462d 0x462e 0x462f 0x4630 0x4631 0x4632 0x4633 0x4634 0x4635 0x4636 0x4637 0x4638 0x4639 0x463a 0x463b 0x463c 0x463d 0x463e 0x463f 0x4640 0x4641 0x4642 0x4643 0x4644 0x4645 0x4646 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x46a1 -sibling_path: [ 0x46a2 0x46a3 0x46a4 0x46a5 0x46a6 0x46a7 0x46a8 0x46a9 0x46aa 0x46ab 0x46ac 0x46ad 0x46ae 0x46af 0x46b0 0x46b1 0x46b2 0x46b3 0x46b4 0x46b5 0x46b6 0x46b7 0x46b8 0x46b9 0x46ba 0x46bb 0x46bc 0x46bd 0x46be 0x46bf 0x46c0 0x46c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x471c -sibling_path: [ 0x471d 0x471e 0x471f 0x4720 0x4721 0x4722 0x4723 0x4724 0x4725 0x4726 0x4727 0x4728 0x4729 0x472a 0x472b 0x472c 0x472d 0x472e 0x472f 0x4730 0x4731 0x4732 0x4733 0x4734 0x4735 0x4736 0x4737 0x4738 0x4739 0x473a 0x473b 0x473c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4797 -sibling_path: [ 0x4798 0x4799 0x479a 0x479b 0x479c 0x479d 0x479e 0x479f 0x47a0 0x47a1 0x47a2 0x47a3 0x47a4 0x47a5 0x47a6 0x47a7 0x47a8 0x47a9 0x47aa 0x47ab 0x47ac 0x47ad 0x47ae 0x47af 0x47b0 0x47b1 0x47b2 0x47b3 0x47b4 0x47b5 0x47b6 0x47b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4812 -sibling_path: [ 0x4813 0x4814 0x4815 0x4816 0x4817 0x4818 0x4819 0x481a 0x481b 0x481c 0x481d 0x481e 0x481f 0x4820 0x4821 0x4822 0x4823 0x4824 0x4825 0x4826 0x4827 0x4828 0x4829 0x482a 0x482b 0x482c 0x482d 0x482e 0x482f 0x4830 0x4831 0x4832 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x488d -sibling_path: [ 0x488e 0x488f 0x4890 0x4891 0x4892 0x4893 0x4894 0x4895 0x4896 0x4897 0x4898 0x4899 0x489a 0x489b 0x489c 0x489d 0x489e 0x489f 0x48a0 0x48a1 0x48a2 0x48a3 0x48a4 0x48a5 0x48a6 0x48a7 0x48a8 0x48a9 0x48aa 0x48ab 0x48ac 0x48ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4908 -sibling_path: [ 0x4909 0x490a 0x490b 0x490c 0x490d 0x490e 0x490f 0x4910 0x4911 0x4912 0x4913 0x4914 0x4915 0x4916 0x4917 0x4918 0x4919 0x491a 0x491b 0x491c 0x491d 0x491e 0x491f 0x4920 0x4921 0x4922 0x4923 0x4924 0x4925 0x4926 0x4927 0x4928 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4983 -sibling_path: [ 0x4984 0x4985 0x4986 0x4987 0x4988 0x4989 0x498a 0x498b 0x498c 0x498d 0x498e 0x498f 0x4990 0x4991 0x4992 0x4993 0x4994 0x4995 0x4996 0x4997 0x4998 0x4999 0x499a 0x499b 0x499c 0x499d 0x499e 0x499f 0x49a0 0x49a1 0x49a2 0x49a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x49fe -sibling_path: [ 0x49ff 0x4a00 0x4a01 0x4a02 0x4a03 0x4a04 0x4a05 0x4a06 0x4a07 0x4a08 0x4a09 0x4a0a 0x4a0b 0x4a0c 0x4a0d 0x4a0e 0x4a0f 0x4a10 0x4a11 0x4a12 0x4a13 0x4a14 0x4a15 0x4a16 0x4a17 0x4a18 0x4a19 0x4a1a 0x4a1b 0x4a1c 0x4a1d 0x4a1e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4a79 -sibling_path: [ 0x4a7a 0x4a7b 0x4a7c 0x4a7d 0x4a7e 0x4a7f 0x4a80 0x4a81 0x4a82 0x4a83 0x4a84 0x4a85 0x4a86 0x4a87 0x4a88 0x4a89 0x4a8a 0x4a8b 0x4a8c 0x4a8d 0x4a8e 0x4a8f 0x4a90 0x4a91 0x4a92 0x4a93 0x4a94 0x4a95 0x4a96 0x4a97 0x4a98 0x4a99 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4af4 -sibling_path: [ 0x4af5 0x4af6 0x4af7 0x4af8 0x4af9 0x4afa 0x4afb 0x4afc 0x4afd 0x4afe 0x4aff 0x4b00 0x4b01 0x4b02 0x4b03 0x4b04 0x4b05 0x4b06 0x4b07 0x4b08 0x4b09 0x4b0a 0x4b0b 0x4b0c 0x4b0d 0x4b0e 0x4b0f 0x4b10 0x4b11 0x4b12 0x4b13 0x4b14 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4b6f -sibling_path: [ 0x4b70 0x4b71 0x4b72 0x4b73 0x4b74 0x4b75 0x4b76 0x4b77 0x4b78 0x4b79 0x4b7a 0x4b7b 0x4b7c 0x4b7d 0x4b7e 0x4b7f 0x4b80 0x4b81 0x4b82 0x4b83 0x4b84 0x4b85 0x4b86 0x4b87 0x4b88 0x4b89 0x4b8a 0x4b8b 0x4b8c 0x4b8d 0x4b8e 0x4b8f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4bea -sibling_path: [ 0x4beb 0x4bec 0x4bed 0x4bee 0x4bef 0x4bf0 0x4bf1 0x4bf2 0x4bf3 0x4bf4 0x4bf5 0x4bf6 0x4bf7 0x4bf8 0x4bf9 0x4bfa 0x4bfb 0x4bfc 0x4bfd 0x4bfe 0x4bff 0x4c00 0x4c01 0x4c02 0x4c03 0x4c04 0x4c05 0x4c06 0x4c07 0x4c08 0x4c09 0x4c0a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4c65 -sibling_path: [ 0x4c66 0x4c67 0x4c68 0x4c69 0x4c6a 0x4c6b 0x4c6c 0x4c6d 0x4c6e 0x4c6f 0x4c70 0x4c71 0x4c72 0x4c73 0x4c74 0x4c75 0x4c76 0x4c77 0x4c78 0x4c79 0x4c7a 0x4c7b 0x4c7c 0x4c7d 0x4c7e 0x4c7f 0x4c80 0x4c81 0x4c82 0x4c83 0x4c84 0x4c85 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4ce0 -sibling_path: [ 0x4ce1 0x4ce2 0x4ce3 0x4ce4 0x4ce5 0x4ce6 0x4ce7 0x4ce8 0x4ce9 0x4cea 0x4ceb 0x4cec 0x4ced 0x4cee 0x4cef 0x4cf0 0x4cf1 0x4cf2 0x4cf3 0x4cf4 0x4cf5 0x4cf6 0x4cf7 0x4cf8 0x4cf9 0x4cfa 0x4cfb 0x4cfc 0x4cfd 0x4cfe 0x4cff 0x4d00 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] @@ -947,71 +817,6 @@ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -read_request_membership_witnesses: [ leaf_index: 0x45ab -sibling_path: [ 0x45ac 0x45ad 0x45ae 0x45af 0x45b0 0x45b1 0x45b2 0x45b3 0x45b4 0x45b5 0x45b6 0x45b7 0x45b8 0x45b9 0x45ba 0x45bb 0x45bc 0x45bd 0x45be 0x45bf 0x45c0 0x45c1 0x45c2 0x45c3 0x45c4 0x45c5 0x45c6 0x45c7 0x45c8 0x45c9 0x45ca 0x45cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4626 -sibling_path: [ 0x4627 0x4628 0x4629 0x462a 0x462b 0x462c 0x462d 0x462e 0x462f 0x4630 0x4631 0x4632 0x4633 0x4634 0x4635 0x4636 0x4637 0x4638 0x4639 0x463a 0x463b 0x463c 0x463d 0x463e 0x463f 0x4640 0x4641 0x4642 0x4643 0x4644 0x4645 0x4646 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x46a1 -sibling_path: [ 0x46a2 0x46a3 0x46a4 0x46a5 0x46a6 0x46a7 0x46a8 0x46a9 0x46aa 0x46ab 0x46ac 0x46ad 0x46ae 0x46af 0x46b0 0x46b1 0x46b2 0x46b3 0x46b4 0x46b5 0x46b6 0x46b7 0x46b8 0x46b9 0x46ba 0x46bb 0x46bc 0x46bd 0x46be 0x46bf 0x46c0 0x46c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x471c -sibling_path: [ 0x471d 0x471e 0x471f 0x4720 0x4721 0x4722 0x4723 0x4724 0x4725 0x4726 0x4727 0x4728 0x4729 0x472a 0x472b 0x472c 0x472d 0x472e 0x472f 0x4730 0x4731 0x4732 0x4733 0x4734 0x4735 0x4736 0x4737 0x4738 0x4739 0x473a 0x473b 0x473c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4797 -sibling_path: [ 0x4798 0x4799 0x479a 0x479b 0x479c 0x479d 0x479e 0x479f 0x47a0 0x47a1 0x47a2 0x47a3 0x47a4 0x47a5 0x47a6 0x47a7 0x47a8 0x47a9 0x47aa 0x47ab 0x47ac 0x47ad 0x47ae 0x47af 0x47b0 0x47b1 0x47b2 0x47b3 0x47b4 0x47b5 0x47b6 0x47b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4812 -sibling_path: [ 0x4813 0x4814 0x4815 0x4816 0x4817 0x4818 0x4819 0x481a 0x481b 0x481c 0x481d 0x481e 0x481f 0x4820 0x4821 0x4822 0x4823 0x4824 0x4825 0x4826 0x4827 0x4828 0x4829 0x482a 0x482b 0x482c 0x482d 0x482e 0x482f 0x4830 0x4831 0x4832 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x488d -sibling_path: [ 0x488e 0x488f 0x4890 0x4891 0x4892 0x4893 0x4894 0x4895 0x4896 0x4897 0x4898 0x4899 0x489a 0x489b 0x489c 0x489d 0x489e 0x489f 0x48a0 0x48a1 0x48a2 0x48a3 0x48a4 0x48a5 0x48a6 0x48a7 0x48a8 0x48a9 0x48aa 0x48ab 0x48ac 0x48ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4908 -sibling_path: [ 0x4909 0x490a 0x490b 0x490c 0x490d 0x490e 0x490f 0x4910 0x4911 0x4912 0x4913 0x4914 0x4915 0x4916 0x4917 0x4918 0x4919 0x491a 0x491b 0x491c 0x491d 0x491e 0x491f 0x4920 0x4921 0x4922 0x4923 0x4924 0x4925 0x4926 0x4927 0x4928 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4983 -sibling_path: [ 0x4984 0x4985 0x4986 0x4987 0x4988 0x4989 0x498a 0x498b 0x498c 0x498d 0x498e 0x498f 0x4990 0x4991 0x4992 0x4993 0x4994 0x4995 0x4996 0x4997 0x4998 0x4999 0x499a 0x499b 0x499c 0x499d 0x499e 0x499f 0x49a0 0x49a1 0x49a2 0x49a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x49fe -sibling_path: [ 0x49ff 0x4a00 0x4a01 0x4a02 0x4a03 0x4a04 0x4a05 0x4a06 0x4a07 0x4a08 0x4a09 0x4a0a 0x4a0b 0x4a0c 0x4a0d 0x4a0e 0x4a0f 0x4a10 0x4a11 0x4a12 0x4a13 0x4a14 0x4a15 0x4a16 0x4a17 0x4a18 0x4a19 0x4a1a 0x4a1b 0x4a1c 0x4a1d 0x4a1e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4a79 -sibling_path: [ 0x4a7a 0x4a7b 0x4a7c 0x4a7d 0x4a7e 0x4a7f 0x4a80 0x4a81 0x4a82 0x4a83 0x4a84 0x4a85 0x4a86 0x4a87 0x4a88 0x4a89 0x4a8a 0x4a8b 0x4a8c 0x4a8d 0x4a8e 0x4a8f 0x4a90 0x4a91 0x4a92 0x4a93 0x4a94 0x4a95 0x4a96 0x4a97 0x4a98 0x4a99 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4af4 -sibling_path: [ 0x4af5 0x4af6 0x4af7 0x4af8 0x4af9 0x4afa 0x4afb 0x4afc 0x4afd 0x4afe 0x4aff 0x4b00 0x4b01 0x4b02 0x4b03 0x4b04 0x4b05 0x4b06 0x4b07 0x4b08 0x4b09 0x4b0a 0x4b0b 0x4b0c 0x4b0d 0x4b0e 0x4b0f 0x4b10 0x4b11 0x4b12 0x4b13 0x4b14 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4b6f -sibling_path: [ 0x4b70 0x4b71 0x4b72 0x4b73 0x4b74 0x4b75 0x4b76 0x4b77 0x4b78 0x4b79 0x4b7a 0x4b7b 0x4b7c 0x4b7d 0x4b7e 0x4b7f 0x4b80 0x4b81 0x4b82 0x4b83 0x4b84 0x4b85 0x4b86 0x4b87 0x4b88 0x4b89 0x4b8a 0x4b8b 0x4b8c 0x4b8d 0x4b8e 0x4b8f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4bea -sibling_path: [ 0x4beb 0x4bec 0x4bed 0x4bee 0x4bef 0x4bf0 0x4bf1 0x4bf2 0x4bf3 0x4bf4 0x4bf5 0x4bf6 0x4bf7 0x4bf8 0x4bf9 0x4bfa 0x4bfb 0x4bfc 0x4bfd 0x4bfe 0x4bff 0x4c00 0x4c01 0x4c02 0x4c03 0x4c04 0x4c05 0x4c06 0x4c07 0x4c08 0x4c09 0x4c0a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4c65 -sibling_path: [ 0x4c66 0x4c67 0x4c68 0x4c69 0x4c6a 0x4c6b 0x4c6c 0x4c6d 0x4c6e 0x4c6f 0x4c70 0x4c71 0x4c72 0x4c73 0x4c74 0x4c75 0x4c76 0x4c77 0x4c78 0x4c79 0x4c7a 0x4c7b 0x4c7c 0x4c7d 0x4c7e 0x4c7f 0x4c80 0x4c81 0x4c82 0x4c83 0x4c84 0x4c85 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4ce0 -sibling_path: [ 0x4ce1 0x4ce2 0x4ce3 0x4ce4 0x4ce5 0x4ce6 0x4ce7 0x4ce8 0x4ce9 0x4cea 0x4ceb 0x4cec 0x4ced 0x4cee 0x4cef 0x4cf0 0x4cf1 0x4cf2 0x4cf3 0x4cf4 0x4cf5 0x4cf6 0x4cf7 0x4cf8 0x4cf9 0x4cfa 0x4cfb 0x4cfc 0x4cfd 0x4cfe 0x4cff 0x4d00 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] @@ -1522,71 +1327,6 @@ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -read_request_membership_witnesses: [ leaf_index: 0x45ab -sibling_path: [ 0x45ac 0x45ad 0x45ae 0x45af 0x45b0 0x45b1 0x45b2 0x45b3 0x45b4 0x45b5 0x45b6 0x45b7 0x45b8 0x45b9 0x45ba 0x45bb 0x45bc 0x45bd 0x45be 0x45bf 0x45c0 0x45c1 0x45c2 0x45c3 0x45c4 0x45c5 0x45c6 0x45c7 0x45c8 0x45c9 0x45ca 0x45cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4626 -sibling_path: [ 0x4627 0x4628 0x4629 0x462a 0x462b 0x462c 0x462d 0x462e 0x462f 0x4630 0x4631 0x4632 0x4633 0x4634 0x4635 0x4636 0x4637 0x4638 0x4639 0x463a 0x463b 0x463c 0x463d 0x463e 0x463f 0x4640 0x4641 0x4642 0x4643 0x4644 0x4645 0x4646 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x46a1 -sibling_path: [ 0x46a2 0x46a3 0x46a4 0x46a5 0x46a6 0x46a7 0x46a8 0x46a9 0x46aa 0x46ab 0x46ac 0x46ad 0x46ae 0x46af 0x46b0 0x46b1 0x46b2 0x46b3 0x46b4 0x46b5 0x46b6 0x46b7 0x46b8 0x46b9 0x46ba 0x46bb 0x46bc 0x46bd 0x46be 0x46bf 0x46c0 0x46c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x471c -sibling_path: [ 0x471d 0x471e 0x471f 0x4720 0x4721 0x4722 0x4723 0x4724 0x4725 0x4726 0x4727 0x4728 0x4729 0x472a 0x472b 0x472c 0x472d 0x472e 0x472f 0x4730 0x4731 0x4732 0x4733 0x4734 0x4735 0x4736 0x4737 0x4738 0x4739 0x473a 0x473b 0x473c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4797 -sibling_path: [ 0x4798 0x4799 0x479a 0x479b 0x479c 0x479d 0x479e 0x479f 0x47a0 0x47a1 0x47a2 0x47a3 0x47a4 0x47a5 0x47a6 0x47a7 0x47a8 0x47a9 0x47aa 0x47ab 0x47ac 0x47ad 0x47ae 0x47af 0x47b0 0x47b1 0x47b2 0x47b3 0x47b4 0x47b5 0x47b6 0x47b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4812 -sibling_path: [ 0x4813 0x4814 0x4815 0x4816 0x4817 0x4818 0x4819 0x481a 0x481b 0x481c 0x481d 0x481e 0x481f 0x4820 0x4821 0x4822 0x4823 0x4824 0x4825 0x4826 0x4827 0x4828 0x4829 0x482a 0x482b 0x482c 0x482d 0x482e 0x482f 0x4830 0x4831 0x4832 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x488d -sibling_path: [ 0x488e 0x488f 0x4890 0x4891 0x4892 0x4893 0x4894 0x4895 0x4896 0x4897 0x4898 0x4899 0x489a 0x489b 0x489c 0x489d 0x489e 0x489f 0x48a0 0x48a1 0x48a2 0x48a3 0x48a4 0x48a5 0x48a6 0x48a7 0x48a8 0x48a9 0x48aa 0x48ab 0x48ac 0x48ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4908 -sibling_path: [ 0x4909 0x490a 0x490b 0x490c 0x490d 0x490e 0x490f 0x4910 0x4911 0x4912 0x4913 0x4914 0x4915 0x4916 0x4917 0x4918 0x4919 0x491a 0x491b 0x491c 0x491d 0x491e 0x491f 0x4920 0x4921 0x4922 0x4923 0x4924 0x4925 0x4926 0x4927 0x4928 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4983 -sibling_path: [ 0x4984 0x4985 0x4986 0x4987 0x4988 0x4989 0x498a 0x498b 0x498c 0x498d 0x498e 0x498f 0x4990 0x4991 0x4992 0x4993 0x4994 0x4995 0x4996 0x4997 0x4998 0x4999 0x499a 0x499b 0x499c 0x499d 0x499e 0x499f 0x49a0 0x49a1 0x49a2 0x49a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x49fe -sibling_path: [ 0x49ff 0x4a00 0x4a01 0x4a02 0x4a03 0x4a04 0x4a05 0x4a06 0x4a07 0x4a08 0x4a09 0x4a0a 0x4a0b 0x4a0c 0x4a0d 0x4a0e 0x4a0f 0x4a10 0x4a11 0x4a12 0x4a13 0x4a14 0x4a15 0x4a16 0x4a17 0x4a18 0x4a19 0x4a1a 0x4a1b 0x4a1c 0x4a1d 0x4a1e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4a79 -sibling_path: [ 0x4a7a 0x4a7b 0x4a7c 0x4a7d 0x4a7e 0x4a7f 0x4a80 0x4a81 0x4a82 0x4a83 0x4a84 0x4a85 0x4a86 0x4a87 0x4a88 0x4a89 0x4a8a 0x4a8b 0x4a8c 0x4a8d 0x4a8e 0x4a8f 0x4a90 0x4a91 0x4a92 0x4a93 0x4a94 0x4a95 0x4a96 0x4a97 0x4a98 0x4a99 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4af4 -sibling_path: [ 0x4af5 0x4af6 0x4af7 0x4af8 0x4af9 0x4afa 0x4afb 0x4afc 0x4afd 0x4afe 0x4aff 0x4b00 0x4b01 0x4b02 0x4b03 0x4b04 0x4b05 0x4b06 0x4b07 0x4b08 0x4b09 0x4b0a 0x4b0b 0x4b0c 0x4b0d 0x4b0e 0x4b0f 0x4b10 0x4b11 0x4b12 0x4b13 0x4b14 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4b6f -sibling_path: [ 0x4b70 0x4b71 0x4b72 0x4b73 0x4b74 0x4b75 0x4b76 0x4b77 0x4b78 0x4b79 0x4b7a 0x4b7b 0x4b7c 0x4b7d 0x4b7e 0x4b7f 0x4b80 0x4b81 0x4b82 0x4b83 0x4b84 0x4b85 0x4b86 0x4b87 0x4b88 0x4b89 0x4b8a 0x4b8b 0x4b8c 0x4b8d 0x4b8e 0x4b8f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4bea -sibling_path: [ 0x4beb 0x4bec 0x4bed 0x4bee 0x4bef 0x4bf0 0x4bf1 0x4bf2 0x4bf3 0x4bf4 0x4bf5 0x4bf6 0x4bf7 0x4bf8 0x4bf9 0x4bfa 0x4bfb 0x4bfc 0x4bfd 0x4bfe 0x4bff 0x4c00 0x4c01 0x4c02 0x4c03 0x4c04 0x4c05 0x4c06 0x4c07 0x4c08 0x4c09 0x4c0a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4c65 -sibling_path: [ 0x4c66 0x4c67 0x4c68 0x4c69 0x4c6a 0x4c6b 0x4c6c 0x4c6d 0x4c6e 0x4c6f 0x4c70 0x4c71 0x4c72 0x4c73 0x4c74 0x4c75 0x4c76 0x4c77 0x4c78 0x4c79 0x4c7a 0x4c7b 0x4c7c 0x4c7d 0x4c7e 0x4c7f 0x4c80 0x4c81 0x4c82 0x4c83 0x4c84 0x4c85 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4ce0 -sibling_path: [ 0x4ce1 0x4ce2 0x4ce3 0x4ce4 0x4ce5 0x4ce6 0x4ce7 0x4ce8 0x4ce9 0x4cea 0x4ceb 0x4cec 0x4ced 0x4cee 0x4cef 0x4cf0 0x4cf1 0x4cf2 0x4cf3 0x4cf4 0x4cf5 0x4cf6 0x4cf7 0x4cf8 0x4cf9 0x4cfa 0x4cfb 0x4cfc 0x4cfd 0x4cfe 0x4cff 0x4d00 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] @@ -1908,71 +1648,6 @@ proof_witness_indices: [ 7 8 9 10 11 12 ] has_data: 0 read_requests: [ 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e 0x8f 0x90 ] -read_request_membership_witnesses: [ leaf_index: 0x45ab -sibling_path: [ 0x45ac 0x45ad 0x45ae 0x45af 0x45b0 0x45b1 0x45b2 0x45b3 0x45b4 0x45b5 0x45b6 0x45b7 0x45b8 0x45b9 0x45ba 0x45bb 0x45bc 0x45bd 0x45be 0x45bf 0x45c0 0x45c1 0x45c2 0x45c3 0x45c4 0x45c5 0x45c6 0x45c7 0x45c8 0x45c9 0x45ca 0x45cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4626 -sibling_path: [ 0x4627 0x4628 0x4629 0x462a 0x462b 0x462c 0x462d 0x462e 0x462f 0x4630 0x4631 0x4632 0x4633 0x4634 0x4635 0x4636 0x4637 0x4638 0x4639 0x463a 0x463b 0x463c 0x463d 0x463e 0x463f 0x4640 0x4641 0x4642 0x4643 0x4644 0x4645 0x4646 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x46a1 -sibling_path: [ 0x46a2 0x46a3 0x46a4 0x46a5 0x46a6 0x46a7 0x46a8 0x46a9 0x46aa 0x46ab 0x46ac 0x46ad 0x46ae 0x46af 0x46b0 0x46b1 0x46b2 0x46b3 0x46b4 0x46b5 0x46b6 0x46b7 0x46b8 0x46b9 0x46ba 0x46bb 0x46bc 0x46bd 0x46be 0x46bf 0x46c0 0x46c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x471c -sibling_path: [ 0x471d 0x471e 0x471f 0x4720 0x4721 0x4722 0x4723 0x4724 0x4725 0x4726 0x4727 0x4728 0x4729 0x472a 0x472b 0x472c 0x472d 0x472e 0x472f 0x4730 0x4731 0x4732 0x4733 0x4734 0x4735 0x4736 0x4737 0x4738 0x4739 0x473a 0x473b 0x473c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4797 -sibling_path: [ 0x4798 0x4799 0x479a 0x479b 0x479c 0x479d 0x479e 0x479f 0x47a0 0x47a1 0x47a2 0x47a3 0x47a4 0x47a5 0x47a6 0x47a7 0x47a8 0x47a9 0x47aa 0x47ab 0x47ac 0x47ad 0x47ae 0x47af 0x47b0 0x47b1 0x47b2 0x47b3 0x47b4 0x47b5 0x47b6 0x47b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4812 -sibling_path: [ 0x4813 0x4814 0x4815 0x4816 0x4817 0x4818 0x4819 0x481a 0x481b 0x481c 0x481d 0x481e 0x481f 0x4820 0x4821 0x4822 0x4823 0x4824 0x4825 0x4826 0x4827 0x4828 0x4829 0x482a 0x482b 0x482c 0x482d 0x482e 0x482f 0x4830 0x4831 0x4832 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x488d -sibling_path: [ 0x488e 0x488f 0x4890 0x4891 0x4892 0x4893 0x4894 0x4895 0x4896 0x4897 0x4898 0x4899 0x489a 0x489b 0x489c 0x489d 0x489e 0x489f 0x48a0 0x48a1 0x48a2 0x48a3 0x48a4 0x48a5 0x48a6 0x48a7 0x48a8 0x48a9 0x48aa 0x48ab 0x48ac 0x48ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4908 -sibling_path: [ 0x4909 0x490a 0x490b 0x490c 0x490d 0x490e 0x490f 0x4910 0x4911 0x4912 0x4913 0x4914 0x4915 0x4916 0x4917 0x4918 0x4919 0x491a 0x491b 0x491c 0x491d 0x491e 0x491f 0x4920 0x4921 0x4922 0x4923 0x4924 0x4925 0x4926 0x4927 0x4928 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4983 -sibling_path: [ 0x4984 0x4985 0x4986 0x4987 0x4988 0x4989 0x498a 0x498b 0x498c 0x498d 0x498e 0x498f 0x4990 0x4991 0x4992 0x4993 0x4994 0x4995 0x4996 0x4997 0x4998 0x4999 0x499a 0x499b 0x499c 0x499d 0x499e 0x499f 0x49a0 0x49a1 0x49a2 0x49a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x49fe -sibling_path: [ 0x49ff 0x4a00 0x4a01 0x4a02 0x4a03 0x4a04 0x4a05 0x4a06 0x4a07 0x4a08 0x4a09 0x4a0a 0x4a0b 0x4a0c 0x4a0d 0x4a0e 0x4a0f 0x4a10 0x4a11 0x4a12 0x4a13 0x4a14 0x4a15 0x4a16 0x4a17 0x4a18 0x4a19 0x4a1a 0x4a1b 0x4a1c 0x4a1d 0x4a1e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4a79 -sibling_path: [ 0x4a7a 0x4a7b 0x4a7c 0x4a7d 0x4a7e 0x4a7f 0x4a80 0x4a81 0x4a82 0x4a83 0x4a84 0x4a85 0x4a86 0x4a87 0x4a88 0x4a89 0x4a8a 0x4a8b 0x4a8c 0x4a8d 0x4a8e 0x4a8f 0x4a90 0x4a91 0x4a92 0x4a93 0x4a94 0x4a95 0x4a96 0x4a97 0x4a98 0x4a99 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4af4 -sibling_path: [ 0x4af5 0x4af6 0x4af7 0x4af8 0x4af9 0x4afa 0x4afb 0x4afc 0x4afd 0x4afe 0x4aff 0x4b00 0x4b01 0x4b02 0x4b03 0x4b04 0x4b05 0x4b06 0x4b07 0x4b08 0x4b09 0x4b0a 0x4b0b 0x4b0c 0x4b0d 0x4b0e 0x4b0f 0x4b10 0x4b11 0x4b12 0x4b13 0x4b14 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4b6f -sibling_path: [ 0x4b70 0x4b71 0x4b72 0x4b73 0x4b74 0x4b75 0x4b76 0x4b77 0x4b78 0x4b79 0x4b7a 0x4b7b 0x4b7c 0x4b7d 0x4b7e 0x4b7f 0x4b80 0x4b81 0x4b82 0x4b83 0x4b84 0x4b85 0x4b86 0x4b87 0x4b88 0x4b89 0x4b8a 0x4b8b 0x4b8c 0x4b8d 0x4b8e 0x4b8f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4bea -sibling_path: [ 0x4beb 0x4bec 0x4bed 0x4bee 0x4bef 0x4bf0 0x4bf1 0x4bf2 0x4bf3 0x4bf4 0x4bf5 0x4bf6 0x4bf7 0x4bf8 0x4bf9 0x4bfa 0x4bfb 0x4bfc 0x4bfd 0x4bfe 0x4bff 0x4c00 0x4c01 0x4c02 0x4c03 0x4c04 0x4c05 0x4c06 0x4c07 0x4c08 0x4c09 0x4c0a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4c65 -sibling_path: [ 0x4c66 0x4c67 0x4c68 0x4c69 0x4c6a 0x4c6b 0x4c6c 0x4c6d 0x4c6e 0x4c6f 0x4c70 0x4c71 0x4c72 0x4c73 0x4c74 0x4c75 0x4c76 0x4c77 0x4c78 0x4c79 0x4c7a 0x4c7b 0x4c7c 0x4c7d 0x4c7e 0x4c7f 0x4c80 0x4c81 0x4c82 0x4c83 0x4c84 0x4c85 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x4ce0 -sibling_path: [ 0x4ce1 0x4ce2 0x4ce3 0x4ce4 0x4ce5 0x4ce6 0x4ce7 0x4ce8 0x4ce9 0x4cea 0x4ceb 0x4cec 0x4ced 0x4cee 0x4cef 0x4cf0 0x4cf1 0x4cf2 0x4cf3 0x4cf4 0x4cf5 0x4cf6 0x4cf7 0x4cf8 0x4cf9 0x4cfa 0x4cfb 0x4cfc 0x4cfd 0x4cfe 0x4cff 0x4d00 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10a 0x10b 0x10c 0x10d 0x10e 0x10f 0x110 ] new_nullifiers: [ 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f 0x210 ] nullified_commitments: [ 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f 0x310 ] diff --git a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts index 43f4134ab41..0a145480d44 100644 --- a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts @@ -15,16 +15,8 @@ import { NUM_FIELDS_PER_SHA256, } from '../../cbind/constants.gen.js'; import { assertMemberLength, makeTuple } from '../../index.js'; -import { makeEmptyReadRequestMembershipWitness } from '../../tests/factories.js'; import { serializeToBuffer } from '../../utils/serialize.js'; -import { - AggregationObject, - AztecAddress, - EthAddress, - Fr, - FunctionData, - ReadRequestMembershipWitness, -} from '../index.js'; +import { AggregationObject, AztecAddress, EthAddress, Fr, FunctionData } from '../index.js'; /** * The information assembled after the contract deployment was processed by the private kernel circuit. @@ -295,10 +287,6 @@ export class CombinedAccumulatedData { * All the read requests made in this transaction. */ public readRequests: Tuple, - /** - * All the read request membership witnesses made in this transaction. - */ - public readRequestMembershipWitnesses: Tuple, /** * The new commitments made in this transaction. */ @@ -360,7 +348,6 @@ export class CombinedAccumulatedData { public publicDataReads: Tuple, ) { assertMemberLength(this, 'readRequests', MAX_READ_REQUESTS_PER_TX); - assertMemberLength(this, 'readRequestMembershipWitnesses', MAX_READ_REQUESTS_PER_TX); assertMemberLength(this, 'newCommitments', MAX_NEW_COMMITMENTS_PER_TX); assertMemberLength(this, 'newNullifiers', MAX_NEW_NULLIFIERS_PER_TX); assertMemberLength(this, 'nullifiedCommitments', MAX_NEW_NULLIFIERS_PER_TX); @@ -379,7 +366,6 @@ export class CombinedAccumulatedData { return serializeToBuffer( this.aggregationObject, this.readRequests, - this.readRequestMembershipWitnesses, this.newCommitments, this.newNullifiers, this.nullifiedCommitments, @@ -411,7 +397,6 @@ export class CombinedAccumulatedData { return new CombinedAccumulatedData( reader.readObject(AggregationObject), reader.readArray(MAX_READ_REQUESTS_PER_TX, Fr), - reader.readArray(MAX_READ_REQUESTS_PER_TX, ReadRequestMembershipWitness), reader.readArray(MAX_NEW_COMMITMENTS_PER_TX, Fr), reader.readArray(MAX_NEW_NULLIFIERS_PER_TX, Fr), reader.readArray(MAX_NEW_NULLIFIERS_PER_TX, Fr), @@ -433,7 +418,6 @@ export class CombinedAccumulatedData { return new CombinedAccumulatedData( finalData.aggregationObject, makeTuple(MAX_READ_REQUESTS_PER_TX, Fr.zero), - makeTuple(MAX_READ_REQUESTS_PER_TX, makeEmptyReadRequestMembershipWitness), finalData.newCommitments, finalData.newNullifiers, finalData.nullifiedCommitments, @@ -464,7 +448,6 @@ export class CombinedAccumulatedData { return new CombinedAccumulatedData( AggregationObject.makeFake(), makeTuple(MAX_READ_REQUESTS_PER_TX, Fr.zero), - makeTuple(MAX_READ_REQUESTS_PER_TX, () => ReadRequestMembershipWitness.empty(BigInt(0))), makeTuple(MAX_NEW_COMMITMENTS_PER_TX, Fr.zero), makeTuple(MAX_NEW_NULLIFIERS_PER_TX, Fr.zero), makeTuple(MAX_NEW_NULLIFIERS_PER_TX, Fr.zero), diff --git a/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts b/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts index 4221652a65e..a7f2a5a8898 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts @@ -1,10 +1,12 @@ import { EthAddress } from '@aztec/foundation/eth-address'; +import { Tuple } from '@aztec/foundation/serialize'; import { CONTRACT_TREE_HEIGHT, FUNCTION_TREE_HEIGHT, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_READ_REQUESTS_PER_CALL, + MAX_READ_REQUESTS_PER_TX, } from '../../cbind/constants.gen.js'; import { FieldsOf, assertMemberLength } from '../../utils/jsUtils.js'; import { serializeToBuffer } from '../../utils/serialize.js'; @@ -145,3 +147,27 @@ export class PrivateKernelInputsInner { return serializeToBuffer(this.previousKernel, this.privateCall); } } + +/** + * Input to the private kernel circuit - Final ordering call. + */ +export class PrivateKernelInputsOrdering { + constructor( + /** + * The previous kernel data + */ + public previousKernel: PreviousKernelData, + /** + * Contains hints for the transient read requests to localize corresponding commitments. + */ + public hintToCommitments: Tuple, + ) {} + + /** + * Serialize this as a buffer. + * @returns The buffer. + */ + toBuffer() { + return serializeToBuffer(this.previousKernel, this.hintToCommitments); + } +} diff --git a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap index 5daeee3be24..7625a2b24b0 100644 --- a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap @@ -16,71 +16,6 @@ proof_witness_indices: [ 106 107 108 109 10a 10b ] has_data: 0 read_requests: [ 0x180 0x181 0x182 0x183 0x184 0x185 0x186 0x187 0x188 0x189 0x18a 0x18b 0x18c 0x18d 0x18e 0x18f ] -read_request_membership_witnesses: [ leaf_index: 0xc030 -sibling_path: [ 0xc031 0xc032 0xc033 0xc034 0xc035 0xc036 0xc037 0xc038 0xc039 0xc03a 0xc03b 0xc03c 0xc03d 0xc03e 0xc03f 0xc040 0xc041 0xc042 0xc043 0xc044 0xc045 0xc046 0xc047 0xc048 0xc049 0xc04a 0xc04b 0xc04c 0xc04d 0xc04e 0xc04f 0xc050 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc0ab -sibling_path: [ 0xc0ac 0xc0ad 0xc0ae 0xc0af 0xc0b0 0xc0b1 0xc0b2 0xc0b3 0xc0b4 0xc0b5 0xc0b6 0xc0b7 0xc0b8 0xc0b9 0xc0ba 0xc0bb 0xc0bc 0xc0bd 0xc0be 0xc0bf 0xc0c0 0xc0c1 0xc0c2 0xc0c3 0xc0c4 0xc0c5 0xc0c6 0xc0c7 0xc0c8 0xc0c9 0xc0ca 0xc0cb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc126 -sibling_path: [ 0xc127 0xc128 0xc129 0xc12a 0xc12b 0xc12c 0xc12d 0xc12e 0xc12f 0xc130 0xc131 0xc132 0xc133 0xc134 0xc135 0xc136 0xc137 0xc138 0xc139 0xc13a 0xc13b 0xc13c 0xc13d 0xc13e 0xc13f 0xc140 0xc141 0xc142 0xc143 0xc144 0xc145 0xc146 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc1a1 -sibling_path: [ 0xc1a2 0xc1a3 0xc1a4 0xc1a5 0xc1a6 0xc1a7 0xc1a8 0xc1a9 0xc1aa 0xc1ab 0xc1ac 0xc1ad 0xc1ae 0xc1af 0xc1b0 0xc1b1 0xc1b2 0xc1b3 0xc1b4 0xc1b5 0xc1b6 0xc1b7 0xc1b8 0xc1b9 0xc1ba 0xc1bb 0xc1bc 0xc1bd 0xc1be 0xc1bf 0xc1c0 0xc1c1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc21c -sibling_path: [ 0xc21d 0xc21e 0xc21f 0xc220 0xc221 0xc222 0xc223 0xc224 0xc225 0xc226 0xc227 0xc228 0xc229 0xc22a 0xc22b 0xc22c 0xc22d 0xc22e 0xc22f 0xc230 0xc231 0xc232 0xc233 0xc234 0xc235 0xc236 0xc237 0xc238 0xc239 0xc23a 0xc23b 0xc23c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc297 -sibling_path: [ 0xc298 0xc299 0xc29a 0xc29b 0xc29c 0xc29d 0xc29e 0xc29f 0xc2a0 0xc2a1 0xc2a2 0xc2a3 0xc2a4 0xc2a5 0xc2a6 0xc2a7 0xc2a8 0xc2a9 0xc2aa 0xc2ab 0xc2ac 0xc2ad 0xc2ae 0xc2af 0xc2b0 0xc2b1 0xc2b2 0xc2b3 0xc2b4 0xc2b5 0xc2b6 0xc2b7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc312 -sibling_path: [ 0xc313 0xc314 0xc315 0xc316 0xc317 0xc318 0xc319 0xc31a 0xc31b 0xc31c 0xc31d 0xc31e 0xc31f 0xc320 0xc321 0xc322 0xc323 0xc324 0xc325 0xc326 0xc327 0xc328 0xc329 0xc32a 0xc32b 0xc32c 0xc32d 0xc32e 0xc32f 0xc330 0xc331 0xc332 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc38d -sibling_path: [ 0xc38e 0xc38f 0xc390 0xc391 0xc392 0xc393 0xc394 0xc395 0xc396 0xc397 0xc398 0xc399 0xc39a 0xc39b 0xc39c 0xc39d 0xc39e 0xc39f 0xc3a0 0xc3a1 0xc3a2 0xc3a3 0xc3a4 0xc3a5 0xc3a6 0xc3a7 0xc3a8 0xc3a9 0xc3aa 0xc3ab 0xc3ac 0xc3ad ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc408 -sibling_path: [ 0xc409 0xc40a 0xc40b 0xc40c 0xc40d 0xc40e 0xc40f 0xc410 0xc411 0xc412 0xc413 0xc414 0xc415 0xc416 0xc417 0xc418 0xc419 0xc41a 0xc41b 0xc41c 0xc41d 0xc41e 0xc41f 0xc420 0xc421 0xc422 0xc423 0xc424 0xc425 0xc426 0xc427 0xc428 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc483 -sibling_path: [ 0xc484 0xc485 0xc486 0xc487 0xc488 0xc489 0xc48a 0xc48b 0xc48c 0xc48d 0xc48e 0xc48f 0xc490 0xc491 0xc492 0xc493 0xc494 0xc495 0xc496 0xc497 0xc498 0xc499 0xc49a 0xc49b 0xc49c 0xc49d 0xc49e 0xc49f 0xc4a0 0xc4a1 0xc4a2 0xc4a3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc4fe -sibling_path: [ 0xc4ff 0xc500 0xc501 0xc502 0xc503 0xc504 0xc505 0xc506 0xc507 0xc508 0xc509 0xc50a 0xc50b 0xc50c 0xc50d 0xc50e 0xc50f 0xc510 0xc511 0xc512 0xc513 0xc514 0xc515 0xc516 0xc517 0xc518 0xc519 0xc51a 0xc51b 0xc51c 0xc51d 0xc51e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc579 -sibling_path: [ 0xc57a 0xc57b 0xc57c 0xc57d 0xc57e 0xc57f 0xc580 0xc581 0xc582 0xc583 0xc584 0xc585 0xc586 0xc587 0xc588 0xc589 0xc58a 0xc58b 0xc58c 0xc58d 0xc58e 0xc58f 0xc590 0xc591 0xc592 0xc593 0xc594 0xc595 0xc596 0xc597 0xc598 0xc599 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc5f4 -sibling_path: [ 0xc5f5 0xc5f6 0xc5f7 0xc5f8 0xc5f9 0xc5fa 0xc5fb 0xc5fc 0xc5fd 0xc5fe 0xc5ff 0xc600 0xc601 0xc602 0xc603 0xc604 0xc605 0xc606 0xc607 0xc608 0xc609 0xc60a 0xc60b 0xc60c 0xc60d 0xc60e 0xc60f 0xc610 0xc611 0xc612 0xc613 0xc614 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc66f -sibling_path: [ 0xc670 0xc671 0xc672 0xc673 0xc674 0xc675 0xc676 0xc677 0xc678 0xc679 0xc67a 0xc67b 0xc67c 0xc67d 0xc67e 0xc67f 0xc680 0xc681 0xc682 0xc683 0xc684 0xc685 0xc686 0xc687 0xc688 0xc689 0xc68a 0xc68b 0xc68c 0xc68d 0xc68e 0xc68f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc6ea -sibling_path: [ 0xc6eb 0xc6ec 0xc6ed 0xc6ee 0xc6ef 0xc6f0 0xc6f1 0xc6f2 0xc6f3 0xc6f4 0xc6f5 0xc6f6 0xc6f7 0xc6f8 0xc6f9 0xc6fa 0xc6fb 0xc6fc 0xc6fd 0xc6fe 0xc6ff 0xc700 0xc701 0xc702 0xc703 0xc704 0xc705 0xc706 0xc707 0xc708 0xc709 0xc70a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0xc765 -sibling_path: [ 0xc766 0xc767 0xc768 0xc769 0xc76a 0xc76b 0xc76c 0xc76d 0xc76e 0xc76f 0xc770 0xc771 0xc772 0xc773 0xc774 0xc775 0xc776 0xc777 0xc778 0xc779 0xc77a 0xc77b 0xc77c 0xc77d 0xc77e 0xc77f 0xc780 0xc781 0xc782 0xc783 0xc784 0xc785 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x200 0x201 0x202 0x203 0x204 0x205 0x206 0x207 0x208 0x209 0x20a 0x20b 0x20c 0x20d 0x20e 0x20f ] new_nullifiers: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f ] nullified_commitments: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f ] @@ -292,71 +227,6 @@ proof_witness_indices: [ 206 207 208 209 20a 20b ] has_data: 0 read_requests: [ 0x280 0x281 0x282 0x283 0x284 0x285 0x286 0x287 0x288 0x289 0x28a 0x28b 0x28c 0x28d 0x28e 0x28f ] -read_request_membership_witnesses: [ leaf_index: 0x13b30 -sibling_path: [ 0x13b31 0x13b32 0x13b33 0x13b34 0x13b35 0x13b36 0x13b37 0x13b38 0x13b39 0x13b3a 0x13b3b 0x13b3c 0x13b3d 0x13b3e 0x13b3f 0x13b40 0x13b41 0x13b42 0x13b43 0x13b44 0x13b45 0x13b46 0x13b47 0x13b48 0x13b49 0x13b4a 0x13b4b 0x13b4c 0x13b4d 0x13b4e 0x13b4f 0x13b50 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13bab -sibling_path: [ 0x13bac 0x13bad 0x13bae 0x13baf 0x13bb0 0x13bb1 0x13bb2 0x13bb3 0x13bb4 0x13bb5 0x13bb6 0x13bb7 0x13bb8 0x13bb9 0x13bba 0x13bbb 0x13bbc 0x13bbd 0x13bbe 0x13bbf 0x13bc0 0x13bc1 0x13bc2 0x13bc3 0x13bc4 0x13bc5 0x13bc6 0x13bc7 0x13bc8 0x13bc9 0x13bca 0x13bcb ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13c26 -sibling_path: [ 0x13c27 0x13c28 0x13c29 0x13c2a 0x13c2b 0x13c2c 0x13c2d 0x13c2e 0x13c2f 0x13c30 0x13c31 0x13c32 0x13c33 0x13c34 0x13c35 0x13c36 0x13c37 0x13c38 0x13c39 0x13c3a 0x13c3b 0x13c3c 0x13c3d 0x13c3e 0x13c3f 0x13c40 0x13c41 0x13c42 0x13c43 0x13c44 0x13c45 0x13c46 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13ca1 -sibling_path: [ 0x13ca2 0x13ca3 0x13ca4 0x13ca5 0x13ca6 0x13ca7 0x13ca8 0x13ca9 0x13caa 0x13cab 0x13cac 0x13cad 0x13cae 0x13caf 0x13cb0 0x13cb1 0x13cb2 0x13cb3 0x13cb4 0x13cb5 0x13cb6 0x13cb7 0x13cb8 0x13cb9 0x13cba 0x13cbb 0x13cbc 0x13cbd 0x13cbe 0x13cbf 0x13cc0 0x13cc1 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13d1c -sibling_path: [ 0x13d1d 0x13d1e 0x13d1f 0x13d20 0x13d21 0x13d22 0x13d23 0x13d24 0x13d25 0x13d26 0x13d27 0x13d28 0x13d29 0x13d2a 0x13d2b 0x13d2c 0x13d2d 0x13d2e 0x13d2f 0x13d30 0x13d31 0x13d32 0x13d33 0x13d34 0x13d35 0x13d36 0x13d37 0x13d38 0x13d39 0x13d3a 0x13d3b 0x13d3c ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13d97 -sibling_path: [ 0x13d98 0x13d99 0x13d9a 0x13d9b 0x13d9c 0x13d9d 0x13d9e 0x13d9f 0x13da0 0x13da1 0x13da2 0x13da3 0x13da4 0x13da5 0x13da6 0x13da7 0x13da8 0x13da9 0x13daa 0x13dab 0x13dac 0x13dad 0x13dae 0x13daf 0x13db0 0x13db1 0x13db2 0x13db3 0x13db4 0x13db5 0x13db6 0x13db7 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13e12 -sibling_path: [ 0x13e13 0x13e14 0x13e15 0x13e16 0x13e17 0x13e18 0x13e19 0x13e1a 0x13e1b 0x13e1c 0x13e1d 0x13e1e 0x13e1f 0x13e20 0x13e21 0x13e22 0x13e23 0x13e24 0x13e25 0x13e26 0x13e27 0x13e28 0x13e29 0x13e2a 0x13e2b 0x13e2c 0x13e2d 0x13e2e 0x13e2f 0x13e30 0x13e31 0x13e32 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13e8d -sibling_path: [ 0x13e8e 0x13e8f 0x13e90 0x13e91 0x13e92 0x13e93 0x13e94 0x13e95 0x13e96 0x13e97 0x13e98 0x13e99 0x13e9a 0x13e9b 0x13e9c 0x13e9d 0x13e9e 0x13e9f 0x13ea0 0x13ea1 0x13ea2 0x13ea3 0x13ea4 0x13ea5 0x13ea6 0x13ea7 0x13ea8 0x13ea9 0x13eaa 0x13eab 0x13eac 0x13ead ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13f08 -sibling_path: [ 0x13f09 0x13f0a 0x13f0b 0x13f0c 0x13f0d 0x13f0e 0x13f0f 0x13f10 0x13f11 0x13f12 0x13f13 0x13f14 0x13f15 0x13f16 0x13f17 0x13f18 0x13f19 0x13f1a 0x13f1b 0x13f1c 0x13f1d 0x13f1e 0x13f1f 0x13f20 0x13f21 0x13f22 0x13f23 0x13f24 0x13f25 0x13f26 0x13f27 0x13f28 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13f83 -sibling_path: [ 0x13f84 0x13f85 0x13f86 0x13f87 0x13f88 0x13f89 0x13f8a 0x13f8b 0x13f8c 0x13f8d 0x13f8e 0x13f8f 0x13f90 0x13f91 0x13f92 0x13f93 0x13f94 0x13f95 0x13f96 0x13f97 0x13f98 0x13f99 0x13f9a 0x13f9b 0x13f9c 0x13f9d 0x13f9e 0x13f9f 0x13fa0 0x13fa1 0x13fa2 0x13fa3 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x13ffe -sibling_path: [ 0x13fff 0x14000 0x14001 0x14002 0x14003 0x14004 0x14005 0x14006 0x14007 0x14008 0x14009 0x1400a 0x1400b 0x1400c 0x1400d 0x1400e 0x1400f 0x14010 0x14011 0x14012 0x14013 0x14014 0x14015 0x14016 0x14017 0x14018 0x14019 0x1401a 0x1401b 0x1401c 0x1401d 0x1401e ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x14079 -sibling_path: [ 0x1407a 0x1407b 0x1407c 0x1407d 0x1407e 0x1407f 0x14080 0x14081 0x14082 0x14083 0x14084 0x14085 0x14086 0x14087 0x14088 0x14089 0x1408a 0x1408b 0x1408c 0x1408d 0x1408e 0x1408f 0x14090 0x14091 0x14092 0x14093 0x14094 0x14095 0x14096 0x14097 0x14098 0x14099 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x140f4 -sibling_path: [ 0x140f5 0x140f6 0x140f7 0x140f8 0x140f9 0x140fa 0x140fb 0x140fc 0x140fd 0x140fe 0x140ff 0x14100 0x14101 0x14102 0x14103 0x14104 0x14105 0x14106 0x14107 0x14108 0x14109 0x1410a 0x1410b 0x1410c 0x1410d 0x1410e 0x1410f 0x14110 0x14111 0x14112 0x14113 0x14114 ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x1416f -sibling_path: [ 0x14170 0x14171 0x14172 0x14173 0x14174 0x14175 0x14176 0x14177 0x14178 0x14179 0x1417a 0x1417b 0x1417c 0x1417d 0x1417e 0x1417f 0x14180 0x14181 0x14182 0x14183 0x14184 0x14185 0x14186 0x14187 0x14188 0x14189 0x1418a 0x1418b 0x1418c 0x1418d 0x1418e 0x1418f ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x141ea -sibling_path: [ 0x141eb 0x141ec 0x141ed 0x141ee 0x141ef 0x141f0 0x141f1 0x141f2 0x141f3 0x141f4 0x141f5 0x141f6 0x141f7 0x141f8 0x141f9 0x141fa 0x141fb 0x141fc 0x141fd 0x141fe 0x141ff 0x14200 0x14201 0x14202 0x14203 0x14204 0x14205 0x14206 0x14207 0x14208 0x14209 0x1420a ] -is_transient: 0 -hint_to_commitment: 0x0 - leaf_index: 0x14265 -sibling_path: [ 0x14266 0x14267 0x14268 0x14269 0x1426a 0x1426b 0x1426c 0x1426d 0x1426e 0x1426f 0x14270 0x14271 0x14272 0x14273 0x14274 0x14275 0x14276 0x14277 0x14278 0x14279 0x1427a 0x1427b 0x1427c 0x1427d 0x1427e 0x1427f 0x14280 0x14281 0x14282 0x14283 0x14284 0x14285 ] -is_transient: 0 -hint_to_commitment: 0x0 - ] new_commitments: [ 0x300 0x301 0x302 0x303 0x304 0x305 0x306 0x307 0x308 0x309 0x30a 0x30b 0x30c 0x30d 0x30e 0x30f ] new_nullifiers: [ 0x400 0x401 0x402 0x403 0x404 0x405 0x406 0x407 0x408 0x409 0x40a 0x40b 0x40c 0x40d 0x40e 0x40f ] nullified_commitments: [ 0x500 0x501 0x502 0x503 0x504 0x505 0x506 0x507 0x508 0x509 0x50a 0x50b 0x50c 0x50d 0x50e 0x50f ] diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 17a3a72340f..fe5d2be747e 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -204,7 +204,6 @@ export function makeAccumulatedData(seed = 1, full = false): CombinedAccumulated return new CombinedAccumulatedData( makeAggregationObject(seed), tupleGenerator(MAX_READ_REQUESTS_PER_TX, fr, seed + 0x80), - tupleGenerator(MAX_READ_REQUESTS_PER_TX, i => makeReadRequestMembershipWitness(i * 123), seed + 0x90), tupleGenerator(MAX_NEW_COMMITMENTS_PER_TX, fr, seed + 0x100), tupleGenerator(MAX_NEW_NULLIFIERS_PER_TX, fr, seed + 0x200), tupleGenerator(MAX_NEW_NULLIFIERS_PER_TX, fr, seed + 0x300),