Skip to content

Commit 2b6c627

Browse files
authored
chore: starknet feature flag (#13681)
Asked by Kesha to keep utmost separation going into audit / not impact normal dev in this critical juncture
1 parent 9c1d9f1 commit 2b6c627

31 files changed

+159
-34
lines changed

barretenberg/acir_tests/bootstrap.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ function test_cmds_internal {
182182
echo SYS=ultra_honk FLOW=prove_then_verify $run_test assert_statement
183183
echo SYS=ultra_honk FLOW=prove_then_verify $run_test double_verify_honk_proof
184184
echo SYS=ultra_honk FLOW=prove_then_verify HASH=keccak $run_test assert_statement
185-
echo SYS=ultra_honk FLOW=prove_then_verify HASH=starknet $run_test assert_statement
185+
# echo SYS=ultra_honk FLOW=prove_then_verify HASH=starknet $run_test assert_statement
186186
echo SYS=ultra_honk FLOW=prove_then_verify ROLLUP=true $run_test verify_rollup_honk_proof
187187

188188
# prove and verify using bb.js classes

barretenberg/cpp/src/barretenberg/api/api_ultra_honk.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ template <typename Flavor, typename Circuit = typename Flavor::CircuitBuilder>
2222
Circuit _compute_circuit(const std::string& bytecode_path, const std::string& witness_path)
2323
{
2424
uint32_t honk_recursion = 0;
25-
if constexpr (IsAnyOf<Flavor,
26-
UltraFlavor,
27-
UltraKeccakFlavor,
28-
UltraStarknetFlavor,
29-
UltraKeccakZKFlavor,
30-
UltraStarknetZKFlavor>) {
25+
if constexpr (IsAnyOf<Flavor, UltraFlavor, UltraKeccakFlavor, UltraKeccakZKFlavor>) {
3126
honk_recursion = 1;
3227
} else if constexpr (IsAnyOf<Flavor, UltraRollupFlavor>) {
3328
honk_recursion = 2;
3429
}
30+
#ifdef STARKNET_GARAGA_FLAVORS
31+
if constexpr (IsAnyOf<Flavor, UltraStarknetFlavor, UltraStarknetZKFlavor>) {
32+
honk_recursion = 1;
33+
}
34+
#endif
3535

3636
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1180): Don't init grumpkin crs when unnecessary.
3737
init_grumpkin_crs(1 << CONST_ECCVM_LOG_N);
@@ -176,12 +176,14 @@ void UltraHonkAPI::prove(const Flags& flags,
176176
_write(_prove<UltraFlavor>(flags.write_vk, bytecode_path, witness_path));
177177
} else if (flags.oracle_hash_type == "keccak" && !flags.zk) {
178178
_write(_prove<UltraKeccakFlavor>(flags.write_vk, bytecode_path, witness_path));
179-
} else if (flags.oracle_hash_type == "starknet" && !flags.zk) {
180-
_write(_prove<UltraStarknetFlavor>(flags.write_vk, bytecode_path, witness_path));
181179
} else if (flags.oracle_hash_type == "keccak" && flags.zk) {
182180
_write(_prove<UltraKeccakZKFlavor>(flags.write_vk, bytecode_path, witness_path));
181+
#ifdef STARKNET_GARAGA_FLAVORS
182+
} else if (flags.oracle_hash_type == "starknet" && !flags.zk) {
183+
_write(_prove<UltraStarknetFlavor>(flags.write_vk, bytecode_path, witness_path));
183184
} else if (flags.oracle_hash_type == "starknet" && flags.zk) {
184185
_write(_prove<UltraStarknetZKFlavor>(flags.write_vk, bytecode_path, witness_path));
186+
#endif
185187
} else {
186188
throw_or_abort("Invalid proving options specified in _prove");
187189
}
@@ -200,9 +202,11 @@ bool UltraHonkAPI::verify(const Flags& flags,
200202
if (flags.oracle_hash_type == "keccak") {
201203
return _verify<UltraKeccakZKFlavor>(ipa_accumulation, public_inputs_path, proof_path, vk_path);
202204
}
205+
#ifdef STARKNET_GARAGA_FLAVORS
203206
if (flags.oracle_hash_type == "starknet") {
204207
return _verify<UltraStarknetZKFlavor>(ipa_accumulation, public_inputs_path, proof_path, vk_path);
205208
}
209+
#endif
206210
return false;
207211
}
208212
if (flags.oracle_hash_type == "poseidon2") {
@@ -211,9 +215,11 @@ bool UltraHonkAPI::verify(const Flags& flags,
211215
if (flags.oracle_hash_type == "keccak") {
212216
return _verify<UltraKeccakFlavor>(ipa_accumulation, public_inputs_path, proof_path, vk_path);
213217
}
218+
#ifdef STARKNET_GARAGA_FLAVORS
214219
if (flags.oracle_hash_type == "starknet") {
215220
return _verify<UltraStarknetFlavor>(ipa_accumulation, public_inputs_path, proof_path, vk_path);
216221
}
222+
#endif
217223
return false;
218224
}
219225

@@ -237,12 +243,14 @@ void UltraHonkAPI::write_vk(const Flags& flags,
237243
_write(_compute_vk<UltraFlavor>(bytecode_path, ""));
238244
} else if (flags.oracle_hash_type == "keccak" && !flags.zk) {
239245
_write(_compute_vk<UltraKeccakFlavor>(bytecode_path, ""));
246+
#ifdef STARKNET_GARAGA_FLAVORS
240247
} else if (flags.oracle_hash_type == "starknet" && !flags.zk) {
241248
_write(_compute_vk<UltraStarknetFlavor>(bytecode_path, ""));
242-
} else if (flags.oracle_hash_type == "keccak" && flags.zk) {
243-
_write(_compute_vk<UltraKeccakZKFlavor>(bytecode_path, ""));
244249
} else if (flags.oracle_hash_type == "starknet" && flags.zk) {
245250
_write(_compute_vk<UltraStarknetZKFlavor>(bytecode_path, ""));
251+
#endif
252+
} else if (flags.oracle_hash_type == "keccak" && flags.zk) {
253+
_write(_compute_vk<UltraKeccakZKFlavor>(bytecode_path, ""));
246254
} else {
247255
throw_or_abort("Invalid proving options specified in _prove");
248256
}

barretenberg/cpp/src/barretenberg/commitment_schemes/small_subgroup_ipa/small_subgroup_ipa.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,9 @@ template class SmallSubgroupIPAProver<TranslatorFlavor>;
442442
template class SmallSubgroupIPAProver<MegaZKFlavor>;
443443
template class SmallSubgroupIPAProver<UltraZKFlavor>;
444444
template class SmallSubgroupIPAProver<UltraKeccakZKFlavor>;
445+
#ifdef STARKNET_GARAGA_FLAVORS
445446
template class SmallSubgroupIPAProver<UltraStarknetZKFlavor>;
447+
#endif
446448

447449
// Instantiations used in tests
448450
template class SmallSubgroupIPAProver<BN254Settings>;

barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "barretenberg/common/net.hpp"
88
#include "barretenberg/common/serialize.hpp"
99
#include "barretenberg/common/slab_allocator.hpp"
10+
#include "barretenberg/common/throw_or_abort.hpp"
1011
#include "barretenberg/common/zip_view.hpp"
1112
#include "barretenberg/dsl/acir_format/acir_format.hpp"
1213
#include "barretenberg/dsl/acir_format/ivc_recursion_constraint.hpp"
@@ -254,8 +255,11 @@ WASM_EXPORT void acir_prove_ultra_keccak_honk(uint8_t const* acir_vec, uint8_t c
254255
*out = to_heap_buffer(to_buffer(proof));
255256
}
256257

257-
WASM_EXPORT void acir_prove_ultra_starknet_honk(uint8_t const* acir_vec, uint8_t const* witness_vec, uint8_t** out)
258+
WASM_EXPORT void acir_prove_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
259+
[[maybe_unused]] uint8_t const* witness_vec,
260+
[[maybe_unused]] uint8_t** out)
258261
{
262+
#ifdef STARKNET_GARAGA_FLAVORS
259263
// Lambda function to ensure things get freed before proving.
260264
UltraStarknetProver prover = [&] {
261265
const acir_format::ProgramMetadata metadata{ .honk_recursion = 1 };
@@ -269,6 +273,9 @@ WASM_EXPORT void acir_prove_ultra_starknet_honk(uint8_t const* acir_vec, uint8_t
269273
}();
270274
auto proof = prover.construct_proof();
271275
*out = to_heap_buffer(to_buffer(proof));
276+
#else
277+
throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
278+
#endif
272279
}
273280

274281
WASM_EXPORT void acir_verify_ultra_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
@@ -297,8 +304,11 @@ WASM_EXPORT void acir_verify_ultra_keccak_honk(uint8_t const* proof_buf, uint8_t
297304
*result = verifier.verify_proof(proof);
298305
}
299306

300-
WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const* proof_buf, uint8_t const* vk_buf, bool* result)
307+
WASM_EXPORT void acir_verify_ultra_starknet_honk([[maybe_unused]] uint8_t const* proof_buf,
308+
[[maybe_unused]] uint8_t const* vk_buf,
309+
[[maybe_unused]] bool* result)
301310
{
311+
#ifdef STARKNET_GARAGA_FLAVORS
302312
using VerificationKey = UltraStarknetFlavor::VerificationKey;
303313
using Verifier = UltraVerifier_<UltraStarknetFlavor>;
304314

@@ -308,6 +318,9 @@ WASM_EXPORT void acir_verify_ultra_starknet_honk(uint8_t const* proof_buf, uint8
308318
Verifier verifier{ verification_key };
309319

310320
*result = verifier.verify_proof(proof);
321+
#else
322+
throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
323+
#endif
311324
}
312325

313326
WASM_EXPORT void acir_write_vk_ultra_honk(uint8_t const* acir_vec, uint8_t** out)
@@ -345,8 +358,10 @@ WASM_EXPORT void acir_write_vk_ultra_keccak_honk(uint8_t const* acir_vec, uint8_
345358
*out = to_heap_buffer(to_buffer(vk));
346359
}
347360

348-
WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const* acir_vec, uint8_t** out)
361+
WASM_EXPORT void acir_write_vk_ultra_starknet_honk([[maybe_unused]] uint8_t const* acir_vec,
362+
[[maybe_unused]] uint8_t** out)
349363
{
364+
#ifdef STARKNET_GARAGA_FLAVORS
350365
using DeciderProvingKey = DeciderProvingKey_<UltraStarknetFlavor>;
351366
using VerificationKey = UltraStarknetFlavor::VerificationKey;
352367

@@ -361,6 +376,9 @@ WASM_EXPORT void acir_write_vk_ultra_starknet_honk(uint8_t const* acir_vec, uint
361376
VerificationKey vk(proving_key.proving_key);
362377
vinfo("Constructed UltraStarknetHonk verification key");
363378
*out = to_heap_buffer(to_buffer(vk));
379+
#else
380+
throw_or_abort("bb wasm was not compiled with starknet garaga flavors!");
381+
#endif
364382
}
365383

366384
WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t const* vk_buf, uint8_t** out)

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#ifdef STARKNET_GARAGA_FLAVORS
12
#include "poseidon.hpp"
23

34
namespace bb::starknet::crypto {
@@ -17,3 +18,9 @@ typename Poseidon<Params>::FF Poseidon<Params>::hash(const std::vector<typename
1718
template class Poseidon<PoseidonStark252BaseFieldParams>;
1819

1920
} // namespace bb::starknet::crypto
21+
#else
22+
// avoid linker issues by having a symbol in this library
23+
namespace bb::starknet::crypto {
24+
void garbage_extensions_disabled() {}
25+
} // namespace bb::starknet::crypto
26+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#ifdef STARKNET_GARAGA_FLAVORS
12
#pragma once
23

34
#include "barretenberg/crypto/poseidon2/sponge/sponge.hpp"
@@ -20,3 +21,4 @@ template <typename Params> class Poseidon {
2021
extern template class Poseidon<PoseidonStark252BaseFieldParams>;
2122

2223
} // namespace bb::starknet::crypto
24+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon.test.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
#include "poseidon_params.hpp"
44
#include <gtest/gtest.h>
55

6-
using namespace bb::starknet;
7-
6+
#ifdef STARKNET_GARAGA_FLAVORS
87
namespace {
98
auto& engine = bb::numeric::get_debug_randomness();
109
}
10+
using namespace bb::starknet;
1111

1212
TEST(Poseidon, HashBasicTests)
1313
{
@@ -45,3 +45,7 @@ TEST(Poseidon, HashConsistencyCheck)
4545

4646
EXPECT_EQ(result, expected);
4747
}
48+
#else
49+
50+
TEST(Poseidon, DisabledTests) {}
51+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon_params.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#ifdef STARKNET_GARAGA_FLAVORS
34
#include "barretenberg/ext/starknet/ecc/curves/stark252/stark252.hpp"
45

56
namespace bb::starknet::crypto {
@@ -507,3 +508,4 @@ struct PoseidonStark252BaseFieldParams {
507508
};
508509

509510
} // namespace bb::starknet::crypto
511+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon_permutation.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#ifdef STARKNET_GARAGA_FLAVORS
34
#include <array>
45
#include <cstddef>
56
#include <cstdint>
@@ -86,3 +87,4 @@ template <typename Params> class PoseidonPermutation {
8687
};
8788

8889
} // namespace bb::starknet::crypto
90+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/crypto/poseidon/poseidon_permutation.test.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
#ifdef STARKNET_GARAGA_FLAVORS
13
#include "poseidon_permutation.hpp"
24
#include "barretenberg/ext/starknet/ecc/curves/stark252/stark252.hpp"
35
#include "poseidon_params.hpp"
@@ -55,3 +57,4 @@ TEST(PoseidonPermutation, ConsistencyCheck)
5557
};
5658
EXPECT_EQ(result, expected);
5759
}
60+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/ecc/curves/stark252/stark252.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#ifdef STARKNET_GARAGA_FLAVORS
12
#pragma once
23

34
#include "barretenberg/ecc/fields/field.hpp"
@@ -51,3 +52,4 @@ struct FqParams {
5152
using fq = field<FqParams>;
5253

5354
} // namespace bb::starknet::stark252
55+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/stdlib_circuit_builders/ultra_starknet_flavor.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2+
#ifdef STARKNET_GARAGA_FLAVORS
13
#pragma once
24

35
#include "barretenberg/ext/starknet/transcript/transcript.hpp"
@@ -11,3 +13,4 @@ class UltraStarknetFlavor : public UltraKeccakFlavor {
1113
};
1214

1315
} // namespace bb
16+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/stdlib_circuit_builders/ultra_starknet_zk_flavor.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#ifdef STARKNET_GARAGA_FLAVORS
12
#pragma once
23

