@@ -21,14 +21,18 @@ tests_hash=$(hash_str \
2121 ../ts/.rebuild_patterns \
2222 ../noir/) )
2323
24+ function hex_to_fields_json {
25+ # 1. split encoded hex into 64-character lines 3. encode as JSON array of hex strings
26+ fold -w64 | jq -R -s -c ' split("\n") | map(select(length > 0)) | map("0x" + .)'
27+ }
28+
2429# Generate inputs for a given recursively verifying program.
2530function run_proof_generation {
2631 local program=$1
2732 local native_build_dir=$( ../cpp/scripts/native-preset-build-dir)
2833 local bb=$( realpath ../cpp/$native_build_dir /bin/bb)
2934 local outdir=$( mktemp -d)
3035 trap " rm -rf $outdir " EXIT
31- local adjustment=16
3236 local ipa_accumulation_flag=" "
3337
3438 cd ./acir_tests/assert_statement
@@ -37,35 +41,37 @@ function run_proof_generation {
3741
3842 # Adjust settings based on program type
3943 if [[ $program == * " rollup" * ]]; then
40- adjustment=26
4144 ipa_accumulation_flag=" --ipa_accumulation"
4245 fi
4346 # If the test program has zk in it's name would like to use the zk prover, so we empty the flag in this case.
4447 if [[ $program == * " zk" * ]]; then
4548 disable_zk=" "
4649 fi
47- local prove_cmd=" $bb prove --scheme ultra_honk $disable_zk $ipa_accumulation_flag --output_format fields -- write_vk -o $outdir -b ./target/program.json -w ./target/witness.gz"
50+ local prove_cmd=" $bb prove --scheme ultra_honk $disable_zk $ipa_accumulation_flag --write_vk -o $outdir -b ./target/program.json -w ./target/witness.gz"
4851 echo_stderr " $prove_cmd "
4952 dump_fail " $prove_cmd "
5053
51- local vk_fields=$( cat " $outdir /vk_fields.json" )
52- local vk_hash_fields=$( cat " $outdir /vk_hash_fields.json" )
53- local public_inputs_fields=$( cat " $outdir /public_inputs_fields.json" )
54- local proof_fields=$( cat " $outdir /proof_fields.json" )
5554
56- generate_toml " $program " " $vk_fields " " $vk_hash_fields " " $proof_fields " " $public_inputs_fields "
55+ # Split the hex-encoded vk bytes into fields boundaries (but still hex-encoded), first making 64-character lines and then encoding as JSON.
56+ # This used to be done by barretenberg itself, but with serialization now always being in field elements we can do it outside of bb.
57+ local vk_fields=$( cat " $outdir /vk" | xxd -p -c 0 | hex_to_fields_json)
58+ local vk_hash_field=" \" 0x$( cat " $outdir /vk_hash" | xxd -p -c 0) \" "
59+ local public_inputs_fields=$( cat " $outdir /public_inputs" | xxd -p -c 0 | hex_to_fields_json)
60+ local proof_fields=$( cat " $outdir /proof" | xxd -p -c 0 | hex_to_fields_json)
61+
62+ generate_toml " $program " " $vk_fields " " $vk_hash_field " " $proof_fields " " $public_inputs_fields "
5763}
5864
5965function generate_toml {
6066 local program=$1
6167 local vk_fields=$2
62- local vk_hash_fields =$3
68+ local vk_hash_field =$3
6369 local proof_fields=$4
64- local num_inner_public_inputs =$5
70+ local public_inputs_fields =$5
6571 local output_file=" ../$program /Prover.toml"
6672
6773 jq -nr \
68- --arg key_hash " $vk_hash_fields " \
74+ --arg key_hash " $vk_hash_field " \
6975 --argjson vk_f " $vk_fields " \
7076 --argjson public_inputs_f " $public_inputs_fields " \
7177 --argjson proof_f " $proof_fields " \
@@ -79,7 +85,6 @@ function generate_toml {
7985}
8086
8187function regenerate_recursive_inputs {
82- local program=$1
8388 # Compile the assert_statement test as it's used for the recursive tests.
8489 cd ./acir_tests/assert_statement
8590 local nargo=$( realpath ../../../../noir/noir-repo/target/release/nargo)
@@ -91,7 +96,7 @@ function regenerate_recursive_inputs {
9196 parallel ' run_proof_generation {}' ::: $( ls internal_test_programs)
9297}
9398
94- export -f regenerate_recursive_inputs run_proof_generation generate_toml
99+ export -f hex_to_fields_json regenerate_recursive_inputs run_proof_generation generate_toml
95100
96101function compile {
97102 echo_header " Compiling acir_tests"
@@ -160,10 +165,10 @@ function test_cmds {
160165
161166 # bb.js browser tests. Isolate because server.
162167 local browser_prefix=" $tests_hash :ISOLATE=1:NET=1:CPUS=8"
163- echo " $browser_prefix :NAME=chrome_verify_honk_proof $scripts /browser_prove.sh verify_honk_proof chrome"
164- echo " $browser_prefix :NAME=chrome_a_1_mul $scripts /browser_prove.sh a_1_mul chrome"
165- echo " $browser_prefix :NAME=webkit_verify_honk_proof $scripts /browser_prove.sh verify_honk_proof webkit"
166- echo " $browser_prefix :NAME=webkit_a_1_mul $scripts /browser_prove.sh a_1_mul webkit"
168+ echo " $browser_prefix $scripts /browser_prove.sh verify_honk_proof chrome"
169+ echo " $browser_prefix $scripts /browser_prove.sh a_1_mul chrome"
170+ echo " $browser_prefix $scripts /browser_prove.sh verify_honk_proof webkit"
171+ echo " $browser_prefix $scripts /browser_prove.sh a_1_mul webkit"
167172
168173 # bb.js tests.
169174 # ecdsa_secp256r1_3x through bb.js on node to check 256k support.
0 commit comments