Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
34b197c
fix: templating issue
Maddiaa0 Sep 4, 2025
e40fc96
Merge branch 'next' into md/fix-verifier
Maddiaa0 Nov 4, 2025
ef166f2
chore: fix optimized verifier
Maddiaa0 Nov 4, 2025
03f0543
fox
Maddiaa0 Nov 4, 2025
18e1603
chore: fix lookup tables
Maddiaa0 Nov 4, 2025
8ed3b40
chore: use opt verifier
Maddiaa0 Nov 4, 2025
965d231
chore: various optimisations
Maddiaa0 Feb 16, 2026
9c158c3
chore: fix no memory overlaps
Maddiaa0 Feb 16, 2026
aea2d8c
chore: code gen
Maddiaa0 Feb 17, 2026
ac39a5c
chore: more template fixes
Maddiaa0 Feb 17, 2026
8ed0ac9
chore: update template
Maddiaa0 Feb 17, 2026
77c1e87
Merge branch 'next' into md/fix-verifier
Maddiaa0 Feb 17, 2026
7987361
revert using optimized verifier in prod
Maddiaa0 Feb 17, 2026
fb7e597
fix
Maddiaa0 Feb 18, 2026
19451c7
Merge branch 'next' into md/fix-verifier
Maddiaa0 Feb 18, 2026
e832351
chore: remove unneeded file (#20610)
Copilot Feb 18, 2026
da4e454
Merge branch 'md/fix-verifier' into md/honk-golf
Maddiaa0 Feb 18, 2026
885ed4f
chore: fix honk optimized allocations
Maddiaa0 Feb 18, 2026
7de5747
chore: make sure allocations line up - applied to honk_optimized_cont…
Maddiaa0 Feb 18, 2026
8e26466
opt: recomputing in looks is cheaper than using constants
Maddiaa0 Feb 19, 2026
409ccf7
Merge branch 'next' into md/honk-golf
Maddiaa0 Feb 19, 2026
fa0c321
apply opts to cpp
Maddiaa0 Feb 19, 2026
e10287b
chore: review comments
Maddiaa0 Feb 20, 2026
93353ca
chore: remove inverted gemini
Maddiaa0 Feb 20, 2026
60a785a
Merge branch 'next' into md/honk-golf
Maddiaa0 Mar 10, 2026
b86aedf
chore: add large circuit test
Maddiaa0 Mar 10, 2026
6311540
chore: remove unused vk_fr
Maddiaa0 Mar 10, 2026
58f7ada
fix: sub(gate_challenge, 1)
Maddiaa0 Mar 10, 2026
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
2 changes: 2 additions & 0 deletions barretenberg/acir_tests/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ function test_cmds {
echo "$sol_prefix $scripts/bb_prove_sol_verify.sh $t"
echo "$sol_prefix USE_OPTIMIZED_CONTRACT=true $scripts/bb_prove_sol_verify.sh $t --disable_zk"
done
# Just run this super large circuit for the optimized verifier - regression test for templating errors
echo "$sol_prefix USE_OPTIMIZED_CONTRACT=true $scripts/bb_prove_sol_verify.sh large_circuit_verifier_test --disable_zk"
# prove with bb cli and verify with bb.js classes
echo "$sol_prefix $scripts/bb_prove_bbjs_verify.sh a_1_mul"
echo "$sol_prefix $scripts/bb_prove_bbjs_verify.sh assert_statement"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[package]
name = "large_circuit_verifier_test"
type = "bin"
authors = [""]

[dependencies]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
input = "0x01"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
fn main(input: pub Field) {
let mut a = input;
let mut b = input + 1;

for _ in 0..2100000 {
let c = a * b + a;
let d = b * c + b;
a = c;
b = d;
}

assert(a != 0);
assert(b != 0);
}

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions barretenberg/sol/scripts/copy_optimized_to_cpp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ sed -i -E 's/(uint256 constant CIRCUIT_SIZE = )[0-9]+;/\1{{ CIRCUIT_SIZE }};/' "
sed -i -E 's/(uint256 constant LOG_N = )[0-9]+;/\1{{ LOG_CIRCUIT_SIZE }};/' "$TEMP_SOL"
sed -i -E 's/(uint256 constant NUMBER_PUBLIC_INPUTS = )[0-9]+;/\1{{ NUM_PUBLIC_INPUTS }};/' "$TEMP_SOL"
sed -i -E 's/(uint256 constant REAL_NUMBER_PUBLIC_INPUTS = )[0-9]+ - [0-9]+;/\1{{ REAL_NUM_PUBLIC_INPUTS }};/' "$TEMP_SOL"
sed -i -E 's/(uint256 constant NUMBER_OF_BARYCENTRIC_INVERSES = )[0-9]+;/\1{{ NUMBER_OF_BARYCENTRIC_INVERSES }};/' "$TEMP_SOL"

# Replace the for-loop comparison to use a template placeholder for CIRCUIT_SIZE
sed -i -E 's/for \{\} gt\(bary_centric_inverses_off, SUM_U_CHALLENGE_14\) \{/for {} gt(bary_centric_inverses_off, SUM_U_CHALLENGE_{{ LOG_N_MINUS_ONE }}) \{/' "$TEMP_SOL"
Expand All @@ -86,7 +85,7 @@ awk '
gsub(/POWERS_OF_EVALUATION_CHALLENGE_14_LOC/, "POWERS_OF_EVALUATION_CHALLENGE_{{ LOG_N_MINUS_ONE }}_LOC")
gsub(/SUM_U_CHALLENGE_14/, "SUM_U_CHALLENGE_{{ LOG_N_MINUS_ONE }}")
gsub(/GEMINI_A_EVAL_14/, "GEMINI_A_EVAL_{{ LOG_N_MINUS_ONE }}")
gsub(/INVERTED_CHALLENEGE_POW_MINUS_U_14_LOC/, "INVERTED_CHALLENEGE_POW_MINUS_U_{{ LOG_N_MINUS_ONE }}_LOC")
gsub(/INVERTED_CHALLENGE_POW_MINUS_U_14_LOC/, "INVERTED_CHALLENGE_POW_MINUS_U_{{ LOG_N_MINUS_ONE }}_LOC")
gsub(/FOLD_POS_EVALUATIONS_14_LOC/, "FOLD_POS_EVALUATIONS_{{ LOG_N_MINUS_ONE }}_LOC")
gsub(/mcopy\(0x20, GEMINI_FOLD_UNIVARIATE_0_X_LOC, 0x380\)/, "mcopy(0x20, GEMINI_FOLD_UNIVARIATE_0_X_LOC, {{ GEMINI_FOLD_UNIVARIATE_LENGTH }})")
gsub(/prev_challenge := mod\(keccak256\(0x00, 0x3a0\), p\)/, "prev_challenge := mod(keccak256(0x00, {{ GEMINI_FOLD_UNIVARIATE_HASH_LENGTH }}), p)")
Expand Down
78 changes: 40 additions & 38 deletions barretenberg/sol/src/honk/optimised/generate_offsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@

## A mini python script to help generate the locations in memory of the indicies requred to generate a proof

vk_fr = [
"VK_CIRCUIT_SIZE_LOC",
"VK_NUM_PUBLIC_INPUTS_LOC",
"VK_PUB_INPUTS_OFFSET_LOC",
]

vk_g1 = [
"Q_M",
"Q_C",
Expand Down Expand Up @@ -169,10 +163,6 @@ def print_g1(pointer: int, name: str):


def print_vk(pointer: int):
for item in vk_fr:
print_fr(pointer, item)
pointer += 32

for item in vk_g1:
print_small_g1(pointer, item)
pointer += (4*32)
Expand All @@ -195,7 +185,7 @@ def print_proof(pointer: int):
return pointer

BATCHED_RELATION_PARTIAL_LENGTH = 8
PROOF_SIZE_LOG_N = 28
PROOF_SIZE_LOG_N = 15
NUMBER_OF_ENTITIES = 41
NUMBER_OF_SUBRELATIONS = 28
NUMBER_OF_ALPHAS = NUMBER_OF_SUBRELATIONS - 1
Expand Down Expand Up @@ -258,17 +248,19 @@ def print_challenges(pointer: int):
return pointer

BARYCENTRIC_DOMAIN_SIZE = 8
def print_barycentric_domain():
def print_barycentric_domain(pointer: int):
# use scratch space
bary_pointer = SCRATCH_SPACE_POINTER
bary_domain_pointer = 0x100;
for i in range(0, BARYCENTRIC_DOMAIN_SIZE):
print_fr(bary_pointer, "BARYCENTRIC_LAGRANGE_DENOMINATOR_" + str(i) + "_LOC")
bary_pointer += 32
print_fr(bary_domain_pointer , "BARYCENTRIC_LAGRANGE_DENOMINATOR_" + str(i) + "_LOC")
bary_domain_pointer += 32

for i in range(0, PROOF_SIZE_LOG_N):
for j in range(0, BARYCENTRIC_DOMAIN_SIZE):
print_fr(bary_pointer, "BARYCENTRIC_DENOMINATOR_INVERSES_" + str(i) + "_" + str(j) + "_LOC")
bary_pointer += 32
print_fr(pointer, "BARYCENTRIC_DENOMINATOR_INVERSES_" + str(i) + "_" + str(j) + "_LOC")
pointer += 32

return pointer


def print_subrelation_eval(pointer: int):
Expand Down Expand Up @@ -305,7 +297,7 @@ def print_subrelation_intermediates(pointer: int):

def print_batch_scalars(pointer: int):
BATCH_SIZE = 69
for i in range(0, BATCH_SIZE):
for i in range(1, BATCH_SIZE):
print_fr(pointer, "BATCH_SCALAR_" + str(i) + "_LOC")
pointer += 32

Expand All @@ -317,12 +309,6 @@ def print_powers_of_evaluation_challenge(pointer: int):
pointer += 32
return pointer

def print_inverted_gemini_denominators(pointer: int):
for i in range(0, PROOF_SIZE_LOG_N + 1):
print_fr(pointer, "INVERTED_GEMINI_DENOMINATOR_" + str(i) + "_LOC")
pointer += 32
return pointer

# TODO: double check this value
def print_batched_evaluation_accumulator_inversions(pointer: int):
BATCH_SIZE = 15
Expand All @@ -331,23 +317,20 @@ def print_batched_evaluation_accumulator_inversions(pointer: int):
pointer += 32
return pointer

def print_batched_evaluation_location(pointer: int):
print_fr(pointer, "BATCHED_EVALUATION_LOC")
def print_constant_term_accumulator_location(pointer: int):
print_fr(pointer, "CONSTANT_TERM_ACCUMULATOR_LOC")
pointer += 32
return pointer

def print_constant_term_accumulator_location(pointer: int):
print_fr(pointer, "CONSTANT_TERM_ACCUMULATOR_LOC")
def print_gemini_r_inv(pointer: int):
print_fr(pointer, "GEMINI_R_INV_LOC")
pointer += 32
return pointer

def print_inversions():
pointer = SCRATCH_SPACE_POINTER
pointer = print_inverted_gemini_denominators(pointer)
def print_inversions(pointer: int):
pointer = print_batched_evaluation_accumulator_inversions(pointer)

print("")
pointer = print_batched_evaluation_location(pointer)
pointer = print_constant_term_accumulator_location(pointer)

print("")
Expand All @@ -368,6 +351,8 @@ def print_inversions():
print("")
pointer = print_fold_pos_evaluations(pointer)

return pointer



def print_pos_neg_inverted_denominators(pointer: int):
Expand All @@ -379,7 +364,7 @@ def print_pos_neg_inverted_denominators(pointer: int):

def print_inverted_challenge_pow_minus_u(pointer: int):
for i in range(0, PROOF_SIZE_LOG_N):
print_fr(pointer, "INVERTED_CHALLENEGE_POW_MINUS_U_" + str(i) + "_LOC")
print_fr(pointer, "INVERTED_CHALLENGE_POW_MINUS_U_" + str(i) + "_LOC")
pointer += 32
return pointer

Expand All @@ -401,6 +386,20 @@ def print_fold_pos_evaluations(pointer: int):
pointer += 32
return pointer

def print_barycentric_temp_mem(pointer: int):
for i in range(0, PROOF_SIZE_LOG_N * 8):
print_fr(pointer, "BARYCENTRIC_TEMP_" + str(i) + "_LOC")
pointer += 32

print_fr(pointer, "PUBLIC_INPUTS_DENOM_TEMP_LOC")
pointer += 32
print_fr(pointer, "GEMINI_R_INV_TEMP_LOC")
pointer += 32
print_fr(pointer, "BATCH_PRODUCT_TEMP_LOC")
pointer += 32

return pointer

def print_later_scratch_space(pointer: int):
print_fr(pointer, "LATER_SCRATCH_SPACE")
pointer += 32
Expand Down Expand Up @@ -470,7 +469,7 @@ def main():
print_header_centered("SUMCHECK - RUNTIME MEMORY")

print_header_centered("SUMCHECK - RUNTIME MEMORY - BARYCENTRIC")
print_barycentric_domain()
pointer = print_barycentric_domain(pointer)
print_header_centered("SUMCHECK - RUNTIME MEMORY - BARYCENTRIC COMPLETE")

print_header_centered("SUMCHECK - RUNTIME MEMORY - SUBRELATION EVALUATIONS")
Expand All @@ -494,15 +493,18 @@ def main():
print_header_centered("SHPLEMINI - RUNTIME MEMORY - BATCH SCALARS COMPLETE")

print_header_centered("SHPLEMINI - RUNTIME MEMORY - INVERSIONS")
print_inversions()
pointer = print_gemini_r_inv(pointer)
pointer = print_inversions(pointer)
print_header_centered("SHPLEMINI RUNTIME MEMORY - INVERSIONS - COMPLETE")
print_header_centered("SHPLEMINI RUNTIME MEMORY - COMPLETE")

print("")
pointer = print_later_scratch_space(pointer)
print_header_centered("Temporary space - for batch inversions")

print_header_centered("Temporary space")
pointer = print_barycentric_temp_mem(pointer)
pointer = print_temp_space(pointer)
print("")

pointer = print_later_scratch_space(pointer)
print_header_centered("Temporary space - COMPLETE")

print_scratch_space_aliases()
Expand Down
Loading
Loading