diff --git a/include/nil/blueprint/component.hpp b/include/nil/blueprint/component.hpp index 8dd22593da..694477dd20 100644 --- a/include/nil/blueprint/component.hpp +++ b/include/nil/blueprint/component.hpp @@ -51,7 +51,7 @@ namespace nil { using witness_container_type = std::array; using constant_container_type = std::array; using public_input_container_type = std::array; - + public: witness_container_type _W; @@ -63,7 +63,7 @@ namespace nil { /** * Get Witness column global index by its internal index. - * + * * @param[in] internal witness signed index. For -1, last witness assumed. */ typename witness_container_type::value_type W(std::int32_t index) const { @@ -72,7 +72,7 @@ namespace nil { /** * Get Constant column global index by its internal index. - * + * * @param[in] internal constant signed index. For -1, last constant assumed. */ typename constant_container_type::value_type C(std::int32_t index) const { @@ -81,7 +81,7 @@ namespace nil { /** * Get Public Input column global index by its internal index. - * + * * @param[in] internal public input signed index. For -1, last public input assumed. */ typename public_input_container_type::value_type PI(std::int32_t index) const { @@ -93,7 +93,7 @@ namespace nil { /** * Constructor from arbitrary container types. - * + * * @tparam WitnessContainerType Input Witness Container Type * @tparam ConstantContainerType Input Constant Container Type * @tparam PublicInputContainerType Input PublicInput Container Type @@ -122,6 +122,8 @@ namespace nil { return _PI.size(); } + virtual detail::blueprint_component_id_type get_id() const { return std::string(""); }; + template friend detail::blueprint_component_id_type detail::get_component_id (ComponentType component); }; @@ -135,7 +137,7 @@ namespace nil { // ConstantAmount, PublicInputAmount> // std::size_t operator() (const component, WitnessAmount, // ConstantAmount, PublicInputAmount> &node) const { - + // } // }; @@ -155,6 +157,8 @@ namespace nil { public: r1cs_component(blueprint &bp) : bp(bp) { } + + virtual detail::blueprint_component_id_type get_id() const { return std::string(""); }; }; } // namespace components diff --git a/include/nil/blueprint/components/algebra/fields/plonk/bit_shift_constant.hpp b/include/nil/blueprint/components/algebra/fields/plonk/bit_shift_constant.hpp index 6c34707bef..45cf71120d 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/bit_shift_constant.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/bit_shift_constant.hpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,8 @@ #include #include +#include +#include namespace nil { namespace blueprint { @@ -119,6 +122,12 @@ namespace nil { } }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << mode << "_" << shift; + return ss.str(); + } + template bit_shift_constant(ContainerType witness, std::uint32_t bits_amount, std::uint32_t shift_, bit_shift_mode mode_) : diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_composition.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_composition.hpp index b069a06885..f180437f8a 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_composition.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_composition.hpp @@ -30,10 +30,13 @@ #include #include #include +#include #include #include +#include +#include using nil::blueprint::components::detail::bit_builder_component; using nil::blueprint::components::detail::bit_composition_mode; @@ -86,6 +89,12 @@ namespace nil { } }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << mode << "_" << this->bits_amount << "_" << this->check_bits; + return ss.str(); + } + template bit_composition(ContainerType witness, std::uint32_t bits_amount, bool check_input, bit_composition_mode mode_) : diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp index 961bce1ddc..e68242ab87 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp @@ -33,11 +33,14 @@ #include #include #include +#include #include #include #include +#include +#include using nil::blueprint::components::detail::bit_builder_component; using nil::blueprint::components::detail::bit_composition_mode; @@ -60,7 +63,7 @@ namespace nil { WitnessesAmount> : public bit_builder_component, + BlueprintFieldType, ArithmetizationParams>, WitnessesAmount> { using component_type = @@ -95,6 +98,12 @@ namespace nil { } }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << mode << "_" << this->bits_amount; + return ss.str(); + } + template bit_decomposition(ContainerType witness, std::uint32_t bits_amount, bit_composition_mode mode_) : diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp index e549c988d2..66256d23c7 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp @@ -32,11 +32,14 @@ #include #include #include +#include #include #include #include +#include +#include namespace nil { namespace blueprint { @@ -149,6 +152,12 @@ namespace nil { result_type(const comparison_checked &component, std::size_t start_row_index) {} }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << bits_amount << "_" << mode; + return ss.str(); + } + #define __comparison_checked_init_macro(bits_amount_, mode_) \ bits_amount(bits_amount_), \ mode(mode_), \ diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp index 8a028fb097..5de34dd913 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp @@ -34,11 +34,14 @@ #include #include #include +#include #include #include #include +#include +#include namespace nil { namespace blueprint { @@ -163,6 +166,12 @@ namespace nil { } }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << bits_amount << "_" << mode; + return ss.str(); + } + #define __comparison_flag_init_macro(bits_amount_, mode_) \ bits_amount(bits_amount_), \ mode(mode_), \ diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_unchecked.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_unchecked.hpp index 569a8078eb..9033fee5b2 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_unchecked.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_unchecked.hpp @@ -32,12 +32,15 @@ #include #include #include +#include #include #include #include #include +#include +#include namespace nil { namespace blueprint { @@ -106,6 +109,12 @@ namespace nil { result_type(const comparison_unchecked &component, std::size_t start_row_index) {} }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << bits_amount << "_" << mode; + return ss.str(); + } + #define __comparison_unchecked_init_macro(witness, constant, public_input, bits_amount_, mode_) \ bits_amount(bits_amount_), \ mode(mode_), \ diff --git a/include/nil/blueprint/components/algebra/fields/plonk/non_native/division_remainder.hpp b/include/nil/blueprint/components/algebra/fields/plonk/non_native/division_remainder.hpp index 935e71257f..e822555b20 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/non_native/division_remainder.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/non_native/division_remainder.hpp @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -39,6 +40,8 @@ #include #include +#include +#include namespace nil { namespace blueprint { @@ -122,6 +125,12 @@ namespace nil { } }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << bits_amount << "_" << check_inputs; + return ss.str(); + } + #define __division_remainder_init_macro(witness, constant, public_input, \ bits_amount_, check_inputs_) \ bits_amount(bits_amount_), \ diff --git a/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp b/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp index 756e8363f0..d1bfc67557 100644 --- a/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp +++ b/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp @@ -35,9 +35,12 @@ #include #include #include +#include #include #include +#include +#include namespace nil { namespace blueprint { @@ -116,6 +119,12 @@ namespace nil { result_type(const range_check &component, std::size_t start_row_index) {} }; + nil::blueprint::detail::blueprint_component_id_type get_id() const override { + std::stringstream ss; + ss << "_" << WitnessesAmount << "_" << bits_amount; + return ss.str(); + } + #define __range_check_init_macro(bits_amount_) \ bits_amount(bits_amount_), \ rows_amount(rows(bits_amount_)), \ diff --git a/include/nil/blueprint/detail/get_component_id.hpp b/include/nil/blueprint/detail/get_component_id.hpp index 164c229de0..02189b718a 100644 --- a/include/nil/blueprint/detail/get_component_id.hpp +++ b/include/nil/blueprint/detail/get_component_id.hpp @@ -27,6 +27,8 @@ #define CRYPTO3_BLUEPRINT_DETAIL_COMPONENT_ID_HPP #include +#include +#include namespace nil { namespace blueprint { @@ -38,7 +40,7 @@ namespace nil { blueprint_component_id_type get_component_id(const ComponentType& component) { std::stringstream id; - id << typeid(component).name(); + id << typeid(component).name() << component.get_id(); return id.str(); } } // namespace detail