Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
69eba2d
Added recursion constraint into dsl + tests
zac-williamson Apr 13, 2023
7a80056
fix dsl ecdsa constraint. Added ecdsa dsl tests
zac-williamson Apr 13, 2023
2436dcf
changed dsl recursion to pass proof/key as witnesses
zac-williamson Apr 16, 2023
292f626
recursive verification key no longer encapsulates a native key
zac-williamson Apr 16, 2023
bc02eff
added serialization test for acir_proofs
zac-williamson Apr 16, 2023
d9656e9
Added serialization methods into dsl for recursive proof composition
zac-williamson Apr 18, 2023
209f813
added verificaiton key hash into RecursionConstraint
zac-williamson Apr 18, 2023
6496228
fixed compiler errors in stdlib_recursion_tests
zac-williamson Apr 18, 2023
5f21e22
feat(dsl)!: Noir recursion updates (#379)
vezenovm Apr 25, 2023
f4253ad
master merge conflicts
vezenovm Apr 25, 2023
25f5574
EnvReferenceString undefined reference to error workaround
vezenovm Apr 25, 2023
1c8cc77
add missing recursion_constraint field from acir_format tests
vezenovm Apr 25, 2023
6109828
add recursion_constraints field back in acir_proofs.test inner circuit
vezenovm Apr 25, 2023
8358741
fix inner circuit in RecursionConstraint.TestRecursionConstraint
vezenovm Apr 25, 2023
b65c442
merge conflictss w/ master
vezenovm Apr 25, 2023
551277b
Empty-Commit
vezenovm Apr 25, 2023
ce46c01
add verify_recursive_proof method for simulating recursive verificati…
vezenovm Apr 28, 2023
87d7b40
master merge conflicts in acir_format and updates to generate method …
vezenovm Apr 28, 2023
11e97be
add ecc module to env package to fix linking of ennv_load_prover_crs …
vezenovm Apr 28, 2023
941b275
add back reference strinng to stdlib recursion key to pass sol verifi…
vezenovm May 1, 2023
6d86e39
remove prints from recursive verifier test
vezenovm May 1, 2023
5a458d6
fix dirty free for when serializing vk to fields, was working on macb…
vezenovm May 3, 2023
7399ea7
Merge branch 'master' into mv/noir-recursion
vezenovm May 5, 2023
07a22f6
fix ecdsa tests after master merge
vezenovm May 5, 2023
74a8327
missing keccak constraints fields in acir format and proofs tests
vezenovm May 5, 2023
18cfb94
one more missing keccak constraint
vezenovm May 5, 2023
7de20cd
merge conflicts w/ master
vezenovm May 15, 2023
155903e
mismatched acir format structs for gcc build
vezenovm May 15, 2023
683a875
missing block constraints in acir tests
vezenovm May 15, 2023
7ecb574
feat(dsl)!: Arbitrary depth recursion (#433)
vezenovm May 16, 2023
a2f6cbb
move export key into dsl package
vezenovm May 22, 2023
b56d3ca
chore: remove unused export key in recursion format from main proof s…
vezenovm May 22, 2023
97ede2e
pr review: moved from_witness comment and renamed from_field_pt_vector
vezenovm May 22, 2023
c64d8b5
moved export transcript in recursion format to DSL package
vezenovm May 22, 2023
a590470
use false for clang-format SortIncludes
vezenovm May 22, 2023
4d262e3
Merge branch 'master' into mv/noir-recursion
vezenovm May 22, 2023
f3baab0
move order of acir functions
vezenovm May 22, 2023
a793b2d
remove ecc bb_module declaration in env package
vezenovm May 22, 2023
f954266
chore: remove usage of magic numbers when slicing g1::affine_element …
vezenovm May 22, 2023
0f0d519
introduce NUM_AGGREGATION_ELEMENTS constant and use it through recurs…
vezenovm May 23, 2023
294c1fa
nit ASSERT(result != -1) in get_public_input_index
vezenovm May 23, 2023
517ed2c
remove unused found var
vezenovm May 23, 2023
92159e0
cast -1
vezenovm May 23, 2023
d8ee388
fix up verify_recursive_proof and add a test for it
vezenovm May 23, 2023
cf9bdd6
moved from tempalte for has_valid_witness_assignments to a flag
vezenovm May 23, 2023
2096676
chore: add comments to AcirProofs.TestVerifyRecursiveProofPass
vezenovm May 23, 2023
bb4404f
Merge branch 'master' into mv/noir-recursion
vezenovm May 24, 2023
fcf2e7c
merge conflcits and new recursion methods
vezenovm May 25, 2023
3bc723e
merge conflcits with cl/acir_cbinds
vezenovm May 25, 2023
a87fdcc
update prove and verify exports to handle is_recursive
vezenovm May 25, 2023
cf6c044
merge with cl/acir_cbinds
vezenovm May 25, 2023
66ed1f7
remove install state
vezenovm May 25, 2023
1fa02e7
remove debug output and use total_circuit_size
vezenovm May 25, 2023
1bf8db2
remove verify_recursive_proof as we might not need it for simulation
vezenovm May 25, 2023
381ef1d
switch how we do is_recursive
vezenovm May 25, 2023
88e364f
remove acir recursive simulation method
vezenovm May 26, 2023
49e238a
changed wasi stubs and removed cout from acir_init_proving_key
vezenovm May 26, 2023
5f195dc
removed cout outs getting runtime error for func definition
vezenovm May 26, 2023
45328c1
working recursion format funcs, but strangely getting errors about tr…
vezenovm May 26, 2023
0abc2bb
most recent debug output, hitting bad alloc in compute_proving_key_base
vezenovm May 26, 2023
826fb59
delete old comment
vezenovm May 26, 2023
07e5557
bb.js cmd changes
vezenovm May 28, 2023
7fb94f1
Lint and default fixes.
charlielye May 30, 2023
057f778
cleanup info and debug comments
vezenovm May 30, 2023
18348ba
merge format changes and default flag feature
vezenovm May 30, 2023
0798fae
add comment to recursion serialization methods
vezenovm May 30, 2023
8265c20
merged in cl/acir_cbinds
vezenovm May 30, 2023
4da2375
match package.json on cl/acir_cbinds
vezenovm May 30, 2023
75b8fbf
don't remove EventEmitter from bb_wasm.ts
vezenovm May 30, 2023
cf86690
delete empty exports file
vezenovm May 30, 2023
e17275c
use process.exit
vezenovm May 30, 2023
8d785e1
log
charlielye May 30, 2023
6723609
add comment for why CIRCUIT_SIZE is 2**18
vezenovm May 30, 2023
cc96876
mising keccak var constraints in new acir format tests
vezenovm May 30, 2023
2185893
Merge branch 'cl/acir_cbinds' into mv/acir_cbind_recursion
charlielye May 31, 2023
d5a5a26
Cleanup some serialization.
charlielye Jun 1, 2023
e8e8660
Cleanup for publishing. README.
charlielye Jun 1, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cpp/src/barretenberg/common/slab_allocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,9 @@ SlabAllocator allocator;
} // namespace

namespace barretenberg {
void init_slab_allocator(size_t circuit_size)
void init_slab_allocator(size_t circuit_subgroup_size)
{
allocator.init(circuit_size);
allocator.init(circuit_subgroup_size);
}

// auto init = ([]() {
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/barretenberg/common/slab_allocator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace barretenberg {
* TODO: De-globalise. Init the allocator and pass around. Use a PolynomialFactory (PolynomialStore?).
* TODO: Consider removing, but once due-dilligence has been done that we no longer have memory limitations.
*/
void init_slab_allocator(size_t circuit_size);
void init_slab_allocator(size_t circuit_subgroup_size);

/**
* Returns a slab from the preallocated pool of slabs, or fallback to a new heap allocation (32 byte aligned).
Expand Down
76 changes: 76 additions & 0 deletions cpp/src/barretenberg/dsl/acir_format/acir_format.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,21 @@ void create_circuit(Composer& composer, acir_format const& constraint_system)
for (const auto& constraint : constraint_system.block_constraints) {
create_block_constraints(composer, constraint);
}

// Add recursion constraints
for (size_t i = 0; i < constraint_system.recursion_constraints.size(); ++i) {
auto& constraint = constraint_system.recursion_constraints[i];
create_recursion_constraints(composer, constraint);

// make sure the verification key records the public input indices of the final recursion output
// (N.B. up to the ACIR description to make sure that the final output aggregation object wires are public
// inputs!)
if (i == constraint_system.recursion_constraints.size() - 1) {
std::vector<uint32_t> proof_output_witness_indices(constraint.output_aggregation_object.begin(),
constraint.output_aggregation_object.end());
composer.set_recursive_proof(proof_output_witness_indices);
}
}
}

Composer create_circuit(const acir_format& constraint_system,
Expand All @@ -120,6 +135,7 @@ Composer create_circuit(const acir_format& constraint_system,
composer.add_variable(0);
}
}

// Add arithmetic gates
for (const auto& constraint : constraint_system.constraints) {
composer.create_poly_gate(constraint);
Expand Down Expand Up @@ -189,6 +205,21 @@ Composer create_circuit(const acir_format& constraint_system,
create_block_constraints(composer, constraint);
}

// Add recursion constraints
for (size_t i = 0; i < constraint_system.recursion_constraints.size(); ++i) {
auto& constraint = constraint_system.recursion_constraints[i];
create_recursion_constraints(composer, constraint);

// make sure the verification key records the public input indices of the final recursion output
// (N.B. up to the ACIR description to make sure that the final output aggregation object wires are public
// inputs!)
if (i == constraint_system.recursion_constraints.size() - 1) {
std::vector<uint32_t> proof_output_witness_indices(constraint.output_aggregation_object.begin(),
constraint.output_aggregation_object.end());
composer.set_recursive_proof(proof_output_witness_indices);
}
}

return composer;
}

Expand Down Expand Up @@ -286,6 +317,21 @@ Composer create_circuit_with_witness(acir_format const& constraint_system,
create_block_constraints(composer, constraint);
}

// Add recursion constraints
for (size_t i = 0; i < constraint_system.recursion_constraints.size(); ++i) {
auto& constraint = constraint_system.recursion_constraints[i];
create_recursion_constraints(composer, constraint, true);

// make sure the verification key records the public input indices of the final recursion output
// (N.B. up to the ACIR description to make sure that the final output aggregation object wires are public
// inputs!)
if (i == constraint_system.recursion_constraints.size() - 1) {
std::vector<uint32_t> proof_output_witness_indices(constraint.output_aggregation_object.begin(),
constraint.output_aggregation_object.end());
composer.set_recursive_proof(proof_output_witness_indices);
}
}

return composer;
}
Composer create_circuit_with_witness(const acir_format& constraint_system, WitnessVector const& witness)
Expand Down Expand Up @@ -380,6 +426,21 @@ Composer create_circuit_with_witness(const acir_format& constraint_system, Witne
create_block_constraints(composer, constraint);
}

// Add recursion constraints
for (size_t i = 0; i < constraint_system.recursion_constraints.size(); ++i) {
auto& constraint = constraint_system.recursion_constraints[i];
create_recursion_constraints(composer, constraint, true);

// make sure the verification key records the public input indices of the final recursion output
// (N.B. up to the ACIR description to make sure that the final output aggregation object wires are public
// inputs!)
if (i == constraint_system.recursion_constraints.size() - 1) {
std::vector<uint32_t> proof_output_witness_indices(constraint.output_aggregation_object.begin(),
constraint.output_aggregation_object.end());
composer.set_recursive_proof(proof_output_witness_indices);
}
}

return composer;
}
void create_circuit_with_witness(Composer& composer, acir_format const& constraint_system, WitnessVector const& witness)
Expand Down Expand Up @@ -471,6 +532,21 @@ void create_circuit_with_witness(Composer& composer, acir_format const& constrai
for (const auto& constraint : constraint_system.block_constraints) {
create_block_constraints(composer, constraint);
}

// Add recursion constraints
for (size_t i = 0; i < constraint_system.recursion_constraints.size(); ++i) {
auto& constraint = constraint_system.recursion_constraints[i];
create_recursion_constraints(composer, constraint, true);

// make sure the verification key records the public input indices of the final recursion output
// (N.B. up to the ACIR description to make sure that the final output aggregation object wires are public
// inputs!)
if (i == constraint_system.recursion_constraints.size() - 1) {
std::vector<uint32_t> proof_output_witness_indices(constraint.output_aggregation_object.begin(),
constraint.output_aggregation_object.end());
composer.set_recursive_proof(proof_output_witness_indices);
}
}
}

} // namespace acir_format
4 changes: 4 additions & 0 deletions cpp/src/barretenberg/dsl/acir_format/acir_format.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "schnorr_verify.hpp"
#include "ecdsa_secp256k1.hpp"
#include "compute_merkle_root_constraint.hpp"
#include "recursion_constraint.hpp"
#include "block_constraint.hpp"
#include "pedersen.hpp"
#include "hash_to_field.hpp"
Expand All @@ -35,6 +36,7 @@ struct acir_format {
std::vector<PedersenConstraint> pedersen_constraints;
std::vector<ComputeMerkleRootConstraint> compute_merkle_root_constraints;
std::vector<BlockConstraint> block_constraints;
std::vector<RecursionConstraint> recursion_constraints;
// A standard plonk arithmetic constraint, as defined in the poly_triple struct, consists of selector values
// for q_M,q_L,q_R,q_O,q_C and indices of three variables taking the role of left, right and output wire
// This could be a large vector so use slab allocator, we don't expect the blackbox implementations to be so large.
Expand Down Expand Up @@ -81,6 +83,7 @@ template <typename B> inline void read(B& buf, acir_format& data)
read(buf, data.pedersen_constraints);
read(buf, data.hash_to_field_constraints);
read(buf, data.fixed_base_scalar_mul_constraints);
read(buf, data.recursion_constraints);
read(buf, data.constraints);
read(buf, data.block_constraints);
}
Expand All @@ -102,6 +105,7 @@ template <typename B> inline void write(B& buf, acir_format const& data)
write(buf, data.pedersen_constraints);
write(buf, data.hash_to_field_constraints);
write(buf, data.fixed_base_scalar_mul_constraints);
write(buf, data.recursion_constraints);
write(buf, data.constraints);
write(buf, data.block_constraints);
}
Expand Down
48 changes: 48 additions & 0 deletions cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,51 @@
#include "barretenberg/common/streams.hpp"
#include "barretenberg/serialize/test_helper.hpp"
#include "ecdsa_secp256k1.hpp"

TEST(acir_format, test_a_single_constraint_no_pub_inputs)
{

poly_triple constraint{
.a = 1,
.b = 2,
.c = 3,
.q_m = 0,
.q_l = 1,
.q_r = 1,
.q_o = -1,
.q_c = 0,
};

acir_format::acir_format constraint_system{
.varnum = 4,
.public_inputs = {},
.fixed_base_scalar_mul_constraints = {},
.logic_constraints = {},
.range_constraints = {},
.schnorr_constraints = {},
.ecdsa_constraints = {},
.sha256_constraints = {},
.blake2s_constraints = {},
.keccak_constraints = {},
.keccak_var_constraints = {},
.hash_to_field_constraints = {},
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = { constraint },
};

auto composer = acir_format::create_circuit_with_witness(constraint_system, { 0, 0, 1 });

auto prover = composer.create_ultra_with_keccak_prover();
auto proof = prover.construct_proof();

auto verifier = composer.create_ultra_with_keccak_verifier();

EXPECT_EQ(verifier.verify_proof(proof), false);
}

TEST(acir_format, msgpack_logic_constraint)
{
auto [actual, expected] = msgpack_roundtrip(acir_format::LogicConstraint{});
Expand Down Expand Up @@ -97,6 +142,7 @@ TEST(acir_format, test_logic_gate_from_noir_circuit)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = { expr_a, expr_b, expr_c, expr_d },
};

Expand Down Expand Up @@ -162,6 +208,7 @@ TEST(acir_format, test_schnorr_verify_pass)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = { poly_triple{
.a = schnorr_constraint.result,
.b = schnorr_constraint.result,
Expand Down Expand Up @@ -234,6 +281,7 @@ TEST(acir_format, test_schnorr_verify_small_range)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = { poly_triple{
.a = schnorr_constraint.result,
.b = schnorr_constraint.result,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ TEST(up_ram, TestBlockConstraint)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = { block },
.recursion_constraints = {},
.constraints = {},
};

Expand Down
3 changes: 3 additions & 0 deletions cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ TEST(ECDSASecp256k1, TestECDSAConstraintSucceed)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = {},
};

Expand Down Expand Up @@ -136,6 +137,7 @@ TEST(ECDSASecp256k1, TestECDSACompilesForVerifier)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = {},
};
auto crs_factory = std::make_unique<barretenberg::srs::factories::CrsFactory>();
Expand Down Expand Up @@ -170,6 +172,7 @@ TEST(ECDSASecp256k1, TestECDSAConstraintFail)
.pedersen_constraints = {},
.compute_merkle_root_constraints = {},
.block_constraints = {},
.recursion_constraints = {},
.constraints = {},
};

Expand Down
Loading