Skip to content

Commit a00566c

Browse files
authored
chore: remove circuit simulator (#13689)
Remove all code related to the `CircuitSimulator`. The idea of the `CircuitSimulator` was to allow us to write our verification algorithms once and for all in "circuit" format then achieve recursive verification through supplying a real builder (e.g. Ultra/Mega) and native verification through supplying the `CircuitSimulator`. The motivation was that the recursive circuits should be the first class objects, rather than their native counterparts. In practice this proved to be too complicated and was never used. We don't have time to flesh it out at this point and it adds a very high degree of complexity and clutter to some of our most complex code.
1 parent 0e604a1 commit a00566c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+356
-1076
lines changed

barretenberg/cpp/src/barretenberg/benchmark/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ add_subdirectory(bb_cli_bench)
66
add_subdirectory(client_ivc_bench)
77
add_subdirectory(pippenger_bench)
88
add_subdirectory(plonk_bench)
9-
add_subdirectory(simulator_bench)
109
add_subdirectory(protogalaxy_bench)
1110
add_subdirectory(protogalaxy_rounds_bench)
1211
add_subdirectory(relations_bench)

barretenberg/cpp/src/barretenberg/benchmark/simulator_bench/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

barretenberg/cpp/src/barretenberg/benchmark/simulator_bench/simulator.bench.cpp

Lines changed: 0 additions & 137 deletions
This file was deleted.

barretenberg/cpp/src/barretenberg/circuit_checker/circuit_checker.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ concept IsCheckable = bb::IsAnyOf<T,
1212
StandardCircuitBuilder_<bb::fr>,
1313
StandardCircuitBuilder_<bb::fq>,
1414
UltraCircuitBuilder,
15-
MegaCircuitBuilder,
16-
CircuitSimulatorBN254>;
15+
MegaCircuitBuilder>;
1716

1817
/**
1918
* @brief The unified interface for check circuit functionality implemented in the specialized CircuitChecker classes
@@ -28,8 +27,6 @@ class CircuitChecker {
2827
return UltraCircuitChecker::check(builder);
2928
} else if constexpr (IsStandardBuilder<Builder>) {
3029
return StandardCircuitChecker::check(builder);
31-
} else if constexpr (IsSimulator<Builder>) {
32-
return SimulatorCircuitChecker::check(builder);
3330
} else {
3431
return false;
3532
}

barretenberg/cpp/src/barretenberg/flavor/flavor.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,6 @@ template <typename T>
400400
concept IsMegaFlavor = IsAnyOf<T, MegaFlavor, MegaZKFlavor,
401401
MegaRecursiveFlavor_<UltraCircuitBuilder>,
402402
MegaRecursiveFlavor_<MegaCircuitBuilder>,
403-
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
404403
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
405404
MegaZKRecursiveFlavor_<UltraCircuitBuilder>>;
406405

@@ -413,16 +412,13 @@ concept HasIPAAccumulator = IsAnyOf<T, UltraRollupFlavor, UltraRollupRecursiveFl
413412
template <typename T>
414413
concept IsRecursiveFlavor = IsAnyOf<T, UltraRecursiveFlavor_<UltraCircuitBuilder>,
415414
UltraRecursiveFlavor_<MegaCircuitBuilder>,
416-
UltraRecursiveFlavor_<CircuitSimulatorBN254>,
417415
UltraRollupRecursiveFlavor_<UltraCircuitBuilder>,
418416
MegaRecursiveFlavor_<UltraCircuitBuilder>,
419417
MegaRecursiveFlavor_<MegaCircuitBuilder>,
420-
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
421418
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
422419
MegaZKRecursiveFlavor_<UltraCircuitBuilder>,
423420
TranslatorRecursiveFlavor_<UltraCircuitBuilder>,
424421
TranslatorRecursiveFlavor_<MegaCircuitBuilder>,
425-
TranslatorRecursiveFlavor_<CircuitSimulatorBN254>,
426422
ECCVMRecursiveFlavor_<UltraCircuitBuilder>,
427423
AvmRecursiveFlavor_<UltraCircuitBuilder>,
428424
AvmRecursiveFlavor_<MegaCircuitBuilder>,
@@ -446,11 +442,9 @@ template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
446442
MegaZKFlavor,
447443
UltraRecursiveFlavor_<UltraCircuitBuilder>,
448444
UltraRecursiveFlavor_<MegaCircuitBuilder>,
449-
UltraRecursiveFlavor_<CircuitSimulatorBN254>,
450445
UltraRollupRecursiveFlavor_<UltraCircuitBuilder>,
451446
MegaRecursiveFlavor_<UltraCircuitBuilder>,
452447
MegaRecursiveFlavor_<MegaCircuitBuilder>,
453-
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
454448
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
455449
MegaZKRecursiveFlavor_<UltraCircuitBuilder>>;
456450
#else
@@ -464,11 +458,9 @@ template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
464458
MegaZKFlavor,
465459
UltraRecursiveFlavor_<UltraCircuitBuilder>,
466460
UltraRecursiveFlavor_<MegaCircuitBuilder>,
467-
UltraRecursiveFlavor_<CircuitSimulatorBN254>,
468461
UltraRollupRecursiveFlavor_<UltraCircuitBuilder>,
469462
MegaRecursiveFlavor_<UltraCircuitBuilder>,
470463
MegaRecursiveFlavor_<MegaCircuitBuilder>,
471-
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
472464
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
473465
MegaZKRecursiveFlavor_<UltraCircuitBuilder>>;
474466
#endif

barretenberg/cpp/src/barretenberg/stdlib/hash/keccak/keccak.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -831,10 +831,6 @@ stdlib::byte_array<Builder> keccak<Builder>::hash(byte_array_ct& input, const ui
831831
return output;
832832
};
833833

834-
if constexpr (IsSimulator<Builder>) {
835-
return constant_case();
836-
}
837-
838834
if (ctx == nullptr) {
839835
return constant_case();
840836
}
@@ -921,7 +917,6 @@ template <typename Builder> void generate_keccak_test_circuit(Builder& builder,
921917
}
922918
}
923919

924-
template class keccak<bb::CircuitSimulatorBN254>;
925920
template class keccak<bb::UltraCircuitBuilder>;
926921
template class keccak<bb::MegaCircuitBuilder>;
927922
template void generate_keccak_test_circuit(bb::UltraCircuitBuilder&, size_t);

barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,5 @@ template <typename C> field_t<C> poseidon2<C>::hash_buffer(C& builder, const std
4747
}
4848
template class poseidon2<bb::MegaCircuitBuilder>;
4949
template class poseidon2<bb::UltraCircuitBuilder>;
50-
template class poseidon2<bb::CircuitSimulatorBN254>;
5150

5251
} // namespace bb::stdlib

barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2.test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ template <typename Builder> class StdlibPoseidon2 : public testing::Test {
147147
}
148148
};
149149

150-
using CircuitTypes = testing::Types<bb::MegaCircuitBuilder, bb::UltraCircuitBuilder, bb::CircuitSimulatorBN254>;
150+
using CircuitTypes = testing::Types<bb::MegaCircuitBuilder, bb::UltraCircuitBuilder>;
151151

152152
TYPED_TEST_SUITE(StdlibPoseidon2, CircuitTypes);
153153

barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.cpp

Lines changed: 1 addition & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ namespace bb::stdlib {
2323
template <typename Params, typename Builder>
2424
typename Poseidon2Permutation<Params, Builder>::State Poseidon2Permutation<Params, Builder>::permutation(
2525
Builder* builder, const typename Poseidon2Permutation<Params, Builder>::State& input)
26-
requires(!IsSimulator<Builder>)
2726
{
2827
// deep copy
2928
State current_state(input);
@@ -115,95 +114,6 @@ typename Poseidon2Permutation<Params, Builder>::State Poseidon2Permutation<Param
115114
return current_state;
116115
}
117116

118-
/**
119-
* @brief Circuit form of Poseidon2 permutation from https://eprint.iacr.org/2023/323 for UltraCircuitBuilder.
120-
* @details The permutation consists of one initial linear layer, then a set of external rounds, a set of internal
121-
* rounds, and a set of external rounds.
122-
* @param builder
123-
* @param input
124-
* @return State
125-
*/
126-
template <typename Params, typename Builder>
127-
typename Poseidon2Permutation<Params, Builder>::State Poseidon2Permutation<Params, Builder>::permutation(
128-
Builder* builder, const typename Poseidon2Permutation<Params, Builder>::State& input)
129-
requires IsSimulator<Builder>
130-
{
131-
// deep copy
132-
State current_state(input);
133-
134-
// Apply 1st linear layer
135-
matrix_multiplication_external(builder, current_state);
136-
137-
// First set of external rounds
138-
constexpr size_t rounds_f_beginning = rounds_f / 2;
139-
for (size_t i = 0; i < rounds_f_beginning; ++i) {
140-
add_round_constants(current_state, round_constants[i]);
141-
apply_sbox(current_state);
142-
matrix_multiplication_external(builder, current_state);
143-
}
144-
145-
// Internal rounds
146-
const size_t p_end = rounds_f_beginning + rounds_p;
147-
for (size_t i = rounds_f_beginning; i < p_end; ++i) {
148-
current_state[0] += round_constants[i][0];
149-
apply_single_sbox(current_state[0]);
150-
matrix_multiplication_internal(current_state);
151-
}
152-
153-
// Remaining external rounds
154-
for (size_t i = p_end; i < NUM_ROUNDS; ++i) {
155-
add_round_constants(current_state, round_constants[i]);
156-
apply_sbox(current_state);
157-
matrix_multiplication_external(builder, current_state);
158-
}
159-
return current_state;
160-
}
161-
162-
template <typename Params, typename Builder>
163-
void Poseidon2Permutation<Params, Builder>::add_round_constants(
164-
State& input, const typename Poseidon2Permutation<Params, Builder>::RoundConstants& rc)
165-
requires IsSimulator<Builder>
166-
167-
{
168-
for (size_t i = 0; i < t; ++i) {
169-
input[i] += rc[i];
170-
}
171-
}
172-
173-
template <typename Params, typename Builder>
174-
void Poseidon2Permutation<Params, Builder>::apply_sbox(State& input)
175-
requires IsSimulator<Builder>
176-
{
177-
for (auto& in : input) {
178-
apply_single_sbox(in);
179-
}
180-
}
181-
182-
template <typename Params, typename Builder>
183-
void Poseidon2Permutation<Params, Builder>::apply_single_sbox(field_t<Builder>& input)
184-
requires IsSimulator<Builder>
185-
{
186-
// hardcoded assumption that d = 5. should fix this or not make d configurable
187-
auto xx = input.sqr();
188-
auto xxxx = xx.sqr();
189-
input *= xxxx;
190-
}
191-
192-
template <typename Params, typename Builder>
193-
void Poseidon2Permutation<Params, Builder>::matrix_multiplication_internal(State& input)
194-
requires IsSimulator<Builder>
195-
{
196-
// for t = 4
197-
auto sum = input[0];
198-
for (size_t i = 1; i < t; ++i) {
199-
sum += input[i];
200-
}
201-
for (size_t i = 0; i < t; ++i) {
202-
input[i] *= Params::internal_matrix_diagonal[i]; // internal_matrix_diagonal[i];
203-
input[i] += sum;
204-
}
205-
}
206-
207117
/**
208118
* @brief Separate function to do just the first linear layer (equivalent to external matrix mul).
209119
* @details We use 6 arithmetic gates to implement:
@@ -318,6 +228,5 @@ void Poseidon2Permutation<Params, Builder>::matrix_multiplication_external(
318228

319229
template class Poseidon2Permutation<crypto::Poseidon2Bn254ScalarFieldParams, MegaCircuitBuilder>;
320230
template class Poseidon2Permutation<crypto::Poseidon2Bn254ScalarFieldParams, UltraCircuitBuilder>;
321-
template class Poseidon2Permutation<crypto::Poseidon2Bn254ScalarFieldParams, CircuitSimulatorBN254>;
322231

323-
} // namespace bb::stdlib
232+
} // namespace bb::stdlib

barretenberg/cpp/src/barretenberg/stdlib/hash/poseidon2/poseidon2_permutation.hpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,7 @@ template <typename Params, typename Builder> class Poseidon2Permutation {
5050
* @param input
5151
* @return State
5252
*/
53-
static State permutation(Builder* builder, const State& input)
54-
requires(!IsSimulator<Builder>);
55-
static State permutation(Builder* builder, const State& input)
56-
requires IsSimulator<Builder>;
57-
58-
static void add_round_constants(State& input, const RoundConstants& rc)
59-
requires IsSimulator<Builder>;
60-
static void apply_sbox(State& input)
61-
requires IsSimulator<Builder>;
62-
static void apply_single_sbox(field_t<Builder>& input)
63-
requires IsSimulator<Builder>;
64-
static void matrix_multiplication_internal(State& input)
65-
requires IsSimulator<Builder>;
53+
static State permutation(Builder* builder, const State& input);
6654

6755
/**
6856
* @brief Separate function to do just the first linear layer (equivalent to external matrix mul).
@@ -80,4 +68,4 @@ template <typename Params, typename Builder> class Poseidon2Permutation {
8068
static void matrix_multiplication_external(Builder* builder, State& state);
8169
};
8270

83-
} // namespace bb::stdlib
71+
} // namespace bb::stdlib

barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/decider_recursive_verifier.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,4 @@ DeciderRecursiveVerifier_<Flavor>::AggregationObject DeciderRecursiveVerifier_<F
5959

6060
template class DeciderRecursiveVerifier_<bb::MegaRecursiveFlavor_<MegaCircuitBuilder>>;
6161
template class DeciderRecursiveVerifier_<bb::MegaRecursiveFlavor_<UltraCircuitBuilder>>;
62-
template class DeciderRecursiveVerifier_<bb::UltraRecursiveFlavor_<CircuitSimulatorBN254>>;
63-
template class DeciderRecursiveVerifier_<bb::MegaRecursiveFlavor_<CircuitSimulatorBN254>>;
6462
} // namespace bb::stdlib::recursion::honk

0 commit comments

Comments
 (0)