From 29f5ce555ec37b4b2701cc5444e6b5e3adc47e6e Mon Sep 17 00:00:00 2001 From: Rahul Kothari Date: Tue, 4 Apr 2023 10:11:05 +0000 Subject: [PATCH] add rollup subtree height --- .../rollup/base/base_or_merge_rollup_public_inputs.hpp | 8 ++++++++ .../circuits/rollup/base/native_base_rollup_circuit.cpp | 1 + .../circuits/rollup/root/native_root_rollup_circuit.cpp | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp b/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp index 88923618..e5a1042b 100644 --- a/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp +++ b/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp @@ -27,6 +27,9 @@ template struct BaseOrMergeRollupPublicInputs { AggregationObject end_aggregation_object; ConstantRollupData constants; + // subtree height is always 0 for base. + // so that we always pass-in two base/merge circuits of the same height into the next level of recursion + fr rollup_subtree_height; AppendOnlyTreeSnapshot start_private_data_tree_snapshot; AppendOnlyTreeSnapshot end_private_data_tree_snapshot; @@ -52,6 +55,7 @@ template void read(uint8_t const*& it, BaseOrMergeRollupPublicInp read(it, obj.rollup_subtree_height); read(it, obj.end_aggregation_object); read(it, obj.constants); + read(it, obj.rollup_subtree_height); read(it, obj.start_private_data_tree_snapshot); read(it, obj.end_private_data_tree_snapshot); read(it, obj.start_nullifier_tree_snapshot); @@ -69,6 +73,7 @@ template void write(std::vector& buf, BaseOrMergeRollupP write(buf, obj.rollup_subtree_height); write(buf, obj.end_aggregation_object); write(buf, obj.constants); + write(buf, obj.rollup_subtree_height); write(buf, obj.start_private_data_tree_snapshot); write(buf, obj.end_private_data_tree_snapshot); write(buf, obj.start_nullifier_tree_snapshot); @@ -89,6 +94,9 @@ template std::ostream& operator<<(std::ostream& os, BaseOrMergeRo << "\n" "constants:\n" << obj.constants + << "\n" + "rollup_subtree_height:\n" + << obj.rollup_subtree_height << "\n" "start_private_data_tree_snapshot:\n" << obj.start_private_data_tree_snapshot diff --git a/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp b/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp index a857f90c..2f512b68 100644 --- a/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp +++ b/cpp/src/aztec3/circuits/rollup/base/native_base_rollup_circuit.cpp @@ -509,6 +509,7 @@ BaseOrMergeRollupPublicInputs base_rollup_circuit(BaseRollupInputs baseRollupInp .rollup_subtree_height = fr(0), .end_aggregation_object = aggregation_object, .constants = baseRollupInputs.constants, + .rollup_subtree_height = fr(0), .start_private_data_tree_snapshot = baseRollupInputs.start_private_data_tree_snapshot, .end_private_data_tree_snapshot = end_private_data_tree_snapshot, .start_nullifier_tree_snapshot = baseRollupInputs.start_nullifier_tree_snapshot, diff --git a/cpp/src/aztec3/circuits/rollup/root/native_root_rollup_circuit.cpp b/cpp/src/aztec3/circuits/rollup/root/native_root_rollup_circuit.cpp index b88eaddc..bca25fbb 100644 --- a/cpp/src/aztec3/circuits/rollup/root/native_root_rollup_circuit.cpp +++ b/cpp/src/aztec3/circuits/rollup/root/native_root_rollup_circuit.cpp @@ -52,6 +52,13 @@ void assert_both_input_proofs_of_same_rollup_height(RootRollupInputs rootRollupI (void)rootRollupInputs; } +void assert_both_input_proofs_of_same_rollup_height(RootRollupInputs rootRollupInputs) +{ + assert(rootRollupInputs.previous_rollup_data[0].merge_rollup_public_inputs.rollup_subtree_height == + rootRollupInputs.previous_rollup_data[1].merge_rollup_public_inputs.rollup_subtree_height); + (void)rootRollupInputs; +} + bool is_constants_equal(ConstantRollupData left, ConstantRollupData right) { return left == right;