34
#include "barretenberg/ext/starknet/transcript/transcript.hpp"
@@ -160,3 +161,4 @@ class UltraStarknetZKFlavor : public UltraKeccakZKFlavor {
160161
};
161162
};
162163
} // namespace bb
164+
#endif

barretenberg/cpp/src/barretenberg/ext/starknet/transcript/transcript.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#ifdef STARKNET_GARAGA_FLAVORS
12
#pragma once
23

34
#include "barretenberg/ext/starknet/crypto/poseidon/poseidon.hpp"
@@ -49,3 +50,4 @@ struct StarknetTranscriptParams : public bb::KeccakTranscriptParams {
4950
using StarknetTranscript = bb::BaseTranscript<StarknetTranscriptParams>;
5051

5152
} // namespace bb::starknet
53+
#endif

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

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,11 @@ class UltraZKFlavor;
333333
class UltraRollupFlavor;
334334
class ECCVMFlavor;
335335
class UltraKeccakFlavor;
336+
#ifdef STARKNET_GARAGA_FLAVORS
336337
class UltraStarknetFlavor;
337-
class UltraKeccakZKFlavor;
338338
class UltraStarknetZKFlavor;
339+
#endif
340+
class UltraKeccakZKFlavor;
339341
class MegaFlavor;
340342
class MegaZKFlavor;
341343
class TranslatorFlavor;
@@ -374,8 +376,13 @@ namespace bb {
374376
template <typename T>
375377
concept IsPlonkFlavor = IsAnyOf<T, plonk::flavor::Standard, plonk::flavor::Ultra>;
376378

379+
#ifdef STARKNET_GARAGA_FLAVORS
377380
template <typename T>
378381
concept IsUltraHonkFlavor = IsAnyOf<T, UltraFlavor, UltraKeccakFlavor, UltraStarknetFlavor, UltraKeccakZKFlavor, UltraStarknetZKFlavor, UltraZKFlavor, UltraRollupFlavor>;
382+
#else
383+
template <typename T>
384+
concept IsUltraHonkFlavor = IsAnyOf<T, UltraFlavor, UltraKeccakFlavor, UltraKeccakZKFlavor, UltraZKFlavor, UltraRollupFlavor>;
385+
#endif
379386
template <typename T>
380387
concept IsUltraFlavor = IsUltraHonkFlavor<T> || IsAnyOf<T, MegaFlavor, MegaZKFlavor>;
381388

@@ -420,8 +427,7 @@ concept IsRecursiveFlavor = IsAnyOf<T, UltraRecursiveFlavor_<UltraCircuitBuilder
420427
template <typename T> concept IsGrumpkinFlavor = IsAnyOf<T, ECCVMFlavor, ECCVMRecursiveFlavor_<UltraCircuitBuilder>>;
421428
template <typename T> concept IsECCVMRecursiveFlavor = IsAnyOf<T, ECCVMRecursiveFlavor_<UltraCircuitBuilder>>;
422429

423-
424-
430+
#ifdef STARKNET_GARAGA_FLAVORS
425431
template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
426432
// Note(md): must be here to use oink prover
427433
UltraKeccakFlavor,
@@ -441,6 +447,25 @@ template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
441447
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
442448
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
443449
MegaZKRecursiveFlavor_<UltraCircuitBuilder>>;
450+
#else
451+
template <typename T> concept IsFoldingFlavor = IsAnyOf<T, UltraFlavor,
452+
// Note(md): must be here to use oink prover
453+
UltraKeccakFlavor,
454+
UltraKeccakZKFlavor,
455+
UltraRollupFlavor,
456+
UltraZKFlavor,
457+
MegaFlavor,
458+
MegaZKFlavor,
459+
UltraRecursiveFlavor_<UltraCircuitBuilder>,
460+
UltraRecursiveFlavor_<MegaCircuitBuilder>,
461+
UltraRecursiveFlavor_<CircuitSimulatorBN254>,
462+
UltraRollupRecursiveFlavor_<UltraCircuitBuilder>,
463+
MegaRecursiveFlavor_<UltraCircuitBuilder>,
464+
MegaRecursiveFlavor_<MegaCircuitBuilder>,
465+
MegaRecursiveFlavor_<CircuitSimulatorBN254>,
466+
MegaZKRecursiveFlavor_<MegaCircuitBuilder>,
467+
MegaZKRecursiveFlavor_<UltraCircuitBuilder>>;
468+
#endif
444469

445470
template <typename Container, typename Element>
446471
inline std::string flavor_get_label(Container&& container, const Element& element) {

barretenberg/cpp/src/barretenberg/stdlib/primitives/circuit_builders/circuit_builders_fwd.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ namespace bb {
1313
class StandardFlavor;
1414
class UltraFlavor;
1515
class UltraKeccakFlavor;
16+
#ifdef STARKNET_GARAGA_FLAVORS
1617
class UltraStarknetFlavor;
18+
#endif
1719

1820
class Bn254FrParams;
1921
class Bn254FqParams;

barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/flavor_serialization.test.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ template <typename Flavor> class FlavorSerializationTests : public ::testing::Te
2626
static void SetUpTestSuite() { bb::srs::init_crs_factory(bb::srs::get_ignition_crs_path()); }
2727
};
2828

29+
#ifdef STARKNET_GARAGA_FLAVORS
2930
using FlavorTypes = testing::Types<UltraFlavor, UltraKeccakFlavor, UltraStarknetFlavor, MegaFlavor>;
31+
#else
32+
using FlavorTypes = testing::Types<UltraFlavor, UltraKeccakFlavor, MegaFlavor>;
33+
#endif
3034
TYPED_TEST_SUITE(FlavorSerializationTests, FlavorTypes);
3135

3236
// Test msgpack serialization/deserialization of verification keys

0 commit comments

Comments
 (0)