From c6af0b9b6158169fb65d0bcee186a979dd1c6ade Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 10 Jan 2025 16:58:06 +0000 Subject: [PATCH 01/43] Native honk proving baseline --- barretenberg/cpp/src/barretenberg/bb/main.cpp | 4 +- yarn-project/bb-bench/.gitignore | 3 + yarn-project/bb-bench/README.md | 29 + yarn-project/bb-bench/bench_native.sh | 3 + yarn-project/bb-bench/index.html | 53 ++ yarn-project/bb-bench/main/Nargo.toml | 7 + yarn-project/bb-bench/main/Prover.toml | 2 + yarn-project/bb-bench/main/src/main.nr | 3 + yarn-project/bb-bench/package.json | 22 + yarn-project/bb-bench/recursion/Nargo.toml | 7 + yarn-project/bb-bench/recursion/Prover.toml | 595 ++++++++++++++++ yarn-project/bb-bench/recursion/src/main.nr | 29 + yarn-project/bb-bench/src/main.js | 78 +++ yarn-project/bb-bench/vite.config.js | 64 ++ yarn-project/package.json | 1 + yarn-project/yarn.lock | 647 +++++++++++++++++- 16 files changed, 1541 insertions(+), 6 deletions(-) create mode 100644 yarn-project/bb-bench/.gitignore create mode 100644 yarn-project/bb-bench/README.md create mode 100755 yarn-project/bb-bench/bench_native.sh create mode 100644 yarn-project/bb-bench/index.html create mode 100644 yarn-project/bb-bench/main/Nargo.toml create mode 100644 yarn-project/bb-bench/main/Prover.toml create mode 100644 yarn-project/bb-bench/main/src/main.nr create mode 100644 yarn-project/bb-bench/package.json create mode 100644 yarn-project/bb-bench/recursion/Nargo.toml create mode 100644 yarn-project/bb-bench/recursion/Prover.toml create mode 100644 yarn-project/bb-bench/recursion/src/main.nr create mode 100644 yarn-project/bb-bench/src/main.js create mode 100644 yarn-project/bb-bench/vite.config.js diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index cf6f7fefba12..17eb3189d345 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -133,7 +133,9 @@ bool proveAndVerifyHonkAcirFormat(acir_format::AcirProgram program, acir_format: Verifier verifier{ verification_key }; - return verifier.verify_proof(proof); + const bool verified = verifier.verify_proof(proof); + vinfo(verified ? "\033[32mVERIFIED\033[0m" : "\033[31mNOT VERIFIED\033[0m"); + return verified; } /** diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/bb-bench/.gitignore new file mode 100644 index 000000000000..8a6fd650a421 --- /dev/null +++ b/yarn-project/bb-bench/.gitignore @@ -0,0 +1,3 @@ +main/proofs +recursion/proofs +dist/ diff --git a/yarn-project/bb-bench/README.md b/yarn-project/bb-bench/README.md new file mode 100644 index 000000000000..3757446244be --- /dev/null +++ b/yarn-project/bb-bench/README.md @@ -0,0 +1,29 @@ +# recursion-benchmarks + +This is a copy from 0xPARC recursion-benchmarks repo containing only benchmark code for the Barretenberg backend. + +## Main idea +**Compare diverse properties** (proving time, proof size, etc) **for a recursive circuit** that does the same set of operations (recursion, hash, signature verification, etc) **across different proving systems**. + +Having a reproducible setup that we can run on different devices. + + +## Run + +- barretenberg: + - setup: + - install Noir v0.31.0 and the Barretenberg backend + - `noirup --version 0.31.0` + - (To get `noirup`, run `curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash`) + - `bbup` + - (To get `bbup`, run `curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/refs/heads/master/barretenberg/bbup/install | bash`) + - `cd nonrust/barretenberg/browser` + - `npm install && npm run build` + - to run the benchmarks: + - native: + - `cd nonrust/barretenberg` + - `python native.py` + - browser: + - `cd nonrust/barretenberg/browser` + - `npm run preview` + - go to http://localhost:4173/ diff --git a/yarn-project/bb-bench/bench_native.sh b/yarn-project/bb-bench/bench_native.sh new file mode 100755 index 000000000000..a250ef030ba6 --- /dev/null +++ b/yarn-project/bb-bench/bench_native.sh @@ -0,0 +1,3 @@ +# WORKTODO: create proof dir if it doesn't exist +BB=../../../barretenberg/cpp/build/bin/bb +cd recursion && BB_VERBOSE=1 $BB prove_and_verify_ultra_honk -b ./target/recursion.json -w ./target/recursion.gz -v \ No newline at end of file diff --git a/yarn-project/bb-bench/index.html b/yarn-project/bb-bench/index.html new file mode 100644 index 000000000000..2b80fd81588d --- /dev/null +++ b/yarn-project/bb-bench/index.html @@ -0,0 +1,53 @@ + + + + + + wasm test + + + + + +
+ +

Open the browser console to see the execution logs.

+
+

recursion benchmarks

+
+
+ +

+
+ (logs will appear after the execution ends) +
+ + + \ No newline at end of file diff --git a/yarn-project/bb-bench/main/Nargo.toml b/yarn-project/bb-bench/main/Nargo.toml new file mode 100644 index 000000000000..285c6d7dcfe3 --- /dev/null +++ b/yarn-project/bb-bench/main/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "main" +type = "bin" +authors = [""] +compiler_version = ">=0.31.0" + +[dependencies] diff --git a/yarn-project/bb-bench/main/Prover.toml b/yarn-project/bb-bench/main/Prover.toml new file mode 100644 index 000000000000..2c1854573a40 --- /dev/null +++ b/yarn-project/bb-bench/main/Prover.toml @@ -0,0 +1,2 @@ +x = 1 +y = 2 diff --git a/yarn-project/bb-bench/main/src/main.nr b/yarn-project/bb-bench/main/src/main.nr new file mode 100644 index 000000000000..6e170de75fca --- /dev/null +++ b/yarn-project/bb-bench/main/src/main.nr @@ -0,0 +1,3 @@ +fn main(x : Field, y : pub Field) { + assert(x != y); +} diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json new file mode 100644 index 000000000000..8cf9f3df6686 --- /dev/null +++ b/yarn-project/bb-bench/package.json @@ -0,0 +1,22 @@ +{ + "name": "browser", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "run:native": "./bench_native.sh", + "compile-circuits": "NARGO=../../../noir/noir-repo/target/release/nargo && cd main && $NARGO compile && $NARGO execute && cd ../recursion && $NARGO compile && $NARGO execute", + "generate": "BB=../../../barretenberg/cpp/build/bin/bb && cd main && $BB prove_ultra_honk_output_all -b target/main.json -w target/main.gz --recursive" + }, + "devDependencies": { + "rollup-plugin-copy": "^3.5.0", + "vite": "^5.3.4" + }, + "dependencies": { + "@aztec/bb.js": "../barretenberg/ts", + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + } +} diff --git a/yarn-project/bb-bench/recursion/Nargo.toml b/yarn-project/bb-bench/recursion/Nargo.toml new file mode 100644 index 000000000000..b74431517bc7 --- /dev/null +++ b/yarn-project/bb-bench/recursion/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "recursion" +type = "bin" +authors = [""] +compiler_version = ">=0.66.0" + +[dependencies] diff --git a/yarn-project/bb-bench/recursion/Prover.toml b/yarn-project/bb-bench/recursion/Prover.toml new file mode 100644 index 000000000000..2d26d6b95ba1 --- /dev/null +++ b/yarn-project/bb-bench/recursion/Prover.toml @@ -0,0 +1,595 @@ +key_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" +proof = [ + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", + "0x00000000000000000000000000000000000000000000000b75c020998797da78", + "0x0000000000000000000000000000000000000000000000005a107acb64952eca", + "0x000000000000000000000000000000000000000000000000000031e97a575e9d", + "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", + "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", + "0x00000000000000000000000000000000000000000000000d722669117f9758a4", + "0x000000000000000000000000000000000000000000000000000178cbf4206471", + "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", + "0x000000000000000000000000000000000000000000000007fd51009034b3357f", + "0x000000000000000000000000000000000000000000000009889939f81e9c7402", + "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", + "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", + "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", + "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", + "0x0000000000000000000000000000000000000000000000000001b52c2020d746", + "0x0000000000000000000000000000005265060992033960e8e32bc3fc09c3dffe", + "0x00000000000000000000000000000000001d477657d4c186192157174e1ae85d", + "0x000000000000000000000000000000cd51c49ebd008943587ea23486b8b5589a", + "0x000000000000000000000000000000000029cff3c57394ddf5cc5323399502b0", + "0x000000000000000000000000000000c2ec36ea535b8aa21337d02d48df12dffd", + "0x000000000000000000000000000000000005af47d2e8508f0b0f9a09c4344c5b", + "0x0000000000000000000000000000008b0495a384458dc7891e7694abeba9c27f", + "0x00000000000000000000000000000000000693f38a17576df05f40917378ee5b", + "0x0000000000000000000000000000006234b1604de9892ab1a1dd7e5a12e5b64d", + "0x0000000000000000000000000000000000027beb67a31282343d16798d7f6881", + "0x0000000000000000000000000000007cf97aa50f47c9263dad2e4c2c94cb1243", + "0x00000000000000000000000000000000002892ea06de7e07a8cb8b46e6292fa0", + "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", + "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", + "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", + "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", + "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", + "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", + "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", + "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", + "0x000000000000000000000000000000c6fbd597bf32620b74384b4182361f42c4", + "0x0000000000000000000000000000000000018edc9ac63e10a04a67e9a498a93a", + "0x000000000000000000000000000000f84f1abee938aa614d378583f16052e4fd", + "0x0000000000000000000000000000000000071410de8b0d772ec833ab10f01f9d", + "0x000000000000000000000000000000183c61e378b1ca713479769b7b2e74d603", + "0x000000000000000000000000000000000003f21807c5069ab301a6d44b1d2960", + "0x0000000000000000000000000000000ba9d96216597d251984d0a302327cd6fb", + "0x00000000000000000000000000000000001379e1299d694a37dbff2a7e451267", + "0x0000000000000000000000000000000265b8a70e3adaf365ce6afab43132ce80", + "0x000000000000000000000000000000000025e91bb4ccd7abf754509beb7d23b4", + "0x0000000000000000000000000000004929d635d6bd6dd0a5af7c245c462d732c", + "0x0000000000000000000000000000000000227dd7610f4731e1b44f25d9e78fe6", + "0x2d12d5c5058c324f9bc322ea29a04784b54f8035f139416d5bcfd943b9926801", + "0x035178addba56dda1c8d22cc57e110d872e4681288802f23e8121c50366d9800", + "0x037a8291c37fd2f42ea3d67fcd4d85a760bd23dcc235cf2cd6d8ab8612e00076", + "0x14a61170ebe42c1a230a9c6ff46c53f34ada62eeb28e9c15f443bea522a72053", + "0x23bd7c2af56031b61053e0eb562fcff6f52e316955293617db8b3f08c0fe1ba6", + "0x2d6461355a16d03c2b9075389470c549381dc0a006a73a07c8057927773d7e7d", + "0x0fd87f3a55ce60da61d069a2504165660c09e4b76b72f1cebd3bcd79460104a6", + "0x16bddfdeb434f58bcbc6c70a839f0d6f4ce1d0e22451113c59772ca840d36656", + "0x1d49f7f08fa01d5e5708d3e1b44f1b270d3b77c84530f94cd40319021d28292f", + "0x1b02db4a24f0afded6585b079e449a9e80ede9071f878d84118fe240e37bf0ff", + "0x1a869122594f347f675a1c3a88eb948e7878cd6a90ff61c01113c5e0bee7cd77", + "0x0587cb65f381b8aff1260bba957d8e278b97dce88622d477862acba4ea3f2b3b", + "0x0e777fafc6f9188278400bd6fc53fbe9a3eec25030dccad81154897fd3400a87", + "0x08252f42cbc1ac0e73365d5c32df9e31c5054bd8ab61fe0b8814b7cd6d4d7012", + "0x0ab323aa4a499fdfb1a3f4a710a733d34796536a98cfefcd69be44c2e80c43b0", + "0x212af29d8ca9767c31d36ecee13d5e5ea5c27b3f0ed03f815251642489e29ca7", + "0x2cb5fa229ec292e379f11a07ce6c681027ea0735de7ab5cfa787d2714a902783", + "0x2bca6289841e63506c8f91263c829ecc19463823b175791857f03a14f2c1ff2a", + "0x0903e74403b471599cd90cff9430fb4c6862481d5539c24c95246410bbdb7691", + "0x14637ec91ba8c8178a5f403d7937d7702409a3259819d4303bd2f78ae6b3787d", + "0x1ed47bc58764e5109a214c157d3c74a92020e49ab78a6ad989eabd20652d2968", + "0x2e1e0c180338283e89ee623901d14c320a8b80e695dccf831a1ba51899aa7737", + "0x0e030b4db319a75d4493002f24cc9186a02199a21b0e0b17e9abee031224c249", + "0x2bc50226617aa1299dd5f4202983043b4592d3d88ad7bcc226679331787b8b1a", + "0x06fc21394eeee33ad5dc976bf8af6837281382c2b3170f118c6685f4115c2f75", + "0x19b0f6568e86b259b61c4b15c9b5edf65d7ea60b823e75101c6066d5c618170f", + "0x29db772d57e1ef759975e6ac93aa3f6c56b7db8b18999d1e93b383e58a50114a", + "0x0264f773b739e7b681aa53e54ccae5219b05b0c1a180d2a13613d070f5bce230", + "0x09de851afd59f141f69d407db122c1f8c6aa6d34bd1d961a47c9f0b85b0621bc", + "0x04b0c24b547fb3ef951378773bc7747aa952b948bbf6b9304a11b8abe4b25916", + "0x0dba6122c17e0f3c3e972150f9e70e15ef40ed0289714f4bd0049a5a75c05c8a", + "0x1e114852f36d88dffa79c7f4998caf1238971d8c2bfd4f5c45f78aa36d09c205", + "0x023cd67e7fca4b4ba837fd6350a59995617495cdbd910d3e5186dfdf90874703", + "0x06b67c8e91969dc0163d66d5e1e638e44003415773bf4c95a369b9b74f260216", + "0x069eb7f773d2d83852dabe8845cc2da3d06d9a8cc516ba12ed0a1605ca1b47dc", + "0x2c9d444c3a46c7f2468c45ef96860adbf7de7059ed2dc7c53fda186ee64801f1", + "0x0657ba14a725a52a4692764b04b52bdf8cac68a88fbbfd2426ce916a2417e16e", + "0x219308cc2f384ccf9f1cb94fbb8d47169db00c3d7e0c8756e27efa658d2f06b6", + "0x1c0aac17d35309e4491debb9a5e4838cd670432bb4777002ade0fb595a63ff99", + "0x1d937c8d387e0f453728ee84ac9d8a5746164b980411eed4e7b67b368d0d2d25", + "0x144621be5185b9c92945ce8216926592e89297e47581a8ab6a3e0e953ef427af", + "0x03a45f985e90fa42b60f29325d9e885b1ae9db25fa70d8050b10e6fddaed82e1", + "0x10711464fc27c8caa2ee47efb49a19ef95b261ee2c783171cc2386cc7204b420", + "0x23ca403e662a83d7bc692a6b645b869ab5eb22ff83f6830c4fd275ddca874227", + "0x1d319d1524222002c6d97ecc1b6fdb9886bf33306c260c14db2e60636fb607c3", + "0x03df499e2bf2281bff7616e24a1f6ab579c90e25f0cb8d5288af2b553df1c2f9", + "0x2be85cce06926a7dd0cedefb1ab5b378391e441570f6deff325b4be02772217e", + "0x2bea4788ad5913f739957cab0da13369e53171e6b4ecd66debf1f6dfbe0d70e7", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0e35c394861c620da38cffda79a4632d017a4f2523ae1f36dc3fe0a83d136454", + "0x0751f75e15d33b42af3166df0e9efb278ec6cc59b4d99b3d3b1f03bf430bb54d", + "0x2d2985a75725a9cdd47830fce3b484c04640d6ba322191a7911d92e8295a5325", + "0x292c366825fb8f1fc927a0f2664a89d27d4d342823c3ecea814caddf208f1480", + "0x216aaabaed2fbac5d5d993328e53cb3b8ce800e3f3f4fba4b01fb482c0268e8f", + "0x19f2ddcbff241b5d95b05adf10954580c2acffa8ffdcd417cdd9c63c5f16236a", + "0x0cd25123631cfe21d54df9a9fa368498477104f3d8e9ee2e4253c0d4458c5254", + "0x1126843e3a3796b6af14256e971d760df60684ed0d2e6e5360474bbb182e4e4b", + "0x2bd80f6711ae49ad18955a6199bcfe025d07936792aabea444e18e4c74a7bd4f", + "0x156fbcdf281d9a4a10c154b6749ee1947a5531da63378c6332e38d0540fd001e", + "0x24c3a4c29694fa1a17666ee3cf1b8af015dbdce809b5886a9ebed6e71f23b6a9", + "0x1878dabd5e5204bdfabeac21dbddde4fc8465b165b840583c1acfb49c7c9afaf", + "0x1411c1585f788ae11e4345a395ada2d147896d7cf07648e1a53c5576894d060e", + "0x1b38fe60ba4d6ab9806d0b739d8cdf57901437c3a5da2f9652407d37255a53e9", + "0x0e24a9b8df08120f7724cfd5c6eb1f86a14fafffbe4a26dea41a6ac2a51b7983", + "0x2e7b1a58d22c98f292d877e0a2d60d63f98905be5b36018f18c4b43eca99e6ef", + "0x1a0e3444a9b3023d7f077197dd3e3dba43e86fbe048c3b2a5a8da66fb6fd3fe4", + "0x043b2997d7c85e26d13d0b49e8e53c749f6fdce36e8889b5137b6ee4b097cef9", + "0x0461f2f7086c48f3d7a3e96edb34ac5dae0417d383880e93665e631ed9501763", + "0x1ca9d5c395f9e19c2c4e641afe816d8caab32ed9dab4a1a460db33d26accdf3d", + "0x265dcdf59635396f2a1373435dfb080f63438ad7a2c5aec98b646db69a059458", + "0x1fa956c7f98f34ccb0adfbfd54e8f92e7ad3ace9b7280c848dffcdc701e47ffc", + "0x0442461e421acb93c9f55761e7449b0394af89afe319a0c123e385903423132d", + "0x1dde263d8e5043083a2bfe18b1570e3466b936a51c7a4bc0e284eae9fce32144", + "0x02578d2aa0c5d04e54a0ada683410daaa7872dea87c5d20ca22075a17eaf6c55", + "0x1aef6a84a9624151981ff0cc4114adf485116fbd7e10ffa744036f44a9fb0954", + "0x0276e9478ae7d751ae0c41343cc3ea931a6bcff80eb6a6d35d8864d5804deedf", + "0x0625911f99e01102784829b4f28424f88b2e3301e3870ec09c4657b94b5cb4b1", + "0x183fb84b8b78a196f1f3f703e80bbd55d424be5ca030b7e3e41932f61db553c6", + "0x260007cf70f13ee26235560b943c826d4d495e2485971828c63d75b71f61a9be", + "0x2e67523ab50a404ec8cd78ca33782ea65a6a4db392cfa1f82d7da705043f39fb", + "0x1e7b293fa625f1676b867fc94fac4035e0b4441380f8e29d9fb3050f32f7a726", + "0x1844ed7a0e2b930a0f7d2a660c45207dc3f2d872d0e6a2df0e426fc4acc8dc95", + "0x10e19c9371cf1c9af2fab949ad16d75ce134ae649294f0f09fd4c115912c0d23", + "0x10e19c9371cf1c9af2fab949ad16d75ce134ae649294f0f09fd4c115912c0d23", + "0x2ef78369359643eaceec9687965758ff3648039a7cf533162fe70d084c7720e3", + "0x274bc52fc5011752da50834486fa124bb731635a0f34372c42e60fbdac667c08", + "0x25e5ce3fbf01b23e323c29fc1174e327a6bb7b98c0b41536db364bcac62b6bd2", + "0x00401fcb8e98f60fc7995e0ff9a905eaba638b9d139eafade59e2016b301fae4", + "0x049b508870c30c74799dbc36475bca445ac9b45d88850b8c0b31df8ca32df604", + "0x0000000000000000000000000000005ea6b5911f17625c1dc98b66864317ecdc", + "0x000000000000000000000000000000000021a21603753a1f1f99313f614bc704", + "0x0000000000000000000000000000002bd92c608b8fe737950f493f42bef80aac", + "0x000000000000000000000000000000000024fef3d71b859fa7477f777f59725d", + "0x000000000000000000000000000000ab85207e015ef0a0379d72cb14063e4280", + "0x00000000000000000000000000000000001b4061bff11c0181784ef02e4ff5a5", + "0x0000000000000000000000000000007c5707b6d65d43fc986d7f90089a7d05f3", + "0x00000000000000000000000000000000000d0baa977af5739b257e4919820d4d", + "0x000000000000000000000000000000577cdccfe544ccf8f587bbbbb88ec15a3a", + "0x0000000000000000000000000000000000005b1a219c9f9c48bfe73749f5cc29", + "0x000000000000000000000000000000102fb221c67e2ad640bbda82e8c4f0345e", + "0x00000000000000000000000000000000000ace232dee069d53f121cb59325042", + "0x000000000000000000000000000000b5ff076b216500284d1889d5658c6a9d23", + "0x000000000000000000000000000000000014da303a14ef7743cf402eb27744f2", + "0x000000000000000000000000000000942e127967f580d7c3b7c206b09d4bd5f2", + "0x0000000000000000000000000000000000100e6e9703abf84bbd09ec503928a4", + "0x000000000000000000000000000000d8d5a0088960d5ef1ecf06913882f8a1f4", + "0x00000000000000000000000000000000000ef77adc3eac2dbbeb329921c40a0e", + "0x000000000000000000000000000000862eba9d08e14c625020f5b3298316e5ed", + "0x00000000000000000000000000000000001c308db76af5333decf59b97e7c8bd", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x12b2e262ddd78c7f6db688387c3f1335ed7831dcd6431deb3a64d9f3d0db668e", + "0x1d974b02b0acedfcb942aa28706d076fe92fa88b213281a9255d76ea7511ab31", + "0x10d22510b47cd544b2e9a99ecc6e838a765ccac0cde58b869409bba188a93f14", + "0x3031feba1b919c1722ce527d25b7b33e9302e4c9fb11fb052a5a217964c14f49", + "0x2a6eba242cd72000862a7c2797ee25f0bbc503d4845d3371aedf3e0f46abc8b0", + "0x0186edc8825db44fedcb5105d86c1ee70f87248c04ed7d0b23d3f137b17d3412", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000009c95c4ef8502255bd4648d613a06626b5d", + "0x0000000000000000000000000000000000250f4dafd22cdecef92ac4e28412d4", + "0x000000000000000000000000000000e9a96cb710fbbc7916829ebb6c96c87da6", + "0x0000000000000000000000000000000000259672e911b32a2b6264aacb008388", + "0x0000000000000000000000000000008379443bf005c0c3a2148b6b27e60a9500", + "0x000000000000000000000000000000000026f363beb1d15182cd263752a30d52", + "0x0000000000000000000000000000001bc307ae66eea8d6dcdab941896c0dfa84", + "0x00000000000000000000000000000000002f47e2e4084dabc45064ca4cd8f01c", +] +public_inputs = [ + "0x0000000000000000000000000000000000000000000000000000000000000003", +] +verification_key = [ + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000000000000000000000000000d", + "0x000000000000000000000000000000000000000000000000000000000000000e", + "0x000000000000000000000000000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000010", + "0x000000000000000000000000000000ea6f0ffc3623f62df87b74c4dcf518fd39", + "0x0000000000000000000000000000000000173d770a8f5cb72b5b7df483f41e34", + "0x00000000000000000000000000000078cbd4d4ee5fbdc3e18d02a1f70cbb5d91", + "0x0000000000000000000000000000000000021f87cdc6ab8ffcec1ad655c4957e", + "0x000000000000000000000000000000becb2c582944a105e60c8137244c7fbe50", + "0x00000000000000000000000000000000001131c406ad5519e89c0595a6eb090a", + "0x000000000000000000000000000000835914e338d4388cd6b377c6f29c3ae8d7", + "0x0000000000000000000000000000000000090349ad561dca142627a600ee4277", + "0x000000000000000000000000000000974f2b1de449db7000391c8aec96756b19", + "0x00000000000000000000000000000000002073a05050310929610ff7d081bfef", + "0x000000000000000000000000000000e1ea79efc9dc97e61ef4b380bf93f5d160", + "0x00000000000000000000000000000000002e70a9d847019e5f99be0ce5849ef9", + "0x0000000000000000000000000000003181bcdd733575d173aeb749a241457fee", + "0x00000000000000000000000000000000002a99429ae3e7fc810959e114a4935e", + "0x000000000000000000000000000000638591cb7a86b050e9c915fdf75fc0188d", + "0x00000000000000000000000000000000000eec7be2a69ddc8b3c3a39729f2ff1", + "0x000000000000000000000000000000a6e81418467d38b93104d402dea2d642c1", + "0x00000000000000000000000000000000002497efe6b96c26dc4b5e015c627530", + "0x000000000000000000000000000000f9ac5e0111dc36f9cc1e9a9905235a374d", + "0x0000000000000000000000000000000000127f146a5df1de7c90d1a4a9a373fa", + "0x000000000000000000000000000000bb0e4ad8256760164511649027827b2468", + "0x00000000000000000000000000000000002c2b05a49b25c71848061f721b0e52", + "0x000000000000000000000000000000d2e0cfa24df62aeb0b250c6b8ce4bce249", + "0x0000000000000000000000000000000000177cfc8a9f03ba7a0fdf0b99899778", + "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", + "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", + "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", + "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", + "0x000000000000000000000000000000b59bdbe49ff8208baeb13b8cd40c72281f", + "0x0000000000000000000000000000000000212700d6e138f55e8fe4d41aca557f", + "0x000000000000000000000000000000d0d87076eba438e31effd2ea0f1b0e45d2", + "0x00000000000000000000000000000000000628be7db7fa2e49440a4867f3c5c8", + "0x000000000000000000000000000000c9f189f2a91aeb664ce376d8b157ba98f8", + "0x00000000000000000000000000000000002531a51ad54f124d58094b219818d2", + "0x000000000000000000000000000000ef1e6db71809307f677677e62b4163f556", + "0x0000000000000000000000000000000000272da4396fb2a7ee0638b9140e523d", + "0x0000000000000000000000000000002e54c0244a7732c87bc4712a76dd8c83fb", + "0x000000000000000000000000000000000007db77b3e04b7eba9643da57cbbe4d", + "0x000000000000000000000000000000e0dfe1ddd7f74ae0d636c910c3e85830d8", + "0x00000000000000000000000000000000000466fa9b57ec4664abd1505b490862", + "0x000000000000000000000000000000677bd789aa094b735f2abf3d9cfd032188", + "0x0000000000000000000000000000000000236e982930a9984fd08a3edddf25a1", + "0x000000000000000000000000000000c07a966aebd836d8a800f54b1c3bb5c36f", + "0x00000000000000000000000000000000002ddf6475059b2e9451db5b8d857bff", + "0x000000000000000000000000000000ee40d90bea71fba7a412dd61fcf34e8ceb", + "0x0000000000000000000000000000000000140b0936c323fd2471155617b6af56", + "0x0000000000000000000000000000002b90071823185c5ff8e440fd3d73b6fefc", + "0x00000000000000000000000000000000002b6c10790a5f6631c87d652e059df4", + "0x00000000000000000000000000000029a17181c7934fc3fdbd352eac5cb521b9", + "0x00000000000000000000000000000000001f497cbf5284ff29a2d336e5991999", + "0x000000000000000000000000000000072bd9c0c6beda1fdee6d4ff0432ba9e1b", + "0x000000000000000000000000000000000013ea38a0bd2aa751a490a724fac818", + "0x000000000000000000000000000000eaadf7d87e6da930f69b5d254947f1698b", + "0x00000000000000000000000000000000000d577ad14736816ed2cd4218deb272", + "0x00000000000000000000000000000050baefb20b099646c887f3725a9a1060d5", + "0x0000000000000000000000000000000000055415f1af71d572d51be3ad2c0fa9", + "0x00000000000000000000000000000001bfc4cb2866efb08c4af94ec7b62a3981", + "0x0000000000000000000000000000000000185271e0945a1a429843aebeacdcae", + "0x000000000000000000000000000000ce95484e566405588ec86a667ff220b11a", + "0x00000000000000000000000000000000000cf00a6840c56842137d97d1fb79de", + "0x0000000000000000000000000000006883e1dab942e5900cb18f43a1b35c8e47", + "0x0000000000000000000000000000000000260dd6d9614ab2aee48e6016a2d469", + "0x0000000000000000000000000000005c909c1f4348e73075eb570e2bfd741fec", + "0x0000000000000000000000000000000000174e896a06dbb9e696505ea2cadadb", + "0x00000000000000000000000000000080268f79ebbd31df63029c806e751a2b1b", + "0x000000000000000000000000000000000024109ad82dcdfafe58a4e4e705f2fd", + "0x000000000000000000000000000000bc08f5d443c4a6c2aa4e37ab2a628e8221", + "0x000000000000000000000000000000000009f7f7dbb5541aafe5c6b39d153650", + "0x000000000000000000000000000000e323b40cc5c8948df125dfbf360f445643", + "0x0000000000000000000000000000000000223463d121eb7f49529531c38146db", + "0x000000000000000000000000000000ea9c535c0a5966fb94b83180a92419ee39", + "0x000000000000000000000000000000000017b6fbb9f03abe1ea0d7c547591bb0", + "0x00000000000000000000000000000072cfef1b70e219f6c50aa2ef12ef6305e7", + "0x000000000000000000000000000000000015a5c7eab24f65216f9dd8c1e6718a", + "0x0000000000000000000000000000002ab218e73382a8a766dcac361fe4cfcf29", + "0x00000000000000000000000000000000002f700eb68f02e546bbf7bb83e00cd0", + "0x00000000000000000000000000000029bd695887ac44e41b10771fb674bd8011", + "0x0000000000000000000000000000000000150e76ffb0ac749f1200f24ce7da73", + "0x0000000000000000000000000000001f3e8bc3cf40a41e1c3a02ae4b5a19e1d6", + "0x000000000000000000000000000000000029515f0232dc346dd21422fbcc5591", + "0x000000000000000000000000000000c89e1799c712acce8483a6d2eef9ff676b", + "0x0000000000000000000000000000000000103ea73f2771952bc790879a9cd435", + "0x000000000000000000000000000000dedf0729b1e87ab161fc0e11d89c22ce67", + "0x00000000000000000000000000000000000dacd5403a892d1681f481752eefee", + "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", + "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", + "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", + "0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6", + "0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2", + "0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312", + "0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b", + "0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af", + "0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173", + "0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4", + "0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8", + "0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee", + "0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628", + "0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72", + "0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39", + "0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", + "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", + "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", + "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", +] diff --git a/yarn-project/bb-bench/recursion/src/main.nr b/yarn-project/bb-bench/recursion/src/main.nr new file mode 100644 index 000000000000..c5f6a756b67d --- /dev/null +++ b/yarn-project/bb-bench/recursion/src/main.nr @@ -0,0 +1,29 @@ +use std::hash::poseidon; + +// This circuit aggregates a single Honk proof from `assert_statement`. +global SIZE_OF_PROOF_IF_LOGN_IS_28: u32 = 459; +global HONK_IDENTIFIER: u32 = 1; +fn main( + verification_key: [Field; 128], + // This is the proof without public inputs attached. + // This means: the size of this does not change with the number of public inputs. + proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], + public_inputs: pub [Field; 1], + // This is currently not public. It is fine given that the vk is a part of the circuit definition. + // I believe we want to eventually make it public too though. + mut key_hash: Field, +) { + std::verify_proof_with_type( + verification_key, + proof, + public_inputs, + key_hash, + HONK_IDENTIFIER, + ); + + for _ in 0..250 { + key_hash += poseidon::bn254::hash_1([key_hash]); + } + + assert(key_hash != 0); +} diff --git a/yarn-project/bb-bench/src/main.js b/yarn-project/bb-bench/src/main.js new file mode 100644 index 000000000000..40d5efafb5d8 --- /dev/null +++ b/yarn-project/bb-bench/src/main.js @@ -0,0 +1,78 @@ +import { UltraHonkBackend } from '@aztec/bb.js'; + +import { Noir } from '@noir-lang/noir_js'; + +import main from '../main/target/main.json'; +import recursion from '../recursion/target/recursion.json'; + +document.getElementById('bbProveMulti').addEventListener('click', async () => { + // Currently if you pass a non-power of 2 number of threads, you only get as many as the nearest smaller power of two + // We expect this to be easy to fix. + prove(1 << Math.log2(navigator.hardwareConcurrency)); +}); + +document.getElementById('bbProveSingle').addEventListener('click', async () => { + prove(1); +}); + +const prove = async threads => { + console.log(`Running with ${threads} threads`); + try { + var backend = new UltraHonkBackend(main.bytecode, { threads }, { recursive: true }); + var noir = new Noir(main); + const baseInput = { + x: 1, + y: 2, + }; + + // generate the base proof + console.log('Generating base witness... ⌛'); + var startTime = performance.now(); + var { witness } = await noir.execute(baseInput); // WORKTODO: this has to change + var endTime = performance.now(); + console.log(`Witness generation took ${endTime - startTime} ms`); + + console.log('Generating base proof... ⌛'); + startTime = performance.now(); + const baseProof = await backend.generateProof(witness); + endTime = performance.now(); + console.log('Generating base proof... ✅'); + console.log(`Base proof generation took ${endTime - startTime} ms`); + + console.log('Verifying base proof... ⌛'); + var isValid = await backend.verifyProof(baseProof); + if (isValid) console.log('Verifying base proof... ✅'); + + const proofArtifacts = await backend.generateRecursiveProofArtifacts(baseProof.proof, baseProof.publicInputs); + + // generate the recursion proof + backend = new UltraHonkBackend(recursion.bytecode, { threads: threads }, { recursive: false }); + noir = new Noir(recursion); + const { publicInputs } = baseProof; + const { vkAsFields, proofAsFields, vkHash } = proofArtifacts; + const recursionInput = { + verification_key: vkAsFields, + proof: proofAsFields, + public_inputs: [publicInputs[0]], + key_hash: vkHash, + }; + + console.log('Generating recursion witness... ⌛'); + startTime = performance.now(); + var { witness } = await noir.execute(recursionInput); + endTime = performance.now(); + console.log(`Witness generation took ${endTime - startTime} ms`); + + console.log('Generating recursion proof... ⌛'); + startTime = performance.now(); + const recursionProof = await backend.generateProof(witness); + endTime = performance.now(); + console.log(`Recursive proof generation took ${endTime - startTime} ms`); + + console.log('Verifying recursion proof... ⌛'); + isValid = await backend.verifyProof(recursionProof); + if (isValid) console.log('Verifying recursion proof... ✅'); + } catch (err) { + console.error(`Proof generation failed: ${err}`); + } +}; diff --git a/yarn-project/bb-bench/vite.config.js b/yarn-project/bb-bench/vite.config.js new file mode 100644 index 000000000000..30940d15921c --- /dev/null +++ b/yarn-project/bb-bench/vite.config.js @@ -0,0 +1,64 @@ +import fs from 'fs'; +import path from 'path'; +import copy from 'rollup-plugin-copy'; +import { defineConfig } from 'vite'; + +const wasmContentTypePlugin = { + name: 'wasm-content-type-plugin', + configureServer(server) { + server.middlewares.use(async (req, res, next) => { + if (req.url.endsWith('.wasm')) { + res.setHeader('Content-Type', 'application/wasm'); + const newPath = req.url.replace('deps', 'dist'); + const targetPath = path.join(__dirname, newPath); + const wasmContent = fs.readFileSync(targetPath); + return res.end(wasmContent); + } + next(); + }); + }, +}; + +export default defineConfig(({ command }) => { + if (command === 'serve') { + return { + server: { + host: true, + headers: { + 'Cross-Origin-Embedder-Policy': 'require-corp', + 'Cross-Origin-Opener-Policy': 'same-origin', + }, + }, + build: { + target: 'esnext', + rollupOptions: { + external: ['@aztec/bb.js'], + }, + }, + optimizeDeps: { + esbuildOptions: { + target: 'esnext', + }, + }, + plugins: [ + copy({ + targets: [{ src: 'node_modules/**/*.wasm', dest: 'node_modules/.vite/dist' }], + copySync: true, + hook: 'buildStart', + }), + command === 'serve' ? wasmContentTypePlugin : [], + ], + }; + } + + return { + build: { + target: 'esnext', + }, + optimizeDeps: { + esbuildOptions: { + target: 'esnext', + }, + }, + }; +}); diff --git a/yarn-project/package.json b/yarn-project/package.json index 6028af4c8f1c..b44c320f548a 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -25,6 +25,7 @@ "aztec-faucet", "aztec-node", "validator-client", + "bb-bench", "bb-prover", "blob-sink", "bot", diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index cf4a8c93dd9a..7f71351a93e5 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -2039,6 +2039,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/aix-ppc64@npm:0.24.0" @@ -2053,6 +2060,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm64@npm:0.24.0" @@ -2067,6 +2081,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm@npm:0.24.0" @@ -2081,6 +2102,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-x64@npm:0.24.0" @@ -2095,6 +2123,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-arm64@npm:0.24.0" @@ -2109,6 +2144,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-x64@npm:0.24.0" @@ -2123,6 +2165,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-arm64@npm:0.24.0" @@ -2137,6 +2186,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-x64@npm:0.24.0" @@ -2151,6 +2207,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm64@npm:0.24.0" @@ -2165,6 +2228,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm@npm:0.24.0" @@ -2179,6 +2249,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ia32@npm:0.24.0" @@ -2193,6 +2270,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-loong64@npm:0.24.0" @@ -2207,6 +2291,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-mips64el@npm:0.24.0" @@ -2221,6 +2312,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ppc64@npm:0.24.0" @@ -2235,6 +2333,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-riscv64@npm:0.24.0" @@ -2249,6 +2354,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-s390x@npm:0.24.0" @@ -2263,6 +2375,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-x64@npm:0.24.0" @@ -2277,6 +2396,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/netbsd-x64@npm:0.24.0" @@ -2298,6 +2424,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-x64@npm:0.24.0" @@ -2312,6 +2445,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/sunos-x64@npm:0.24.0" @@ -2326,6 +2466,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-arm64@npm:0.24.0" @@ -2340,6 +2487,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-ia32@npm:0.24.0" @@ -2354,6 +2508,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-x64@npm:0.24.0" @@ -4407,6 +4568,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.30.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-android-arm64@npm:4.27.4" @@ -4414,6 +4582,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm64@npm:4.30.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-arm64@npm:4.27.4" @@ -4421,6 +4596,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.30.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-x64@npm:4.27.4" @@ -4428,6 +4610,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.30.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-arm64@npm:4.27.4" @@ -4435,6 +4624,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.30.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-x64@npm:4.27.4" @@ -4442,6 +4638,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.30.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4" @@ -4449,6 +4652,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4" @@ -4456,6 +4666,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.30.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.27.4" @@ -4463,6 +4680,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.30.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.27.4" @@ -4470,6 +4694,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.30.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4" @@ -4477,6 +4715,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4" @@ -4484,6 +4729,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.30.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.27.4" @@ -4491,6 +4743,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.30.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.27.4" @@ -4498,6 +4757,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.30.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-musl@npm:4.27.4" @@ -4505,6 +4771,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.30.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.27.4" @@ -4512,6 +4785,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.30.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.27.4" @@ -4519,6 +4799,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.30.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.27.4" @@ -4526,6 +4813,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.30.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": version: 1.1.6 resolution: "@scure/base@npm:1.1.6" @@ -5139,6 +5433,25 @@ __metadata: languageName: node linkType: hard +"@types/fs-extra@npm:^8.0.1": + version: 8.1.5 + resolution: "@types/fs-extra@npm:8.1.5" + dependencies: + "@types/node": "npm:*" + checksum: 10/565d9e55cd05064b3ab272b8748ed512b8fa5cddc23fd32b0d5f147f9ea3a45981577c4478b5060cae7b3d914c508bd2ea97eb84d9c1fa6f967982c892e4ab26 + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.1": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" + dependencies: + "@types/minimatch": "npm:*" + "@types/node": "npm:*" + checksum: 10/6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -5488,6 +5801,13 @@ __metadata: languageName: node linkType: hard +"@types/minimatch@npm:*": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" @@ -7507,6 +7827,17 @@ __metadata: languageName: node linkType: hard +"browser@workspace:bb-bench": + version: 0.0.0-use.local + resolution: "browser@workspace:bb-bench" + dependencies: + "@aztec/bb.js": ../barretenberg/ts + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + rollup-plugin-copy: "npm:^3.5.0" + vite: "npm:^5.3.4" + languageName: unknown + linkType: soft + "browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -8311,6 +8642,13 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^1.1.0": + version: 1.4.0 + resolution: "colorette@npm:1.4.0" + checksum: 10/c8d6c8c3ef5a99acfc3dd9a68f48019f1479ec347551387e4a1762e40f69e98ce19d4dc321ffb4919d1f28a7bdc90c39d4e9a901f4c474fd2124ad93a00c0454 + languageName: node + linkType: hard + "colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.20, colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -10204,6 +10542,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b + languageName: node + linkType: hard + "esbuild@npm:^0.24.0": version: 0.24.0 resolution: "esbuild@npm:0.24.0" @@ -10840,6 +11258,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.0.3": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10/dcc6432b269762dd47381d8b8358bf964d8f4f60286ac6aa41c01ade70bda459ff2001b516690b96d5365f68a49242966112b5d5cc9cd82395fa8f9d017c90ad + languageName: node + linkType: hard + "fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" @@ -11179,6 +11610,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10/6fb12449f5349be724a138b4a7b45fe6a317d2972054517f5971959c26fbd17c0e145731a11c7324460262baa33e0a799b183ceace98f7a372c95fbb6f20f5de + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -11214,7 +11656,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -11233,7 +11675,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -11505,6 +11947,22 @@ __metadata: languageName: node linkType: hard +"globby@npm:10.0.1": + version: 10.0.1 + resolution: "globby@npm:10.0.1" + dependencies: + "@types/glob": "npm:^7.1.1" + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.0.3" + glob: "npm:^7.1.3" + ignore: "npm:^5.1.1" + merge2: "npm:^1.2.3" + slash: "npm:^3.0.0" + checksum: 10/ea724a820d7d4eafc5aa3882d667a7ef3505b3018652b2658185d58752f122b75d3370086e4d4a7b1bbcdf8c2e700e5709a48db189a930df37005e1b3c86c256 + languageName: node + linkType: hard + "globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -12043,6 +12501,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.1.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -12572,6 +13037,13 @@ __metadata: languageName: node linkType: hard +"is-plain-object@npm:^3.0.0": + version: 3.0.1 + resolution: "is-plain-object@npm:3.0.1" + checksum: 10/d13fe75db350d4ac669595cdfe0242ae87fcecddf2bca858d2dd443a6ed6eb1f69951fac8c2fa85b16106c6b0d7738fea86c2aca2ecee7fd61de15c1574f2cc5 + languageName: node + linkType: hard + "is-port-reachable@npm:4.0.0": version: 4.0.0 resolution: "is-port-reachable@npm:4.0.0" @@ -13700,6 +14172,18 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10/17796f0ab1be8479827d3683433f97ebe0a1c6932c3360fa40348eac36904d69269aab26f8b16da311882d94b42e9208e8b28e490bf926364f3ac9bff134c226 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -14549,7 +15033,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": +"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -14573,7 +15057,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -16052,7 +16536,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.0": +"picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 @@ -16257,6 +16741,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/28fe1005b1339870e0a5006375ba5ac1213fd69800f79e7db09c398e074421ba6e162898e94f64942fed554037fd292db3811d87835d25ab5ef7f3c9daacb6ca + languageName: node + linkType: hard + "precinct@npm:^8.1.0": version: 8.3.1 resolution: "precinct@npm:8.3.1" @@ -17170,6 +17665,19 @@ __metadata: languageName: node linkType: hard +"rollup-plugin-copy@npm:^3.5.0": + version: 3.5.0 + resolution: "rollup-plugin-copy@npm:3.5.0" + dependencies: + "@types/fs-extra": "npm:^8.0.1" + colorette: "npm:^1.1.0" + fs-extra: "npm:^8.1.0" + globby: "npm:10.0.1" + is-plain-object: "npm:^3.0.0" + checksum: 10/706ba6bd2052b95d1037f12963ff4b50749730f18aefad10544f9574aff7c035c88c5dd9ae1f0c0408cf09862e595a0ea4d68e13c2717addaea2bda3ade0d0e0 + languageName: node + linkType: hard + "rollup@npm:^3.27.1": version: 3.29.4 resolution: "rollup@npm:3.29.4" @@ -17184,6 +17692,78 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.30.1 + resolution: "rollup@npm:4.30.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.30.1" + "@rollup/rollup-android-arm64": "npm:4.30.1" + "@rollup/rollup-darwin-arm64": "npm:4.30.1" + "@rollup/rollup-darwin-x64": "npm:4.30.1" + "@rollup/rollup-freebsd-arm64": "npm:4.30.1" + "@rollup/rollup-freebsd-x64": "npm:4.30.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.30.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.30.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.30.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.30.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.30.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.30.1" + "@rollup/rollup-linux-x64-musl": "npm:4.30.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.30.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.30.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.30.1" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10/f5d240a76a8c3cd7918f7dc97b7eaec5d97d27b3901e3843f74e18b4e9195c77abe8aa61575cd64ad7897f6a6dea6c68a7ad1a8073e3cf3139529e9fa7d06c2b + languageName: node + linkType: hard + "rollup@npm:^4.4.0": version: 4.27.4 resolution: "rollup@npm:4.27.4" @@ -17859,6 +18439,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -19389,6 +19976,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10/40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -19636,6 +20230,49 @@ __metadata: languageName: node linkType: hard +"vite@npm:^5.3.4": + version: 5.4.11 + resolution: "vite@npm:5.4.11" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10/719c4dea896e9547958643354003c8c9ea98e5367196d98f5f46cffb3ec963fead3ea5853f5af941c79bbfb73583dec19bbb0d28d2f644b95d7f59c55e22919d + languageName: node + linkType: hard + "vm-browserify@npm:^1.0.0": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" From b88f1e91e7745bcbb68bf5cc4dfd6c380815bdb2 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 10 Jan 2025 17:14:13 +0000 Subject: [PATCH 02/43] Generating main circuit works --- yarn-project/bb-bench/bench_native.sh | 3 +- yarn-project/bb-bench/recursion/Prover.toml | 462 ++++++++++---------- 2 files changed, 233 insertions(+), 232 deletions(-) diff --git a/yarn-project/bb-bench/bench_native.sh b/yarn-project/bb-bench/bench_native.sh index a250ef030ba6..1b1ddfb07a6d 100755 --- a/yarn-project/bb-bench/bench_native.sh +++ b/yarn-project/bb-bench/bench_native.sh @@ -1,3 +1,4 @@ # WORKTODO: create proof dir if it doesn't exist +CIRCUIT=recursion BB=../../../barretenberg/cpp/build/bin/bb -cd recursion && BB_VERBOSE=1 $BB prove_and_verify_ultra_honk -b ./target/recursion.json -w ./target/recursion.gz -v \ No newline at end of file +cd $CIRCUIT && BB_VERBOSE=1 $BB prove_and_verify_ultra_honk -b ./target/$CIRCUIT.json -w ./target/$CIRCUIT.gz -v \ No newline at end of file diff --git a/yarn-project/bb-bench/recursion/Prover.toml b/yarn-project/bb-bench/recursion/Prover.toml index 2d26d6b95ba1..d2507d3046ae 100644 --- a/yarn-project/bb-bench/recursion/Prover.toml +++ b/yarn-project/bb-bench/recursion/Prover.toml @@ -19,18 +19,18 @@ proof = [ "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", "0x0000000000000000000000000000000000000000000000000001b52c2020d746", - "0x0000000000000000000000000000005265060992033960e8e32bc3fc09c3dffe", - "0x00000000000000000000000000000000001d477657d4c186192157174e1ae85d", - "0x000000000000000000000000000000cd51c49ebd008943587ea23486b8b5589a", - "0x000000000000000000000000000000000029cff3c57394ddf5cc5323399502b0", - "0x000000000000000000000000000000c2ec36ea535b8aa21337d02d48df12dffd", - "0x000000000000000000000000000000000005af47d2e8508f0b0f9a09c4344c5b", - "0x0000000000000000000000000000008b0495a384458dc7891e7694abeba9c27f", - "0x00000000000000000000000000000000000693f38a17576df05f40917378ee5b", - "0x0000000000000000000000000000006234b1604de9892ab1a1dd7e5a12e5b64d", - "0x0000000000000000000000000000000000027beb67a31282343d16798d7f6881", - "0x0000000000000000000000000000007cf97aa50f47c9263dad2e4c2c94cb1243", - "0x00000000000000000000000000000000002892ea06de7e07a8cb8b46e6292fa0", + "0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9", + "0x00000000000000000000000000000000002486186d84437da79bbfff6970470f", + "0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00", + "0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e", + "0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8", + "0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99", + "0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a", + "0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612", + "0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739", + "0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee", + "0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d", + "0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a", "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", @@ -39,66 +39,66 @@ proof = [ "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", - "0x000000000000000000000000000000c6fbd597bf32620b74384b4182361f42c4", - "0x0000000000000000000000000000000000018edc9ac63e10a04a67e9a498a93a", - "0x000000000000000000000000000000f84f1abee938aa614d378583f16052e4fd", - "0x0000000000000000000000000000000000071410de8b0d772ec833ab10f01f9d", - "0x000000000000000000000000000000183c61e378b1ca713479769b7b2e74d603", - "0x000000000000000000000000000000000003f21807c5069ab301a6d44b1d2960", - "0x0000000000000000000000000000000ba9d96216597d251984d0a302327cd6fb", - "0x00000000000000000000000000000000001379e1299d694a37dbff2a7e451267", - "0x0000000000000000000000000000000265b8a70e3adaf365ce6afab43132ce80", - "0x000000000000000000000000000000000025e91bb4ccd7abf754509beb7d23b4", - "0x0000000000000000000000000000004929d635d6bd6dd0a5af7c245c462d732c", - "0x0000000000000000000000000000000000227dd7610f4731e1b44f25d9e78fe6", - "0x2d12d5c5058c324f9bc322ea29a04784b54f8035f139416d5bcfd943b9926801", - "0x035178addba56dda1c8d22cc57e110d872e4681288802f23e8121c50366d9800", - "0x037a8291c37fd2f42ea3d67fcd4d85a760bd23dcc235cf2cd6d8ab8612e00076", - "0x14a61170ebe42c1a230a9c6ff46c53f34ada62eeb28e9c15f443bea522a72053", - "0x23bd7c2af56031b61053e0eb562fcff6f52e316955293617db8b3f08c0fe1ba6", - "0x2d6461355a16d03c2b9075389470c549381dc0a006a73a07c8057927773d7e7d", - "0x0fd87f3a55ce60da61d069a2504165660c09e4b76b72f1cebd3bcd79460104a6", - "0x16bddfdeb434f58bcbc6c70a839f0d6f4ce1d0e22451113c59772ca840d36656", - "0x1d49f7f08fa01d5e5708d3e1b44f1b270d3b77c84530f94cd40319021d28292f", - "0x1b02db4a24f0afded6585b079e449a9e80ede9071f878d84118fe240e37bf0ff", - "0x1a869122594f347f675a1c3a88eb948e7878cd6a90ff61c01113c5e0bee7cd77", - "0x0587cb65f381b8aff1260bba957d8e278b97dce88622d477862acba4ea3f2b3b", - "0x0e777fafc6f9188278400bd6fc53fbe9a3eec25030dccad81154897fd3400a87", - "0x08252f42cbc1ac0e73365d5c32df9e31c5054bd8ab61fe0b8814b7cd6d4d7012", - "0x0ab323aa4a499fdfb1a3f4a710a733d34796536a98cfefcd69be44c2e80c43b0", - "0x212af29d8ca9767c31d36ecee13d5e5ea5c27b3f0ed03f815251642489e29ca7", - "0x2cb5fa229ec292e379f11a07ce6c681027ea0735de7ab5cfa787d2714a902783", - "0x2bca6289841e63506c8f91263c829ecc19463823b175791857f03a14f2c1ff2a", - "0x0903e74403b471599cd90cff9430fb4c6862481d5539c24c95246410bbdb7691", - "0x14637ec91ba8c8178a5f403d7937d7702409a3259819d4303bd2f78ae6b3787d", - "0x1ed47bc58764e5109a214c157d3c74a92020e49ab78a6ad989eabd20652d2968", - "0x2e1e0c180338283e89ee623901d14c320a8b80e695dccf831a1ba51899aa7737", - "0x0e030b4db319a75d4493002f24cc9186a02199a21b0e0b17e9abee031224c249", - "0x2bc50226617aa1299dd5f4202983043b4592d3d88ad7bcc226679331787b8b1a", - "0x06fc21394eeee33ad5dc976bf8af6837281382c2b3170f118c6685f4115c2f75", - "0x19b0f6568e86b259b61c4b15c9b5edf65d7ea60b823e75101c6066d5c618170f", - "0x29db772d57e1ef759975e6ac93aa3f6c56b7db8b18999d1e93b383e58a50114a", - "0x0264f773b739e7b681aa53e54ccae5219b05b0c1a180d2a13613d070f5bce230", - "0x09de851afd59f141f69d407db122c1f8c6aa6d34bd1d961a47c9f0b85b0621bc", - "0x04b0c24b547fb3ef951378773bc7747aa952b948bbf6b9304a11b8abe4b25916", - "0x0dba6122c17e0f3c3e972150f9e70e15ef40ed0289714f4bd0049a5a75c05c8a", - "0x1e114852f36d88dffa79c7f4998caf1238971d8c2bfd4f5c45f78aa36d09c205", - "0x023cd67e7fca4b4ba837fd6350a59995617495cdbd910d3e5186dfdf90874703", - "0x06b67c8e91969dc0163d66d5e1e638e44003415773bf4c95a369b9b74f260216", - "0x069eb7f773d2d83852dabe8845cc2da3d06d9a8cc516ba12ed0a1605ca1b47dc", - "0x2c9d444c3a46c7f2468c45ef96860adbf7de7059ed2dc7c53fda186ee64801f1", - "0x0657ba14a725a52a4692764b04b52bdf8cac68a88fbbfd2426ce916a2417e16e", - "0x219308cc2f384ccf9f1cb94fbb8d47169db00c3d7e0c8756e27efa658d2f06b6", - "0x1c0aac17d35309e4491debb9a5e4838cd670432bb4777002ade0fb595a63ff99", - "0x1d937c8d387e0f453728ee84ac9d8a5746164b980411eed4e7b67b368d0d2d25", - "0x144621be5185b9c92945ce8216926592e89297e47581a8ab6a3e0e953ef427af", - "0x03a45f985e90fa42b60f29325d9e885b1ae9db25fa70d8050b10e6fddaed82e1", - "0x10711464fc27c8caa2ee47efb49a19ef95b261ee2c783171cc2386cc7204b420", - "0x23ca403e662a83d7bc692a6b645b869ab5eb22ff83f6830c4fd275ddca874227", - "0x1d319d1524222002c6d97ecc1b6fdb9886bf33306c260c14db2e60636fb607c3", - "0x03df499e2bf2281bff7616e24a1f6ab579c90e25f0cb8d5288af2b553df1c2f9", - "0x2be85cce06926a7dd0cedefb1ab5b378391e441570f6deff325b4be02772217e", - "0x2bea4788ad5913f739957cab0da13369e53171e6b4ecd66debf1f6dfbe0d70e7", + "0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6", + "0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a", + "0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2", + "0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa", + "0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992", + "0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f", + "0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c", + "0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc", + "0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c", + "0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436", + "0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c", + "0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489", + "0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7", + "0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a", + "0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0", + "0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96", + "0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260", + "0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20", + "0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9", + "0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545", + "0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b", + "0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05", + "0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679", + "0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd", + "0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c", + "0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952", + "0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f", + "0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073", + "0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683", + "0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc", + "0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e", + "0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f", + "0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473", + "0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9", + "0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5", + "0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139", + "0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a", + "0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22", + "0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298", + "0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84", + "0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c", + "0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b", + "0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6", + "0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012", + "0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8", + "0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c", + "0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f", + "0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f", + "0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926", + "0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761", + "0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8", + "0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a", + "0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47", + "0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9", + "0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9", + "0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d", + "0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14", + "0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d", + "0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09", + "0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -275,66 +275,66 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0e35c394861c620da38cffda79a4632d017a4f2523ae1f36dc3fe0a83d136454", - "0x0751f75e15d33b42af3166df0e9efb278ec6cc59b4d99b3d3b1f03bf430bb54d", - "0x2d2985a75725a9cdd47830fce3b484c04640d6ba322191a7911d92e8295a5325", - "0x292c366825fb8f1fc927a0f2664a89d27d4d342823c3ecea814caddf208f1480", - "0x216aaabaed2fbac5d5d993328e53cb3b8ce800e3f3f4fba4b01fb482c0268e8f", - "0x19f2ddcbff241b5d95b05adf10954580c2acffa8ffdcd417cdd9c63c5f16236a", - "0x0cd25123631cfe21d54df9a9fa368498477104f3d8e9ee2e4253c0d4458c5254", - "0x1126843e3a3796b6af14256e971d760df60684ed0d2e6e5360474bbb182e4e4b", - "0x2bd80f6711ae49ad18955a6199bcfe025d07936792aabea444e18e4c74a7bd4f", - "0x156fbcdf281d9a4a10c154b6749ee1947a5531da63378c6332e38d0540fd001e", - "0x24c3a4c29694fa1a17666ee3cf1b8af015dbdce809b5886a9ebed6e71f23b6a9", - "0x1878dabd5e5204bdfabeac21dbddde4fc8465b165b840583c1acfb49c7c9afaf", - "0x1411c1585f788ae11e4345a395ada2d147896d7cf07648e1a53c5576894d060e", - "0x1b38fe60ba4d6ab9806d0b739d8cdf57901437c3a5da2f9652407d37255a53e9", - "0x0e24a9b8df08120f7724cfd5c6eb1f86a14fafffbe4a26dea41a6ac2a51b7983", - "0x2e7b1a58d22c98f292d877e0a2d60d63f98905be5b36018f18c4b43eca99e6ef", - "0x1a0e3444a9b3023d7f077197dd3e3dba43e86fbe048c3b2a5a8da66fb6fd3fe4", - "0x043b2997d7c85e26d13d0b49e8e53c749f6fdce36e8889b5137b6ee4b097cef9", - "0x0461f2f7086c48f3d7a3e96edb34ac5dae0417d383880e93665e631ed9501763", - "0x1ca9d5c395f9e19c2c4e641afe816d8caab32ed9dab4a1a460db33d26accdf3d", - "0x265dcdf59635396f2a1373435dfb080f63438ad7a2c5aec98b646db69a059458", - "0x1fa956c7f98f34ccb0adfbfd54e8f92e7ad3ace9b7280c848dffcdc701e47ffc", - "0x0442461e421acb93c9f55761e7449b0394af89afe319a0c123e385903423132d", - "0x1dde263d8e5043083a2bfe18b1570e3466b936a51c7a4bc0e284eae9fce32144", - "0x02578d2aa0c5d04e54a0ada683410daaa7872dea87c5d20ca22075a17eaf6c55", - "0x1aef6a84a9624151981ff0cc4114adf485116fbd7e10ffa744036f44a9fb0954", - "0x0276e9478ae7d751ae0c41343cc3ea931a6bcff80eb6a6d35d8864d5804deedf", - "0x0625911f99e01102784829b4f28424f88b2e3301e3870ec09c4657b94b5cb4b1", - "0x183fb84b8b78a196f1f3f703e80bbd55d424be5ca030b7e3e41932f61db553c6", - "0x260007cf70f13ee26235560b943c826d4d495e2485971828c63d75b71f61a9be", - "0x2e67523ab50a404ec8cd78ca33782ea65a6a4db392cfa1f82d7da705043f39fb", - "0x1e7b293fa625f1676b867fc94fac4035e0b4441380f8e29d9fb3050f32f7a726", - "0x1844ed7a0e2b930a0f7d2a660c45207dc3f2d872d0e6a2df0e426fc4acc8dc95", - "0x10e19c9371cf1c9af2fab949ad16d75ce134ae649294f0f09fd4c115912c0d23", - "0x10e19c9371cf1c9af2fab949ad16d75ce134ae649294f0f09fd4c115912c0d23", - "0x2ef78369359643eaceec9687965758ff3648039a7cf533162fe70d084c7720e3", - "0x274bc52fc5011752da50834486fa124bb731635a0f34372c42e60fbdac667c08", - "0x25e5ce3fbf01b23e323c29fc1174e327a6bb7b98c0b41536db364bcac62b6bd2", - "0x00401fcb8e98f60fc7995e0ff9a905eaba638b9d139eafade59e2016b301fae4", - "0x049b508870c30c74799dbc36475bca445ac9b45d88850b8c0b31df8ca32df604", - "0x0000000000000000000000000000005ea6b5911f17625c1dc98b66864317ecdc", - "0x000000000000000000000000000000000021a21603753a1f1f99313f614bc704", - "0x0000000000000000000000000000002bd92c608b8fe737950f493f42bef80aac", - "0x000000000000000000000000000000000024fef3d71b859fa7477f777f59725d", - "0x000000000000000000000000000000ab85207e015ef0a0379d72cb14063e4280", - "0x00000000000000000000000000000000001b4061bff11c0181784ef02e4ff5a5", - "0x0000000000000000000000000000007c5707b6d65d43fc986d7f90089a7d05f3", - "0x00000000000000000000000000000000000d0baa977af5739b257e4919820d4d", - "0x000000000000000000000000000000577cdccfe544ccf8f587bbbbb88ec15a3a", - "0x0000000000000000000000000000000000005b1a219c9f9c48bfe73749f5cc29", - "0x000000000000000000000000000000102fb221c67e2ad640bbda82e8c4f0345e", - "0x00000000000000000000000000000000000ace232dee069d53f121cb59325042", - "0x000000000000000000000000000000b5ff076b216500284d1889d5658c6a9d23", - "0x000000000000000000000000000000000014da303a14ef7743cf402eb27744f2", - "0x000000000000000000000000000000942e127967f580d7c3b7c206b09d4bd5f2", - "0x0000000000000000000000000000000000100e6e9703abf84bbd09ec503928a4", - "0x000000000000000000000000000000d8d5a0088960d5ef1ecf06913882f8a1f4", - "0x00000000000000000000000000000000000ef77adc3eac2dbbeb329921c40a0e", - "0x000000000000000000000000000000862eba9d08e14c625020f5b3298316e5ed", - "0x00000000000000000000000000000000001c308db76af5333decf59b97e7c8bd", + "0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3", + "0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c", + "0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72", + "0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4", + "0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45", + "0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b", + "0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56", + "0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382", + "0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b", + "0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44", + "0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422", + "0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4", + "0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555", + "0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac", + "0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7", + "0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6", + "0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d", + "0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a", + "0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac", + "0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f", + "0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7", + "0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac", + "0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b", + "0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e", + "0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031", + "0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261", + "0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33", + "0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc", + "0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d", + "0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c", + "0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551", + "0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb", + "0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834", + "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", + "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", + "0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7", + "0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1", + "0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa", + "0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b", + "0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3", + "0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05", + "0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda", + "0x000000000000000000000000000000b25425c2869931def122b407e6d248b112", + "0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf", + "0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a", + "0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1", + "0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048", + "0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5", + "0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852", + "0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49", + "0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c", + "0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7", + "0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee", + "0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d", + "0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2", + "0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e", + "0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e", + "0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6", + "0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b", + "0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", @@ -423,12 +423,12 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x12b2e262ddd78c7f6db688387c3f1335ed7831dcd6431deb3a64d9f3d0db668e", - "0x1d974b02b0acedfcb942aa28706d076fe92fa88b213281a9255d76ea7511ab31", - "0x10d22510b47cd544b2e9a99ecc6e838a765ccac0cde58b869409bba188a93f14", - "0x3031feba1b919c1722ce527d25b7b33e9302e4c9fb11fb052a5a217964c14f49", - "0x2a6eba242cd72000862a7c2797ee25f0bbc503d4845d3371aedf3e0f46abc8b0", - "0x0186edc8825db44fedcb5105d86c1ee70f87248c04ed7d0b23d3f137b17d3412", + "0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f", + "0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d", + "0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb", + "0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5", + "0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191", + "0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -451,17 +451,17 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000009c95c4ef8502255bd4648d613a06626b5d", - "0x0000000000000000000000000000000000250f4dafd22cdecef92ac4e28412d4", - "0x000000000000000000000000000000e9a96cb710fbbc7916829ebb6c96c87da6", - "0x0000000000000000000000000000000000259672e911b32a2b6264aacb008388", - "0x0000000000000000000000000000008379443bf005c0c3a2148b6b27e60a9500", - "0x000000000000000000000000000000000026f363beb1d15182cd263752a30d52", - "0x0000000000000000000000000000001bc307ae66eea8d6dcdab941896c0dfa84", - "0x00000000000000000000000000000000002f47e2e4084dabc45064ca4cd8f01c", + "0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9", + "0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f", + "0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb", + "0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7", + "0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f", + "0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859", + "0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291", + "0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2", ] public_inputs = [ - "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000002", ] verification_key = [ "0x0000000000000000000000000000000000000000000000000000000000000040", @@ -484,90 +484,90 @@ verification_key = [ "0x000000000000000000000000000000000000000000000000000000000000000e", "0x000000000000000000000000000000000000000000000000000000000000000f", "0x0000000000000000000000000000000000000000000000000000000000000010", - "0x000000000000000000000000000000ea6f0ffc3623f62df87b74c4dcf518fd39", - "0x0000000000000000000000000000000000173d770a8f5cb72b5b7df483f41e34", - "0x00000000000000000000000000000078cbd4d4ee5fbdc3e18d02a1f70cbb5d91", - "0x0000000000000000000000000000000000021f87cdc6ab8ffcec1ad655c4957e", - "0x000000000000000000000000000000becb2c582944a105e60c8137244c7fbe50", - "0x00000000000000000000000000000000001131c406ad5519e89c0595a6eb090a", - "0x000000000000000000000000000000835914e338d4388cd6b377c6f29c3ae8d7", - "0x0000000000000000000000000000000000090349ad561dca142627a600ee4277", - "0x000000000000000000000000000000974f2b1de449db7000391c8aec96756b19", - "0x00000000000000000000000000000000002073a05050310929610ff7d081bfef", - "0x000000000000000000000000000000e1ea79efc9dc97e61ef4b380bf93f5d160", - "0x00000000000000000000000000000000002e70a9d847019e5f99be0ce5849ef9", - "0x0000000000000000000000000000003181bcdd733575d173aeb749a241457fee", - "0x00000000000000000000000000000000002a99429ae3e7fc810959e114a4935e", - "0x000000000000000000000000000000638591cb7a86b050e9c915fdf75fc0188d", - "0x00000000000000000000000000000000000eec7be2a69ddc8b3c3a39729f2ff1", - "0x000000000000000000000000000000a6e81418467d38b93104d402dea2d642c1", - "0x00000000000000000000000000000000002497efe6b96c26dc4b5e015c627530", - "0x000000000000000000000000000000f9ac5e0111dc36f9cc1e9a9905235a374d", - "0x0000000000000000000000000000000000127f146a5df1de7c90d1a4a9a373fa", - "0x000000000000000000000000000000bb0e4ad8256760164511649027827b2468", - "0x00000000000000000000000000000000002c2b05a49b25c71848061f721b0e52", - "0x000000000000000000000000000000d2e0cfa24df62aeb0b250c6b8ce4bce249", - "0x0000000000000000000000000000000000177cfc8a9f03ba7a0fdf0b99899778", + "0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483", + "0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247", + "0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130", + "0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a", + "0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d", + "0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c", + "0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525", + "0x00000000000000000000000000000000000956f29100ad56f516e047143f8088", + "0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6", + "0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb", + "0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c", + "0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c", + "0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d", + "0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c", + "0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec", + "0x00000000000000000000000000000000002c004dc89326c7a22d126130396137", + "0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b", + "0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c", + "0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48", + "0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1", + "0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9", + "0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee", + "0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77", + "0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668", "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", - "0x000000000000000000000000000000b59bdbe49ff8208baeb13b8cd40c72281f", - "0x0000000000000000000000000000000000212700d6e138f55e8fe4d41aca557f", - "0x000000000000000000000000000000d0d87076eba438e31effd2ea0f1b0e45d2", - "0x00000000000000000000000000000000000628be7db7fa2e49440a4867f3c5c8", - "0x000000000000000000000000000000c9f189f2a91aeb664ce376d8b157ba98f8", - "0x00000000000000000000000000000000002531a51ad54f124d58094b219818d2", - "0x000000000000000000000000000000ef1e6db71809307f677677e62b4163f556", - "0x0000000000000000000000000000000000272da4396fb2a7ee0638b9140e523d", - "0x0000000000000000000000000000002e54c0244a7732c87bc4712a76dd8c83fb", - "0x000000000000000000000000000000000007db77b3e04b7eba9643da57cbbe4d", - "0x000000000000000000000000000000e0dfe1ddd7f74ae0d636c910c3e85830d8", - "0x00000000000000000000000000000000000466fa9b57ec4664abd1505b490862", - "0x000000000000000000000000000000677bd789aa094b735f2abf3d9cfd032188", - "0x0000000000000000000000000000000000236e982930a9984fd08a3edddf25a1", - "0x000000000000000000000000000000c07a966aebd836d8a800f54b1c3bb5c36f", - "0x00000000000000000000000000000000002ddf6475059b2e9451db5b8d857bff", - "0x000000000000000000000000000000ee40d90bea71fba7a412dd61fcf34e8ceb", - "0x0000000000000000000000000000000000140b0936c323fd2471155617b6af56", - "0x0000000000000000000000000000002b90071823185c5ff8e440fd3d73b6fefc", - "0x00000000000000000000000000000000002b6c10790a5f6631c87d652e059df4", - "0x00000000000000000000000000000029a17181c7934fc3fdbd352eac5cb521b9", - "0x00000000000000000000000000000000001f497cbf5284ff29a2d336e5991999", - "0x000000000000000000000000000000072bd9c0c6beda1fdee6d4ff0432ba9e1b", - "0x000000000000000000000000000000000013ea38a0bd2aa751a490a724fac818", - "0x000000000000000000000000000000eaadf7d87e6da930f69b5d254947f1698b", - "0x00000000000000000000000000000000000d577ad14736816ed2cd4218deb272", - "0x00000000000000000000000000000050baefb20b099646c887f3725a9a1060d5", - "0x0000000000000000000000000000000000055415f1af71d572d51be3ad2c0fa9", - "0x00000000000000000000000000000001bfc4cb2866efb08c4af94ec7b62a3981", - "0x0000000000000000000000000000000000185271e0945a1a429843aebeacdcae", - "0x000000000000000000000000000000ce95484e566405588ec86a667ff220b11a", - "0x00000000000000000000000000000000000cf00a6840c56842137d97d1fb79de", - "0x0000000000000000000000000000006883e1dab942e5900cb18f43a1b35c8e47", - "0x0000000000000000000000000000000000260dd6d9614ab2aee48e6016a2d469", - "0x0000000000000000000000000000005c909c1f4348e73075eb570e2bfd741fec", - "0x0000000000000000000000000000000000174e896a06dbb9e696505ea2cadadb", - "0x00000000000000000000000000000080268f79ebbd31df63029c806e751a2b1b", - "0x000000000000000000000000000000000024109ad82dcdfafe58a4e4e705f2fd", - "0x000000000000000000000000000000bc08f5d443c4a6c2aa4e37ab2a628e8221", - "0x000000000000000000000000000000000009f7f7dbb5541aafe5c6b39d153650", - "0x000000000000000000000000000000e323b40cc5c8948df125dfbf360f445643", - "0x0000000000000000000000000000000000223463d121eb7f49529531c38146db", - "0x000000000000000000000000000000ea9c535c0a5966fb94b83180a92419ee39", - "0x000000000000000000000000000000000017b6fbb9f03abe1ea0d7c547591bb0", - "0x00000000000000000000000000000072cfef1b70e219f6c50aa2ef12ef6305e7", - "0x000000000000000000000000000000000015a5c7eab24f65216f9dd8c1e6718a", - "0x0000000000000000000000000000002ab218e73382a8a766dcac361fe4cfcf29", - "0x00000000000000000000000000000000002f700eb68f02e546bbf7bb83e00cd0", - "0x00000000000000000000000000000029bd695887ac44e41b10771fb674bd8011", - "0x0000000000000000000000000000000000150e76ffb0ac749f1200f24ce7da73", - "0x0000000000000000000000000000001f3e8bc3cf40a41e1c3a02ae4b5a19e1d6", - "0x000000000000000000000000000000000029515f0232dc346dd21422fbcc5591", - "0x000000000000000000000000000000c89e1799c712acce8483a6d2eef9ff676b", - "0x0000000000000000000000000000000000103ea73f2771952bc790879a9cd435", - "0x000000000000000000000000000000dedf0729b1e87ab161fc0e11d89c22ce67", - "0x00000000000000000000000000000000000dacd5403a892d1681f481752eefee", + "0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e", + "0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b", + "0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58", + "0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c", + "0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88", + "0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e", + "0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e", + "0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5", + "0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c", + "0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d", + "0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98", + "0x000000000000000000000000000000000006e0242610dd531470885e9c150693", + "0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d", + "0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841", + "0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06", + "0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20", + "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", + "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", + "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", + "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", + "0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a", + "0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606", + "0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba", + "0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b", + "0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b", + "0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013", + "0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36", + "0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2", + "0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f", + "0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e", + "0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b", + "0x00000000000000000000000000000000000b34126647568e29587731e7318989", + "0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915", + "0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059", + "0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b", + "0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae", + "0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba", + "0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4", + "0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1", + "0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd", + "0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640", + "0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77", + "0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93", + "0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28", + "0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70", + "0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb", + "0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a", + "0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957", + "0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2", + "0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2", + "0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf", + "0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d", + "0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597", + "0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee", + "0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7", + "0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb", "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", @@ -588,8 +588,8 @@ verification_key = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", - "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", - "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", - "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", + "0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444", + "0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25", + "0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb", + "0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a", ] From 2c26d1521a3b7209b2af0af60ab4a6fd4da73999 Mon Sep 17 00:00:00 2001 From: Cody Date: Sun, 12 Jan 2025 00:46:45 +0000 Subject: [PATCH 03/43] unreachable --- .../barretenberg/dsl/acir_proofs/c_bind.cpp | 10 +++ barretenberg/ts/src/barretenberg/backend.ts | 5 +- barretenberg/ts/src/barretenberg_api/index.ts | 12 +++ yarn-project/bb-bench/package.json | 1 + yarn-project/bb-bench/src/main.js | 80 +++++++++++++++++++ yarn-project/yarn.lock | 1 + 6 files changed, 107 insertions(+), 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp index a3e037af23f4..1fe2f1b74101 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp @@ -422,6 +422,16 @@ WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t c *out = to_heap_buffer(str); } +WASM_EXPORT void acir_proof_no_pis_as_fields_ultra_honk(uint8_t const* proof_buf, fr::vec_out_buf out) +{ + auto proof = from_buffer>(from_buffer>(proof_buf)); + const auto num_public_inputs = static_cast(proof[1] - 16); + const auto offset = static_cast(proof[2]); + proof.erase(proof.begin() + static_cast(offset), proof.begin() + static_cast(offset + num_public_inputs)); + + *out = to_heap_buffer(proof); +} + WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const* proof_buf, fr::vec_out_buf out) { auto proof = from_buffer>(from_buffer>(proof_buf)); diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index 546b6738f6b0..ac72e56d9be0 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -272,6 +272,7 @@ export class UltraHonkBackend { // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead // inserted at an offset. // const proof = reconstructProofWithPublicInputs(proofData); + const proof = await this.api.acirProofNoPIsAsFieldsUltraHonk(_proof); // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs); // TODO: perhaps we should put this in the init function. Need to benchmark @@ -281,12 +282,12 @@ export class UltraHonkBackend { return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: [], + proofAsFields: proof.map(proof => proof.toString()), vkAsFields: vk.map(vk => vk.toString()), // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit // they expect - vkHash: '', + vkHash: '0x404', }; } diff --git a/barretenberg/ts/src/barretenberg_api/index.ts b/barretenberg/ts/src/barretenberg_api/index.ts index 4bd05354276b..7f112fb86527 100644 --- a/barretenberg/ts/src/barretenberg_api/index.ts +++ b/barretenberg/ts/src/barretenberg_api/index.ts @@ -678,6 +678,18 @@ export class BarretenbergApi { return out[0]; } + async acirProofNoPIsAsFieldsUltraHonk(proofBuf: Uint8Array): Promise { + const inArgs = [proofBuf].map(serializeBufferable); + const outTypes: OutputType[] = [VectorDeserializer(Fr)]; + const result = await this.wasm.callWasmExport( + 'acir_proof_no_pis_as_fields_ultra_honk', + inArgs, + outTypes.map(t => t.SIZE_IN_BYTES), + ); + const out = result.map((r, i) => outTypes[i].fromBuffer(r)); + return out[0]; + } + async acirVkAsFieldsUltraHonk(vkBuf: Uint8Array): Promise { const inArgs = [vkBuf].map(serializeBufferable); const outTypes: OutputType[] = [VectorDeserializer(Fr)]; diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index 8cf9f3df6686..fdd975f31358 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -12,6 +12,7 @@ "generate": "BB=../../../barretenberg/cpp/build/bin/bb && cd main && $BB prove_ultra_honk_output_all -b target/main.json -w target/main.gz --recursive" }, "devDependencies": { + "@aztec/foundation": "workspace:^", "rollup-plugin-copy": "^3.5.0", "vite": "^5.3.4" }, diff --git a/yarn-project/bb-bench/src/main.js b/yarn-project/bb-bench/src/main.js index 40d5efafb5d8..397b3a40b350 100644 --- a/yarn-project/bb-bench/src/main.js +++ b/yarn-project/bb-bench/src/main.js @@ -1,10 +1,86 @@ import { UltraHonkBackend } from '@aztec/bb.js'; import { Noir } from '@noir-lang/noir_js'; +import createDebug from 'debug'; import main from '../main/target/main.json'; import recursion from '../recursion/target/recursion.json'; +const logger = createDebug('bb-bench:'); + +/* eslint-disable no-console */ + +// Function to set up the output element and redirect all console output +function setupConsoleOutput() { + const container = document.createElement('div'); + container.style.marginBottom = '10px'; + document.body.appendChild(container); + + const copyButton = document.createElement('button'); + copyButton.innerText = 'Copy Logs to Clipboard'; + copyButton.style.marginBottom = '10px'; + copyButton.addEventListener('click', () => { + const logContent = logContainer.textContent || ''; // Get text content of log container + navigator.clipboard + .writeText(logContent) + .then(() => { + alert('Logs copied to clipboard!'); + }) + .catch(err => { + console.error('Failed to copy logs:', err); + }); + }); + container.appendChild(copyButton); + + const logContainer = document.createElement('pre'); + logContainer.id = 'logOutput'; + logContainer.style.border = '1px solid #ccc'; + logContainer.style.padding = '10px'; + logContainer.style.maxHeight = '400px'; + logContainer.style.overflowY = 'auto'; + container.appendChild(logContainer); + + // Helper to append messages to logContainer + function addLogMessage(message) { + logContainer.textContent += message + '\n'; + logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom + } + + // Override console methods to output clean logs + const originalLog = console.log; + const originalDebug = console.debug; + + console.log = function (...args) { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalLog.apply(console, args); // Keep original behavior + addLogMessage(message); + }; + + console.debug = function (...args) { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalDebug.apply(console, args); // Keep original behavior + addLogMessage(message); + }; +} + document.getElementById('bbProveMulti').addEventListener('click', async () => { // Currently if you pass a non-power of 2 number of threads, you only get as many as the nearest smaller power of two // We expect this to be easy to fix. @@ -76,3 +152,7 @@ const prove = async threads => { console.error(`Proof generation failed: ${err}`); } }; + +document.addEventListener('DOMContentLoaded', function () { + setupConsoleOutput(); // Initialize console output capture +}); diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 7f71351a93e5..f7413e33853e 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -7832,6 +7832,7 @@ __metadata: resolution: "browser@workspace:bb-bench" dependencies: "@aztec/bb.js": ../barretenberg/ts + "@aztec/foundation": "workspace:^" "@noir-lang/noir_js": "file:../../noir/packages/noir_js" rollup-plugin-copy: "npm:^3.5.0" vite: "npm:^5.3.4" From 690f3403a8609b8e2f90a33072893a3e16226077 Mon Sep 17 00:00:00 2001 From: Cody Date: Sun, 12 Jan 2025 02:05:55 +0000 Subject: [PATCH 04/43] move to tmp --- yarn-project/{bb-bench => _bb-bench}/.gitignore | 0 yarn-project/{bb-bench => _bb-bench}/README.md | 0 yarn-project/{bb-bench => _bb-bench}/bench_native.sh | 0 yarn-project/{bb-bench => _bb-bench}/index.html | 0 yarn-project/{bb-bench => _bb-bench}/main/Nargo.toml | 0 yarn-project/{bb-bench => _bb-bench}/main/Prover.toml | 0 yarn-project/{bb-bench => _bb-bench}/main/src/main.nr | 0 yarn-project/{bb-bench => _bb-bench}/package.json | 0 yarn-project/{bb-bench => _bb-bench}/recursion/Nargo.toml | 0 yarn-project/{bb-bench => _bb-bench}/recursion/Prover.toml | 0 yarn-project/{bb-bench => _bb-bench}/recursion/src/main.nr | 0 yarn-project/{bb-bench => _bb-bench}/src/main.js | 0 yarn-project/{bb-bench => _bb-bench}/vite.config.js | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename yarn-project/{bb-bench => _bb-bench}/.gitignore (100%) rename yarn-project/{bb-bench => _bb-bench}/README.md (100%) rename yarn-project/{bb-bench => _bb-bench}/bench_native.sh (100%) rename yarn-project/{bb-bench => _bb-bench}/index.html (100%) rename yarn-project/{bb-bench => _bb-bench}/main/Nargo.toml (100%) rename yarn-project/{bb-bench => _bb-bench}/main/Prover.toml (100%) rename yarn-project/{bb-bench => _bb-bench}/main/src/main.nr (100%) rename yarn-project/{bb-bench => _bb-bench}/package.json (100%) rename yarn-project/{bb-bench => _bb-bench}/recursion/Nargo.toml (100%) rename yarn-project/{bb-bench => _bb-bench}/recursion/Prover.toml (100%) rename yarn-project/{bb-bench => _bb-bench}/recursion/src/main.nr (100%) rename yarn-project/{bb-bench => _bb-bench}/src/main.js (100%) rename yarn-project/{bb-bench => _bb-bench}/vite.config.js (100%) diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/_bb-bench/.gitignore similarity index 100% rename from yarn-project/bb-bench/.gitignore rename to yarn-project/_bb-bench/.gitignore diff --git a/yarn-project/bb-bench/README.md b/yarn-project/_bb-bench/README.md similarity index 100% rename from yarn-project/bb-bench/README.md rename to yarn-project/_bb-bench/README.md diff --git a/yarn-project/bb-bench/bench_native.sh b/yarn-project/_bb-bench/bench_native.sh similarity index 100% rename from yarn-project/bb-bench/bench_native.sh rename to yarn-project/_bb-bench/bench_native.sh diff --git a/yarn-project/bb-bench/index.html b/yarn-project/_bb-bench/index.html similarity index 100% rename from yarn-project/bb-bench/index.html rename to yarn-project/_bb-bench/index.html diff --git a/yarn-project/bb-bench/main/Nargo.toml b/yarn-project/_bb-bench/main/Nargo.toml similarity index 100% rename from yarn-project/bb-bench/main/Nargo.toml rename to yarn-project/_bb-bench/main/Nargo.toml diff --git a/yarn-project/bb-bench/main/Prover.toml b/yarn-project/_bb-bench/main/Prover.toml similarity index 100% rename from yarn-project/bb-bench/main/Prover.toml rename to yarn-project/_bb-bench/main/Prover.toml diff --git a/yarn-project/bb-bench/main/src/main.nr b/yarn-project/_bb-bench/main/src/main.nr similarity index 100% rename from yarn-project/bb-bench/main/src/main.nr rename to yarn-project/_bb-bench/main/src/main.nr diff --git a/yarn-project/bb-bench/package.json b/yarn-project/_bb-bench/package.json similarity index 100% rename from yarn-project/bb-bench/package.json rename to yarn-project/_bb-bench/package.json diff --git a/yarn-project/bb-bench/recursion/Nargo.toml b/yarn-project/_bb-bench/recursion/Nargo.toml similarity index 100% rename from yarn-project/bb-bench/recursion/Nargo.toml rename to yarn-project/_bb-bench/recursion/Nargo.toml diff --git a/yarn-project/bb-bench/recursion/Prover.toml b/yarn-project/_bb-bench/recursion/Prover.toml similarity index 100% rename from yarn-project/bb-bench/recursion/Prover.toml rename to yarn-project/_bb-bench/recursion/Prover.toml diff --git a/yarn-project/bb-bench/recursion/src/main.nr b/yarn-project/_bb-bench/recursion/src/main.nr similarity index 100% rename from yarn-project/bb-bench/recursion/src/main.nr rename to yarn-project/_bb-bench/recursion/src/main.nr diff --git a/yarn-project/bb-bench/src/main.js b/yarn-project/_bb-bench/src/main.js similarity index 100% rename from yarn-project/bb-bench/src/main.js rename to yarn-project/_bb-bench/src/main.js diff --git a/yarn-project/bb-bench/vite.config.js b/yarn-project/_bb-bench/vite.config.js similarity index 100% rename from yarn-project/bb-bench/vite.config.js rename to yarn-project/_bb-bench/vite.config.js From 0e1b7a0ed6c9e7aa58301c295f56c2a441be44e5 Mon Sep 17 00:00:00 2001 From: Cody Date: Mon, 13 Jan 2025 04:02:28 +0000 Subject: [PATCH 05/43] Try to pare down and add local SRS serving --- barretenberg/ts/src/crs/net_crs.ts | 3 +- .../ts/src/crs/node/ignition_files_crs.ts | 1 + yarn-project/bb-bench/.eslintrc.cjs | 1 + yarn-project/bb-bench/.prettierignore | 2 + yarn-project/bb-bench/README.md | 3 + yarn-project/bb-bench/package.json | 114 ++++++++ yarn-project/bb-bench/package.local.json | 7 + yarn-project/bb-bench/serve.mt.json | 29 ++ yarn-project/bb-bench/serve.sh | 60 ++++ yarn-project/bb-bench/src/index.html | 9 + yarn-project/bb-bench/src/index.ts | 260 ++++++++++++++++++ .../src/scripts/generate_declaration_files.ts | 33 +++ .../src/scripts/generate_ts_from_abi.ts | 46 ++++ yarn-project/bb-bench/src/serve.ts | 95 +++++++ yarn-project/bb-bench/src/types/index.ts | 163 +++++++++++ yarn-project/bb-bench/tsconfig.json | 36 +++ yarn-project/bb-bench/webpack.config.js | 48 ++++ yarn-project/package.json | 1 + yarn-project/yarn.lock | 51 +++- 19 files changed, 959 insertions(+), 3 deletions(-) create mode 100644 yarn-project/bb-bench/.eslintrc.cjs create mode 100644 yarn-project/bb-bench/.prettierignore create mode 100644 yarn-project/bb-bench/README.md create mode 100644 yarn-project/bb-bench/package.json create mode 100644 yarn-project/bb-bench/package.local.json create mode 100644 yarn-project/bb-bench/serve.mt.json create mode 100755 yarn-project/bb-bench/serve.sh create mode 100644 yarn-project/bb-bench/src/index.html create mode 100644 yarn-project/bb-bench/src/index.ts create mode 100644 yarn-project/bb-bench/src/scripts/generate_declaration_files.ts create mode 100644 yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts create mode 100644 yarn-project/bb-bench/src/serve.ts create mode 100644 yarn-project/bb-bench/src/types/index.ts create mode 100644 yarn-project/bb-bench/tsconfig.json create mode 100644 yarn-project/bb-bench/webpack.config.js diff --git a/barretenberg/ts/src/crs/net_crs.ts b/barretenberg/ts/src/crs/net_crs.ts index 97dcfa68a953..35eb4dd8499a 100644 --- a/barretenberg/ts/src/crs/net_crs.ts +++ b/barretenberg/ts/src/crs/net_crs.ts @@ -28,7 +28,8 @@ export class NetCrs { const g1End = this.numPoints * 64 - 1; - const response = await fetch('https://aztec-ignition.s3.amazonaws.com/MAIN%20IGNITION/flat/g1.dat', { + console.log("fetching CRS"); + const response = await fetch('http://localhost:8081/g1.dat', { headers: { Range: `bytes=0-${g1End}`, }, diff --git a/barretenberg/ts/src/crs/node/ignition_files_crs.ts b/barretenberg/ts/src/crs/node/ignition_files_crs.ts index 697f45ae01d5..ddd86af8cd5b 100644 --- a/barretenberg/ts/src/crs/node/ignition_files_crs.ts +++ b/barretenberg/ts/src/crs/node/ignition_files_crs.ts @@ -47,6 +47,7 @@ export class IgnitionFilesCrs { const g1Start = 28; const g1End = g1Start + this.numPoints * 64; + console.log(`this.path: ${this.path}`); const data = await readFile(this.path + '/transcript00.dat'); this.data = data.subarray(g1Start, g1End); diff --git a/yarn-project/bb-bench/.eslintrc.cjs b/yarn-project/bb-bench/.eslintrc.cjs new file mode 100644 index 000000000000..e659927475c0 --- /dev/null +++ b/yarn-project/bb-bench/.eslintrc.cjs @@ -0,0 +1 @@ +module.exports = require('@aztec/foundation/eslint'); diff --git a/yarn-project/bb-bench/.prettierignore b/yarn-project/bb-bench/.prettierignore new file mode 100644 index 000000000000..2adf7da0bda7 --- /dev/null +++ b/yarn-project/bb-bench/.prettierignore @@ -0,0 +1,2 @@ +crates +artifacts diff --git a/yarn-project/bb-bench/README.md b/yarn-project/bb-bench/README.md new file mode 100644 index 000000000000..a953e2c74add --- /dev/null +++ b/yarn-project/bb-bench/README.md @@ -0,0 +1,3 @@ +# IVC Integration + +This module is used to test the IVC integration between mock noir protocol circuits and barretenberg. diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json new file mode 100644 index 000000000000..57fc6ba7c2a8 --- /dev/null +++ b/yarn-project/bb-bench/package.json @@ -0,0 +1,114 @@ +{ + "name": "@aztec/bb-bench", + "version": "0.1.0", + "type": "module", + "exports": { + ".": "./dest/index.js", + "./types": "./dest/types/index.js" + }, + "inherits": [ + "../package.common.json", + "./package.local.json" + ], + "scripts": { + "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack", + "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", + "formatting": "run -T prettier --check ./src && run -T eslint ./src", + "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", + "formatting:fix:types": "NODE_OPTIONS='--max-old-space-size=8096' run -T eslint --fix ./src/types && run -T prettier -w ./src/types", + "generate": "yarn generate:noir-circuits", + "generate:noir-circuits": "mkdir -p ./artifacts && cp -r ../../noir-projects/mock-protocol-circuits/target/* ./artifacts && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", + "codegen": "yarn noir-codegen", + "build:dev": "tsc -b --watch", + "build:browser-app": "rm -rf dest && webpack", + "serve-both": "./serve.sh", + "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}" + }, + "jest": { + "moduleNameMapper": { + "^(\\.{1,2}/.*)\\.[cm]?js$": "$1" + }, + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", + "rootDir": "./src", + "extensionsToTreatAsEsm": [ + ".ts" + ], + "transform": { + "^.+\\.tsx?$": [ + "@swc/jest", + { + "jsc": { + "parser": { + "syntax": "typescript", + "decorators": true + }, + "transform": { + "decoratorVersion": "2022-03" + } + } + } + ] + }, + "reporters": [ + "default" + ], + "testTimeout": 30000, + "setupFiles": [ + "../../foundation/src/jest/setup.mjs" + ] + }, + "dependencies": { + "@aztec/bb.js": "../../ts", + "@aztec/circuits.js": "workspace:^", + "@aztec/foundation": "workspace:^", + "@aztec/types": "workspace:^", + "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen", + "@noir-lang/noir_js": "file:../../noir/packages/noir_js", + "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi", + "@noir-lang/types": "portal:../../noir/packages/types", + "chalk": "^5.3.0", + "change-case": "^5.4.4", + "pako": "^2.1.0", + "playwright": "^1.48.2", + "puppeteer": "^22.4.1", + "tslib": "^2.4.0" + }, + "devDependencies": { + "@aztec/bb-prover": "workspace:^", + "@aztec/kv-store": "workspace:^", + "@aztec/simulator": "workspace:^", + "@aztec/telemetry-client": "workspace:^", + "@aztec/world-state": "workspace:^", + "@jest/globals": "^29.5.0", + "@msgpack/msgpack": "^3.0.0-beta2", + "@playwright/test": "^1.48.2", + "@types/jest": "^29.5.0", + "@types/node": "^22.8.1", + "@types/pako": "^2.0.3", + "copy-webpack-plugin": "^12.0.2", + "debug": "^4.3.4", + "html-webpack-plugin": "^5.6.0", + "jest": "^29.5.0", + "jest-mock-extended": "^4.0.0-beta1", + "levelup": "^5.1.1", + "memdown": "^6.1.1", + "resolve-typescript-plugin": "^2.0.1", + "serve": "^14.2.1", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.1", + "typescript": "^5.0.4", + "webpack": "^5.90.3", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.3" + }, + "files": [ + "dest", + "src", + "!*.test.*", + "artifacts" + ], + "types": "./dest/index.d.ts", + "engines": { + "node": ">=18" + } +} diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/bb-bench/package.local.json new file mode 100644 index 000000000000..800609b4f4ff --- /dev/null +++ b/yarn-project/bb-bench/package.local.json @@ -0,0 +1,7 @@ +{ + "scripts": { + "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack", + "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts" + }, + "files": ["dest", "src", "artifacts", "!*.test.*"] +} diff --git a/yarn-project/bb-bench/serve.mt.json b/yarn-project/bb-bench/serve.mt.json new file mode 100644 index 000000000000..7f05b9cf46d2 --- /dev/null +++ b/yarn-project/bb-bench/serve.mt.json @@ -0,0 +1,29 @@ +{ + "headers": [ + { + "source": "**/*", + "headers": [ + { + "key": "Cross-Origin-Embedder-Policy", + "value": "require-corp" + }, + { + "key": "Cross-Origin-Opener-Policy", + "value": "same-origin" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost:8080" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET, POST, PUT, DELETE, OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Authorization" + } + ] + } + ] +} diff --git a/yarn-project/bb-bench/serve.sh b/yarn-project/bb-bench/serve.sh new file mode 100755 index 000000000000..3682f2afb101 --- /dev/null +++ b/yarn-project/bb-bench/serve.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Function to handle cleanup when the script is terminated +cleanup() { + echo "Initiating cleanup..." + + # Terminate the first yarn serve process (port 8081) + if kill "$PID1" 2>/dev/null; then + echo "Killed yarn serve on port 8081 (PID $PID1)." + else + echo "No active yarn serve process found on port 8081." + fi + + # Terminate the second yarn serve process (port 8080) + if kill "$PID2" 2>/dev/null; then + echo "Killed yarn serve on port 8080 (PID $PID2)." + else + echo "No active yarn serve process found on port 8080." + fi + + echo "Cleanup completed." + exit 0 +} + +# Trap common termination signals and invoke the cleanup function +trap cleanup SIGINT SIGTERM EXIT + +# Start the first yarn serve process on port 8081 in the background +yarn serve -n -L -p 8081 --cors -c serve.mt.json "$HOME/.bb-crs" & +PID1=$! +echo "Started yarn serve on port 8081 with PID $PID1." + +# Start the second yarn serve process on port 8080 in the background +yarn serve -n -L -p 8080 -c ../serve.mt.json dest & +PID2=$! +echo "Started yarn serve on port 8080 with PID $PID2." + +# Function to monitor background processes +monitor_processes() { + while true; do + # Check if either process has exited + if ! kill -0 "$PID1" 2>/dev/null; then + echo "yarn serve on port 8081 (PID $PID1) has exited." + cleanup + fi + + if ! kill -0 "$PID2" 2>/dev/null; then + echo "yarn serve on port 8080 (PID $PID2) has exited." + cleanup + fi + + sleep 1 + done +} + +# Start monitoring in the background +monitor_processes & + +# Wait indefinitely until a termination signal is received +wait diff --git a/yarn-project/bb-bench/src/index.html b/yarn-project/bb-bench/src/index.html new file mode 100644 index 000000000000..6c1cc8af4a59 --- /dev/null +++ b/yarn-project/bb-bench/src/index.html @@ -0,0 +1,9 @@ + + + + My Test bb.js App + + + + + diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts new file mode 100644 index 000000000000..670000668751 --- /dev/null +++ b/yarn-project/bb-bench/src/index.ts @@ -0,0 +1,260 @@ +import { type CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS } from '@aztec/circuits.js'; + +import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; +import createDebug from 'debug'; +import { ungzip } from 'pako'; + +import MockAppCreatorCircuit from '../artifacts/app_creator.json' assert { type: 'json' }; +import MockAppReaderCircuit from '../artifacts/app_reader.json' assert { type: 'json' }; +import MockAppCreatorVk from '../artifacts/keys/app_creator.vk.data.json' assert { type: 'json' }; +import MockAppReaderVk from '../artifacts/keys/app_reader.vk.data.json' assert { type: 'json' }; +import MockPrivateKernelInitVk from '../artifacts/keys/mock_private_kernel_init.vk.data.json' assert { type: 'json' }; +import MockPrivateKernelInnerVk from '../artifacts/keys/mock_private_kernel_inner.vk.data.json' assert { type: 'json' }; +import MockPrivateKernelResetVk from '../artifacts/keys/mock_private_kernel_reset.vk.data.json' assert { type: 'json' }; +import MockPrivateKernelTailVk from '../artifacts/keys/mock_private_kernel_tail.vk.data.json' assert { type: 'json' }; +import MockPrivateKernelInitCircuit from '../artifacts/mock_private_kernel_init.json' assert { type: 'json' }; +import MockPrivateKernelInnerCircuit from '../artifacts/mock_private_kernel_inner.json' assert { type: 'json' }; +import MockPrivateKernelResetCircuit from '../artifacts/mock_private_kernel_reset.json' assert { type: 'json' }; +import MockPrivateKernelTailCircuit from '../artifacts/mock_private_kernel_tail.json' assert { type: 'json' }; +import MockPublicBaseCircuit from '../artifacts/mock_public_base.json' assert { type: 'json' }; +import type { + AppCreatorInputType, + AppPublicInputs, + AppReaderInputType, + FixedLengthArray, + KernelPublicInputs, + MockPrivateKernelInitInputType, + MockPrivateKernelInnerInputType, + MockPrivateKernelResetInputType, + MockPrivateKernelTailInputType, + MockPublicBaseInputType, + PrivateKernelPublicInputs, + u8, +} from './types/index.js'; + +// Re export the circuit jsons +export { + MockAppCreatorCircuit, + MockAppReaderCircuit, + MockPrivateKernelInitCircuit, + MockPrivateKernelInnerCircuit, + MockPrivateKernelResetCircuit, + MockPrivateKernelTailCircuit, + MockPublicBaseCircuit, + MockAppCreatorVk, + MockAppReaderVk, + MockPrivateKernelInitVk, + MockPrivateKernelInnerVk, + MockPrivateKernelResetVk, + MockPrivateKernelTailVk, +}; + +const logger = createDebug('aztec:ivc-test'); + +/* eslint-disable camelcase */ + +export const MOCK_MAX_COMMITMENTS_PER_TX = 4; + +function foreignCallHandler(): Promise { + throw new Error('Unexpected foreign call'); +} + +export interface WitnessGenResult { + witness: Uint8Array; + publicInputs: PublicInputsType; +} + +export async function witnessGenCreatorAppMockCircuit( + args: AppCreatorInputType, +): Promise> { + const program = new Noir(MockAppCreatorCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as AppPublicInputs, + }; +} + +export async function witnessGenReaderAppMockCircuit( + args: AppReaderInputType, +): Promise> { + const program = new Noir(MockAppReaderCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as AppPublicInputs, + }; +} + +export async function witnessGenMockPrivateKernelInitCircuit( + args: MockPrivateKernelInitInputType, +): Promise> { + const program = new Noir(MockPrivateKernelInitCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as PrivateKernelPublicInputs, + }; +} + +export async function witnessGenMockPrivateKernelInnerCircuit( + args: MockPrivateKernelInnerInputType, +): Promise> { + const program = new Noir(MockPrivateKernelInnerCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as PrivateKernelPublicInputs, + }; +} + +export async function witnessGenMockPrivateKernelResetCircuit( + args: MockPrivateKernelResetInputType, +): Promise> { + const program = new Noir(MockPrivateKernelResetCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as PrivateKernelPublicInputs, + }; +} + +export async function witnessGenMockPrivateKernelTailCircuit( + args: MockPrivateKernelTailInputType, +): Promise> { + const program = new Noir(MockPrivateKernelTailCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as KernelPublicInputs, + }; +} + +export async function witnessGenMockPublicBaseCircuit(args: MockPublicBaseInputType): Promise> { + const program = new Noir(MockPublicBaseCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as u8, + }; +} + +export function getVkAsFields(vk: { + keyAsBytes: string; + keyAsFields: string[]; +}): FixedLengthArray { + return vk.keyAsFields as FixedLengthArray; +} + +export async function generate3FunctionTestingIVCStack(): Promise<[string[], Uint8Array[]]> { + const tx = { + number_of_calls: '0x1', + }; + + // Witness gen app and kernels + const appWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); + logger('generated app mock circuit witness'); + + const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({ + app_inputs: appWitnessGenResult.publicInputs, + tx, + app_vk: getVkAsFields(MockAppCreatorVk), + }); + logger('generated mock private kernel init witness'); + + const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ + prev_kernel_public_inputs: initWitnessGenResult.publicInputs, + kernel_vk: getVkAsFields(MockPrivateKernelResetVk), + }); + logger('generated mock private kernel tail witness'); + + // Create client IVC proof + const bytecodes = [ + MockAppCreatorCircuit.bytecode, + MockPrivateKernelInitCircuit.bytecode, + MockPrivateKernelTailCircuit.bytecode, + ]; + const witnessStack = [appWitnessGenResult.witness, initWitnessGenResult.witness, tailWitnessGenResult.witness]; + + return [bytecodes, witnessStack]; +} + +export async function generate6FunctionTestingIVCStack(): Promise<[string[], Uint8Array[]]> { + const tx = { + number_of_calls: '0x2', + }; + // Witness gen app and kernels + const creatorAppWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); + const readerAppWitnessGenResult = await witnessGenReaderAppMockCircuit({ commitments_to_read: ['0x2', '0x0'] }); + + const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({ + app_inputs: creatorAppWitnessGenResult.publicInputs, + tx, + app_vk: getVkAsFields(MockAppCreatorVk), + }); + const innerWitnessGenResult = await witnessGenMockPrivateKernelInnerCircuit({ + prev_kernel_public_inputs: initWitnessGenResult.publicInputs, + app_inputs: readerAppWitnessGenResult.publicInputs, + app_vk: getVkAsFields(MockAppReaderVk), + kernel_vk: getVkAsFields(MockPrivateKernelInitVk), + }); + + const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({ + prev_kernel_public_inputs: innerWitnessGenResult.publicInputs, + commitment_read_hints: [ + '0x1', // Reader reads commitment 0x2, which is at index 1 of the created commitments + MOCK_MAX_COMMITMENTS_PER_TX.toString(), // Pad with no-ops + MOCK_MAX_COMMITMENTS_PER_TX.toString(), + MOCK_MAX_COMMITMENTS_PER_TX.toString(), + ], + kernel_vk: getVkAsFields(MockPrivateKernelInnerVk), + }); + + const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ + prev_kernel_public_inputs: resetWitnessGenResult.publicInputs, + kernel_vk: getVkAsFields(MockPrivateKernelResetVk), + }); + + // Create client IVC proof + const bytecodes = [ + MockAppCreatorCircuit.bytecode, + MockPrivateKernelInitCircuit.bytecode, + MockAppReaderCircuit.bytecode, + MockPrivateKernelInnerCircuit.bytecode, + MockPrivateKernelResetCircuit.bytecode, + MockPrivateKernelTailCircuit.bytecode, + ]; + const witnessStack = [ + creatorAppWitnessGenResult.witness, + initWitnessGenResult.witness, + readerAppWitnessGenResult.witness, + innerWitnessGenResult.witness, + resetWitnessGenResult.witness, + tailWitnessGenResult.witness, + ]; + + return [bytecodes, witnessStack]; +} + +function base64ToUint8Array(base64: string): Uint8Array { + return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); +} + +export async function proveThenVerifyAztecClient( + bytecodes: string[], + witnessStack: Uint8Array[], + threads?: number, +): Promise { + const { AztecClientBackend } = await import('@aztec/bb.js'); + const backend = new AztecClientBackend( + bytecodes.map(base64ToUint8Array).map((arr: Uint8Array) => ungzip(arr)), + { threads }, + ); + try { + const [proof, vk] = await backend.prove(witnessStack.map((arr: Uint8Array) => ungzip(arr))); + const verified = await backend.verify(proof, vk); + return verified; + } finally { + await backend.destroy(); + } +} diff --git a/yarn-project/bb-bench/src/scripts/generate_declaration_files.ts b/yarn-project/bb-bench/src/scripts/generate_declaration_files.ts new file mode 100644 index 000000000000..5a3cd7557fd9 --- /dev/null +++ b/yarn-project/bb-bench/src/scripts/generate_declaration_files.ts @@ -0,0 +1,33 @@ +import { fileURLToPath } from '@aztec/foundation/url'; + +import { readdir, writeFile } from 'fs/promises'; +import { join } from 'path'; + +const contract = `\ +import { type NoirCompiledCircuit } from '@aztec/types/noir'; +const circuit: NoirCompiledCircuit; +export = circuit; +`; + +const vk = `\ +const vk: { keyAsBytes: string; keyAsFields: string[] }; +export = vk; +`; + +async function generateDeclarationFor(target: string, content: string) { + const files = await readdir(target); + for (const file of files) { + // guard against running this script twice without cleaning the artifacts/ dir first + if (!file.endsWith('.json')) { + continue; + } + const name = file.replace('.json', ''); + await writeFile(join(target, `${name}.d.json.ts`), content); + } +} + +// Generate declaration files for contracts +await generateDeclarationFor(fileURLToPath(new URL('../../artifacts', import.meta.url).href), contract); + +// Generate declaration files for vks +await generateDeclarationFor(fileURLToPath(new URL('../../artifacts/keys', import.meta.url).href), vk); diff --git a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts new file mode 100644 index 000000000000..8adfaa721dcc --- /dev/null +++ b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts @@ -0,0 +1,46 @@ +import { createConsoleLogger } from '@aztec/foundation/log'; + +import { codegen } from '@noir-lang/noir_codegen'; +import { type CompiledCircuit } from '@noir-lang/types'; +import { pascalCase } from 'change-case'; +import { promises as fs } from 'fs'; + +const log = createConsoleLogger('mock-circuits'); + +const circuits = [ + 'app_creator', + 'app_reader', + 'mock_private_kernel_init', + 'mock_private_kernel_inner', + 'mock_private_kernel_reset', + 'mock_private_kernel_tail', + 'mock_public_base', +]; + +const main = async () => { + try { + await fs.access('./src/types/'); + } catch (error) { + await fs.mkdir('./src/types', { recursive: true }); + } + const programs: [string, CompiledCircuit][] = []; + // Collect all circuits + for (const circuit of circuits) { + const rawData = await fs.readFile(`./artifacts/${circuit}.json`, 'utf-8'); + const abiObj: CompiledCircuit = JSON.parse(rawData); + programs.push([pascalCase(circuit), abiObj]); + } + const code = codegen( + programs, + false, // Don't embed artifacts + true, // Use fixed length arrays + ); + await fs.writeFile('./src/types/index.ts', code); +}; + +try { + await main(); +} catch (err: unknown) { + log(`Error generating types ${err}`); + process.exit(1); +} diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts new file mode 100644 index 000000000000..3f12245e1716 --- /dev/null +++ b/yarn-project/bb-bench/src/serve.ts @@ -0,0 +1,95 @@ +import createDebug from 'debug'; + +import { generate3FunctionTestingIVCStack, proveThenVerifyAztecClient } from './index.js'; + +const logger = createDebug('aztec:ivc-test'); + +/* eslint-disable no-console */ + +// Function to set up the output element and redirect all console output +function setupConsoleOutput() { + const container = document.createElement('div'); + container.style.marginBottom = '10px'; + document.body.appendChild(container); + + const copyButton = document.createElement('button'); + copyButton.innerText = 'Copy Logs to Clipboard'; + copyButton.style.marginBottom = '10px'; + copyButton.addEventListener('click', () => { + const logContent = logContainer.textContent || ''; // Get text content of log container + navigator.clipboard + .writeText(logContent) + .then(() => { + alert('Logs copied to clipboard!'); + }) + .catch(err => { + console.error('Failed to copy logs:', err); + }); + }); + container.appendChild(copyButton); + + const logContainer = document.createElement('pre'); + logContainer.id = 'logOutput'; + logContainer.style.border = '1px solid #ccc'; + logContainer.style.padding = '10px'; + logContainer.style.maxHeight = '400px'; + logContainer.style.overflowY = 'auto'; + container.appendChild(logContainer); + + // Helper to append messages to logContainer + function addLogMessage(message: string) { + logContainer.textContent += message + '\n'; + logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom + } + + // Override console methods to output clean logs + const originalLog = console.log; + const originalDebug = console.debug; + + console.log = (...args: any[]) => { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalLog.apply(console, args); // Keep original behavior + addLogMessage(message); + }; + + console.debug = (...args: any[]) => { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalDebug.apply(console, args); // Keep original behavior + addLogMessage(message); + }; +} + +(window as any).proveThenVerifyAztecClient = proveThenVerifyAztecClient; + +document.addEventListener('DOMContentLoaded', function () { + setupConsoleOutput(); // Initialize console output capture + + const button = document.createElement('button'); + button.innerText = 'Run Test'; + button.addEventListener('click', async () => { + logger(`generating circuit and witness...`); + const [bytecodes, witnessStack] = await generate3FunctionTestingIVCStack(); + logger(`done. proving and verifying...`); + const verified = await proveThenVerifyAztecClient(bytecodes, witnessStack); + logger(`verified? ${verified}`); + }); + document.body.appendChild(button); +}); diff --git a/yarn-project/bb-bench/src/types/index.ts b/yarn-project/bb-bench/src/types/index.ts new file mode 100644 index 000000000000..5644a3f988e6 --- /dev/null +++ b/yarn-project/bb-bench/src/types/index.ts @@ -0,0 +1,163 @@ +/* Autogenerated file, do not edit! */ + +/* eslint-disable */ +import { CompiledCircuit, ForeignCallHandler, InputMap, Noir } from '@noir-lang/noir_js'; + +export { ForeignCallHandler } from '@noir-lang/noir_js'; + +export type FixedLengthArray = L extends 0 ? never[] : T[] & { length: L }; +export type Field = string; +export type u32 = string; +export type u8 = string; + +export type AppPublicInputs = { + commitments: FixedLengthArray; + read_requests: FixedLengthArray; +}; + +export type TxRequest = { + number_of_calls: u32; +}; + +export type PrivateKernelPublicInputs = { + remaining_calls: u32; + commitments: FixedLengthArray; + read_requests: FixedLengthArray; +}; + +export type KernelPublicInputs = { + commitments: FixedLengthArray; +}; + +export type AppCreatorInputType = { + commitments_to_create: FixedLengthArray; +}; + +export type AppCreatorReturnType = AppPublicInputs; + +export async function AppCreator( + commitments_to_create: FixedLengthArray, + AppCreator_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(AppCreator_circuit); + const args: InputMap = { commitments_to_create }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as AppPublicInputs; +} +export type AppReaderInputType = { + commitments_to_read: FixedLengthArray; +}; + +export type AppReaderReturnType = AppPublicInputs; + +export async function AppReader( + commitments_to_read: FixedLengthArray, + AppReader_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(AppReader_circuit); + const args: InputMap = { commitments_to_read }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as AppPublicInputs; +} +export type MockPrivateKernelInitInputType = { + tx: TxRequest; + app_inputs: AppPublicInputs; + app_vk: FixedLengthArray; +}; + +export type MockPrivateKernelInitReturnType = PrivateKernelPublicInputs; + +export async function MockPrivateKernelInit( + tx: TxRequest, + app_inputs: AppPublicInputs, + app_vk: FixedLengthArray, + MockPrivateKernelInit_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(MockPrivateKernelInit_circuit); + const args: InputMap = { tx, app_inputs, app_vk }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as PrivateKernelPublicInputs; +} +export type MockPrivateKernelInnerInputType = { + prev_kernel_public_inputs: PrivateKernelPublicInputs; + kernel_vk: FixedLengthArray; + app_inputs: AppPublicInputs; + app_vk: FixedLengthArray; +}; + +export type MockPrivateKernelInnerReturnType = PrivateKernelPublicInputs; + +export async function MockPrivateKernelInner( + prev_kernel_public_inputs: PrivateKernelPublicInputs, + kernel_vk: FixedLengthArray, + app_inputs: AppPublicInputs, + app_vk: FixedLengthArray, + MockPrivateKernelInner_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(MockPrivateKernelInner_circuit); + const args: InputMap = { prev_kernel_public_inputs, kernel_vk, app_inputs, app_vk }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as PrivateKernelPublicInputs; +} +export type MockPrivateKernelResetInputType = { + prev_kernel_public_inputs: PrivateKernelPublicInputs; + kernel_vk: FixedLengthArray; + commitment_read_hints: FixedLengthArray; +}; + +export type MockPrivateKernelResetReturnType = PrivateKernelPublicInputs; + +export async function MockPrivateKernelReset( + prev_kernel_public_inputs: PrivateKernelPublicInputs, + kernel_vk: FixedLengthArray, + commitment_read_hints: FixedLengthArray, + MockPrivateKernelReset_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(MockPrivateKernelReset_circuit); + const args: InputMap = { prev_kernel_public_inputs, kernel_vk, commitment_read_hints }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as PrivateKernelPublicInputs; +} +export type MockPrivateKernelTailInputType = { + prev_kernel_public_inputs: PrivateKernelPublicInputs; + kernel_vk: FixedLengthArray; +}; + +export type MockPrivateKernelTailReturnType = KernelPublicInputs; + +export async function MockPrivateKernelTail( + prev_kernel_public_inputs: PrivateKernelPublicInputs, + kernel_vk: FixedLengthArray, + MockPrivateKernelTail_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(MockPrivateKernelTail_circuit); + const args: InputMap = { prev_kernel_public_inputs, kernel_vk }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as KernelPublicInputs; +} +export type MockPublicBaseInputType = { + verification_key: FixedLengthArray; + proof: FixedLengthArray; + pub_cols_flattened: FixedLengthArray; +}; + +export type MockPublicBaseReturnType = u8; + +export async function MockPublicBase( + verification_key: FixedLengthArray, + proof: FixedLengthArray, + pub_cols_flattened: FixedLengthArray, + MockPublicBase_circuit: CompiledCircuit, + foreignCallHandler?: ForeignCallHandler, +): Promise { + const program = new Noir(MockPublicBase_circuit); + const args: InputMap = { verification_key, proof, pub_cols_flattened }; + const { returnValue } = await program.execute(args, foreignCallHandler); + return returnValue as u8; +} diff --git a/yarn-project/bb-bench/tsconfig.json b/yarn-project/bb-bench/tsconfig.json new file mode 100644 index 000000000000..a355b926142a --- /dev/null +++ b/yarn-project/bb-bench/tsconfig.json @@ -0,0 +1,36 @@ +{ + "extends": "..", + "compilerOptions": { + "outDir": "dest", + "rootDir": "src", + "tsBuildInfoFile": ".tsbuildinfo", + "resolveJsonModule": true + }, + "references": [ + { + "path": "../circuits.js" + }, + { + "path": "../foundation" + }, + { + "path": "../types" + }, + { + "path": "../bb-prover" + }, + { + "path": "../kv-store" + }, + { + "path": "../simulator" + }, + { + "path": "../telemetry-client" + }, + { + "path": "../world-state" + } + ], + "include": ["src", "artifacts/*.d.json.ts", "artifacts/**/*.d.json.ts"] +} diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/bb-bench/webpack.config.js new file mode 100644 index 000000000000..09dafd51eff5 --- /dev/null +++ b/yarn-project/bb-bench/webpack.config.js @@ -0,0 +1,48 @@ +import CopyWebpackPlugin from 'copy-webpack-plugin'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import { dirname, resolve } from 'path'; +import ResolveTypeScriptPlugin from 'resolve-typescript-plugin'; +import { fileURLToPath } from 'url'; +import webpack from 'webpack'; + +export default { + target: 'web', + mode: 'production', + entry: { + index: './src/serve.ts', + }, + module: { + rules: [ + { + test: /\.tsx?$/, + use: [{ loader: 'ts-loader' }], + }, + ], + }, + output: { + path: resolve(dirname(fileURLToPath(import.meta.url)), './dest'), + filename: '[name].js', + chunkFilename: '[name].chunk.js', // This naming pattern is used for chunks produced from code-splitting. + }, + plugins: [ + new HtmlWebpackPlugin({ inject: false, template: './src/index.html' }), + new webpack.DefinePlugin({ 'process.env.NODE_DEBUG': false }), + ], + resolve: { + plugins: [new ResolveTypeScriptPlugin()], + fallback: { + tty: false, + }, + }, + devServer: { + hot: false, + client: { + logging: 'none', + overlay: false, + }, + headers: { + 'Cross-Origin-Opener-Policy': 'same-origin', + 'Cross-Origin-Embedder-Policy': 'require-corp', + }, + }, +}; diff --git a/yarn-project/package.json b/yarn-project/package.json index b44c320f548a..36a3de96752b 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -25,6 +25,7 @@ "aztec-faucet", "aztec-node", "validator-client", + "_bb-bench", "bb-bench", "bb-prover", "blob-sink", diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index f7413e33853e..bdd895b593b0 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -285,6 +285,53 @@ __metadata: languageName: unknown linkType: soft +"@aztec/bb-bench@workspace:bb-bench": + version: 0.0.0-use.local + resolution: "@aztec/bb-bench@workspace:bb-bench" + dependencies: + "@aztec/bb-prover": "workspace:^" + "@aztec/bb.js": ../../ts + "@aztec/circuits.js": "workspace:^" + "@aztec/foundation": "workspace:^" + "@aztec/kv-store": "workspace:^" + "@aztec/simulator": "workspace:^" + "@aztec/telemetry-client": "workspace:^" + "@aztec/types": "workspace:^" + "@aztec/world-state": "workspace:^" + "@jest/globals": "npm:^29.5.0" + "@msgpack/msgpack": "npm:^3.0.0-beta2" + "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" + "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" + "@noir-lang/types": "portal:../../noir/packages/types" + "@playwright/test": "npm:^1.48.2" + "@types/jest": "npm:^29.5.0" + "@types/node": "npm:^22.8.1" + "@types/pako": "npm:^2.0.3" + chalk: "npm:^5.3.0" + change-case: "npm:^5.4.4" + copy-webpack-plugin: "npm:^12.0.2" + debug: "npm:^4.3.4" + html-webpack-plugin: "npm:^5.6.0" + jest: "npm:^29.5.0" + jest-mock-extended: "npm:^4.0.0-beta1" + levelup: "npm:^5.1.1" + memdown: "npm:^6.1.1" + pako: "npm:^2.1.0" + playwright: "npm:^1.48.2" + puppeteer: "npm:^22.4.1" + resolve-typescript-plugin: "npm:^2.0.1" + serve: "npm:^14.2.1" + ts-loader: "npm:^9.5.1" + ts-node: "npm:^10.9.1" + tslib: "npm:^2.4.0" + typescript: "npm:^5.0.4" + webpack: "npm:^5.90.3" + webpack-cli: "npm:^5.1.4" + webpack-dev-server: "npm:^5.0.3" + languageName: unknown + linkType: soft + "@aztec/bb-prover@workspace:^, @aztec/bb-prover@workspace:bb-prover": version: 0.0.0-use.local resolution: "@aztec/bb-prover@workspace:bb-prover" @@ -7827,9 +7874,9 @@ __metadata: languageName: node linkType: hard -"browser@workspace:bb-bench": +"browser@workspace:_bb-bench": version: 0.0.0-use.local - resolution: "browser@workspace:bb-bench" + resolution: "browser@workspace:_bb-bench" dependencies: "@aztec/bb.js": ../barretenberg/ts "@aztec/foundation": "workspace:^" From 11669fa0fd4c245e42450398afd22ee0df28df5a Mon Sep 17 00:00:00 2001 From: Cody Date: Mon, 13 Jan 2025 20:19:04 +0000 Subject: [PATCH 06/43] Proving in firefox --- barretenberg/ts/src/crs/net_crs.ts | 2 +- yarn-project/bb-bench/serve.mt.json | 2 +- yarn-project/bb-bench/serve.sh | 2 +- yarn-project/bb-bench/src/serve.ts | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/barretenberg/ts/src/crs/net_crs.ts b/barretenberg/ts/src/crs/net_crs.ts index 35eb4dd8499a..04394fcd2b26 100644 --- a/barretenberg/ts/src/crs/net_crs.ts +++ b/barretenberg/ts/src/crs/net_crs.ts @@ -28,7 +28,7 @@ export class NetCrs { const g1End = this.numPoints * 64 - 1; - console.log("fetching CRS"); + // const response = await fetch('https://aztec-ignition.s3.amazonaws.com/MAIN%20IGNITION/flat/g1.dat', { const response = await fetch('http://localhost:8081/g1.dat', { headers: { Range: `bytes=0-${g1End}`, diff --git a/yarn-project/bb-bench/serve.mt.json b/yarn-project/bb-bench/serve.mt.json index 7f05b9cf46d2..93bc45147786 100644 --- a/yarn-project/bb-bench/serve.mt.json +++ b/yarn-project/bb-bench/serve.mt.json @@ -13,7 +13,7 @@ }, { "key": "Access-Control-Allow-Origin", - "value": "http://localhost:8080" + "value": "*" }, { "key": "Access-Control-Allow-Methods", diff --git a/yarn-project/bb-bench/serve.sh b/yarn-project/bb-bench/serve.sh index 3682f2afb101..6ce541df7593 100755 --- a/yarn-project/bb-bench/serve.sh +++ b/yarn-project/bb-bench/serve.sh @@ -31,7 +31,7 @@ PID1=$! echo "Started yarn serve on port 8081 with PID $PID1." # Start the second yarn serve process on port 8080 in the background -yarn serve -n -L -p 8080 -c ../serve.mt.json dest & +yarn serve -n -L -p 8080 --cors -c ../serve.mt.json dest & PID2=$! echo "Started yarn serve on port 8080 with PID $PID2." diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 3f12245e1716..2a0473401c9c 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -2,7 +2,8 @@ import createDebug from 'debug'; import { generate3FunctionTestingIVCStack, proveThenVerifyAztecClient } from './index.js'; -const logger = createDebug('aztec:ivc-test'); +createDebug.enable('*'); // needed for logging in Firefox but not Chrome +const logger = createDebug('aztec:bb-bench'); /* eslint-disable no-console */ From ea9651e793e4cf25ec05b53166e2d61eedd41f53 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 14 Jan 2025 04:17:03 +0000 Subject: [PATCH 07/43] Create UH app --- yarn-project/bb-bench/.gitignore | 1 + .../bb-bench/circuits/first/Nargo.toml | 7 + .../bb-bench/circuits/first/Prover.toml | 2 + .../bb-bench/circuits/first/src/main.nr | 3 + .../bb-bench/circuits/second/Nargo.toml | 7 + .../bb-bench/circuits/second/Prover.toml | 595 ++++++++++++++++++ .../bb-bench/circuits/second/src/main.nr | 29 + yarn-project/bb-bench/package.json | 1 + yarn-project/bb-bench/src/index.ts | 130 ++-- .../bb-bench/src/{serve.ts => serve-civc.ts} | 0 yarn-project/bb-bench/src/serve-ultra.ts | 96 +++ yarn-project/bb-bench/webpack.config.js | 2 +- 12 files changed, 778 insertions(+), 95 deletions(-) create mode 100644 yarn-project/bb-bench/.gitignore create mode 100644 yarn-project/bb-bench/circuits/first/Nargo.toml create mode 100644 yarn-project/bb-bench/circuits/first/Prover.toml create mode 100644 yarn-project/bb-bench/circuits/first/src/main.nr create mode 100644 yarn-project/bb-bench/circuits/second/Nargo.toml create mode 100644 yarn-project/bb-bench/circuits/second/Prover.toml create mode 100644 yarn-project/bb-bench/circuits/second/src/main.nr rename yarn-project/bb-bench/src/{serve.ts => serve-civc.ts} (100%) create mode 100644 yarn-project/bb-bench/src/serve-ultra.ts diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/bb-bench/.gitignore new file mode 100644 index 000000000000..4e3ebb55230d --- /dev/null +++ b/yarn-project/bb-bench/.gitignore @@ -0,0 +1 @@ +circuits/**/proofs/* diff --git a/yarn-project/bb-bench/circuits/first/Nargo.toml b/yarn-project/bb-bench/circuits/first/Nargo.toml new file mode 100644 index 000000000000..285c6d7dcfe3 --- /dev/null +++ b/yarn-project/bb-bench/circuits/first/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "main" +type = "bin" +authors = [""] +compiler_version = ">=0.31.0" + +[dependencies] diff --git a/yarn-project/bb-bench/circuits/first/Prover.toml b/yarn-project/bb-bench/circuits/first/Prover.toml new file mode 100644 index 000000000000..2c1854573a40 --- /dev/null +++ b/yarn-project/bb-bench/circuits/first/Prover.toml @@ -0,0 +1,2 @@ +x = 1 +y = 2 diff --git a/yarn-project/bb-bench/circuits/first/src/main.nr b/yarn-project/bb-bench/circuits/first/src/main.nr new file mode 100644 index 000000000000..6e170de75fca --- /dev/null +++ b/yarn-project/bb-bench/circuits/first/src/main.nr @@ -0,0 +1,3 @@ +fn main(x : Field, y : pub Field) { + assert(x != y); +} diff --git a/yarn-project/bb-bench/circuits/second/Nargo.toml b/yarn-project/bb-bench/circuits/second/Nargo.toml new file mode 100644 index 000000000000..b74431517bc7 --- /dev/null +++ b/yarn-project/bb-bench/circuits/second/Nargo.toml @@ -0,0 +1,7 @@ +[package] +name = "recursion" +type = "bin" +authors = [""] +compiler_version = ">=0.66.0" + +[dependencies] diff --git a/yarn-project/bb-bench/circuits/second/Prover.toml b/yarn-project/bb-bench/circuits/second/Prover.toml new file mode 100644 index 000000000000..d2507d3046ae --- /dev/null +++ b/yarn-project/bb-bench/circuits/second/Prover.toml @@ -0,0 +1,595 @@ +key_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" +proof = [ + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", + "0x00000000000000000000000000000000000000000000000b75c020998797da78", + "0x0000000000000000000000000000000000000000000000005a107acb64952eca", + "0x000000000000000000000000000000000000000000000000000031e97a575e9d", + "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", + "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", + "0x00000000000000000000000000000000000000000000000d722669117f9758a4", + "0x000000000000000000000000000000000000000000000000000178cbf4206471", + "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", + "0x000000000000000000000000000000000000000000000007fd51009034b3357f", + "0x000000000000000000000000000000000000000000000009889939f81e9c7402", + "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", + "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", + "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", + "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", + "0x0000000000000000000000000000000000000000000000000001b52c2020d746", + "0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9", + "0x00000000000000000000000000000000002486186d84437da79bbfff6970470f", + "0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00", + "0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e", + "0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8", + "0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99", + "0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a", + "0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612", + "0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739", + "0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee", + "0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d", + "0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a", + "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", + "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", + "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", + "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", + "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", + "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", + "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", + "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", + "0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6", + "0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a", + "0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2", + "0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa", + "0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992", + "0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f", + "0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c", + "0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc", + "0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c", + "0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436", + "0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c", + "0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489", + "0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7", + "0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a", + "0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0", + "0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96", + "0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260", + "0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20", + "0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9", + "0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545", + "0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b", + "0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05", + "0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679", + "0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd", + "0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c", + "0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952", + "0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f", + "0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073", + "0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683", + "0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc", + "0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e", + "0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f", + "0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473", + "0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9", + "0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5", + "0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139", + "0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a", + "0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22", + "0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298", + "0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84", + "0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c", + "0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b", + "0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6", + "0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012", + "0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8", + "0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c", + "0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f", + "0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f", + "0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926", + "0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761", + "0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8", + "0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a", + "0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47", + "0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9", + "0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9", + "0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d", + "0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14", + "0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d", + "0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09", + "0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3", + "0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c", + "0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72", + "0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4", + "0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45", + "0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b", + "0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56", + "0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382", + "0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b", + "0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44", + "0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422", + "0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4", + "0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555", + "0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac", + "0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7", + "0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6", + "0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d", + "0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a", + "0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac", + "0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f", + "0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7", + "0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac", + "0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b", + "0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e", + "0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031", + "0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261", + "0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33", + "0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc", + "0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d", + "0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c", + "0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551", + "0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb", + "0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834", + "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", + "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", + "0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7", + "0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1", + "0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa", + "0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b", + "0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3", + "0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05", + "0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda", + "0x000000000000000000000000000000b25425c2869931def122b407e6d248b112", + "0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf", + "0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a", + "0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1", + "0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048", + "0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5", + "0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852", + "0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49", + "0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c", + "0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7", + "0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee", + "0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d", + "0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2", + "0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e", + "0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e", + "0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6", + "0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b", + "0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f", + "0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d", + "0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb", + "0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5", + "0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191", + "0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9", + "0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f", + "0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb", + "0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7", + "0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f", + "0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859", + "0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291", + "0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2", +] +public_inputs = [ + "0x0000000000000000000000000000000000000000000000000000000000000002", +] +verification_key = [ + "0x0000000000000000000000000000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000000000000000000000000000d", + "0x000000000000000000000000000000000000000000000000000000000000000e", + "0x000000000000000000000000000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000000000000000000000000000010", + "0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483", + "0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247", + "0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130", + "0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a", + "0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d", + "0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c", + "0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525", + "0x00000000000000000000000000000000000956f29100ad56f516e047143f8088", + "0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6", + "0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb", + "0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c", + "0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c", + "0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d", + "0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c", + "0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec", + "0x00000000000000000000000000000000002c004dc89326c7a22d126130396137", + "0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b", + "0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c", + "0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48", + "0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1", + "0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9", + "0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee", + "0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77", + "0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668", + "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", + "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", + "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", + "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", + "0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e", + "0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b", + "0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58", + "0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c", + "0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88", + "0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e", + "0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e", + "0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5", + "0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c", + "0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d", + "0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98", + "0x000000000000000000000000000000000006e0242610dd531470885e9c150693", + "0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d", + "0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841", + "0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06", + "0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20", + "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", + "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", + "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", + "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", + "0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a", + "0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606", + "0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba", + "0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b", + "0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b", + "0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013", + "0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36", + "0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2", + "0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f", + "0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e", + "0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b", + "0x00000000000000000000000000000000000b34126647568e29587731e7318989", + "0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915", + "0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059", + "0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b", + "0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae", + "0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba", + "0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4", + "0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1", + "0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd", + "0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640", + "0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77", + "0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93", + "0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28", + "0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70", + "0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb", + "0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a", + "0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957", + "0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2", + "0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2", + "0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf", + "0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d", + "0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597", + "0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee", + "0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7", + "0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb", + "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", + "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", + "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", + "0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6", + "0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2", + "0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312", + "0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b", + "0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af", + "0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173", + "0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4", + "0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8", + "0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee", + "0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628", + "0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72", + "0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39", + "0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444", + "0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25", + "0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb", + "0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a", +] diff --git a/yarn-project/bb-bench/circuits/second/src/main.nr b/yarn-project/bb-bench/circuits/second/src/main.nr new file mode 100644 index 000000000000..c5f6a756b67d --- /dev/null +++ b/yarn-project/bb-bench/circuits/second/src/main.nr @@ -0,0 +1,29 @@ +use std::hash::poseidon; + +// This circuit aggregates a single Honk proof from `assert_statement`. +global SIZE_OF_PROOF_IF_LOGN_IS_28: u32 = 459; +global HONK_IDENTIFIER: u32 = 1; +fn main( + verification_key: [Field; 128], + // This is the proof without public inputs attached. + // This means: the size of this does not change with the number of public inputs. + proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], + public_inputs: pub [Field; 1], + // This is currently not public. It is fine given that the vk is a part of the circuit definition. + // I believe we want to eventually make it public too though. + mut key_hash: Field, +) { + std::verify_proof_with_type( + verification_key, + proof, + public_inputs, + key_hash, + HONK_IDENTIFIER, + ); + + for _ in 0..250 { + key_hash += poseidon::bn254::hash_1([key_hash]); + } + + assert(key_hash != 0); +} diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index 57fc6ba7c2a8..2d4a34b83d61 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -17,6 +17,7 @@ "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "formatting:fix:types": "NODE_OPTIONS='--max-old-space-size=8096' run -T eslint --fix ./src/types && run -T prettier -w ./src/types", "generate": "yarn generate:noir-circuits", + "compile-circuits": "NARGO=../../../../noir/noir-repo/target/release/nargo && cd circuits/first && $NARGO compile && $NARGO execute && cd ../second && $NARGO compile && $NARGO execute", "generate:noir-circuits": "mkdir -p ./artifacts && cp -r ../../noir-projects/mock-protocol-circuits/target/* ./artifacts && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", "codegen": "yarn noir-codegen", "build:dev": "tsc -b --watch", diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 670000668751..aa8d9f2bd804 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -20,12 +20,9 @@ import MockPublicBaseCircuit from '../artifacts/mock_public_base.json' assert { import type { AppCreatorInputType, AppPublicInputs, - AppReaderInputType, FixedLengthArray, KernelPublicInputs, MockPrivateKernelInitInputType, - MockPrivateKernelInnerInputType, - MockPrivateKernelResetInputType, MockPrivateKernelTailInputType, MockPublicBaseInputType, PrivateKernelPublicInputs, @@ -49,7 +46,7 @@ export { MockPrivateKernelTailVk, }; -const logger = createDebug('aztec:ivc-test'); +const logger = createDebug('aztec:bb-bench'); /* eslint-disable camelcase */ @@ -75,17 +72,6 @@ export async function witnessGenCreatorAppMockCircuit( }; } -export async function witnessGenReaderAppMockCircuit( - args: AppReaderInputType, -): Promise> { - const program = new Noir(MockAppReaderCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as AppPublicInputs, - }; -} - export async function witnessGenMockPrivateKernelInitCircuit( args: MockPrivateKernelInitInputType, ): Promise> { @@ -97,28 +83,6 @@ export async function witnessGenMockPrivateKernelInitCircuit( }; } -export async function witnessGenMockPrivateKernelInnerCircuit( - args: MockPrivateKernelInnerInputType, -): Promise> { - const program = new Noir(MockPrivateKernelInnerCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as PrivateKernelPublicInputs, - }; -} - -export async function witnessGenMockPrivateKernelResetCircuit( - args: MockPrivateKernelResetInputType, -): Promise> { - const program = new Noir(MockPrivateKernelResetCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as PrivateKernelPublicInputs, - }; -} - export async function witnessGenMockPrivateKernelTailCircuit( args: MockPrivateKernelTailInputType, ): Promise> { @@ -146,6 +110,18 @@ export function getVkAsFields(vk: { return vk.keyAsFields as FixedLengthArray; } +export async function generateCircuit(): Promise<[string, Uint8Array]> { + // Witness gen app and kernels + const appWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); + logger('generated app mock circuit witness'); + + // Create client IVC proof + const bytecode = MockAppCreatorCircuit.bytecode; + const witness = appWitnessGenResult.witness; + + return [bytecode, witness]; +} + export async function generate3FunctionTestingIVCStack(): Promise<[string[], Uint8Array[]]> { const tx = { number_of_calls: '0x1', @@ -179,63 +155,6 @@ export async function generate3FunctionTestingIVCStack(): Promise<[string[], Uin return [bytecodes, witnessStack]; } -export async function generate6FunctionTestingIVCStack(): Promise<[string[], Uint8Array[]]> { - const tx = { - number_of_calls: '0x2', - }; - // Witness gen app and kernels - const creatorAppWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); - const readerAppWitnessGenResult = await witnessGenReaderAppMockCircuit({ commitments_to_read: ['0x2', '0x0'] }); - - const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({ - app_inputs: creatorAppWitnessGenResult.publicInputs, - tx, - app_vk: getVkAsFields(MockAppCreatorVk), - }); - const innerWitnessGenResult = await witnessGenMockPrivateKernelInnerCircuit({ - prev_kernel_public_inputs: initWitnessGenResult.publicInputs, - app_inputs: readerAppWitnessGenResult.publicInputs, - app_vk: getVkAsFields(MockAppReaderVk), - kernel_vk: getVkAsFields(MockPrivateKernelInitVk), - }); - - const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({ - prev_kernel_public_inputs: innerWitnessGenResult.publicInputs, - commitment_read_hints: [ - '0x1', // Reader reads commitment 0x2, which is at index 1 of the created commitments - MOCK_MAX_COMMITMENTS_PER_TX.toString(), // Pad with no-ops - MOCK_MAX_COMMITMENTS_PER_TX.toString(), - MOCK_MAX_COMMITMENTS_PER_TX.toString(), - ], - kernel_vk: getVkAsFields(MockPrivateKernelInnerVk), - }); - - const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ - prev_kernel_public_inputs: resetWitnessGenResult.publicInputs, - kernel_vk: getVkAsFields(MockPrivateKernelResetVk), - }); - - // Create client IVC proof - const bytecodes = [ - MockAppCreatorCircuit.bytecode, - MockPrivateKernelInitCircuit.bytecode, - MockAppReaderCircuit.bytecode, - MockPrivateKernelInnerCircuit.bytecode, - MockPrivateKernelResetCircuit.bytecode, - MockPrivateKernelTailCircuit.bytecode, - ]; - const witnessStack = [ - creatorAppWitnessGenResult.witness, - initWitnessGenResult.witness, - readerAppWitnessGenResult.witness, - innerWitnessGenResult.witness, - resetWitnessGenResult.witness, - tailWitnessGenResult.witness, - ]; - - return [bytecodes, witnessStack]; -} - function base64ToUint8Array(base64: string): Uint8Array { return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); } @@ -258,3 +177,26 @@ export async function proveThenVerifyAztecClient( await backend.destroy(); } } + +export async function proveThenVerifyUltraHonk( + bytecode: string, + witness: Uint8Array, + threads?: number, +): Promise { + const { UltraHonkBackend, BarretenbergVerifier } = await import('@aztec/bb.js'); + const backend = new UltraHonkBackend(bytecode, { threads }); + try { + logger(`computing the verification key (could be precomputed)...`); + const vk = await backend.getVerificationKey(); + logger(`proving...`); + const proof = await backend.generateProof(witness); + logger(`done proving. verifying...`); + const verifier = new BarretenbergVerifier({ threads }); + const verified = await verifier.verifyUltraHonkProof(proof, vk); + logger(`verified: ${verified}`); + await verifier.destroy(); + return verified; + } finally { + await backend.destroy(); + } +} diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve-civc.ts similarity index 100% rename from yarn-project/bb-bench/src/serve.ts rename to yarn-project/bb-bench/src/serve-civc.ts diff --git a/yarn-project/bb-bench/src/serve-ultra.ts b/yarn-project/bb-bench/src/serve-ultra.ts new file mode 100644 index 000000000000..9dae86944485 --- /dev/null +++ b/yarn-project/bb-bench/src/serve-ultra.ts @@ -0,0 +1,96 @@ +import createDebug from 'debug'; + +import { generateCircuit, proveThenVerifyUltraHonk } from './index.js'; + +createDebug.enable('*'); // needed for logging in Firefox but not Chrome +const logger = createDebug('aztec:bb-bench'); + +/* eslint-disable no-console */ + +// Function to set up the output element and redirect all console output +function setupConsoleOutput() { + const container = document.createElement('div'); + container.style.marginBottom = '10px'; + document.body.appendChild(container); + + const copyButton = document.createElement('button'); + copyButton.innerText = 'Copy Logs to Clipboard'; + copyButton.style.marginBottom = '10px'; + copyButton.addEventListener('click', () => { + const logContent = logContainer.textContent || ''; // Get text content of log container + navigator.clipboard + .writeText(logContent) + .then(() => { + alert('Logs copied to clipboard!'); + }) + .catch(err => { + console.error('Failed to copy logs:', err); + }); + }); + container.appendChild(copyButton); + + const logContainer = document.createElement('pre'); + logContainer.id = 'logOutput'; + logContainer.style.border = '1px solid #ccc'; + logContainer.style.padding = '10px'; + logContainer.style.maxHeight = '400px'; + logContainer.style.overflowY = 'auto'; + container.appendChild(logContainer); + + // Helper to append messages to logContainer + function addLogMessage(message: string) { + logContainer.textContent += message + '\n'; + logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom + } + + // Override console methods to output clean logs + const originalLog = console.log; + const originalDebug = console.debug; + + console.log = (...args: any[]) => { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalLog.apply(console, args); // Keep original behavior + addLogMessage(message); + }; + + console.debug = (...args: any[]) => { + const message = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : arg, + ) + .join(' '); + originalDebug.apply(console, args); // Keep original behavior + addLogMessage(message); + }; +} + +(window as any).proveThenVerifyUltraHonk = proveThenVerifyUltraHonk; + +document.addEventListener('DOMContentLoaded', function () { + setupConsoleOutput(); // Initialize console output capture + + const button = document.createElement('button'); + button.innerText = 'Run Test'; + button.addEventListener('click', async () => { + logger(`generating circuit and witness...`); + const [bytecodes, witnessStack] = await generateCircuit(); + logger(`done. proving and verifying...`); + const verified = await proveThenVerifyUltraHonk(bytecodes, witnessStack); + logger(`verified? ${verified}`); + }); + document.body.appendChild(button); +}); diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/bb-bench/webpack.config.js index 09dafd51eff5..2a36c1d01384 100644 --- a/yarn-project/bb-bench/webpack.config.js +++ b/yarn-project/bb-bench/webpack.config.js @@ -9,7 +9,7 @@ export default { target: 'web', mode: 'production', entry: { - index: './src/serve.ts', + index: './src/serve-ultra.ts', }, module: { rules: [ From 8a59f3574b25fd93e0f4b6fed9b028798157ead1 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 14 Jan 2025 05:15:03 +0000 Subject: [PATCH 08/43] Circuit with recursion passes --- .../bb-bench/circuits/first/Nargo.toml | 2 +- .../bb-bench/circuits/second/Nargo.toml | 4 +- yarn-project/bb-bench/src/index.ts | 616 +++++++++++++++++- yarn-project/bb-bench/tsconfig.json | 2 +- 4 files changed, 613 insertions(+), 11 deletions(-) diff --git a/yarn-project/bb-bench/circuits/first/Nargo.toml b/yarn-project/bb-bench/circuits/first/Nargo.toml index 285c6d7dcfe3..13aac9878b92 100644 --- a/yarn-project/bb-bench/circuits/first/Nargo.toml +++ b/yarn-project/bb-bench/circuits/first/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "main" +name = "first" type = "bin" authors = [""] compiler_version = ">=0.31.0" diff --git a/yarn-project/bb-bench/circuits/second/Nargo.toml b/yarn-project/bb-bench/circuits/second/Nargo.toml index b74431517bc7..faecc6bf436a 100644 --- a/yarn-project/bb-bench/circuits/second/Nargo.toml +++ b/yarn-project/bb-bench/circuits/second/Nargo.toml @@ -1,7 +1,7 @@ [package] -name = "recursion" +name = "second" type = "bin" authors = [""] -compiler_version = ">=0.66.0" +compiler_version = ">=0.31.0" [dependencies] diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index aa8d9f2bd804..c5457228be10 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -17,6 +17,7 @@ import MockPrivateKernelInnerCircuit from '../artifacts/mock_private_kernel_inne import MockPrivateKernelResetCircuit from '../artifacts/mock_private_kernel_reset.json' assert { type: 'json' }; import MockPrivateKernelTailCircuit from '../artifacts/mock_private_kernel_tail.json' assert { type: 'json' }; import MockPublicBaseCircuit from '../artifacts/mock_public_base.json' assert { type: 'json' }; +import SecondCircuit from '../circuits/second/target/second.json' assert { type: 'json' }; import type { AppCreatorInputType, AppPublicInputs, @@ -24,7 +25,6 @@ import type { KernelPublicInputs, MockPrivateKernelInitInputType, MockPrivateKernelTailInputType, - MockPublicBaseInputType, PrivateKernelPublicInputs, u8, } from './types/index.js'; @@ -93,9 +93,17 @@ export async function witnessGenMockPrivateKernelTailCircuit( publicInputs: returnValue as KernelPublicInputs, }; } +export type Field = string; -export async function witnessGenMockPublicBaseCircuit(args: MockPublicBaseInputType): Promise> { - const program = new Noir(MockPublicBaseCircuit); +export type SecondCircuitInputType = { + verification_key: FixedLengthArray; + key_hash: Field; + public_inputs: FixedLengthArray; + proof: FixedLengthArray; +}; + +export async function witnessGenSecondCircuit(args: SecondCircuitInputType): Promise> { + const program = new Noir(SecondCircuit); const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { witness, @@ -112,12 +120,606 @@ export function getVkAsFields(vk: { export async function generateCircuit(): Promise<[string, Uint8Array]> { // Witness gen app and kernels - const appWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); - logger('generated app mock circuit witness'); + const witnessGenResult = await witnessGenSecondCircuit({ + public_inputs: ['0x2'], + key_hash: '0x0', + proof: [ + '0x0000000000000000000000000000000000000000000000000000000000000040', + '0x0000000000000000000000000000000000000000000000000000000000000011', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf', + '0x00000000000000000000000000000000000000000000000b75c020998797da78', + '0x0000000000000000000000000000000000000000000000005a107acb64952eca', + '0x000000000000000000000000000000000000000000000000000031e97a575e9d', + '0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4', + '0x00000000000000000000000000000000000000000000000c410db10a01750aeb', + '0x00000000000000000000000000000000000000000000000d722669117f9758a4', + '0x000000000000000000000000000000000000000000000000000178cbf4206471', + '0x000000000000000000000000000000000000000000000000e91b8a11e7842c38', + '0x000000000000000000000000000000000000000000000007fd51009034b3357f', + '0x000000000000000000000000000000000000000000000009889939f81e9c7402', + '0x0000000000000000000000000000000000000000000000000000f94656a2ca48', + '0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f', + '0x0000000000000000000000000000000000000000000000093fe27776f50224bd', + '0x000000000000000000000000000000000000000000000004a0c80c0da527a081', + '0x0000000000000000000000000000000000000000000000000001b52c2020d746', + '0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9', + '0x00000000000000000000000000000000002486186d84437da79bbfff6970470f', + '0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00', + '0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e', + '0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8', + '0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99', + '0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a', + '0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612', + '0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739', + '0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee', + '0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d', + '0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a', + '0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8', + '0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86', + '0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f', + '0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46', + '0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8', + '0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86', + '0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f', + '0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46', + '0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6', + '0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a', + '0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2', + '0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa', + '0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992', + '0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f', + '0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c', + '0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc', + '0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c', + '0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436', + '0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c', + '0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489', + '0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7', + '0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a', + '0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0', + '0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96', + '0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260', + '0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20', + '0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9', + '0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545', + '0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b', + '0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05', + '0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679', + '0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd', + '0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c', + '0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952', + '0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f', + '0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073', + '0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683', + '0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc', + '0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e', + '0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f', + '0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473', + '0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9', + '0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5', + '0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139', + '0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a', + '0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22', + '0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298', + '0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84', + '0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c', + '0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b', + '0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6', + '0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012', + '0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8', + '0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c', + '0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f', + '0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f', + '0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926', + '0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761', + '0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8', + '0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a', + '0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47', + '0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9', + '0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9', + '0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d', + '0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14', + '0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d', + '0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09', + '0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3', + '0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c', + '0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72', + '0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4', + '0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45', + '0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b', + '0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56', + '0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382', + '0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b', + '0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44', + '0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422', + '0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4', + '0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555', + '0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac', + '0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7', + '0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6', + '0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d', + '0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a', + '0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac', + '0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f', + '0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7', + '0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac', + '0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b', + '0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e', + '0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031', + '0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261', + '0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33', + '0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc', + '0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d', + '0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c', + '0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551', + '0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb', + '0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834', + '0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead', + '0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead', + '0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7', + '0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1', + '0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa', + '0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b', + '0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3', + '0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05', + '0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda', + '0x000000000000000000000000000000b25425c2869931def122b407e6d248b112', + '0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf', + '0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a', + '0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1', + '0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048', + '0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5', + '0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852', + '0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49', + '0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c', + '0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7', + '0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee', + '0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d', + '0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2', + '0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e', + '0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e', + '0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6', + '0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b', + '0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f', + '0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d', + '0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb', + '0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5', + '0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191', + '0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9', + '0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f', + '0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb', + '0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7', + '0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f', + '0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859', + '0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291', + '0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2', + ], + verification_key: [ + '0x0000000000000000000000000000000000000000000000000000000000000040', + '0x0000000000000000000000000000000000000000000000000000000000000011', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000003', + '0x0000000000000000000000000000000000000000000000000000000000000004', + '0x0000000000000000000000000000000000000000000000000000000000000005', + '0x0000000000000000000000000000000000000000000000000000000000000006', + '0x0000000000000000000000000000000000000000000000000000000000000007', + '0x0000000000000000000000000000000000000000000000000000000000000008', + '0x0000000000000000000000000000000000000000000000000000000000000009', + '0x000000000000000000000000000000000000000000000000000000000000000a', + '0x000000000000000000000000000000000000000000000000000000000000000b', + '0x000000000000000000000000000000000000000000000000000000000000000c', + '0x000000000000000000000000000000000000000000000000000000000000000d', + '0x000000000000000000000000000000000000000000000000000000000000000e', + '0x000000000000000000000000000000000000000000000000000000000000000f', + '0x0000000000000000000000000000000000000000000000000000000000000010', + '0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483', + '0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247', + '0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130', + '0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a', + '0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d', + '0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c', + '0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525', + '0x00000000000000000000000000000000000956f29100ad56f516e047143f8088', + '0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6', + '0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb', + '0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c', + '0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c', + '0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d', + '0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c', + '0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec', + '0x00000000000000000000000000000000002c004dc89326c7a22d126130396137', + '0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b', + '0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c', + '0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48', + '0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1', + '0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9', + '0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee', + '0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77', + '0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668', + '0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9', + '0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8', + '0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851', + '0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f', + '0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e', + '0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b', + '0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58', + '0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c', + '0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88', + '0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e', + '0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e', + '0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5', + '0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c', + '0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d', + '0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98', + '0x000000000000000000000000000000000006e0242610dd531470885e9c150693', + '0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d', + '0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841', + '0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06', + '0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20', + '0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd', + '0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83', + '0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59', + '0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f', + '0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a', + '0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606', + '0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba', + '0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b', + '0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b', + '0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013', + '0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36', + '0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2', + '0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f', + '0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e', + '0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b', + '0x00000000000000000000000000000000000b34126647568e29587731e7318989', + '0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915', + '0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059', + '0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b', + '0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae', + '0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba', + '0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4', + '0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1', + '0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd', + '0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640', + '0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77', + '0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93', + '0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28', + '0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70', + '0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb', + '0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a', + '0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957', + '0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2', + '0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2', + '0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf', + '0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d', + '0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597', + '0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee', + '0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7', + '0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb', + '0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468', + '0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89', + '0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf', + '0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6', + '0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2', + '0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312', + '0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b', + '0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af', + '0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173', + '0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4', + '0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8', + '0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee', + '0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628', + '0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72', + '0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39', + '0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d', + '0x0000000000000000000000000000000000000000000000000000000000000001', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000002', + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444', + '0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25', + '0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb', + '0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a', + ], + }); + logger('generated second circuit'); // Create client IVC proof - const bytecode = MockAppCreatorCircuit.bytecode; - const witness = appWitnessGenResult.witness; + const bytecode = SecondCircuit.bytecode; + const witness = witnessGenResult.witness; return [bytecode, witness]; } diff --git a/yarn-project/bb-bench/tsconfig.json b/yarn-project/bb-bench/tsconfig.json index a355b926142a..098f16a77fdf 100644 --- a/yarn-project/bb-bench/tsconfig.json +++ b/yarn-project/bb-bench/tsconfig.json @@ -32,5 +32,5 @@ "path": "../world-state" } ], - "include": ["src", "artifacts/*.d.json.ts", "artifacts/**/*.d.json.ts"] + "include": ["src", "artifacts/*.d.json.ts", "artifacts/**/*.d.json.ts", "circuits/**/*.d.json.ts"] } From 16b319722e42b5ac65ca6d055e8bba17ba6f7e93 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 14 Jan 2025 17:11:58 +0000 Subject: [PATCH 09/43] Runs first circuit --- yarn-project/bb-bench/src/index.ts | 32 +++++++++++++++++++++++- yarn-project/bb-bench/src/serve-ultra.ts | 4 +-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index c5457228be10..9e47febb0964 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -17,6 +17,7 @@ import MockPrivateKernelInnerCircuit from '../artifacts/mock_private_kernel_inne import MockPrivateKernelResetCircuit from '../artifacts/mock_private_kernel_reset.json' assert { type: 'json' }; import MockPrivateKernelTailCircuit from '../artifacts/mock_private_kernel_tail.json' assert { type: 'json' }; import MockPublicBaseCircuit from '../artifacts/mock_public_base.json' assert { type: 'json' }; +import FirstCircuit from '../circuits/first/target/first.json' assert { type: 'json' }; import SecondCircuit from '../circuits/second/target/second.json' assert { type: 'json' }; import type { AppCreatorInputType, @@ -95,6 +96,20 @@ export async function witnessGenMockPrivateKernelTailCircuit( } export type Field = string; +export type FirstCircuitInputType = { + x: Field; + y: Field; +}; + +export async function witnessGenFirstCircuit(args: FirstCircuitInputType): Promise> { + const program = new Noir(FirstCircuit); + const { witness, returnValue } = await program.execute(args, foreignCallHandler); + return { + witness, + publicInputs: returnValue as u8, + }; +} + export type SecondCircuitInputType = { verification_key: FixedLengthArray; key_hash: Field; @@ -118,7 +133,22 @@ export function getVkAsFields(vk: { return vk.keyAsFields as FixedLengthArray; } -export async function generateCircuit(): Promise<[string, Uint8Array]> { +export async function generateFirstCircuit(): Promise<[string, Uint8Array]> { + // Witness gen app and kernels + const witnessGenResult = await witnessGenFirstCircuit({ + x: '0x1', + y: '0x2', + }); + logger('generated first circuit'); + + // Create client IVC proof + const bytecode = FirstCircuit.bytecode; + const witness = witnessGenResult.witness; + + return [bytecode, witness]; +} + +export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { // Witness gen app and kernels const witnessGenResult = await witnessGenSecondCircuit({ public_inputs: ['0x2'], diff --git a/yarn-project/bb-bench/src/serve-ultra.ts b/yarn-project/bb-bench/src/serve-ultra.ts index 9dae86944485..e0d6e3912e6a 100644 --- a/yarn-project/bb-bench/src/serve-ultra.ts +++ b/yarn-project/bb-bench/src/serve-ultra.ts @@ -1,6 +1,6 @@ import createDebug from 'debug'; -import { generateCircuit, proveThenVerifyUltraHonk } from './index.js'; +import { generateFirstCircuit, proveThenVerifyUltraHonk } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome const logger = createDebug('aztec:bb-bench'); @@ -87,7 +87,7 @@ document.addEventListener('DOMContentLoaded', function () { button.innerText = 'Run Test'; button.addEventListener('click', async () => { logger(`generating circuit and witness...`); - const [bytecodes, witnessStack] = await generateCircuit(); + const [bytecodes, witnessStack] = await generateFirstCircuit(); logger(`done. proving and verifying...`); const verified = await proveThenVerifyUltraHonk(bytecodes, witnessStack); logger(`verified? ${verified}`); From 09f635105e97a5118e4668b950848a4e0871e9cd Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 14 Jan 2025 19:54:53 +0000 Subject: [PATCH 10/43] Pare down --- yarn-project/bb-bench/src/index.ts | 139 +----------------- .../src/scripts/generate_ts_from_abi.ts | 10 +- yarn-project/bb-bench/src/serve-civc.ts | 96 ------------ yarn-project/bb-bench/src/serve-ultra.ts | 4 +- yarn-project/bb-bench/webpack.config.js | 2 +- 5 files changed, 5 insertions(+), 246 deletions(-) delete mode 100644 yarn-project/bb-bench/src/serve-civc.ts diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 9e47febb0964..63210a8cf4b0 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -2,50 +2,10 @@ import { type CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS } from '@aztec/circui import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; import createDebug from 'debug'; -import { ungzip } from 'pako'; -import MockAppCreatorCircuit from '../artifacts/app_creator.json' assert { type: 'json' }; -import MockAppReaderCircuit from '../artifacts/app_reader.json' assert { type: 'json' }; -import MockAppCreatorVk from '../artifacts/keys/app_creator.vk.data.json' assert { type: 'json' }; -import MockAppReaderVk from '../artifacts/keys/app_reader.vk.data.json' assert { type: 'json' }; -import MockPrivateKernelInitVk from '../artifacts/keys/mock_private_kernel_init.vk.data.json' assert { type: 'json' }; -import MockPrivateKernelInnerVk from '../artifacts/keys/mock_private_kernel_inner.vk.data.json' assert { type: 'json' }; -import MockPrivateKernelResetVk from '../artifacts/keys/mock_private_kernel_reset.vk.data.json' assert { type: 'json' }; -import MockPrivateKernelTailVk from '../artifacts/keys/mock_private_kernel_tail.vk.data.json' assert { type: 'json' }; -import MockPrivateKernelInitCircuit from '../artifacts/mock_private_kernel_init.json' assert { type: 'json' }; -import MockPrivateKernelInnerCircuit from '../artifacts/mock_private_kernel_inner.json' assert { type: 'json' }; -import MockPrivateKernelResetCircuit from '../artifacts/mock_private_kernel_reset.json' assert { type: 'json' }; -import MockPrivateKernelTailCircuit from '../artifacts/mock_private_kernel_tail.json' assert { type: 'json' }; -import MockPublicBaseCircuit from '../artifacts/mock_public_base.json' assert { type: 'json' }; import FirstCircuit from '../circuits/first/target/first.json' assert { type: 'json' }; import SecondCircuit from '../circuits/second/target/second.json' assert { type: 'json' }; -import type { - AppCreatorInputType, - AppPublicInputs, - FixedLengthArray, - KernelPublicInputs, - MockPrivateKernelInitInputType, - MockPrivateKernelTailInputType, - PrivateKernelPublicInputs, - u8, -} from './types/index.js'; - -// Re export the circuit jsons -export { - MockAppCreatorCircuit, - MockAppReaderCircuit, - MockPrivateKernelInitCircuit, - MockPrivateKernelInnerCircuit, - MockPrivateKernelResetCircuit, - MockPrivateKernelTailCircuit, - MockPublicBaseCircuit, - MockAppCreatorVk, - MockAppReaderVk, - MockPrivateKernelInitVk, - MockPrivateKernelInnerVk, - MockPrivateKernelResetVk, - MockPrivateKernelTailVk, -}; +import type { FixedLengthArray, u8 } from './types/index.js'; const logger = createDebug('aztec:bb-bench'); @@ -62,38 +22,6 @@ export interface WitnessGenResult { publicInputs: PublicInputsType; } -export async function witnessGenCreatorAppMockCircuit( - args: AppCreatorInputType, -): Promise> { - const program = new Noir(MockAppCreatorCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as AppPublicInputs, - }; -} - -export async function witnessGenMockPrivateKernelInitCircuit( - args: MockPrivateKernelInitInputType, -): Promise> { - const program = new Noir(MockPrivateKernelInitCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as PrivateKernelPublicInputs, - }; -} - -export async function witnessGenMockPrivateKernelTailCircuit( - args: MockPrivateKernelTailInputType, -): Promise> { - const program = new Noir(MockPrivateKernelTailCircuit); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as KernelPublicInputs, - }; -} export type Field = string; export type FirstCircuitInputType = { @@ -126,13 +54,6 @@ export async function witnessGenSecondCircuit(args: SecondCircuitInputType): Pro }; } -export function getVkAsFields(vk: { - keyAsBytes: string; - keyAsFields: string[]; -}): FixedLengthArray { - return vk.keyAsFields as FixedLengthArray; -} - export async function generateFirstCircuit(): Promise<[string, Uint8Array]> { // Witness gen app and kernels const witnessGenResult = await witnessGenFirstCircuit({ @@ -141,7 +62,6 @@ export async function generateFirstCircuit(): Promise<[string, Uint8Array]> { }); logger('generated first circuit'); - // Create client IVC proof const bytecode = FirstCircuit.bytecode; const witness = witnessGenResult.witness; @@ -747,69 +667,12 @@ export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { }); logger('generated second circuit'); - // Create client IVC proof const bytecode = SecondCircuit.bytecode; const witness = witnessGenResult.witness; return [bytecode, witness]; } -export async function generate3FunctionTestingIVCStack(): Promise<[string[], Uint8Array[]]> { - const tx = { - number_of_calls: '0x1', - }; - - // Witness gen app and kernels - const appWitnessGenResult = await witnessGenCreatorAppMockCircuit({ commitments_to_create: ['0x1', '0x2'] }); - logger('generated app mock circuit witness'); - - const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({ - app_inputs: appWitnessGenResult.publicInputs, - tx, - app_vk: getVkAsFields(MockAppCreatorVk), - }); - logger('generated mock private kernel init witness'); - - const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({ - prev_kernel_public_inputs: initWitnessGenResult.publicInputs, - kernel_vk: getVkAsFields(MockPrivateKernelResetVk), - }); - logger('generated mock private kernel tail witness'); - - // Create client IVC proof - const bytecodes = [ - MockAppCreatorCircuit.bytecode, - MockPrivateKernelInitCircuit.bytecode, - MockPrivateKernelTailCircuit.bytecode, - ]; - const witnessStack = [appWitnessGenResult.witness, initWitnessGenResult.witness, tailWitnessGenResult.witness]; - - return [bytecodes, witnessStack]; -} - -function base64ToUint8Array(base64: string): Uint8Array { - return Uint8Array.from(atob(base64), c => c.charCodeAt(0)); -} - -export async function proveThenVerifyAztecClient( - bytecodes: string[], - witnessStack: Uint8Array[], - threads?: number, -): Promise { - const { AztecClientBackend } = await import('@aztec/bb.js'); - const backend = new AztecClientBackend( - bytecodes.map(base64ToUint8Array).map((arr: Uint8Array) => ungzip(arr)), - { threads }, - ); - try { - const [proof, vk] = await backend.prove(witnessStack.map((arr: Uint8Array) => ungzip(arr))); - const verified = await backend.verify(proof, vk); - return verified; - } finally { - await backend.destroy(); - } -} - export async function proveThenVerifyUltraHonk( bytecode: string, witness: Uint8Array, diff --git a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts index 8adfaa721dcc..1b9b0bcdb406 100644 --- a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts @@ -7,15 +7,7 @@ import { promises as fs } from 'fs'; const log = createConsoleLogger('mock-circuits'); -const circuits = [ - 'app_creator', - 'app_reader', - 'mock_private_kernel_init', - 'mock_private_kernel_inner', - 'mock_private_kernel_reset', - 'mock_private_kernel_tail', - 'mock_public_base', -]; +const circuits = ['first', 'second']; const main = async () => { try { diff --git a/yarn-project/bb-bench/src/serve-civc.ts b/yarn-project/bb-bench/src/serve-civc.ts deleted file mode 100644 index 2a0473401c9c..000000000000 --- a/yarn-project/bb-bench/src/serve-civc.ts +++ /dev/null @@ -1,96 +0,0 @@ -import createDebug from 'debug'; - -import { generate3FunctionTestingIVCStack, proveThenVerifyAztecClient } from './index.js'; - -createDebug.enable('*'); // needed for logging in Firefox but not Chrome -const logger = createDebug('aztec:bb-bench'); - -/* eslint-disable no-console */ - -// Function to set up the output element and redirect all console output -function setupConsoleOutput() { - const container = document.createElement('div'); - container.style.marginBottom = '10px'; - document.body.appendChild(container); - - const copyButton = document.createElement('button'); - copyButton.innerText = 'Copy Logs to Clipboard'; - copyButton.style.marginBottom = '10px'; - copyButton.addEventListener('click', () => { - const logContent = logContainer.textContent || ''; // Get text content of log container - navigator.clipboard - .writeText(logContent) - .then(() => { - alert('Logs copied to clipboard!'); - }) - .catch(err => { - console.error('Failed to copy logs:', err); - }); - }); - container.appendChild(copyButton); - - const logContainer = document.createElement('pre'); - logContainer.id = 'logOutput'; - logContainer.style.border = '1px solid #ccc'; - logContainer.style.padding = '10px'; - logContainer.style.maxHeight = '400px'; - logContainer.style.overflowY = 'auto'; - container.appendChild(logContainer); - - // Helper to append messages to logContainer - function addLogMessage(message: string) { - logContainer.textContent += message + '\n'; - logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom - } - - // Override console methods to output clean logs - const originalLog = console.log; - const originalDebug = console.debug; - - console.log = (...args: any[]) => { - const message = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : arg, - ) - .join(' '); - originalLog.apply(console, args); // Keep original behavior - addLogMessage(message); - }; - - console.debug = (...args: any[]) => { - const message = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : arg, - ) - .join(' '); - originalDebug.apply(console, args); // Keep original behavior - addLogMessage(message); - }; -} - -(window as any).proveThenVerifyAztecClient = proveThenVerifyAztecClient; - -document.addEventListener('DOMContentLoaded', function () { - setupConsoleOutput(); // Initialize console output capture - - const button = document.createElement('button'); - button.innerText = 'Run Test'; - button.addEventListener('click', async () => { - logger(`generating circuit and witness...`); - const [bytecodes, witnessStack] = await generate3FunctionTestingIVCStack(); - logger(`done. proving and verifying...`); - const verified = await proveThenVerifyAztecClient(bytecodes, witnessStack); - logger(`verified? ${verified}`); - }); - document.body.appendChild(button); -}); diff --git a/yarn-project/bb-bench/src/serve-ultra.ts b/yarn-project/bb-bench/src/serve-ultra.ts index e0d6e3912e6a..31358d0030cd 100644 --- a/yarn-project/bb-bench/src/serve-ultra.ts +++ b/yarn-project/bb-bench/src/serve-ultra.ts @@ -1,6 +1,6 @@ import createDebug from 'debug'; -import { generateFirstCircuit, proveThenVerifyUltraHonk } from './index.js'; +import { generateFirstCircuit, generateSecondCircuit, proveThenVerifyUltraHonk } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome const logger = createDebug('aztec:bb-bench'); @@ -87,7 +87,7 @@ document.addEventListener('DOMContentLoaded', function () { button.innerText = 'Run Test'; button.addEventListener('click', async () => { logger(`generating circuit and witness...`); - const [bytecodes, witnessStack] = await generateFirstCircuit(); + const [bytecodes, witnessStack] = await generateSecondCircuit(); logger(`done. proving and verifying...`); const verified = await proveThenVerifyUltraHonk(bytecodes, witnessStack); logger(`verified? ${verified}`); diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/bb-bench/webpack.config.js index 2a36c1d01384..c180accdc0fb 100644 --- a/yarn-project/bb-bench/webpack.config.js +++ b/yarn-project/bb-bench/webpack.config.js @@ -9,7 +9,7 @@ export default { target: 'web', mode: 'production', entry: { - index: './src/serve-ultra.ts', + index: './src/serve-civc.ts', }, module: { rules: [ From dbc2ab4a34ff88a9f752d7f19ba7bc4547be4c75 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 14 Jan 2025 20:38:18 +0000 Subject: [PATCH 11/43] Gen types --- yarn-project/bb-bench/.gitignore | 1 + yarn-project/bb-bench/package.json | 6 +- yarn-project/bb-bench/src/index.ts | 26 +--- yarn-project/bb-bench/src/types/index.ts | 173 ++++------------------- yarn-project/bb-bench/webpack.config.js | 2 +- 5 files changed, 39 insertions(+), 169 deletions(-) diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/bb-bench/.gitignore index 4e3ebb55230d..94d6095ac0da 100644 --- a/yarn-project/bb-bench/.gitignore +++ b/yarn-project/bb-bench/.gitignore @@ -1 +1,2 @@ +artifacts/ circuits/**/proofs/* diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index 2d4a34b83d61..2c5af1817933 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -16,9 +16,9 @@ "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "formatting:fix:types": "NODE_OPTIONS='--max-old-space-size=8096' run -T eslint --fix ./src/types && run -T prettier -w ./src/types", - "generate": "yarn generate:noir-circuits", - "compile-circuits": "NARGO=../../../../noir/noir-repo/target/release/nargo && cd circuits/first && $NARGO compile && $NARGO execute && cd ../second && $NARGO compile && $NARGO execute", - "generate:noir-circuits": "mkdir -p ./artifacts && cp -r ../../noir-projects/mock-protocol-circuits/target/* ./artifacts && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", + "generate": "yarn compile-circuits && yarn generate:noir-circuits", + "compile-circuits": "NARGO=../../../../noir/noir-repo/target/release/nargo && mkdir artifacts && cd circuits/first && $NARGO compile && mv ./target/first.json ../../artifacts && cd ../second && $NARGO compile && mv ./target/second.json ../../artifacts", + "generate:noir-circuits": "mkdir -p ./artifacts/keys && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", "codegen": "yarn noir-codegen", "build:dev": "tsc -b --watch", "build:browser-app": "rm -rf dest && webpack", diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 63210a8cf4b0..b7f6e61a4691 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -1,11 +1,9 @@ -import { type CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS } from '@aztec/circuits.js'; - import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; import createDebug from 'debug'; -import FirstCircuit from '../circuits/first/target/first.json' assert { type: 'json' }; -import SecondCircuit from '../circuits/second/target/second.json' assert { type: 'json' }; -import type { FixedLengthArray, u8 } from './types/index.js'; +import FirstCircuit from '../artifacts/first.json' assert { type: 'json' }; +import SecondCircuit from '../artifacts/second.json' assert { type: 'json' }; +import type { FirstInputType, SecondInputType } from './types/index.js'; const logger = createDebug('aztec:bb-bench'); @@ -22,14 +20,9 @@ export interface WitnessGenResult { publicInputs: PublicInputsType; } -export type Field = string; - -export type FirstCircuitInputType = { - x: Field; - y: Field; -}; +export type u8 = string; -export async function witnessGenFirstCircuit(args: FirstCircuitInputType): Promise> { +export async function witnessGenFirstCircuit(args: FirstInputType): Promise> { const program = new Noir(FirstCircuit); const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { @@ -38,14 +31,7 @@ export async function witnessGenFirstCircuit(args: FirstCircuitInputType): Promi }; } -export type SecondCircuitInputType = { - verification_key: FixedLengthArray; - key_hash: Field; - public_inputs: FixedLengthArray; - proof: FixedLengthArray; -}; - -export async function witnessGenSecondCircuit(args: SecondCircuitInputType): Promise> { +export async function witnessGenSecondCircuit(args: SecondInputType): Promise> { const program = new Noir(SecondCircuit); const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { diff --git a/yarn-project/bb-bench/src/types/index.ts b/yarn-project/bb-bench/src/types/index.ts index 5644a3f988e6..fbf446ca946f 100644 --- a/yarn-project/bb-bench/src/types/index.ts +++ b/yarn-project/bb-bench/src/types/index.ts @@ -7,157 +7,40 @@ export { ForeignCallHandler } from '@noir-lang/noir_js'; export type FixedLengthArray = L extends 0 ? never[] : T[] & { length: L }; export type Field = string; -export type u32 = string; -export type u8 = string; -export type AppPublicInputs = { - commitments: FixedLengthArray; - read_requests: FixedLengthArray; +export type FirstInputType = { + x: Field; + y: Field; }; -export type TxRequest = { - number_of_calls: u32; -}; - -export type PrivateKernelPublicInputs = { - remaining_calls: u32; - commitments: FixedLengthArray; - read_requests: FixedLengthArray; -}; - -export type KernelPublicInputs = { - commitments: FixedLengthArray; -}; - -export type AppCreatorInputType = { - commitments_to_create: FixedLengthArray; -}; - -export type AppCreatorReturnType = AppPublicInputs; - -export async function AppCreator( - commitments_to_create: FixedLengthArray, - AppCreator_circuit: CompiledCircuit, - foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(AppCreator_circuit); - const args: InputMap = { commitments_to_create }; - const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as AppPublicInputs; -} -export type AppReaderInputType = { - commitments_to_read: FixedLengthArray; -}; - -export type AppReaderReturnType = AppPublicInputs; - -export async function AppReader( - commitments_to_read: FixedLengthArray, - AppReader_circuit: CompiledCircuit, - foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(AppReader_circuit); - const args: InputMap = { commitments_to_read }; - const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as AppPublicInputs; -} -export type MockPrivateKernelInitInputType = { - tx: TxRequest; - app_inputs: AppPublicInputs; - app_vk: FixedLengthArray; -}; - -export type MockPrivateKernelInitReturnType = PrivateKernelPublicInputs; - -export async function MockPrivateKernelInit( - tx: TxRequest, - app_inputs: AppPublicInputs, - app_vk: FixedLengthArray, - MockPrivateKernelInit_circuit: CompiledCircuit, +export async function First( + x: Field, + y: Field, + First_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(MockPrivateKernelInit_circuit); - const args: InputMap = { tx, app_inputs, app_vk }; +): Promise { + const program = new Noir(First_circuit); + const args: InputMap = { x, y }; const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as PrivateKernelPublicInputs; + return returnValue as null; } -export type MockPrivateKernelInnerInputType = { - prev_kernel_public_inputs: PrivateKernelPublicInputs; - kernel_vk: FixedLengthArray; - app_inputs: AppPublicInputs; - app_vk: FixedLengthArray; -}; - -export type MockPrivateKernelInnerReturnType = PrivateKernelPublicInputs; - -export async function MockPrivateKernelInner( - prev_kernel_public_inputs: PrivateKernelPublicInputs, - kernel_vk: FixedLengthArray, - app_inputs: AppPublicInputs, - app_vk: FixedLengthArray, - MockPrivateKernelInner_circuit: CompiledCircuit, - foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(MockPrivateKernelInner_circuit); - const args: InputMap = { prev_kernel_public_inputs, kernel_vk, app_inputs, app_vk }; - const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as PrivateKernelPublicInputs; -} -export type MockPrivateKernelResetInputType = { - prev_kernel_public_inputs: PrivateKernelPublicInputs; - kernel_vk: FixedLengthArray; - commitment_read_hints: FixedLengthArray; -}; - -export type MockPrivateKernelResetReturnType = PrivateKernelPublicInputs; - -export async function MockPrivateKernelReset( - prev_kernel_public_inputs: PrivateKernelPublicInputs, - kernel_vk: FixedLengthArray, - commitment_read_hints: FixedLengthArray, - MockPrivateKernelReset_circuit: CompiledCircuit, - foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(MockPrivateKernelReset_circuit); - const args: InputMap = { prev_kernel_public_inputs, kernel_vk, commitment_read_hints }; - const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as PrivateKernelPublicInputs; -} -export type MockPrivateKernelTailInputType = { - prev_kernel_public_inputs: PrivateKernelPublicInputs; - kernel_vk: FixedLengthArray; -}; - -export type MockPrivateKernelTailReturnType = KernelPublicInputs; - -export async function MockPrivateKernelTail( - prev_kernel_public_inputs: PrivateKernelPublicInputs, - kernel_vk: FixedLengthArray, - MockPrivateKernelTail_circuit: CompiledCircuit, - foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(MockPrivateKernelTail_circuit); - const args: InputMap = { prev_kernel_public_inputs, kernel_vk }; - const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as KernelPublicInputs; -} -export type MockPublicBaseInputType = { - verification_key: FixedLengthArray; - proof: FixedLengthArray; - pub_cols_flattened: FixedLengthArray; -}; - -export type MockPublicBaseReturnType = u8; - -export async function MockPublicBase( - verification_key: FixedLengthArray, - proof: FixedLengthArray, - pub_cols_flattened: FixedLengthArray, - MockPublicBase_circuit: CompiledCircuit, +export type SecondInputType = { + verification_key: FixedLengthArray; + proof: FixedLengthArray; + public_inputs: FixedLengthArray; + key_hash: Field; +}; + +export async function Second( + verification_key: FixedLengthArray, + proof: FixedLengthArray, + public_inputs: FixedLengthArray, + key_hash: Field, + Second_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, -): Promise { - const program = new Noir(MockPublicBase_circuit); - const args: InputMap = { verification_key, proof, pub_cols_flattened }; +): Promise { + const program = new Noir(Second_circuit); + const args: InputMap = { verification_key, proof, public_inputs, key_hash }; const { returnValue } = await program.execute(args, foreignCallHandler); - return returnValue as u8; + return returnValue as null; } diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/bb-bench/webpack.config.js index c180accdc0fb..2a36c1d01384 100644 --- a/yarn-project/bb-bench/webpack.config.js +++ b/yarn-project/bb-bench/webpack.config.js @@ -9,7 +9,7 @@ export default { target: 'web', mode: 'production', entry: { - index: './src/serve-civc.ts', + index: './src/serve-ultra.ts', }, module: { rules: [ From 442f0f4af249790d637d2c0a59a7532313522176 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 15 Jan 2025 01:55:47 +0000 Subject: [PATCH 12/43] Have fun --- barretenberg/favicon.ico | Bin 0 -> 15406 bytes yarn-project/bb-bench/package.json | 5 +- yarn-project/bb-bench/package.local.json | 2 +- yarn-project/bb-bench/src/index.ts | 4 +- .../bb-bench/src/{serve-ultra.ts => serve.ts} | 0 yarn-project/bb-bench/webpack.config.js | 2 +- yarn-project/yarn.lock | 900 +++++++++++++++++- 7 files changed, 892 insertions(+), 21 deletions(-) create mode 100644 barretenberg/favicon.ico rename yarn-project/bb-bench/src/{serve-ultra.ts => serve.ts} (100%) diff --git a/barretenberg/favicon.ico b/barretenberg/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3138bb83dc419397e0f96fe95cb8fee11102837e GIT binary patch literal 15406 zcmeHO33QZImJY3B+fMhibL^Sv)9vZD`^@z8v0F!N7Ze3V5fnib6hT^p3!u2*LLb~3 zmu~SmA|w^Eum!P2WebZ4fk4aVJ#s#1HUDwRET=llMuSN^F~LW0nqIj8?~ zUfy5-d+*-wzI)$x?@LBTuZ#;aF1<7Z`4t%xFU-ieF(V`6iYwy3fBUZ)84K|3nrjl} zzsbnh^=}y&zeOE1L5uizWZio5X3Y3`UQX7?+??#Gd9zI)FzN63#yNz!CpwmEj}NH`b_v@|p{ z=&W}8Mc(~7o~E4?dEtOa=FXT**xoF!?~ICRf30jbhd`?tay1Csf{sPCFL84?ZX zr@o=1=rJeFC%3ieGO|r=ZAc4+LSvA}T7Yk>M`Y4Ik;it3Jeo*P>=JqDkjPu*ahj8M zwMbn!z_u~Ar5@0?qk+S}#nqI=ulW8sA;-9#ak^tlS|s4B@vF8{!!qEUX>Dl^}*$h)stq;#z&4u?%n+p5IlvP;P8s0}#Gzc98lzLUnd zVV3eIhgZp?_t<3W1Wo)kc8S#bU?(jSjfBMK(jGUqNqryqKjv9?U2B%1H(BJ9e2;FE zZLph2$nOZat2RVju76K$WBk2tnPt$pVOs2g+cYUZ>hVUy!KRSU83}o9e=yeT>V4H` zTISqYmLj*q+9wbQ{5a-v{c~6K&!&v?%oRxekvKn{%LjAAg(j2fGNhj+(q;U1E_oybi$?3((VB5u zWXfTzt-D1=ZWbB1R^+y#HW{J~JyjuJ>LhPpKsJ`wh*k|u{u-&P z^$Yt+;Zb`O@3?Rzj4i0?+O$9>A^%l-MBm^gIBl6q|H%Tc+dwN z0i7&)a37bDxdr^I`%rPH|jP+y5x_Ioz5S;9ksQ=`~()= z<`r+|Phqb#4*R4R561UcM*7`-f9-gjKkb7L$AaPq-UZkn{R+Qz8{l5nsDoFrKYL`G z$h{jx`mPq~zeeP~jqyF)bNfZ!IMMl@P~lVju}9Ep8^&RTyg3J9&-NfN=yt$z?uYrL z>i@3lwWQ`{Kwrk>XppQ^q*_)$RTkMo?o{X&fl>ur&RIdT4!*T|Q1Dd$w46>&b? zaV8#JmG}Rhc?A1?$PJdH{QONEmE|63h95(%A|4e09UU~eY z!Pl9+~cW|{b4m5$@NvDHbwl$Q_vBk1oC_%24i$nVtdITQWvlow`c+sJ?FQ%-qp zqD$w$cwRu?=O}*+_dEeNY~O7w>JH7G)bTpBG1I4-W5l5M!*ymkeWD8f2m4CQnI1I; zAor1g)AGxn(C%*Cnkw7m?7x^B9vWbl&*o_u`_|)LulGlqrd{lFRoxV*sk#~}=+#|% zXH(DTv;Q12J`t#~j&+>}AHvyS`v2C3eiFE7Gcu9RwVwneJAJ0%9FBC+j2Sb2U`+hR zvQ8U*2L%NM1()RHycKI*Q{ByeldRh_)&uyA%z=a=O9k!O^y z63#Jt8@444H)xUO=8_GvaKXH!Zot2l7$CwSh_?I zH)-cf>I&btDWgo}MZM786b{I-54yNv$&w`(bY@d|rdjs`dpYXH<`v{Yzw6}GsgvEp zP2UC2$n>j4qfy?*O2@^7*&F`S}n2+e$2QG+2OqGneEP7 zaEteYY!1!~n@cu|*Xv13ll?}_&CSh8Uj+A)-}a$Qq)Ayi(~aNnlg*np3he@N`14FN z`$G@CxPD-bDZ=-*-Me-Q>!tRGjvIQfkHUZ248LunpT8~c)b`XHb;FpYihmlh5Zm6e z-IO7gYsy{;fA?htIXSn^$(!AH=->efg@PTh({D|h4Zw~#l%9g#xL-3G2})CAyqvtx z)k9j;iHf}%Wgy1m7~hz~n`UQc55f4JU$S9+ntl(r^O1jPZIjXKo8(VhBeLM2U$%bj zk|P#}RM@Me3g>m7$03nm!l#Y?qp!9N*av*f8pVWNwy4myVg0%${x+7Ui%lE|icCj5mwq|= z3txkui2k`u_zZ`^S3`Mv!#CWws7>x%)hff`w|=p-PUh_Q!Otadn@D=-w-#BKB?UWp6!ms2|IenGX(Pa2_>AxSd6~0~F_Tn<#w7gC3{jyn}L>%Vz zZDBFNm&I5N$5n;hApx&T8W0~+SeU1dXXqe^)NI6`&UPq6Pw^``m{T`QM%#PYXnXJ% z-moktH$zALidtnL#?|y)LD*WgJ`a#T@e`X7E3u>h&Bkx%1HVz0bnkCtOwsR3+k2=q z?t7ntd5-fn*PG7p1Gkm21|xpn6Hz+T8z%mg`O$~qlj=uJhv(aTqmCZfgjiM@{KRI& z3ZMBRr0b!FM)jR@E!V5mXO$*$#~LKW0Uj)k``|fV&$T@5@!NGD8?o??k#QX$X2e+r zpy-EqUxC!7WT>yN@1TP%F8H$%OJV$ie&jxwS9-7bCeFfm5PjWK5MN-d^^JC<#xL=_j`{yZj6d2dee@#` zpSgQIO$Y&uJ+N;!S@h% zx)a}{Mj5zwS8IX7pK9C0!+z$yC&t}qQ^Y$O^W`Au>gFPmo1iD=j6dB2IjO7XP>1Va zsyyxS+awfdf7byR>(TG`5VOLsa>|4>MHd_^9d6sJVD|Yk$mMlu{Sl9_ zgJw*{Zt*UaHoJU&#Do2QMBn${f&KrjkZI6YFl)@vrKfbdO6~tZjm_?< zs{F5>;Oweyz-jLXn>?Y*kceqg1}5G^<(<)za+l0M;M4c|+#e6ZeV1E`VsbmyHQtG! zjyUgd98H95ytBc(B$V-GB;Mvo-00R-4~#y`?7@ zyHi)m0Q#|X_^U0js}okKI2O-ig#%rbX|MUL%@ z+nT~hSvZzDBz))jg$ZSKewVG?y_)Xy@tNw-mN*^~V_J%fEHd_Pvkbb9cL3Vo17JLK z;5BBM^srgJKAPq}0Oe4!Am{xw#%y`_JRxg&$Y#TTFP!^_dZ;|9RXs7>Ecf1Mk;jMG zykW8QA*6#ysPQg!nygM2HUx;sfANsx@_as;j8;T&l zJ^Xy(@B828tM0g}vTfMS7FqRiSSF5)_ce7eqOT@n23iI83uI(}vmC`3h}#72*oS=j z88@9zmH25#tP33lFc0-PU-DsX-%rIcGIp??}HL=+~){i zJbaJThaYEn&T*K7N*#{Sit^n!O-vc(APkp zV;FZzm?!$Z9`nO$;J@;GVOMlV-&Hwo(6yBjh5Pd=0>C}+!1*u;MAV>I&If`z2!erJkDo+@{o1N^JC+8Xn1cY=UuOSIy)%*pAO2D zIn;(2LaT1?>VKAWn}KhEK3;vEsjqa5{f^V5fHCv3uk9jyUgR-fK^e zgMts8yzd)B{2)sIEip6I;$5F(I8L3`&)shK-!&$$4hi&rOWfo87P;=Xm8_e=R zU$ZP@+8twv#EV;nzwBO)!S7&-0+Gv+cy8?L6>%E}v_6PKEq1R;_y1m%4 zc%jL18v6=t-K@uOPw_q8_3JL3@4BAD;kbnVw-xo;eijZpenPpvYfS&(|BoIp_Q3xE DcUqYR literal 0 HcmV?d00001 diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index 2c5af1817933..b6f1e962b415 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -11,7 +11,7 @@ "./package.local.json" ], "scripts": { - "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack", + "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", @@ -70,8 +70,6 @@ "chalk": "^5.3.0", "change-case": "^5.4.4", "pako": "^2.1.0", - "playwright": "^1.48.2", - "puppeteer": "^22.4.1", "tslib": "^2.4.0" }, "devDependencies": { @@ -88,6 +86,7 @@ "@types/pako": "^2.0.3", "copy-webpack-plugin": "^12.0.2", "debug": "^4.3.4", + "favicon-emoji": "2.3.1", "html-webpack-plugin": "^5.6.0", "jest": "^29.5.0", "jest-mock-extended": "^4.0.0-beta1", diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/bb-bench/package.local.json index 800609b4f4ff..d69051732e20 100644 --- a/yarn-project/bb-bench/package.local.json +++ b/yarn-project/bb-bench/package.local.json @@ -1,6 +1,6 @@ { "scripts": { - "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack", + "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts" }, "files": ["dest", "src", "artifacts", "!*.test.*"] diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index b7f6e61a4691..7213ab284c07 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -669,9 +669,9 @@ export async function proveThenVerifyUltraHonk( try { logger(`computing the verification key (could be precomputed)...`); const vk = await backend.getVerificationKey(); - logger(`proving...`); + logger(`done. generating proof...`); const proof = await backend.generateProof(witness); - logger(`done proving. verifying...`); + logger(`done. verifying...`); const verifier = new BarretenbergVerifier({ threads }); const verified = await verifier.verifyUltraHonkProof(proof, vk); logger(`verified: ${verified}`); diff --git a/yarn-project/bb-bench/src/serve-ultra.ts b/yarn-project/bb-bench/src/serve.ts similarity index 100% rename from yarn-project/bb-bench/src/serve-ultra.ts rename to yarn-project/bb-bench/src/serve.ts diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/bb-bench/webpack.config.js index 2a36c1d01384..09dafd51eff5 100644 --- a/yarn-project/bb-bench/webpack.config.js +++ b/yarn-project/bb-bench/webpack.config.js @@ -9,7 +9,7 @@ export default { target: 'web', mode: 'production', entry: { - index: './src/serve-ultra.ts', + index: './src/serve.ts', }, module: { rules: [ diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index bdd895b593b0..1edda16eeb2f 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -312,14 +312,13 @@ __metadata: change-case: "npm:^5.4.4" copy-webpack-plugin: "npm:^12.0.2" debug: "npm:^4.3.4" + favicon-emoji: "npm:2.3.1" html-webpack-plugin: "npm:^5.6.0" jest: "npm:^29.5.0" jest-mock-extended: "npm:^4.0.0-beta1" levelup: "npm:^5.1.1" memdown: "npm:^6.1.1" pako: "npm:^2.1.0" - playwright: "npm:^1.48.2" - puppeteer: "npm:^22.4.1" resolve-typescript-plugin: "npm:^2.0.1" serve: "npm:^14.2.1" ts-loader: "npm:^9.5.1" @@ -7002,6 +7001,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^4.3.0": + version: 4.3.0 + resolution: "agent-base@npm:4.3.0" + dependencies: + es6-promisify: "npm:^5.0.0" + checksum: 10/aad37210aa2b6581538675a5e2bcde10f6372547e8994390fa3dcfa8a1577712bd002df631e13870cb3e1d7889c7f0744b43f941d45bf074139ce39559d9217b + languageName: node + linkType: hard + "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": version: 7.1.1 resolution: "agent-base@npm:7.1.1" @@ -7067,7 +7075,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": +"ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -7398,6 +7406,15 @@ __metadata: languageName: node linkType: hard +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10/cf629291fee6c1a6f530549939433ebf32200d7849f38b810ff26ee74235e845c0c12b2ed0f1607ac17383d19b219b69cefa009b920dab57924c5c544e495078 + languageName: node + linkType: hard + "asn1js@npm:^3.0.5": version: 3.0.5 resolution: "asn1js@npm:3.0.5" @@ -7409,6 +7426,13 @@ __metadata: languageName: node linkType: hard +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10/f4f991ae2df849cc678b1afba52d512a7cbf0d09613ba111e72255409ff9158550c775162a47b12d015d1b82b3c273e8e25df0e4783d3ddb008a293486d00a07 + languageName: node + linkType: hard + "assert@npm:^1.4.0": version: 1.5.1 resolution: "assert@npm:1.5.1" @@ -7463,6 +7487,13 @@ __metadata: languageName: node linkType: hard +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 10/2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + "async-mutex@npm:0.4.0": version: 0.4.0 resolution: "async-mutex@npm:0.4.0" @@ -7504,6 +7535,20 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10/2ac497d739f71be3264cf096a33ab256a1fea7fe80b87dc51ec29374505bd5a661279ef1c22989d68528ea61ed634021ca63b31cf1d3c2a3682ffc106f7d0e96 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10/290b9f84facbad013747725bfd8b4c42d0b3b04b5620d8418f0219832ef95a7dc597a4af7b1589ae7fce18bacde96f40911c3cda36199dd04d9f8e01f72fa50a + languageName: node + linkType: hard + "axios@npm:^1.7.2": version: 1.7.2 resolution: "axios@npm:1.7.2" @@ -7669,6 +7714,15 @@ __metadata: languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10/13a4cde058250dbf1fa77a4f1b9a07d32ae2e3b9e28e88a0c7a1827835bc3482f3e478c4a0cfd4da6ff0c46dae07da1061123a995372b32cc563d9975f975404 + languageName: node + linkType: hard + "bcrypto@npm:^5.4.0": version: 5.5.2 resolution: "bcrypto@npm:5.5.2" @@ -7690,6 +7744,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^2.1.0": + version: 2.4.0 + resolution: "bignumber.js@npm:2.4.0" + checksum: 10/c43dd8f0ace26d6a07ab3c2a127e9b0c8428592e7ea79d2569ffc3e73d274e52c213b19e1759d74a27384b4ace34ffb3c440e396fbf68a2917b58a8376eeeb99 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.3.0 resolution: "binary-extensions@npm:2.3.0" @@ -7724,6 +7785,20 @@ __metadata: languageName: node linkType: hard +"bmp-js@npm:0.0.1": + version: 0.0.1 + resolution: "bmp-js@npm:0.0.1" + checksum: 10/285c610738d616f6afbc42edac0d7da124ed4c0305f7075ee2bafb7d86aaa3e264030cbafd06c69f53d78700c881badfb4634a24804629e0de1b8f30fc0f321f + languageName: node + linkType: hard + +"bmp-js@npm:0.0.3": + version: 0.0.3 + resolution: "bmp-js@npm:0.0.3" + checksum: 10/df3e9ba1f410ff1232dc3e28bafe56da03bb2646d90ff08fb9583f6172ce170997896f77ba3f385f4a2ac70b9c86b1cd7d2e63ba64d7738cba7bfa608888d1b1 + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -8064,6 +8139,23 @@ __metadata: languageName: node linkType: hard +"buffer-alloc-unsafe@npm:^1.1.0": + version: 1.1.0 + resolution: "buffer-alloc-unsafe@npm:1.1.0" + checksum: 10/c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 + languageName: node + linkType: hard + +"buffer-alloc@npm:^1.1.0": + version: 1.2.0 + resolution: "buffer-alloc@npm:1.2.0" + dependencies: + buffer-alloc-unsafe: "npm:^1.1.0" + buffer-fill: "npm:^1.0.0" + checksum: 10/560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 + languageName: node + linkType: hard + "buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" @@ -8071,6 +8163,20 @@ __metadata: languageName: node linkType: hard +"buffer-equal@npm:0.0.1": + version: 0.0.1 + resolution: "buffer-equal@npm:0.0.1" + checksum: 10/ca4b52e6c01143529d957a78cb9a93e4257f172bbab30d9eb87c20ae085ed23c5e07f236ac051202dacbf3d17aba42e1455f84cba21ea79b67d57f2b05e9a613 + languageName: node + linkType: hard + +"buffer-fill@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-fill@npm:1.0.0" + checksum: 10/c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 + languageName: node + linkType: hard + "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -8286,6 +8392,13 @@ __metadata: languageName: node linkType: hard +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10/ea1efdf430975fdbac3505cdd21007f7ac5aa29b6d4d1c091f965853cd1bf87e4b08ea07b31a6d688b038872b7cdf0589d9262d59c699d199585daad052aeb20 + languageName: node + linkType: hard + "catering@npm:^2.0.0, catering@npm:^2.1.0": version: 2.1.1 resolution: "catering@npm:2.1.1" @@ -8293,6 +8406,15 @@ __metadata: languageName: node linkType: hard +"centra@npm:^2.7.0": + version: 2.7.0 + resolution: "centra@npm:2.7.0" + dependencies: + follow-redirects: "npm:^1.15.6" + checksum: 10/59ec76d9ba7086b76e9594129b9843856fe7293400b89cb8b133f444a62ca5d4c536df0d4722374b0c16d86dd4e0baba1fc9722640b7d3b532865bebdec2b1a2 + languageName: node + linkType: hard + "chai-as-promised@npm:^8.0.1": version: 8.0.1 resolution: "chai-as-promised@npm:8.0.1" @@ -8716,7 +8838,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -8896,7 +9018,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.1, concat-stream@npm:~1.6.0": +"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.1, concat-stream@npm:^1.6.2, concat-stream@npm:~1.6.0": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -9093,6 +9215,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10/d0f7587346b44a1fe6c269267e037dd34b4787191e473c3e685f507229d88561c40eb18872fabfff02977301815d474300b7bfbd15396c13c5377393f7e87ec3 + languageName: node + linkType: hard + "core-util-is@npm:^1.0.2, core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -9403,6 +9532,22 @@ __metadata: languageName: node linkType: hard +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10/137b287fa021201ce100cef772c8eeeaaafdd2aa7282864022acf3b873021e54cb809e9c060fa164840bf54ff72d00d6e2d8da1ee5a86d7200eeefa1123a8f7f + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^2.0.0": + version: 2.0.2 + resolution: "data-uri-to-buffer@npm:2.0.2" + checksum: 10/152bec5e77513ee253a7c686700a1723246f582dad8b614e8eaaaba7fa45a15c8671ae4b8f4843f4f3a002dae1d3e7a20f852f7d7bdc8b4c15cfe7adfdfb07f8 + languageName: node + linkType: hard + "data-uri-to-buffer@npm:^6.0.2": version: 6.0.2 resolution: "data-uri-to-buffer@npm:6.0.2" @@ -10134,6 +10279,13 @@ __metadata: languageName: node linkType: hard +"dom-walk@npm:^0.1.0": + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 10/19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + languageName: node + linkType: hard + "domain-browser@npm:^1.2.0": version: 1.2.0 resolution: "domain-browser@npm:1.2.0" @@ -10220,6 +10372,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10/d43591f2396196266e186e6d6928038cc11c76c3699a912cb9c13757060f7bbc7f17f47c4cb16168cdeacffc7965aef021142577e646fb3cb88810c15173eb57 + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -10277,6 +10439,13 @@ __metadata: languageName: node linkType: hard +"emojilib@npm:^2.2.9": + version: 2.4.0 + resolution: "emojilib@npm:2.4.0" + checksum: 10/bef767eca49acaa881388d91bee6936ea57ae367d603d5227ff0a9da3e2d1e774a61c447e5f2f4901797d023c4b5239bc208285b6172a880d3655024a0f44980 + languageName: node + linkType: hard + "encodeurl@npm:^1.0.2, encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -10513,6 +10682,29 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^3.0.2": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: 10/14f46a0a20164d4d6f8a39133c7220688bb9ee2d89a78f2345694b8ac9b6ea7b94f73488e289a083dce732831f4040013b25222d1820580c7b10b698c50c8267 + languageName: node + linkType: hard + +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 10/b250c55523c496c43c9216c2646e58ec182b819e036fe5eb8d83fa16f044ecc6b8dcefc88ace2097be3d3c4d02b6aa8eeae1a66deeaf13e7bee905ebabb350a3 + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: "npm:^4.0.3" + checksum: 10/fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 + languageName: node + linkType: hard + "esbuild@npm:^0.18.10": version: 0.18.20 resolution: "esbuild@npm:0.18.20" @@ -11191,6 +11383,13 @@ __metadata: languageName: node linkType: hard +"exif-parser@npm:^0.1.9": + version: 0.1.12 + resolution: "exif-parser@npm:0.1.12" + checksum: 10/72bffba154fd33b270908ea1f9f63a6c5dffadf4eb427c85ab82d6006204ed762dfeb76969e1577614b8d18dadd411b11583569e54ed2beea0af8b61c8f4de29 + languageName: node + linkType: hard + "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -11257,6 +11456,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10/59e89e2dc798ec0f54b36d82f32a27d5f6472c53974f61ca098db5d4648430b725387b53449a34df38fd0392045434426b012f302b3cc049a6500ccf82877e4e + languageName: node + linkType: hard + "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -11268,6 +11474,20 @@ __metadata: languageName: node linkType: hard +"extract-zip@npm:^1.6.6": + version: 1.7.0 + resolution: "extract-zip@npm:1.7.0" + dependencies: + concat-stream: "npm:^1.6.2" + debug: "npm:^2.6.9" + mkdirp: "npm:^0.5.4" + yauzl: "npm:^2.10.0" + bin: + extract-zip: cli.js + checksum: 10/a9a5e2b118cc1d3b780d296f056308a8fda580bb18a26e12d6137321e5d3ef1d09355195ff187e9c7039aab42a253ac1e3996c66d031c44abca5abde6fd51393 + languageName: node + linkType: hard + "extract-zip@npm:^2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" @@ -11285,6 +11505,20 @@ __metadata: languageName: node linkType: hard +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10/26967d6c7ecbfb5bc5b7a6c43503dc5fafd9454802037e9fa1665e41f615da4ff5918bd6cb871a3beabed01a31eca1ccd0bdfb41231f50ad50d405a430f78377 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10/bfd6d55f3c0c04d826fe0213264b383c03f32825af6b1ff777f3f2dc49467e599361993568d75b7b19a8ea1bb08c8e7cd8c3d87d179ced91bb0dcf81ca6938e0 + languageName: node + linkType: hard + "fast-copy@npm:^3.0.2": version: 3.0.2 resolution: "fast-copy@npm:3.0.2" @@ -11383,6 +11617,22 @@ __metadata: languageName: node linkType: hard +"favicon-emoji@npm:2.3.1": + version: 2.3.1 + resolution: "favicon-emoji@npm:2.3.1" + dependencies: + data-uri-to-buffer: "npm:^2.0.0" + emojilib: "npm:^2.2.9" + neodoc: "npm:^1.4.0" + open: "npm:^7.3.0" + puppeteer: "npm:^1.3.0" + to-ico: "npm:^1.1.5" + bin: + favicon-emoji: cli.js + checksum: 10/6edaed53b87ecb17de6b30365e136a606a754d7952ec145c7b4957a9bbc07cc05171a8d1ebac0c90e6c9ce487f061df83fbf38638670400db5859bd60d202c62 + languageName: node + linkType: hard + "faye-websocket@npm:^0.11.3": version: 0.11.4 resolution: "faye-websocket@npm:0.11.4" @@ -11426,6 +11676,13 @@ __metadata: languageName: node linkType: hard +"file-type@npm:^3.1.0, file-type@npm:^3.8.0": + version: 3.9.0 + resolution: "file-type@npm:3.9.0" + checksum: 10/1c8bc99bbb9cfcf13d3489e0c0250188dde622658b5a990f2ba09e6c784f183556b37b7de22104b4b0fd87f478ce12f8dc199b988616ce7cdcb41248dc0a79f9 + languageName: node + linkType: hard + "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -11581,6 +11838,13 @@ __metadata: languageName: node linkType: hard +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10/c1e1644d5e074ac063ecbc3fb8582013ef91fff0e3fa41e76db23d2f62bc6d9677aac86db950917deed4fe1fdd772df780cfaa352075f23deec9c015313afb97 + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -11592,6 +11856,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + checksum: 10/1b6f3ccbf4540e535887b42218a2431a3f6cfdea320119c2affa2a7a374ad8fdd1e60166fc865181f45d49b1684c3e90e7b2190d3fe016692957afb9cf0d0d02 + languageName: node + linkType: hard + "formidable@npm:^2.1.2": version: 2.1.2 resolution: "formidable@npm:2.1.2" @@ -11854,6 +12129,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^2.0.0": + version: 2.3.1 + resolution: "get-stream@npm:2.3.1" + dependencies: + object-assign: "npm:^4.0.1" + pinkie-promise: "npm:^2.0.0" + checksum: 10/712738e6a39b06da774aea5d35efa16a8f067a0d93b1b564e8d0e733fafddcf021e03098895735bc45d6594d3094369d700daa0d33891f980595cf6495e33294 + languageName: node + linkType: hard + "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -11902,6 +12187,15 @@ __metadata: languageName: node linkType: hard +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10/ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -11969,6 +12263,16 @@ __metadata: languageName: node linkType: hard +"global@npm:~4.4.0": + version: 4.4.0 + resolution: "global@npm:4.4.0" + dependencies: + min-document: "npm:^2.19.0" + process: "npm:^0.11.10" + checksum: 10/9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f + languageName: node + linkType: hard + "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -12080,6 +12384,23 @@ __metadata: languageName: node linkType: hard +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: 10/d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: "npm:^6.12.3" + har-schema: "npm:^2.0.0" + checksum: 10/b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + languageName: node + linkType: hard + "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -12463,6 +12784,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^1.2.2" + sshpk: "npm:^1.7.0" + checksum: 10/2ff7112e6b0d8f08b382dfe705078c655501f2ddd76cf589d108445a9dd388a0a9be928c37108261519a7f53e6bbd1651048d74057b804807cce1ec49e87a95b + languageName: node + linkType: hard + "https-browserify@npm:^1.0.0": version: 1.0.0 resolution: "https-browserify@npm:1.0.0" @@ -12470,6 +12802,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^2.2.1": + version: 2.2.4 + resolution: "https-proxy-agent@npm:2.2.4" + dependencies: + agent-base: "npm:^4.3.0" + debug: "npm:^3.1.0" + checksum: 10/0e252f5c9497f0e72772e24ac1a0dfb7e44741358a6c1bb602dd40e7b8cb37c355086bfcc86905ba319f6aa3c625b46b1553cf5d85d44c8e988c0965b39bc314 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.3": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -12563,6 +12905,15 @@ __metadata: languageName: node linkType: hard +"image-size@npm:^0.5.0": + version: 0.5.5 + resolution: "image-size@npm:0.5.5" + bin: + image-size: bin/image-size.js + checksum: 10/f41ec6cfccfa6471980e83568033a66ec53f84d1bcb70033e946a7db9c1b6bbf5645ec90fa5a8bdcdc84d86af0032014eff6fa078a60c2398dfce6676c46bdb7 + languageName: node + linkType: hard + "import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -12752,6 +13103,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^1.0.1": + version: 1.0.3 + resolution: "ip-regex@npm:1.0.3" + checksum: 10/9ce02e567949be9cf4d16c5c314cd241ce1edf78b2619e94b276cdff97eefe198970a224f9d1f0c22a92c4655997ad68fd34d82e41e7d19fafa47fe15108f22a + languageName: node + linkType: hard + "ip-regex@npm:^4.0.0": version: 4.3.0 resolution: "ip-regex@npm:4.3.0" @@ -12938,6 +13296,13 @@ __metadata: languageName: node linkType: hard +"is-function@npm:^1.0.1": + version: 1.0.2 + resolution: "is-function@npm:1.0.2" + checksum: 10/7d564562e07b4b51359547d3ccc10fb93bb392fd1b8177ae2601ee4982a0ece86d952323fc172a9000743a3971f09689495ab78a1d49a9b14fc97a7e28521dc0 + languageName: node + linkType: hard + "is-generator-fn@npm:^2.0.0": version: 2.1.0 resolution: "is-generator-fn@npm:2.1.0" @@ -13173,6 +13538,13 @@ __metadata: languageName: node linkType: hard +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10/4b433bfb0f9026f079f4eb3fbaa4ed2de17c9995c3a0b5c800bec40799b4b2a8b4e051b1ada77749deb9ded4ae52fe2096973f3a93ff83df1a5a7184a669478c + languageName: node + linkType: hard + "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -13210,7 +13582,7 @@ __metadata: languageName: node linkType: hard -"is-wsl@npm:^2.2.0": +"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" dependencies: @@ -13279,6 +13651,13 @@ __metadata: languageName: node linkType: hard +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10/22d9c181015226d4534a227539256897bbbcb7edd1066ca4fc4d3a06dbd976325dfdd16b3983c7d236a89f256805c1a685a772e0364e98873d3819b064ad35a1 + languageName: node + linkType: hard + "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.2 resolution: "istanbul-lib-coverage@npm:3.2.2" @@ -14084,6 +14463,30 @@ __metadata: languageName: node linkType: hard +"jimp@npm:^0.2.21": + version: 0.2.28 + resolution: "jimp@npm:0.2.28" + dependencies: + bignumber.js: "npm:^2.1.0" + bmp-js: "npm:0.0.3" + es6-promise: "npm:^3.0.2" + exif-parser: "npm:^0.1.9" + file-type: "npm:^3.1.0" + jpeg-js: "npm:^0.2.0" + load-bmfont: "npm:^1.2.3" + mime: "npm:^1.3.4" + mkdirp: "npm:0.5.1" + pixelmatch: "npm:^4.0.0" + pngjs: "npm:^3.0.0" + read-chunk: "npm:^1.0.1" + request: "npm:^2.65.0" + stream-to-buffer: "npm:^0.1.0" + tinycolor2: "npm:^1.1.2" + url-regex: "npm:^3.0.0" + checksum: 10/a1705344a7f066338f0c9d99f1d7d8a2e3068336793207a3866fd7aa09e9d3252c063460b50a761589f0517396aa65ce62e69738a551d4eda3760bfb76889a91 + languageName: node + linkType: hard + "jju@npm:~1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" @@ -14098,6 +14501,20 @@ __metadata: languageName: node linkType: hard +"jpeg-js@npm:^0.1.1": + version: 0.1.2 + resolution: "jpeg-js@npm:0.1.2" + checksum: 10/2a9bc46be8082f0104e1d39e5a18f9cdbb18886c69b445e368059b7bbc495ea43976bf88e9aa380db823acd88bb88b29bbf9a9d9660a199986ed48f3005cd19a + languageName: node + linkType: hard + +"jpeg-js@npm:^0.2.0": + version: 0.2.0 + resolution: "jpeg-js@npm:0.2.0" + checksum: 10/921a0b01169c84802125727b8cfffc43d1290e26aaa6feb94d4d43b62cd9e9c5912d44d1edf9f79bb6334ac168926799e9020118c2b53e095b458c424b9ef833 + languageName: node + linkType: hard + "js-sha3@npm:0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -14142,6 +14559,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10/5450133242845100e694f0ef9175f44c012691a9b770b2571e677314e6f70600abb10777cdfc9a0c6a9f2ac6d134577403633de73e2fcd0f97875a67744e2d14 + languageName: node + linkType: hard + "jsdoc-type-pratt-parser@npm:~4.0.0": version: 4.0.0 resolution: "jsdoc-type-pratt-parser@npm:4.0.0" @@ -14186,6 +14610,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10/8b3b64eff4a807dc2a3045b104ed1b9335cd8d57aa74c58718f07f0f48b8baa3293b00af4dcfbdc9144c3aafea1e97982cc27cc8e150fc5d93c540649507a458 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -14193,6 +14624,13 @@ __metadata: languageName: node linkType: hard +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c + languageName: node + linkType: hard + "json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -14265,6 +14703,18 @@ __metadata: languageName: node linkType: hard +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10/df2bf234eab1b5078d01bcbff3553d50a243f7b5c10a169745efeda6344d62798bd1d85bcca6a8446f3b5d0495e989db45f9de8dae219f0f9796e70e0c776089 + languageName: node + linkType: hard + "keygrip@npm:~1.1.0": version: 1.1.0 resolution: "keygrip@npm:1.1.0" @@ -14598,6 +15048,22 @@ __metadata: languageName: node linkType: hard +"load-bmfont@npm:^1.2.3": + version: 1.4.2 + resolution: "load-bmfont@npm:1.4.2" + dependencies: + buffer-equal: "npm:0.0.1" + mime: "npm:^1.3.4" + parse-bmfont-ascii: "npm:^1.0.3" + parse-bmfont-binary: "npm:^1.0.5" + parse-bmfont-xml: "npm:^1.1.4" + phin: "npm:^3.7.1" + xhr: "npm:^2.0.1" + xtend: "npm:^4.0.0" + checksum: 10/73d80e9d5bd3ba12ba1174a33a6dfdc90a635106bb9a040b375060f24a9e15f757f06f3adfbcaa1f6effd93e380ef8c51f2b946dc6d976037f7119f0dd5266bf + languageName: node + linkType: hard + "load-json-file@npm:^6.2.0": version: 6.2.0 resolution: "load-json-file@npm:6.2.0" @@ -15150,7 +15616,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -15159,7 +15625,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:1.6.0": +"mime@npm:1.6.0, mime@npm:^1.3.4": version: 1.6.0 resolution: "mime@npm:1.6.0" bin: @@ -15168,7 +15634,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:2.6.0": +"mime@npm:2.6.0, mime@npm:^2.0.3": version: 2.6.0 resolution: "mime@npm:2.6.0" bin: @@ -15191,6 +15657,15 @@ __metadata: languageName: node linkType: hard +"min-document@npm:^2.19.0": + version: 2.19.0 + resolution: "min-document@npm:2.19.0" + dependencies: + dom-walk: "npm:^0.1.0" + checksum: 10/4e45a0686c81cc04509989235dc6107e2678a59bb48ce017d3c546d7d9a18d782e341103e66c78081dd04544704e2196e529905c41c2550bca069b69f95f07c8 + languageName: node + linkType: hard + "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -15259,6 +15734,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:0.0.8": + version: 0.0.8 + resolution: "minimist@npm:0.0.8" + checksum: 10/1e6279f747b3330fb918e47bd88093b26dadca91ea31bd50f40a805d9ff55fd9af16162248ffa303876b1cbb75fd5b701e773d46319c22025ec124e53bca0714 + languageName: node + linkType: hard + "minimist@npm:^1.1.0, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -15364,7 +15846,18 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.6": +"mkdirp@npm:0.5.1": + version: 0.5.1 + resolution: "mkdirp@npm:0.5.1" + dependencies: + minimist: "npm:0.0.8" + bin: + mkdirp: bin/cmd.js + checksum: 10/8651af2facdfa53f39e68fd93cf1653c11f7c1d49c6d1b4e53bcedc52e669cc64f1b5e95c49cfde7e99dbbcad26d3e61f4f2b4812f18c871c6455d9592f02806 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.4, mkdirp@npm:^0.5.6": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -15732,6 +16225,15 @@ __metadata: languageName: node linkType: hard +"neodoc@npm:^1.4.0": + version: 1.4.0 + resolution: "neodoc@npm:1.4.0" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10/495d0482aa9f4c354e0a12f4a1a1b9bcd01f04258beedbb9ff008ed38175a7485a92fd25d9b8eeda80084119c35bdd8291aacca862b306da42c9773c570cf28b + languageName: node + linkType: hard + "netmask@npm:^2.0.2": version: 2.0.2 resolution: "netmask@npm:2.0.2" @@ -15955,6 +16457,20 @@ __metadata: languageName: node linkType: hard +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 10/1809a366d258f41fdf4ab5310cff3d1e15f96b187503bc7333cef4351de7bd0f52cb269bc95800f1fae5fb04dd886287df1471985fd67e8484729fdbcf857119 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + "object-inspect@npm:^1.13.1": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" @@ -16105,6 +16621,16 @@ __metadata: languageName: node linkType: hard +"open@npm:^7.3.0": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: "npm:^2.0.0" + is-wsl: "npm:^2.1.1" + checksum: 10/4fc02ed3368dcd5d7247ad3566433ea2695b0713b041ebc0eeb2f0f9e5d4e29fc2068f5cdd500976b3464e77fe8b61662b1b059c73233ccc601fe8b16d6c1cd6 + languageName: node + linkType: hard + "open@npm:^8.0.2": version: 8.4.2 resolution: "open@npm:8.4.2" @@ -16397,6 +16923,37 @@ __metadata: languageName: node linkType: hard +"parse-bmfont-ascii@npm:^1.0.3": + version: 1.0.6 + resolution: "parse-bmfont-ascii@npm:1.0.6" + checksum: 10/9dd46f8ad8db8e067904c97a21546a1e338eaabb909abe070c643e4e06dbf76fa685277114ca22a05a4a35d38197512b2826d5de46a03b10e9bf49119ced2e39 + languageName: node + linkType: hard + +"parse-bmfont-binary@npm:^1.0.5": + version: 1.0.6 + resolution: "parse-bmfont-binary@npm:1.0.6" + checksum: 10/728fbc05876c3f0ab116ea238be99f8c1188551e54997965038db558aab08c71f0ae1fee64c2a18c8d629c6b2aaea43e84a91783ec4f114ac400faf0b5170b86 + languageName: node + linkType: hard + +"parse-bmfont-xml@npm:^1.1.4": + version: 1.1.6 + resolution: "parse-bmfont-xml@npm:1.1.6" + dependencies: + xml-parse-from-string: "npm:^1.0.0" + xml2js: "npm:^0.5.0" + checksum: 10/71a202da289a124db7bb7bee1b2a01b8a38b5ba36f93d6a98cea6fc1d140c16c8bc7bcccff48864ec886da035944d337b04cf70723393c411991af952fc6086b + languageName: node + linkType: hard + +"parse-headers@npm:^2.0.0": + version: 2.0.5 + resolution: "parse-headers@npm:2.0.5" + checksum: 10/210b13bc0f99cf6f1183896f01de164797ac35b2720c9f1c82a3e2ceab256f87b9048e8e16a14cfd1b75448771f8379cd564bd1674a179ab0168c90005d4981b + languageName: node + linkType: hard + "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -16416,6 +16973,15 @@ __metadata: languageName: node linkType: hard +"parse-png@npm:^1.0.0, parse-png@npm:^1.1.1": + version: 1.1.2 + resolution: "parse-png@npm:1.1.2" + dependencies: + pngjs: "npm:^3.2.0" + checksum: 10/319954d1feea667b1489104eaa691db9e99637a11f24fe8dd19f721999573daff22877ce7beb4b74dab72deec069285e610f4a85286fcae1d3b8cd6002303c8a + languageName: node + linkType: hard + "parse5@npm:^6.0.1": version: 6.0.1 resolution: "parse5@npm:6.0.1" @@ -16577,6 +17143,22 @@ __metadata: languageName: node linkType: hard +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10/534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"phin@npm:^3.7.1": + version: 3.7.1 + resolution: "phin@npm:3.7.1" + dependencies: + centra: "npm:^2.7.0" + checksum: 10/eebbfb0ab63d90f1513a2da05ef5ccc4bfb17216567fe62e9f0b8a4da27ff301b6409da8dcada6a66711c040b318ffb456e1adf24e8d261e24a916d30d91aadf + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -16605,6 +17187,22 @@ __metadata: languageName: node linkType: hard +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: "npm:^2.0.0" + checksum: 10/b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: 10/11d207257a044d1047c3755374d36d84dda883a44d030fe98216bf0ea97da05a5c9d64e82495387edeb9ee4f52c455bca97cdb97629932be65e6f54b29f5aec8 + languageName: node + linkType: hard + "pino-abstract-transport@npm:^2.0.0": version: 2.0.0 resolution: "pino-abstract-transport@npm:2.0.0" @@ -16672,6 +17270,17 @@ __metadata: languageName: node linkType: hard +"pixelmatch@npm:^4.0.0": + version: 4.0.2 + resolution: "pixelmatch@npm:4.0.2" + dependencies: + pngjs: "npm:^3.0.0" + bin: + pixelmatch: bin/pixelmatch + checksum: 10/3dfb1c0bc6d333a5ad34e78737c3ea33ac3743b52db73b5e8bebbbfd87376afacfec5d3c268d9fdb6e77b07c5ecd6b01f98657087457107f9e03ad1a872545e1 + languageName: node + linkType: hard + "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -16736,6 +17345,13 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^3.0.0, pngjs@npm:^3.2.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 10/0e9227a413ce4b4f5ebae4465b366efc9ca545c74304f3cc30ba2075159eb12f01a6a821c4f61f2b048bd85356abbe6d2109df7052a9030ef4d7a42d99760af6 + languageName: node + linkType: hard + "portfinder@npm:^1.0.32": version: 1.0.32 resolution: "portfinder@npm:1.0.32" @@ -16952,7 +17568,7 @@ __metadata: languageName: node linkType: hard -"progress@npm:^2.0.3": +"progress@npm:^2.0.1, progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" checksum: 10/e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d @@ -17046,7 +17662,7 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:^1.1.0": +"proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 @@ -17064,6 +17680,15 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.28": + version: 1.15.0 + resolution: "psl@npm:1.15.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10/5e7467eb5196eb7900d156783d12907d445c0122f76c73203ce96b148a6ccf8c5450cc805887ffada38ff92d634afcf33720c24053cb01d5b6598d1c913c5caf + languageName: node + linkType: hard + "public-encrypt@npm:^4.0.0": version: 4.0.3 resolution: "public-encrypt@npm:4.0.3" @@ -17106,7 +17731,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 @@ -17140,6 +17765,22 @@ __metadata: languageName: node linkType: hard +"puppeteer@npm:^1.3.0": + version: 1.20.0 + resolution: "puppeteer@npm:1.20.0" + dependencies: + debug: "npm:^4.1.0" + extract-zip: "npm:^1.6.6" + https-proxy-agent: "npm:^2.2.1" + mime: "npm:^2.0.3" + progress: "npm:^2.0.1" + proxy-from-env: "npm:^1.0.0" + rimraf: "npm:^2.6.1" + ws: "npm:^6.1.0" + checksum: 10/db2222f7513af35aba4d4925e2db73fcb6df21bac16d51a2276518bdaed380a3811134467649432bdcc2db63c4e9cce1fce9b618ac709f85a38eb0f8e21ac2ad + languageName: node + linkType: hard + "puppeteer@npm:^22.4.1": version: 22.15.0 resolution: "puppeteer@npm:22.15.0" @@ -17195,6 +17836,13 @@ __metadata: languageName: node linkType: hard +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 10/485c990fba7ad17671e16c92715fb064c1600337738f5d140024eb33a49fbc1ed31890d3db850117c760caeb9c9cc9f4ba22a15c20dd119968e41e3d3fe60b28 + languageName: node + linkType: hard + "querystring-es3@npm:~0.2.0": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" @@ -17317,6 +17965,13 @@ __metadata: languageName: node linkType: hard +"read-chunk@npm:^1.0.1": + version: 1.0.1 + resolution: "read-chunk@npm:1.0.1" + checksum: 10/9240d6a7dbef26d611f5e816dde890bbda99a4547c3edc2be60f8beab757023dfaaa6486004a20bc6d3f5fce90ff31da64eff131554e4250fc5182ed1e6b2a80 + languageName: node + linkType: hard + "read-only-stream@npm:^2.0.0": version: 2.0.0 resolution: "read-only-stream@npm:2.0.0" @@ -17498,6 +18153,34 @@ __metadata: languageName: node linkType: hard +"request@npm:^2.65.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~2.3.2" + har-validator: "npm:~5.1.3" + http-signature: "npm:~1.2.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + oauth-sign: "npm:~0.9.0" + performance-now: "npm:^2.1.0" + qs: "npm:~6.5.2" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:~2.5.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^3.3.2" + checksum: 10/005b8b237b56f1571cfd4ecc09772adaa2e82dcb884fc14ea2bb25e23dbf7c2009f9929e0b6d3fd5802e33ed8ee705a3b594c8f9467c1458cd973872bf89db8e + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -17539,6 +18222,20 @@ __metadata: languageName: node linkType: hard +"resize-img@npm:^1.1.0": + version: 1.1.2 + resolution: "resize-img@npm:1.1.2" + dependencies: + bmp-js: "npm:0.0.1" + file-type: "npm:^3.8.0" + get-stream: "npm:^2.0.0" + jimp: "npm:^0.2.21" + jpeg-js: "npm:^0.1.1" + parse-png: "npm:^1.1.1" + checksum: 10/6d02d35a85478edc88aabe2cc50b368b980af3b5af785e545838621f4d654afe0bc8edc0bdba31c9b599965221425ba5d663e5bfa875c9f719b17af09b3368c5 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -17681,6 +18378,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^2.6.1": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10/4586c296c736483e297da7cffd19475e4a3e41d07b1ae124aad5d687c79e4ffa716bdac8732ed1db942caf65271cee9dd39f8b639611de161a2753e2112ffe1d + languageName: node + linkType: hard + "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -17957,7 +18665,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 @@ -17975,6 +18683,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:>=0.6.0": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 10/b1c784b545019187b53a0c28edb4f6314951c971e2963a69739c6ce222bfbc767e54d320e689352daba79b7d5e06d22b5d7113b99336219d6e93718e2f99d335 + languageName: node + linkType: hard + "schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" @@ -18640,6 +19355,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10/858339d43e3c6b6a848772a66f69442ce74f1a37655d9f35ba9d1f85329499ff0000af9f8ab83dbb39ad24c0c370edabe0be1e39863f70c6cded9924b8458c34 + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.6 resolution: "ssri@npm:10.0.6" @@ -18739,6 +19475,15 @@ __metadata: languageName: node linkType: hard +"stream-to-buffer@npm:^0.1.0": + version: 0.1.0 + resolution: "stream-to-buffer@npm:0.1.0" + dependencies: + stream-to: "npm:~0.2.0" + checksum: 10/9adf4eadf245ac4bd2ce1b4cd879170714221d185798637b1b5e4f53aef304d5dccbbd180380932d6f3618f7e1972a0529732618ae5c8e33beb0ca51d6907aec + languageName: node + linkType: hard + "stream-to-it@npm:^1.0.0": version: 1.0.1 resolution: "stream-to-it@npm:1.0.1" @@ -18748,6 +19493,13 @@ __metadata: languageName: node linkType: hard +"stream-to@npm:~0.2.0": + version: 0.2.2 + resolution: "stream-to@npm:0.2.2" + checksum: 10/06a3f163cfc609a7dc6952f0d953e67f5dabf68c75a7349cc0656ed4e211806e58c69ba1270263ec33c288aaf1468386c3055d592e18b76bc0f13e322ab78068 + languageName: node + linkType: hard + "streamx@npm:^2.15.0, streamx@npm:^2.16.1": version: 2.16.1 resolution: "streamx@npm:2.16.1" @@ -19328,6 +20080,13 @@ __metadata: languageName: node linkType: hard +"tinycolor2@npm:^1.1.2": + version: 1.6.0 + resolution: "tinycolor2@npm:1.6.0" + checksum: 10/066c3acf4f82b81c58a0d3ab85f49407efe95ba87afc3c7a16b1d77625193dfbe10dd46c26d0a263c1137361dd5a6a68bff2fb71def5fb9b9aec940fb030bcd4 + languageName: node + linkType: hard + "tmp@npm:0.0.33, tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -19351,6 +20110,19 @@ __metadata: languageName: node linkType: hard +"to-ico@npm:^1.1.5": + version: 1.1.5 + resolution: "to-ico@npm:1.1.5" + dependencies: + arrify: "npm:^1.0.1" + buffer-alloc: "npm:^1.1.0" + image-size: "npm:^0.5.0" + parse-png: "npm:^1.0.0" + resize-img: "npm:^1.1.0" + checksum: 10/56f47de42eb5782a1e521ec13daca8af9fb5bc1216f759b263dc88e4f44b6f093d36df7f10b08d28a56dac431d99a90daffddc413bc57ce898a685f8856d1eeb + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -19367,6 +20139,16 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: "npm:^1.1.28" + punycode: "npm:^2.1.1" + checksum: 10/024cb13a4d1fe9af57f4323dff765dd9b217cc2a69be77e3b8a1ca45600aa33a097b6ad949f225d885e904f4bd3ceccef104741ef202d8378e6ca78e850ff82f + languageName: node + linkType: hard + "tr46@npm:^5.0.0": version: 5.0.0 resolution: "tr46@npm:5.0.0" @@ -19641,6 +20423,22 @@ __metadata: languageName: node linkType: hard +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10/7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10/04ee27901cde46c1c0a64b9584e04c96c5fe45b38c0d74930710751ea991408b405747d01dfae72f80fc158137018aea94f9c38c651cb9c318f0861a310c3679 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -20106,6 +20904,15 @@ __metadata: languageName: node linkType: hard +"url-regex@npm:^3.0.0": + version: 3.2.0 + resolution: "url-regex@npm:3.2.0" + dependencies: + ip-regex: "npm:^1.0.1" + checksum: 10/06c9b619c8d09debd9a721e45a5b23f5af1cb56e9ef9083242a9cc5ae5c09ac9fea35e72a7cddd840b3db09790aeaf26332ba7dfea86a1b239a1d0103e8ddfe3 + languageName: node + linkType: hard + "url@npm:~0.11.0": version: 0.11.4 resolution: "url@npm:0.11.4" @@ -20173,6 +20980,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 10/4f2b86432b04cc7c73a0dd1bcf11f1fc18349d65d2e4e32dd0fc658909329a1e0cc9244aa93f34c0cccfdd5ae1af60a149251a5f420ec3ac4223a3dab198fb2e + languageName: node + linkType: hard + "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -20217,6 +21033,17 @@ __metadata: languageName: node linkType: hard +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10/da548149dd9c130a8a2587c9ee71ea30128d1526925707e2d01ed9c5c45c9e9f86733c66a328247cdd5f7c1516fb25b0f959ba754bfbe15072aa99ff96468a29 + languageName: node + linkType: hard + "viem@npm:^2.7.15": version: 2.10.2 resolution: "viem@npm:2.10.2" @@ -20784,6 +21611,15 @@ __metadata: languageName: node linkType: hard +"ws@npm:^6.1.0": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: "npm:~1.0.0" + checksum: 10/19f8d1608317f4c98f63da6eebaa85260a6fe1ba459cbfedd83ebe436368177fb1e2944761e2392c6b7321cbb7a375c8a81f9e1be35d555b6b4647eb61eadd46 + languageName: node + linkType: hard + "ws@npm:^7.5.10": version: 7.5.10 resolution: "ws@npm:7.5.10" @@ -20829,6 +21665,42 @@ __metadata: languageName: node linkType: hard +"xhr@npm:^2.0.1": + version: 2.6.0 + resolution: "xhr@npm:2.6.0" + dependencies: + global: "npm:~4.4.0" + is-function: "npm:^1.0.1" + parse-headers: "npm:^2.0.0" + xtend: "npm:^4.0.0" + checksum: 10/31f34aba708955008c87bcd21482be6afc7ff8adc28090e633b1d3f8d3e8e93150bac47b262738b046d7729023a884b655d55cf34e9d14d5850a1275ab49fb37 + languageName: node + linkType: hard + +"xml-parse-from-string@npm:^1.0.0": + version: 1.0.1 + resolution: "xml-parse-from-string@npm:1.0.1" + checksum: 10/628eda047d93bed85165b2605d68bd86a18cab2d362ed29553ee0d4124cec348ffa6dfb0f73361f46329ce9ee1079bb152af49caf1b5f694232c554a8d5daaa4 + languageName: node + linkType: hard + +"xml2js@npm:^0.5.0": + version: 0.5.0 + resolution: "xml2js@npm:0.5.0" + dependencies: + sax: "npm:>=0.6.0" + xmlbuilder: "npm:~11.0.0" + checksum: 10/27c4d759214e99be5ec87ee5cb1290add427fa43df509d3b92d10152b3806fd2f7c9609697a18b158ccf2caa01e96af067cdba93196f69ca10c90e4f79a08896 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 10/c8c3d208783718db5b285101a736cd8e6b69a5c265199a0739abaa93d1a1b7de5489fd16df4e776e18b2c98cb91f421a7349e99fd8c1ebeb44ecfed72a25091a + languageName: node + linkType: hard + "xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" From 6e48a72fa1367ddd0f8bfbdcfc0ebac68c499943 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 15 Jan 2025 02:12:41 +0000 Subject: [PATCH 13/43] pare down some deps --- yarn-project/bb-bench/package.json | 90 ++++++++++-------------- yarn-project/bb-bench/package.local.json | 5 +- yarn-project/bb-bench/src/index.ts | 6 +- yarn-project/bb-bench/tsconfig.json | 18 ----- yarn-project/yarn.lock | 19 ----- 5 files changed, 42 insertions(+), 96 deletions(-) diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index b6f1e962b415..d7f235113c61 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -11,7 +11,7 @@ "./package.local.json" ], "scripts": { - "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", + "build": "yarn clean && yarn generate && tsc -b && yarn build:app && cp ../../barretenberg/favicon.ico dest", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", @@ -21,77 +21,26 @@ "generate:noir-circuits": "mkdir -p ./artifacts/keys && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", "codegen": "yarn noir-codegen", "build:dev": "tsc -b --watch", - "build:browser-app": "rm -rf dest && webpack", + "build:app": "rm -rf dest && webpack", "serve-both": "./serve.sh", "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}" }, - "jest": { - "moduleNameMapper": { - "^(\\.{1,2}/.*)\\.[cm]?js$": "$1" - }, - "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", - "rootDir": "./src", - "extensionsToTreatAsEsm": [ - ".ts" - ], - "transform": { - "^.+\\.tsx?$": [ - "@swc/jest", - { - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "transform": { - "decoratorVersion": "2022-03" - } - } - } - ] - }, - "reporters": [ - "default" - ], - "testTimeout": 30000, - "setupFiles": [ - "../../foundation/src/jest/setup.mjs" - ] - }, "dependencies": { "@aztec/bb.js": "../../ts", - "@aztec/circuits.js": "workspace:^", "@aztec/foundation": "workspace:^", - "@aztec/types": "workspace:^", "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen", - "@noir-lang/noir_js": "file:../../noir/packages/noir_js", - "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi", - "@noir-lang/types": "portal:../../noir/packages/types", - "chalk": "^5.3.0", - "change-case": "^5.4.4", - "pako": "^2.1.0", - "tslib": "^2.4.0" + "@noir-lang/noir_js": "file:../../noir/packages/noir_js" }, "devDependencies": { "@aztec/bb-prover": "workspace:^", - "@aztec/kv-store": "workspace:^", - "@aztec/simulator": "workspace:^", - "@aztec/telemetry-client": "workspace:^", - "@aztec/world-state": "workspace:^", "@jest/globals": "^29.5.0", - "@msgpack/msgpack": "^3.0.0-beta2", - "@playwright/test": "^1.48.2", "@types/jest": "^29.5.0", "@types/node": "^22.8.1", - "@types/pako": "^2.0.3", "copy-webpack-plugin": "^12.0.2", "debug": "^4.3.4", "favicon-emoji": "2.3.1", "html-webpack-plugin": "^5.6.0", "jest": "^29.5.0", - "jest-mock-extended": "^4.0.0-beta1", - "levelup": "^5.1.1", - "memdown": "^6.1.1", "resolve-typescript-plugin": "^2.0.1", "serve": "^14.2.1", "ts-loader": "^9.5.1", @@ -110,5 +59,38 @@ "types": "./dest/index.d.ts", "engines": { "node": ">=18" + }, + "jest": { + "extensionsToTreatAsEsm": [ + ".ts" + ], + "transform": { + "^.+\\.tsx?$": [ + "@swc/jest", + { + "jsc": { + "parser": { + "syntax": "typescript", + "decorators": true + }, + "transform": { + "decoratorVersion": "2022-03" + } + } + } + ] + }, + "moduleNameMapper": { + "^(\\.{1,2}/.*)\\.[cm]?js$": "$1" + }, + "reporters": [ + "default" + ], + "testTimeout": 30000, + "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$", + "rootDir": "./src", + "setupFiles": [ + "../../foundation/src/jest/setup.mjs" + ] } } diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/bb-bench/package.local.json index d69051732e20..335876e24139 100644 --- a/yarn-project/bb-bench/package.local.json +++ b/yarn-project/bb-bench/package.local.json @@ -1,7 +1,8 @@ { "scripts": { - "build": "yarn clean && yarn generate && tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", - "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts" + "build": "yarn clean && yarn generate && tsc -b && yarn build:app && cp ../../barretenberg/favicon.ico dest", + "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", + "build:app": "rm -rf dest && webpack" }, "files": ["dest", "src", "artifacts", "!*.test.*"] } diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 7213ab284c07..7ae9ad4ebbf7 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -669,12 +669,12 @@ export async function proveThenVerifyUltraHonk( try { logger(`computing the verification key (could be precomputed)...`); const vk = await backend.getVerificationKey(); - logger(`done. generating proof...`); + logger(`done computing verification key. proving...`); const proof = await backend.generateProof(witness); - logger(`done. verifying...`); + logger(`done proving. verifying...`); const verifier = new BarretenbergVerifier({ threads }); const verified = await verifier.verifyUltraHonkProof(proof, vk); - logger(`verified: ${verified}`); + logger(`done verifying. verified: ${verified}`); await verifier.destroy(); return verified; } finally { diff --git a/yarn-project/bb-bench/tsconfig.json b/yarn-project/bb-bench/tsconfig.json index 098f16a77fdf..1b54a1a43e13 100644 --- a/yarn-project/bb-bench/tsconfig.json +++ b/yarn-project/bb-bench/tsconfig.json @@ -7,29 +7,11 @@ "resolveJsonModule": true }, "references": [ - { - "path": "../circuits.js" - }, { "path": "../foundation" }, - { - "path": "../types" - }, { "path": "../bb-prover" - }, - { - "path": "../kv-store" - }, - { - "path": "../simulator" - }, - { - "path": "../telemetry-client" - }, - { - "path": "../world-state" } ], "include": ["src", "artifacts/*.d.json.ts", "artifacts/**/*.d.json.ts", "circuits/**/*.d.json.ts"] diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 1edda16eeb2f..1dc6bf4dc2e1 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -290,40 +290,21 @@ __metadata: resolution: "@aztec/bb-bench@workspace:bb-bench" dependencies: "@aztec/bb-prover": "workspace:^" - "@aztec/bb.js": ../../ts - "@aztec/circuits.js": "workspace:^" "@aztec/foundation": "workspace:^" - "@aztec/kv-store": "workspace:^" - "@aztec/simulator": "workspace:^" - "@aztec/telemetry-client": "workspace:^" - "@aztec/types": "workspace:^" - "@aztec/world-state": "workspace:^" "@jest/globals": "npm:^29.5.0" - "@msgpack/msgpack": "npm:^3.0.0-beta2" "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" "@noir-lang/noir_js": "file:../../noir/packages/noir_js" - "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi" - "@noir-lang/types": "portal:../../noir/packages/types" - "@playwright/test": "npm:^1.48.2" "@types/jest": "npm:^29.5.0" "@types/node": "npm:^22.8.1" - "@types/pako": "npm:^2.0.3" - chalk: "npm:^5.3.0" - change-case: "npm:^5.4.4" copy-webpack-plugin: "npm:^12.0.2" debug: "npm:^4.3.4" favicon-emoji: "npm:2.3.1" html-webpack-plugin: "npm:^5.6.0" jest: "npm:^29.5.0" - jest-mock-extended: "npm:^4.0.0-beta1" - levelup: "npm:^5.1.1" - memdown: "npm:^6.1.1" - pako: "npm:^2.1.0" resolve-typescript-plugin: "npm:^2.0.1" serve: "npm:^14.2.1" ts-loader: "npm:^9.5.1" ts-node: "npm:^10.9.1" - tslib: "npm:^2.4.0" typescript: "npm:^5.0.4" webpack: "npm:^5.90.3" webpack-cli: "npm:^5.1.4" From 27a9301e6976078c4ac19c5fc2ee4fe4b070c819 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 15 Jan 2025 19:51:47 +0000 Subject: [PATCH 14/43] Generate keys and refactor compilation --- yarn-project/bb-bench/generate_artifacts.sh | 40 +++++++++++++++++++++ yarn-project/bb-bench/package.json | 13 ++++--- 2 files changed, 46 insertions(+), 7 deletions(-) create mode 100755 yarn-project/bb-bench/generate_artifacts.sh diff --git a/yarn-project/bb-bench/generate_artifacts.sh b/yarn-project/bb-bench/generate_artifacts.sh new file mode 100755 index 000000000000..6df8b2a1f50b --- /dev/null +++ b/yarn-project/bb-bench/generate_artifacts.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -eu + +source $(git rev-parse --show-toplevel)/ci3/source_bootstrap + +export BB=${BB:-../../barretenberg/cpp/build/bin/bb} +export NARGO=${NARGO:-$(realpath ../../noir/noir-repo/target/release/nargo)} + +key_dir=artifacts/keys + +function compile { + set -euo pipefail + local dir=$1 + local name=${dir//-/_} + local circuit_path="./circuits/$name" + + echo_stderr "Generating bytecode for circuit: $name..." + cd $circuit_path + $NARGO compile + cd - + local filename="$name.json" + mv $circuit_path/target/$filename artifacts/ + + local json_path="./artifacts/$filename" + local write_vk_cmd="write_vk_ultra_honk -h 1" + local vk_as_fields_cmd="vk_as_fields_ultra_honk" + local key_path="$key_dir/$name.vk.data.json" + echo_stderr "Generating vk for circuit: $name..." + SECONDS=0 + local vk_cmd="jq -r '.bytecode' $json_path | base64 -d | gunzip | $BB $write_vk_cmd -b - -o - --recursive | xxd -p -c 0" + vk=$(dump_fail "$vk_cmd") + local vkf_cmd="echo '$vk' | xxd -r -p | $BB $vk_as_fields_cmd -k - -o -" + # echo_stderrr $vkf_cmd + vk_fields=$(dump_fail "$vkf_cmd") + jq -n --arg vk "$vk" --argjson vkf "$vk_fields" '{keyAsBytes: $vk, keyAsFields: $vkf}' > $key_path + echo "Key output at: $key_path (${SECONDS}s)" +} + +compile $1 \ No newline at end of file diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index d7f235113c61..88813136949f 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -13,16 +13,15 @@ "scripts": { "build": "yarn clean && yarn generate && tsc -b && yarn build:app && cp ../../barretenberg/favicon.ico dest", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", + "generate": "yarn generate:artifacts && yarn generate:code", + "generate:artifacts": "mkdir -p artifacts/keys && ls circuits | xargs -n 1 ./generate_artifacts.sh", + "generate:code": "node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", + "build:app": "rm -rf dest && webpack", + "build:dev": "tsc -b --watch", + "serve-both": "./serve.sh", "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "formatting:fix:types": "NODE_OPTIONS='--max-old-space-size=8096' run -T eslint --fix ./src/types && run -T prettier -w ./src/types", - "generate": "yarn compile-circuits && yarn generate:noir-circuits", - "compile-circuits": "NARGO=../../../../noir/noir-repo/target/release/nargo && mkdir artifacts && cd circuits/first && $NARGO compile && mv ./target/first.json ../../artifacts && cd ../second && $NARGO compile && mv ./target/second.json ../../artifacts", - "generate:noir-circuits": "mkdir -p ./artifacts/keys && node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", - "codegen": "yarn noir-codegen", - "build:dev": "tsc -b --watch", - "build:app": "rm -rf dest && webpack", - "serve-both": "./serve.sh", "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}" }, "dependencies": { From 267930efde390d7727c59b4e0682491352344cec Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 15 Jan 2025 20:23:35 +0000 Subject: [PATCH 15/43] Use vk and adjust logging --- .../ultra_circuit_builder.hpp | 1 - .../ultra_honk/decider_prover.cpp | 1 - .../ultra_honk/decider_proving_key.hpp | 5 ++-- .../barretenberg_wasm_main/index.ts | 1 - yarn-project/bb-bench/package.json | 4 ++-- yarn-project/bb-bench/package.local.json | 4 ++-- yarn-project/bb-bench/src/index.ts | 7 +++--- yarn-project/bb-bench/src/serve.ts | 24 +++++++++++++++---- 8 files changed, 29 insertions(+), 18 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp index c70c8d062e02..09cb5719049f 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp @@ -693,7 +693,6 @@ class UltraCircuitBuilder_ : public CircuitBuilderBasepublic_inputs.size(); info("num_filled_gates: ", num_filled_gates); return std::max(minimum_circuit_size, num_filled_gates) + NUM_RESERVED_GATES; diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp index 531009c69898..5927108a25b1 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp @@ -103,7 +103,6 @@ template HonkProof DeciderProver_::construct_proo PROFILE_THIS_NAME("Decider::construct_proof"); // Run sumcheck subprotocol. - vinfo("executing relation checking rounds..."); execute_relation_check_rounds(); // Fiat-Shamir: rho, y, x, z diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_proving_key.hpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_proving_key.hpp index 8bd0c1cc1b01..6e500bba50e5 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_proving_key.hpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_proving_key.hpp @@ -78,8 +78,9 @@ template class DeciderProvingKey_ { info("Finalized circuit size: ", circuit.num_gates, - "\nLog dyadic circuit size: ", - numeric::get_msb(dyadic_circuit_size)); + ". Log dyadic circuit size: ", + numeric::get_msb(dyadic_circuit_size), + "."); // Complete the public inputs execution trace block from circuit.public_inputs Trace::populate_public_inputs_block(circuit); diff --git a/barretenberg/ts/src/barretenberg_wasm/barretenberg_wasm_main/index.ts b/barretenberg/ts/src/barretenberg_wasm/barretenberg_wasm_main/index.ts index 06a57aa5a80c..387c33b5353d 100644 --- a/barretenberg/ts/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +++ b/barretenberg/ts/src/barretenberg_wasm/barretenberg_wasm_main/index.ts @@ -63,7 +63,6 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase { this.remoteWasms = await Promise.all(this.workers.map(getRemoteBarretenbergWasm)); await Promise.all(this.remoteWasms.map(w => w.initThread(module, this.memory))); } - this.logger('init complete.'); } /** diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index 88813136949f..ea7c53cc654f 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -11,12 +11,12 @@ "./package.local.json" ], "scripts": { - "build": "yarn clean && yarn generate && tsc -b && yarn build:app && cp ../../barretenberg/favicon.ico dest", + "build": "yarn clean && yarn generate && tsc -b && yarn build:app", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", "generate": "yarn generate:artifacts && yarn generate:code", "generate:artifacts": "mkdir -p artifacts/keys && ls circuits | xargs -n 1 ./generate_artifacts.sh", "generate:code": "node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", - "build:app": "rm -rf dest && webpack", + "build:app": "rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", "build:dev": "tsc -b --watch", "serve-both": "./serve.sh", "formatting": "run -T prettier --check ./src && run -T eslint ./src", diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/bb-bench/package.local.json index 335876e24139..eb0bcbe564ba 100644 --- a/yarn-project/bb-bench/package.local.json +++ b/yarn-project/bb-bench/package.local.json @@ -1,8 +1,8 @@ { "scripts": { - "build": "yarn clean && yarn generate && tsc -b && yarn build:app && cp ../../barretenberg/favicon.ico dest", + "build": "yarn clean && yarn generate && tsc -b && yarn build:app", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", - "build:app": "rm -rf dest && webpack" + "build:app": "rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest" }, "files": ["dest", "src", "artifacts", "!*.test.*"] } diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 7ae9ad4ebbf7..066288fd8a57 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -5,7 +5,7 @@ import FirstCircuit from '../artifacts/first.json' assert { type: 'json' }; import SecondCircuit from '../artifacts/second.json' assert { type: 'json' }; import type { FirstInputType, SecondInputType } from './types/index.js'; -const logger = createDebug('aztec:bb-bench'); +export const logger = createDebug('aztec:bb-bench'); /* eslint-disable camelcase */ @@ -662,14 +662,13 @@ export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { export async function proveThenVerifyUltraHonk( bytecode: string, witness: Uint8Array, + vk: Uint8Array, threads?: number, ): Promise { const { UltraHonkBackend, BarretenbergVerifier } = await import('@aztec/bb.js'); const backend = new UltraHonkBackend(bytecode, { threads }); try { - logger(`computing the verification key (could be precomputed)...`); - const vk = await backend.getVerificationKey(); - logger(`done computing verification key. proving...`); + logger(`proving...`); const proof = await backend.generateProof(witness); logger(`done proving. verifying...`); const verifier = new BarretenbergVerifier({ threads }); diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 31358d0030cd..394c052bbde3 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -1,9 +1,9 @@ import createDebug from 'debug'; -import { generateFirstCircuit, generateSecondCircuit, proveThenVerifyUltraHonk } from './index.js'; +import SecondVk from '../artifacts/keys/second.vk.data.json' assert { type: 'json' }; +import { generateSecondCircuit, logger, proveThenVerifyUltraHonk } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome -const logger = createDebug('aztec:bb-bench'); /* eslint-disable no-console */ @@ -78,7 +78,17 @@ function setupConsoleOutput() { }; } -(window as any).proveThenVerifyUltraHonk = proveThenVerifyUltraHonk; +function hexStringToUint8Array(hex: string): Uint8Array { + const length = hex.length / 2; + const uint8Array = new Uint8Array(length); + + for (let i = 0; i < length; i++) { + const byte = hex.substr(i * 2, 2); + uint8Array[i] = parseInt(byte, 16); + } + + return uint8Array; +} document.addEventListener('DOMContentLoaded', function () { setupConsoleOutput(); // Initialize console output capture @@ -88,8 +98,12 @@ document.addEventListener('DOMContentLoaded', function () { button.addEventListener('click', async () => { logger(`generating circuit and witness...`); const [bytecodes, witnessStack] = await generateSecondCircuit(); - logger(`done. proving and verifying...`); - const verified = await proveThenVerifyUltraHonk(bytecodes, witnessStack); + logger(`done generating circuit and witness... proving then verifying...`); + const verified = await proveThenVerifyUltraHonk( + bytecodes, + witnessStack, + hexStringToUint8Array(SecondVk.keyAsBytes), + ); logger(`verified? ${verified}`); }); document.body.appendChild(button); From 7fa849bd2fa057b662318a612a43923ec12c73fc Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 15 Jan 2025 23:01:16 +0000 Subject: [PATCH 16/43] Step: generate both but don't connect --- yarn-project/bb-bench/src/index.ts | 14 ++++++++++++++ yarn-project/bb-bench/src/serve.ts | 18 +++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 066288fd8a57..97a59600fd99 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -1,3 +1,5 @@ +import { ProofData } from '@aztec/bb.js'; + import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; import createDebug from 'debug'; @@ -659,6 +661,18 @@ export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { return [bytecode, witness]; } +export async function proveUltraHonk(bytecode: string, witness: Uint8Array, threads?: number): Promise { + const { UltraHonkBackend } = await import('@aztec/bb.js'); + const backend = new UltraHonkBackend(bytecode, { threads }); + try { + logger(`proving...`); + const proof = await backend.generateProof(witness); + return proof; + } finally { + await backend.destroy(); + } +} + export async function proveThenVerifyUltraHonk( bytecode: string, witness: Uint8Array, diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 394c052bbde3..28e06e067a04 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -1,7 +1,13 @@ import createDebug from 'debug'; import SecondVk from '../artifacts/keys/second.vk.data.json' assert { type: 'json' }; -import { generateSecondCircuit, logger, proveThenVerifyUltraHonk } from './index.js'; +import { + generateFirstCircuit, + generateSecondCircuit, + logger, + proveThenVerifyUltraHonk, + proveUltraHonk, +} from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome @@ -97,13 +103,11 @@ document.addEventListener('DOMContentLoaded', function () { button.innerText = 'Run Test'; button.addEventListener('click', async () => { logger(`generating circuit and witness...`); - const [bytecodes, witnessStack] = await generateSecondCircuit(); + const [bytecode1, witness1] = await generateFirstCircuit(); + const _ = await proveUltraHonk(bytecode1, witness1); + const [bytecode2, witness2] = await generateSecondCircuit(); logger(`done generating circuit and witness... proving then verifying...`); - const verified = await proveThenVerifyUltraHonk( - bytecodes, - witnessStack, - hexStringToUint8Array(SecondVk.keyAsBytes), - ); + const verified = await proveThenVerifyUltraHonk(bytecode2, witness2, hexStringToUint8Array(SecondVk.keyAsBytes)); logger(`verified? ${verified}`); }); document.body.appendChild(button); From 20b7590e637b2d2082c2a55b6c6e29c7d2295209 Mon Sep 17 00:00:00 2001 From: Cody Date: Thu, 16 Jan 2025 21:11:43 +0000 Subject: [PATCH 17/43] proof doesn't verify --- .../dsl/acir_format/acir_format.cpp | 3 + .../barretenberg/dsl/acir_proofs/c_bind.cpp | 6 +- .../honk_verifier/oink_recursive_verifier.cpp | 3 + .../circuit_builder_base_impl.hpp | 1 + barretenberg/ts/src/barretenberg/backend.ts | 33 +- yarn-project/bb-bench/generate_artifacts.sh | 3 - yarn-project/bb-bench/package.json | 6 +- yarn-project/bb-bench/package.local.json | 4 +- yarn-project/bb-bench/src/index.ts | 638 +----------------- yarn-project/bb-bench/src/serve.ts | 9 +- 10 files changed, 66 insertions(+), 640 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index 1789562498d8..e1d2e3e77af9 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -264,6 +264,9 @@ void build_constraints(Builder& builder, AcirProgram& program, const ProgramMeta #endif // If the circuit has either honk or avm recursion constraints, add the aggregation object. Otherwise, add a // default one if the circuit is recursive and honk_recursion is true. + info("metadata.honk_recursion != 0: ", metadata.honk_recursion != 0); + info("builder.is_recursive_circuit: ", builder.is_recursive_circuit); + if (!constraint_system.honk_recursion_constraints.empty() || !constraint_system.avm_recursion_constraints.empty()) { ASSERT(metadata.honk_recursion != 0); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp index 1fe2f1b74101..3b94bf147892 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp @@ -425,9 +425,13 @@ WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t c WASM_EXPORT void acir_proof_no_pis_as_fields_ultra_honk(uint8_t const* proof_buf, fr::vec_out_buf out) { auto proof = from_buffer>(from_buffer>(proof_buf)); + info("starting proof size: ", proof.size()); const auto num_public_inputs = static_cast(proof[1] - 16); - const auto offset = static_cast(proof[2]); + info("num_public_inputs: ", num_public_inputs); + const auto offset = static_cast(proof[2]) + bb::HONK_PROOF_PUBLIC_INPUT_OFFSET; + info("offset: ", offset); proof.erase(proof.begin() + static_cast(offset), proof.begin() + static_cast(offset + num_public_inputs)); + info("ending proof size: ", proof.size()); *out = to_heap_buffer(proof); } diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp index d9974b8f056d..984e1ee21931 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp @@ -51,6 +51,9 @@ template void OinkRecursiveVerifier_::verify() throw_or_abort("OinkRecursiveVerifier::verify: proof circuit size does not match verification key"); } if (static_cast(public_input_size.get_value()) != verification_key->verification_key->num_public_inputs) { + info("public_input_size.get_value(): ", public_input_size.get_value()); + info("verification_key->verification_key->num_public_inputs: ", + verification_key->verification_key->num_public_inputs); throw_or_abort("OinkRecursiveVerifier::verify: proof public input size does not match verification key"); } if (static_cast(pub_inputs_offset.get_value()) != verification_key->verification_key->pub_inputs_offset) { diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp index e3e4bbcfe9d6..c8d29b09606d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp @@ -239,6 +239,7 @@ template void CircuitBuilderBase::add_pairing_point_accumulator( const PairingPointAccumulatorIndices& pairing_point_accum_witness_indices) { + info("calling add_pairing_point_accumulator"); if (contains_pairing_point_accumulator) { failure("added pairing point accumulator when one already exists"); ASSERT(0); diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index ac72e56d9be0..a9999ee40a0b 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -207,8 +207,10 @@ export class UltraHonkBackend { ); const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); + console.log(`size of proofWithPublicInputs: ${proofWithPublicInputs.length}`); const numPublicInputs = Number(proofAsStrings[1]); + console.log(`numPublicInputs in generateProof: ${numPublicInputs}`); // Account for the serialized buffer size at start const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize; @@ -225,6 +227,8 @@ export class UltraHonkBackend { publicInputsOffset + publicInputsSplitIndex, ); const publicInputs = deflattenFields(publicInputsConcatenated); + console.log(`size of publicInputs in generateProof: ${publicInputs.length}`); + console.log(`size of proof: ${proof.length}`); return { proof, publicInputs }; } @@ -259,35 +263,14 @@ export class UltraHonkBackend { } // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself - async generateRecursiveProofArtifacts( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _proof: Uint8Array, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _numOfPublicInputs: number, - ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> { + async generateRecursiveProofArtifacts(proof: Uint8Array): Promise<{ proofAsFields: string[] }> { await this.instantiate(); - // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation. - // There is still a proofAsFields method but we could consider getting rid of it as the proof itself - // is a list of field elements. - // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead - // inserted at an offset. - // const proof = reconstructProofWithPublicInputs(proofData); - const proof = await this.api.acirProofNoPIsAsFieldsUltraHonk(_proof); - // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs); - - // TODO: perhaps we should put this in the init function. Need to benchmark - // TODO how long it takes. - const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive); - const vk = await this.api.acirVkAsFieldsUltraHonk(vkBuf); + // const proofAsFrs = await this.api.acirProofAsFieldsUltraHonk(proof); + const proofAsFrs = await this.api.acirProofNoPIsAsFieldsUltraHonk(proof); return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: proof.map(proof => proof.toString()), - vkAsFields: vk.map(vk => vk.toString()), - // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts - // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit - // they expect - vkHash: '0x404', + proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), }; } diff --git a/yarn-project/bb-bench/generate_artifacts.sh b/yarn-project/bb-bench/generate_artifacts.sh index 6df8b2a1f50b..1d32096f3b4e 100755 --- a/yarn-project/bb-bench/generate_artifacts.sh +++ b/yarn-project/bb-bench/generate_artifacts.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash - set -eu - source $(git rev-parse --show-toplevel)/ci3/source_bootstrap export BB=${BB:-../../barretenberg/cpp/build/bin/bb} @@ -31,7 +29,6 @@ function compile { local vk_cmd="jq -r '.bytecode' $json_path | base64 -d | gunzip | $BB $write_vk_cmd -b - -o - --recursive | xxd -p -c 0" vk=$(dump_fail "$vk_cmd") local vkf_cmd="echo '$vk' | xxd -r -p | $BB $vk_as_fields_cmd -k - -o -" - # echo_stderrr $vkf_cmd vk_fields=$(dump_fail "$vkf_cmd") jq -n --arg vk "$vk" --argjson vkf "$vk_fields" '{keyAsBytes: $vk, keyAsFields: $vkf}' > $key_path echo "Key output at: $key_path (${SECONDS}s)" diff --git a/yarn-project/bb-bench/package.json b/yarn-project/bb-bench/package.json index ea7c53cc654f..5bb96eecfcf6 100644 --- a/yarn-project/bb-bench/package.json +++ b/yarn-project/bb-bench/package.json @@ -11,14 +11,14 @@ "./package.local.json" ], "scripts": { - "build": "yarn clean && yarn generate && tsc -b && yarn build:app", + "build": "yarn clean && yarn generate && yarn build:app", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", "generate": "yarn generate:artifacts && yarn generate:code", "generate:artifacts": "mkdir -p artifacts/keys && ls circuits | xargs -n 1 ./generate_artifacts.sh", "generate:code": "node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", - "build:app": "rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", + "build:app": "tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", "build:dev": "tsc -b --watch", - "serve-both": "./serve.sh", + "serve:app": "./serve.sh", "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src", "formatting:fix:types": "NODE_OPTIONS='--max-old-space-size=8096' run -T eslint --fix ./src/types && run -T prettier -w ./src/types", diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/bb-bench/package.local.json index eb0bcbe564ba..599c72fd4d9b 100644 --- a/yarn-project/bb-bench/package.local.json +++ b/yarn-project/bb-bench/package.local.json @@ -1,8 +1,8 @@ { "scripts": { - "build": "yarn clean && yarn generate && tsc -b && yarn build:app", + "build": "yarn clean && yarn generate && yarn build:app", "clean": "rm -rf ./dest .tsbuildinfo src/types artifacts", - "build:app": "rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest" + "build:app": "tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest" }, "files": ["dest", "src", "artifacts", "!*.test.*"] } diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 97a59600fd99..3b56fb86bcb6 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -1,11 +1,9 @@ -import { ProofData } from '@aztec/bb.js'; - import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; import createDebug from 'debug'; import FirstCircuit from '../artifacts/first.json' assert { type: 'json' }; import SecondCircuit from '../artifacts/second.json' assert { type: 'json' }; -import type { FirstInputType, SecondInputType } from './types/index.js'; +import type { FirstInputType, FixedLengthArray, SecondInputType } from './types/index.js'; export const logger = createDebug('aztec:bb-bench'); @@ -43,7 +41,6 @@ export async function witnessGenSecondCircuit(args: SecondInputType): Promise { - // Witness gen app and kernels const witnessGenResult = await witnessGenFirstCircuit({ x: '0x1', y: '0x2', @@ -56,602 +53,16 @@ export async function generateFirstCircuit(): Promise<[string, Uint8Array]> { return [bytecode, witness]; } -export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { - // Witness gen app and kernels +export async function generateSecondCircuit( + proverOutput: ProverOutputForRecursion, + previousVk: string[], +): Promise<[string, Uint8Array]> { const witnessGenResult = await witnessGenSecondCircuit({ - public_inputs: ['0x2'], + public_inputs: proverOutput.public_inputs, + // public_inputs: proverOutput.public_inputs.slice(0, -16) as FixedLengthArray, key_hash: '0x0', - proof: [ - '0x0000000000000000000000000000000000000000000000000000000000000040', - '0x0000000000000000000000000000000000000000000000000000000000000011', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf', - '0x00000000000000000000000000000000000000000000000b75c020998797da78', - '0x0000000000000000000000000000000000000000000000005a107acb64952eca', - '0x000000000000000000000000000000000000000000000000000031e97a575e9d', - '0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4', - '0x00000000000000000000000000000000000000000000000c410db10a01750aeb', - '0x00000000000000000000000000000000000000000000000d722669117f9758a4', - '0x000000000000000000000000000000000000000000000000000178cbf4206471', - '0x000000000000000000000000000000000000000000000000e91b8a11e7842c38', - '0x000000000000000000000000000000000000000000000007fd51009034b3357f', - '0x000000000000000000000000000000000000000000000009889939f81e9c7402', - '0x0000000000000000000000000000000000000000000000000000f94656a2ca48', - '0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f', - '0x0000000000000000000000000000000000000000000000093fe27776f50224bd', - '0x000000000000000000000000000000000000000000000004a0c80c0da527a081', - '0x0000000000000000000000000000000000000000000000000001b52c2020d746', - '0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9', - '0x00000000000000000000000000000000002486186d84437da79bbfff6970470f', - '0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00', - '0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e', - '0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8', - '0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99', - '0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a', - '0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612', - '0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739', - '0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee', - '0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d', - '0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a', - '0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8', - '0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86', - '0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f', - '0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46', - '0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8', - '0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86', - '0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f', - '0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46', - '0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6', - '0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a', - '0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2', - '0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa', - '0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992', - '0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f', - '0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c', - '0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc', - '0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c', - '0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436', - '0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c', - '0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489', - '0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7', - '0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a', - '0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0', - '0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96', - '0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260', - '0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20', - '0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9', - '0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545', - '0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b', - '0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05', - '0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679', - '0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd', - '0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c', - '0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952', - '0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f', - '0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073', - '0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683', - '0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc', - '0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e', - '0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f', - '0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473', - '0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9', - '0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5', - '0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139', - '0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a', - '0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22', - '0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298', - '0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84', - '0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c', - '0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b', - '0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6', - '0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012', - '0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8', - '0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c', - '0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f', - '0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f', - '0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926', - '0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761', - '0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8', - '0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a', - '0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47', - '0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9', - '0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9', - '0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d', - '0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14', - '0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d', - '0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09', - '0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3', - '0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c', - '0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72', - '0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4', - '0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45', - '0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b', - '0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56', - '0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382', - '0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b', - '0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44', - '0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422', - '0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4', - '0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555', - '0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac', - '0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7', - '0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6', - '0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d', - '0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a', - '0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac', - '0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f', - '0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7', - '0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac', - '0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b', - '0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e', - '0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031', - '0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261', - '0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33', - '0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc', - '0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d', - '0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c', - '0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551', - '0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb', - '0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834', - '0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead', - '0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead', - '0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7', - '0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1', - '0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa', - '0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b', - '0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3', - '0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05', - '0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda', - '0x000000000000000000000000000000b25425c2869931def122b407e6d248b112', - '0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf', - '0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a', - '0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1', - '0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048', - '0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5', - '0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852', - '0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49', - '0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c', - '0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7', - '0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee', - '0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d', - '0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2', - '0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e', - '0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e', - '0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6', - '0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b', - '0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f', - '0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d', - '0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb', - '0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5', - '0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191', - '0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9', - '0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f', - '0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb', - '0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7', - '0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f', - '0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859', - '0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291', - '0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2', - ], - verification_key: [ - '0x0000000000000000000000000000000000000000000000000000000000000040', - '0x0000000000000000000000000000000000000000000000000000000000000011', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000003', - '0x0000000000000000000000000000000000000000000000000000000000000004', - '0x0000000000000000000000000000000000000000000000000000000000000005', - '0x0000000000000000000000000000000000000000000000000000000000000006', - '0x0000000000000000000000000000000000000000000000000000000000000007', - '0x0000000000000000000000000000000000000000000000000000000000000008', - '0x0000000000000000000000000000000000000000000000000000000000000009', - '0x000000000000000000000000000000000000000000000000000000000000000a', - '0x000000000000000000000000000000000000000000000000000000000000000b', - '0x000000000000000000000000000000000000000000000000000000000000000c', - '0x000000000000000000000000000000000000000000000000000000000000000d', - '0x000000000000000000000000000000000000000000000000000000000000000e', - '0x000000000000000000000000000000000000000000000000000000000000000f', - '0x0000000000000000000000000000000000000000000000000000000000000010', - '0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483', - '0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247', - '0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130', - '0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a', - '0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d', - '0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c', - '0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525', - '0x00000000000000000000000000000000000956f29100ad56f516e047143f8088', - '0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6', - '0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb', - '0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c', - '0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c', - '0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d', - '0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c', - '0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec', - '0x00000000000000000000000000000000002c004dc89326c7a22d126130396137', - '0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b', - '0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c', - '0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48', - '0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1', - '0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9', - '0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee', - '0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77', - '0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668', - '0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9', - '0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8', - '0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851', - '0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f', - '0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e', - '0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b', - '0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58', - '0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c', - '0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88', - '0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e', - '0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e', - '0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5', - '0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c', - '0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d', - '0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98', - '0x000000000000000000000000000000000006e0242610dd531470885e9c150693', - '0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d', - '0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841', - '0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06', - '0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20', - '0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd', - '0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83', - '0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59', - '0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f', - '0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a', - '0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606', - '0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba', - '0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b', - '0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b', - '0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013', - '0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36', - '0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2', - '0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f', - '0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e', - '0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b', - '0x00000000000000000000000000000000000b34126647568e29587731e7318989', - '0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915', - '0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059', - '0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b', - '0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae', - '0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba', - '0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4', - '0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1', - '0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd', - '0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640', - '0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77', - '0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93', - '0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28', - '0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70', - '0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb', - '0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a', - '0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957', - '0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2', - '0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2', - '0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf', - '0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d', - '0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597', - '0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee', - '0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7', - '0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb', - '0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468', - '0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89', - '0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf', - '0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6', - '0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2', - '0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312', - '0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b', - '0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af', - '0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173', - '0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4', - '0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8', - '0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee', - '0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628', - '0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72', - '0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39', - '0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d', - '0x0000000000000000000000000000000000000000000000000000000000000001', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002', - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444', - '0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25', - '0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb', - '0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a', - ], + proof: proverOutput.proof, + verification_key: previousVk as FixedLengthArray, }); logger('generated second circuit'); @@ -661,13 +72,34 @@ export async function generateSecondCircuit(): Promise<[string, Uint8Array]> { return [bytecode, witness]; } -export async function proveUltraHonk(bytecode: string, witness: Uint8Array, threads?: number): Promise { +export type ProverOutputForRecursion = { + proof: FixedLengthArray; + public_inputs: FixedLengthArray; + // public_inputs: FixedLengthArray; +}; + +export async function proveUltraHonk( + bytecode: string, + witness: Uint8Array, + threads?: number, +): Promise { const { UltraHonkBackend } = await import('@aztec/bb.js'); - const backend = new UltraHonkBackend(bytecode, { threads }); + const backend = new UltraHonkBackend(bytecode, { threads: threads }, { recursive: true }); try { logger(`proving...`); - const proof = await backend.generateProof(witness); - return proof; + const proverOutput = await backend.generateProof(witness); + logger(`done proving. generating recursive proof artifacts...`); + const artifacts = await backend.generateRecursiveProofArtifacts(proverOutput.proof); + logger(`done generating recursive proof artifacts.`); + logger(`artifacts.proofAsFields[0]: ${artifacts.proofAsFields[0]}`); + logger(`artifacts.proofAsFields[1]: ${artifacts.proofAsFields[1]}`); + logger(`artifacts.proofAsFields[2]: ${artifacts.proofAsFields[2]}`); + logger(`artifacts.proofAsFields[3]: ${artifacts.proofAsFields[3]}`); + return { + proof: artifacts.proofAsFields as FixedLengthArray, + public_inputs: proverOutput.publicInputs.slice(0, -16) as FixedLengthArray, + // public_inputs: proverOutput.publicInputs as FixedLengthArray, + }; } finally { await backend.destroy(); } @@ -680,7 +112,7 @@ export async function proveThenVerifyUltraHonk( threads?: number, ): Promise { const { UltraHonkBackend, BarretenbergVerifier } = await import('@aztec/bb.js'); - const backend = new UltraHonkBackend(bytecode, { threads }); + const backend = new UltraHonkBackend(bytecode, { threads: threads }); try { logger(`proving...`); const proof = await backend.generateProof(witness); diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 28e06e067a04..20057f7d9c28 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -1,5 +1,6 @@ import createDebug from 'debug'; +import FirstVk from '../artifacts/keys/first.vk.data.json' assert { type: 'json' }; import SecondVk from '../artifacts/keys/second.vk.data.json' assert { type: 'json' }; import { generateFirstCircuit, @@ -104,9 +105,11 @@ document.addEventListener('DOMContentLoaded', function () { button.addEventListener('click', async () => { logger(`generating circuit and witness...`); const [bytecode1, witness1] = await generateFirstCircuit(); - const _ = await proveUltraHonk(bytecode1, witness1); - const [bytecode2, witness2] = await generateSecondCircuit(); - logger(`done generating circuit and witness... proving then verifying...`); + logger(`done generating circuit and witness. proving...`); + const proverOutput = await proveUltraHonk(bytecode1, witness1); + logger(`done proving. generating second circuit and witness...`); + const [bytecode2, witness2] = await generateSecondCircuit(proverOutput, FirstVk.keyAsFields); + logger(`done. generating circuit and witness. proving then verifying...`); const verified = await proveThenVerifyUltraHonk(bytecode2, witness2, hexStringToUint8Array(SecondVk.keyAsBytes)); logger(`verified? ${verified}`); }); From 1d552d2d215247b441767f90aba4dfb5a1c7f389 Mon Sep 17 00:00:00 2001 From: Cody Date: Thu, 16 Jan 2025 21:51:00 +0000 Subject: [PATCH 18/43] Proof s fields looks right now but doesn't verify --- barretenberg/ts/src/barretenberg/backend.ts | 2 +- yarn-project/bb-bench/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index a9999ee40a0b..921994646d3b 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -209,7 +209,7 @@ export class UltraHonkBackend { const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); console.log(`size of proofWithPublicInputs: ${proofWithPublicInputs.length}`); - const numPublicInputs = Number(proofAsStrings[1]); + const numPublicInputs = Number(proofAsStrings[1]) - 16; console.log(`numPublicInputs in generateProof: ${numPublicInputs}`); // Account for the serialized buffer size at start diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 3b56fb86bcb6..12bb2a4035cf 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -97,7 +97,7 @@ export async function proveUltraHonk( logger(`artifacts.proofAsFields[3]: ${artifacts.proofAsFields[3]}`); return { proof: artifacts.proofAsFields as FixedLengthArray, - public_inputs: proverOutput.publicInputs.slice(0, -16) as FixedLengthArray, + public_inputs: proverOutput.publicInputs as FixedLengthArray, // public_inputs: proverOutput.publicInputs as FixedLengthArray, }; } finally { From 8c507262897a3b2091efa7805823ac20df802e04 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 04:43:58 +0000 Subject: [PATCH 19/43] Passing proof --- barretenberg/ts/src/barretenberg/backend.ts | 5 ++--- yarn-project/bb-bench/src/index.ts | 4 ---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index 921994646d3b..47b974a7a20a 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -265,12 +265,11 @@ export class UltraHonkBackend { // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself async generateRecursiveProofArtifacts(proof: Uint8Array): Promise<{ proofAsFields: string[] }> { await this.instantiate(); - // const proofAsFrs = await this.api.acirProofAsFieldsUltraHonk(proof); - const proofAsFrs = await this.api.acirProofNoPIsAsFieldsUltraHonk(proof); + const proofAsFrs = await this.api.acirProofAsFieldsUltraHonk(proof); return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), + proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()).slice(0,-1) // WORKTODO, why this? }; } diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 12bb2a4035cf..aaf22d3b4039 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -91,10 +91,6 @@ export async function proveUltraHonk( logger(`done proving. generating recursive proof artifacts...`); const artifacts = await backend.generateRecursiveProofArtifacts(proverOutput.proof); logger(`done generating recursive proof artifacts.`); - logger(`artifacts.proofAsFields[0]: ${artifacts.proofAsFields[0]}`); - logger(`artifacts.proofAsFields[1]: ${artifacts.proofAsFields[1]}`); - logger(`artifacts.proofAsFields[2]: ${artifacts.proofAsFields[2]}`); - logger(`artifacts.proofAsFields[3]: ${artifacts.proofAsFields[3]}`); return { proof: artifacts.proofAsFields as FixedLengthArray, public_inputs: proverOutput.publicInputs as FixedLengthArray, From d9948e467b65327f368bc308465fd5f94673d6bf Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 04:57:19 +0000 Subject: [PATCH 20/43] Pare down logging --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.cpp | 3 --- .../stdlib_circuit_builders/circuit_builder_base_impl.hpp | 1 - .../stdlib_circuit_builders/ultra_circuit_builder.hpp | 1 - barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp | 2 -- barretenberg/ts/src/barretenberg/backend.ts | 4 ---- 5 files changed, 11 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index e1d2e3e77af9..1789562498d8 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -264,9 +264,6 @@ void build_constraints(Builder& builder, AcirProgram& program, const ProgramMeta #endif // If the circuit has either honk or avm recursion constraints, add the aggregation object. Otherwise, add a // default one if the circuit is recursive and honk_recursion is true. - info("metadata.honk_recursion != 0: ", metadata.honk_recursion != 0); - info("builder.is_recursive_circuit: ", builder.is_recursive_circuit); - if (!constraint_system.honk_recursion_constraints.empty() || !constraint_system.avm_recursion_constraints.empty()) { ASSERT(metadata.honk_recursion != 0); diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp index c8d29b09606d..e3e4bbcfe9d6 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/circuit_builder_base_impl.hpp @@ -239,7 +239,6 @@ template void CircuitBuilderBase::add_pairing_point_accumulator( const PairingPointAccumulatorIndices& pairing_point_accum_witness_indices) { - info("calling add_pairing_point_accumulator"); if (contains_pairing_point_accumulator) { failure("added pairing point accumulator when one already exists"); ASSERT(0); diff --git a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp index 09cb5719049f..908d5d6fd16e 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp +++ b/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp @@ -694,7 +694,6 @@ class UltraCircuitBuilder_ : public CircuitBuilderBasepublic_inputs.size(); - info("num_filled_gates: ", num_filled_gates); return std::max(minimum_circuit_size, num_filled_gates) + NUM_RESERVED_GATES; } diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp index 3597b3797a7a..18f21b50c60c 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/ultra_prover.cpp @@ -64,14 +64,12 @@ template void UltraProver_::generate_gate_challen template HonkProof UltraProver_::construct_proof() { OinkProver oink_prover(proving_key, transcript); - vinfo("created oink prover"); oink_prover.prove(); vinfo("created oink proof"); generate_gate_challenges(); DeciderProver_ decider_prover(proving_key, transcript); - vinfo("created decider prover"); decider_prover.construct_proof(); return export_proof(); } diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index 47b974a7a20a..71d6ef172c90 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -207,10 +207,8 @@ export class UltraHonkBackend { ); const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); - console.log(`size of proofWithPublicInputs: ${proofWithPublicInputs.length}`); const numPublicInputs = Number(proofAsStrings[1]) - 16; - console.log(`numPublicInputs in generateProof: ${numPublicInputs}`); // Account for the serialized buffer size at start const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize; @@ -227,8 +225,6 @@ export class UltraHonkBackend { publicInputsOffset + publicInputsSplitIndex, ); const publicInputs = deflattenFields(publicInputsConcatenated); - console.log(`size of publicInputs in generateProof: ${publicInputs.length}`); - console.log(`size of proof: ${proof.length}`); return { proof, publicInputs }; } From 4c77ef3468f0e7486765d1514cf521dad03decb1 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 05:38:18 +0000 Subject: [PATCH 21/43] All logs output --- .../ultra_honk/decider_prover.cpp | 1 - yarn-project/bb-bench/src/index.ts | 2 +- yarn-project/bb-bench/src/serve.ts | 103 ++++++++++++------ 3 files changed, 69 insertions(+), 37 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp index 5927108a25b1..27eb56068c93 100644 --- a/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp +++ b/barretenberg/cpp/src/barretenberg/ultra_honk/decider_prover.cpp @@ -107,7 +107,6 @@ template HonkProof DeciderProver_::construct_proo // Fiat-Shamir: rho, y, x, z // Execute Shplemini PCS - vinfo("executing pcs opening rounds..."); execute_pcs_rounds(); return export_proof(); diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index aaf22d3b4039..93f5e6155f28 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -115,7 +115,7 @@ export async function proveThenVerifyUltraHonk( logger(`done proving. verifying...`); const verifier = new BarretenbergVerifier({ threads }); const verified = await verifier.verifyUltraHonkProof(proof, vk); - logger(`done verifying. verified: ${verified}`); + logger(`done verifying.`); await verifier.destroy(); return verified; } finally { diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 20057f7d9c28..165b4a5f10a4 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -23,17 +23,6 @@ function setupConsoleOutput() { const copyButton = document.createElement('button'); copyButton.innerText = 'Copy Logs to Clipboard'; copyButton.style.marginBottom = '10px'; - copyButton.addEventListener('click', () => { - const logContent = logContainer.textContent || ''; // Get text content of log container - navigator.clipboard - .writeText(logContent) - .then(() => { - alert('Logs copied to clipboard!'); - }) - .catch(err => { - console.error('Failed to copy logs:', err); - }); - }); container.appendChild(copyButton); const logContainer = document.createElement('pre'); @@ -44,43 +33,87 @@ function setupConsoleOutput() { logContainer.style.overflowY = 'auto'; container.appendChild(logContainer); - // Helper to append messages to logContainer - function addLogMessage(message: string) { - logContainer.textContent += message + '\n'; + /** + * Appends a message to the log container and auto-scrolls to the bottom. + * @param message - The log message to append. + */ + function addLogMessage(message: string): void { + logContainer.textContent += `${message}\n`; logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom } - // Override console methods to output clean logs - const originalLog = console.log; - const originalDebug = console.debug; + // Add event listener to the copy button + copyButton.addEventListener('click', () => { + const logContent: string = logContainer.textContent || ''; // Get text content of log container + navigator.clipboard + .writeText(logContent) + .then(() => { + alert('Logs copied to clipboard!'); + }) + .catch((err: unknown) => { + console.error('Failed to copy logs:', err); + }); + }); - console.log = (...args: any[]) => { - const message = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : arg, - ) - .join(' '); - originalLog.apply(console, args); // Keep original behavior - addLogMessage(message); - }; + // List of console methods to override + const methodsToOverride = ['log', 'debug', 'info', 'warn', 'error'] as const; + type ConsoleMethod = (typeof methodsToOverride)[number]; + + // Override each console method + methodsToOverride.forEach((method: ConsoleMethod) => { + // Preserve the original console method + const originalMethod = console[method].bind(console); + + // Override the console method with type assertions + console[method] = ((...args: any[]) => { + // Process each argument to create a clean message + const message: string = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : JSON.stringify(arg), + ) + .join(' '); + + // Call the original console method with the original arguments + originalMethod(...args); + + // Append the formatted message to the log container with a prefix indicating the method + addLogMessage(message); + }) as Console[ConsoleMethod]; + }); + + // Override the createDebug log function to capture its logs + overrideCreateDebugLog(addLogMessage); +} + +/** + * Overrides the createDebug library's log function to capture debug logs. + * @param addLogMessage - Function to append messages to the log container. + */ +function overrideCreateDebugLog(addLogMessage: (message: string) => void): void { + // Preserve the original createDebug log function + const originalDebugLog = createDebug.log.bind(createDebug); + + // Override the createDebug log function + createDebug.log = (...args: any[]) => { + // Call the original createDebug log function + originalDebugLog(...args); - console.debug = (...args: any[]) => { - const message = args + // Process the arguments to form a message + const message: string = args .map(arg => typeof arg === 'string' ? arg .replace(/%c/g, '') .replace(/color:.*?(;|$)/g, '') .trim() - : arg, + : JSON.stringify(arg), ) .join(' '); - originalDebug.apply(console, args); // Keep original behavior addLogMessage(message); }; } From a4888498474c8a6fc99552e48fe0dc96fa107077 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 05:58:40 +0000 Subject: [PATCH 22/43] Colors but inverted --- yarn-project/bb-bench/src/serve.ts | 130 ++++++++++++++++++++--------- 1 file changed, 90 insertions(+), 40 deletions(-) diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 165b4a5f10a4..cfc9d4057416 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -14,37 +14,94 @@ createDebug.enable('*'); // needed for logging in Firefox but not Chrome /* eslint-disable no-console */ -// Function to set up the output element and redirect all console output -function setupConsoleOutput() { - const container = document.createElement('div'); +/** + * Parses console log arguments with %c and corresponding styles. + * @param args - The arguments passed to console methods. + * @returns An HTML string with styles applied. + */ +function parseConsoleArgs(args: any[]): string { + if (typeof args[0] !== 'string') { + // If the first argument is not a string, stringify all arguments + return args.map(arg => escapeHTML(typeof arg === 'string' ? arg : JSON.stringify(arg))).join(' '); + } + + const format = args[0]; + const styleArgs = args.slice(1); + + const parts = format.split('%c'); + const htmlParts: string[] = []; + + for (let i = 0; i < parts.length; i++) { + const text = escapeHTML(parts[i]); + const style = styleArgs[i] || ''; + + if (i === 0) { + // The first part may not have a style + htmlParts.push(text); + } else { + htmlParts.push(`${text}`); + } + } + + return htmlParts.join(''); +} + +/** + * Escapes HTML special characters to prevent XSS. + * @param str - The string to escape. + * @returns The escaped string. + */ +function escapeHTML(str: string): string { + return str.replace(/[&<>"']/g, function (match) { + const escape: { [key: string]: string } = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + }; + return escape[match]; + }); +} + +/** + * Sets up the output element and redirects all console output. + */ +function setupConsoleOutput(): void { + const container: HTMLDivElement = document.createElement('div'); container.style.marginBottom = '10px'; document.body.appendChild(container); - const copyButton = document.createElement('button'); + const copyButton: HTMLButtonElement = document.createElement('button'); copyButton.innerText = 'Copy Logs to Clipboard'; copyButton.style.marginBottom = '10px'; container.appendChild(copyButton); - const logContainer = document.createElement('pre'); + const logContainer: HTMLDivElement = document.createElement('div'); logContainer.id = 'logOutput'; logContainer.style.border = '1px solid #ccc'; logContainer.style.padding = '10px'; logContainer.style.maxHeight = '400px'; logContainer.style.overflowY = 'auto'; + logContainer.style.backgroundColor = '#1e1e1e'; // Dark background for better contrast + logContainer.style.color = '#ffffff'; // Default text color + logContainer.style.fontFamily = 'monospace'; // Monospaced font for better readability container.appendChild(logContainer); /** - * Appends a message to the log container and auto-scrolls to the bottom. + * Appends a message to the log container with proper HTML formatting. * @param message - The log message to append. */ function addLogMessage(message: string): void { - logContainer.textContent += `${message}\n`; + const messageElement: HTMLDivElement = document.createElement('div'); + messageElement.innerHTML = message; + logContainer.appendChild(messageElement); logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom } // Add event listener to the copy button copyButton.addEventListener('click', () => { - const logContent: string = logContainer.textContent || ''; // Get text content of log container + const logContent: string = logContainer.innerText || ''; // Get text content of log container navigator.clipboard .writeText(logContent) .then(() => { @@ -64,25 +121,16 @@ function setupConsoleOutput() { // Preserve the original console method const originalMethod = console[method].bind(console); - // Override the console method with type assertions + // Override the console method console[method] = ((...args: any[]) => { - // Process each argument to create a clean message - const message: string = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : JSON.stringify(arg), - ) - .join(' '); + // Parse the console arguments to HTML + const htmlMessage = parseConsoleArgs(args); // Call the original console method with the original arguments originalMethod(...args); - // Append the formatted message to the log container with a prefix indicating the method - addLogMessage(message); + // Append the formatted message to the log container + addLogMessage(htmlMessage); }) as Console[ConsoleMethod]; }); @@ -103,23 +151,21 @@ function overrideCreateDebugLog(addLogMessage: (message: string) => void): void // Call the original createDebug log function originalDebugLog(...args); - // Process the arguments to form a message - const message: string = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : JSON.stringify(arg), - ) - .join(' '); - addLogMessage(message); + // Parse the console arguments to HTML + const htmlMessage = parseConsoleArgs(args); + + // Append the formatted message to the log container + addLogMessage(htmlMessage); }; } +/** + * Converts a hexadecimal string to a Uint8Array. + * @param hex - The hexadecimal string. + * @returns A Uint8Array representation of the hex string. + */ function hexStringToUint8Array(hex: string): Uint8Array { - const length = hex.length / 2; + const length = Math.ceil(hex.length / 2); const uint8Array = new Uint8Array(length); for (let i = 0; i < length; i++) { @@ -130,19 +176,23 @@ function hexStringToUint8Array(hex: string): Uint8Array { return uint8Array; } +// Initialize console output capture and set up event listeners after DOM is loaded document.addEventListener('DOMContentLoaded', function () { setupConsoleOutput(); // Initialize console output capture - const button = document.createElement('button'); + const button: HTMLButtonElement = document.createElement('button'); button.innerText = 'Run Test'; + button.style.marginTop = '10px'; + button.style.padding = '5px 10px'; + button.style.cursor = 'pointer'; button.addEventListener('click', async () => { - logger(`generating circuit and witness...`); + logger('generating circuit and witness...'); const [bytecode1, witness1] = await generateFirstCircuit(); - logger(`done generating circuit and witness. proving...`); + logger('done generating circuit and witness. proving...'); const proverOutput = await proveUltraHonk(bytecode1, witness1); - logger(`done proving. generating second circuit and witness...`); + logger('done proving. generating second circuit and witness...'); const [bytecode2, witness2] = await generateSecondCircuit(proverOutput, FirstVk.keyAsFields); - logger(`done. generating circuit and witness. proving then verifying...`); + logger('done. generating circuit and witness. proving then verifying...'); const verified = await proveThenVerifyUltraHonk(bytecode2, witness2, hexStringToUint8Array(SecondVk.keyAsBytes)); logger(`verified? ${verified}`); }); From e0a50a8981de4095834c519e21758782555c1ff8 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 19:56:02 +0000 Subject: [PATCH 23/43] Revert "Colors but inverted" This reverts commit a4888498474c8a6fc99552e48fe0dc96fa107077. --- yarn-project/bb-bench/src/serve.ts | 130 +++++++++-------------------- 1 file changed, 40 insertions(+), 90 deletions(-) diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index cfc9d4057416..165b4a5f10a4 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -14,94 +14,37 @@ createDebug.enable('*'); // needed for logging in Firefox but not Chrome /* eslint-disable no-console */ -/** - * Parses console log arguments with %c and corresponding styles. - * @param args - The arguments passed to console methods. - * @returns An HTML string with styles applied. - */ -function parseConsoleArgs(args: any[]): string { - if (typeof args[0] !== 'string') { - // If the first argument is not a string, stringify all arguments - return args.map(arg => escapeHTML(typeof arg === 'string' ? arg : JSON.stringify(arg))).join(' '); - } - - const format = args[0]; - const styleArgs = args.slice(1); - - const parts = format.split('%c'); - const htmlParts: string[] = []; - - for (let i = 0; i < parts.length; i++) { - const text = escapeHTML(parts[i]); - const style = styleArgs[i] || ''; - - if (i === 0) { - // The first part may not have a style - htmlParts.push(text); - } else { - htmlParts.push(`${text}`); - } - } - - return htmlParts.join(''); -} - -/** - * Escapes HTML special characters to prevent XSS. - * @param str - The string to escape. - * @returns The escaped string. - */ -function escapeHTML(str: string): string { - return str.replace(/[&<>"']/g, function (match) { - const escape: { [key: string]: string } = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - }; - return escape[match]; - }); -} - -/** - * Sets up the output element and redirects all console output. - */ -function setupConsoleOutput(): void { - const container: HTMLDivElement = document.createElement('div'); +// Function to set up the output element and redirect all console output +function setupConsoleOutput() { + const container = document.createElement('div'); container.style.marginBottom = '10px'; document.body.appendChild(container); - const copyButton: HTMLButtonElement = document.createElement('button'); + const copyButton = document.createElement('button'); copyButton.innerText = 'Copy Logs to Clipboard'; copyButton.style.marginBottom = '10px'; container.appendChild(copyButton); - const logContainer: HTMLDivElement = document.createElement('div'); + const logContainer = document.createElement('pre'); logContainer.id = 'logOutput'; logContainer.style.border = '1px solid #ccc'; logContainer.style.padding = '10px'; logContainer.style.maxHeight = '400px'; logContainer.style.overflowY = 'auto'; - logContainer.style.backgroundColor = '#1e1e1e'; // Dark background for better contrast - logContainer.style.color = '#ffffff'; // Default text color - logContainer.style.fontFamily = 'monospace'; // Monospaced font for better readability container.appendChild(logContainer); /** - * Appends a message to the log container with proper HTML formatting. + * Appends a message to the log container and auto-scrolls to the bottom. * @param message - The log message to append. */ function addLogMessage(message: string): void { - const messageElement: HTMLDivElement = document.createElement('div'); - messageElement.innerHTML = message; - logContainer.appendChild(messageElement); + logContainer.textContent += `${message}\n`; logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom } // Add event listener to the copy button copyButton.addEventListener('click', () => { - const logContent: string = logContainer.innerText || ''; // Get text content of log container + const logContent: string = logContainer.textContent || ''; // Get text content of log container navigator.clipboard .writeText(logContent) .then(() => { @@ -121,16 +64,25 @@ function setupConsoleOutput(): void { // Preserve the original console method const originalMethod = console[method].bind(console); - // Override the console method + // Override the console method with type assertions console[method] = ((...args: any[]) => { - // Parse the console arguments to HTML - const htmlMessage = parseConsoleArgs(args); + // Process each argument to create a clean message + const message: string = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : JSON.stringify(arg), + ) + .join(' '); // Call the original console method with the original arguments originalMethod(...args); - // Append the formatted message to the log container - addLogMessage(htmlMessage); + // Append the formatted message to the log container with a prefix indicating the method + addLogMessage(message); }) as Console[ConsoleMethod]; }); @@ -151,21 +103,23 @@ function overrideCreateDebugLog(addLogMessage: (message: string) => void): void // Call the original createDebug log function originalDebugLog(...args); - // Parse the console arguments to HTML - const htmlMessage = parseConsoleArgs(args); - - // Append the formatted message to the log container - addLogMessage(htmlMessage); + // Process the arguments to form a message + const message: string = args + .map(arg => + typeof arg === 'string' + ? arg + .replace(/%c/g, '') + .replace(/color:.*?(;|$)/g, '') + .trim() + : JSON.stringify(arg), + ) + .join(' '); + addLogMessage(message); }; } -/** - * Converts a hexadecimal string to a Uint8Array. - * @param hex - The hexadecimal string. - * @returns A Uint8Array representation of the hex string. - */ function hexStringToUint8Array(hex: string): Uint8Array { - const length = Math.ceil(hex.length / 2); + const length = hex.length / 2; const uint8Array = new Uint8Array(length); for (let i = 0; i < length; i++) { @@ -176,23 +130,19 @@ function hexStringToUint8Array(hex: string): Uint8Array { return uint8Array; } -// Initialize console output capture and set up event listeners after DOM is loaded document.addEventListener('DOMContentLoaded', function () { setupConsoleOutput(); // Initialize console output capture - const button: HTMLButtonElement = document.createElement('button'); + const button = document.createElement('button'); button.innerText = 'Run Test'; - button.style.marginTop = '10px'; - button.style.padding = '5px 10px'; - button.style.cursor = 'pointer'; button.addEventListener('click', async () => { - logger('generating circuit and witness...'); + logger(`generating circuit and witness...`); const [bytecode1, witness1] = await generateFirstCircuit(); - logger('done generating circuit and witness. proving...'); + logger(`done generating circuit and witness. proving...`); const proverOutput = await proveUltraHonk(bytecode1, witness1); - logger('done proving. generating second circuit and witness...'); + logger(`done proving. generating second circuit and witness...`); const [bytecode2, witness2] = await generateSecondCircuit(proverOutput, FirstVk.keyAsFields); - logger('done. generating circuit and witness. proving then verifying...'); + logger(`done. generating circuit and witness. proving then verifying...`); const verified = await proveThenVerifyUltraHonk(bytecode2, witness2, hexStringToUint8Array(SecondVk.keyAsBytes)); logger(`verified? ${verified}`); }); From 07d8753c2840ac6d24423377e50a89afbd9cf5be Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 17 Jan 2025 22:43:47 +0000 Subject: [PATCH 24/43] There we go; just re-used parsed out string --- barretenberg/ts/src/barretenberg/backend.ts | 61 ++++++++++++++++++- barretenberg/ts/src/proof/index.ts | 11 ++++ .../bb-bench/circuits/first/src/main.nr | 3 +- .../bb-bench/circuits/second/src/main.nr | 2 +- yarn-project/bb-bench/src/index.ts | 13 ++-- yarn-project/bb-bench/src/serve.ts | 2 + yarn-project/bb-bench/src/types/index.ts | 8 ++- 7 files changed, 86 insertions(+), 14 deletions(-) diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index 71d6ef172c90..e77623c65509 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -5,6 +5,7 @@ import { deflattenFields, flattenFieldsAsArray, ProofData, + ProofDataForRecursion, reconstructHonkProof, reconstructUltraPlonkProof, } from '../proof/index.js'; @@ -208,7 +209,7 @@ export class UltraHonkBackend { const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); - const numPublicInputs = Number(proofAsStrings[1]) - 16; + const numPublicInputs = Number(proofAsStrings[1]) - 16; // WORKTODO // Account for the serialized buffer size at start const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize; @@ -216,6 +217,7 @@ export class UltraHonkBackend { const proofStart = proofWithPublicInputs.slice(0, publicInputsOffset); const publicInputsSplitIndex = numPublicInputs * fieldByteSize; const proofEnd = proofWithPublicInputs.slice(publicInputsOffset + publicInputsSplitIndex); + // Construct the proof without the public inputs const proof = new Uint8Array([...proofStart, ...proofEnd]); @@ -229,6 +231,61 @@ export class UltraHonkBackend { return { proof, publicInputs }; } + async generateProofForRecursiveAggregation( + compressedWitness: Uint8Array, + options?: UltraHonkBackendOptions, + ): Promise { + await this.instantiate(); + + const proveUltraHonk = options?.keccak + ? this.api.acirProveUltraKeccakHonk.bind(this.api) + : this.api.acirProveUltraHonk.bind(this.api); + + const proofWithPublicInputs = await proveUltraHonk( + this.acirUncompressedBytecode, + this.circuitOptions.recursive, + gunzip(compressedWitness), + ); + + // proofWithPublicInputs starts with a four-byte size + const numSerdeHeaderBytes = 4; + // some public inputs are handled specially + const numKZGAccumulatorFieldElements = 16; + // proof begins with: size, num public inputs, public input offset + const numProofPreambleElements = 3; + const publicInputsSizeIndex = 1; + + // Slice serde header and convert to fields + const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(numSerdeHeaderBytes)); + const numPublicInputs = Number(proofAsStrings[publicInputsSizeIndex]) - numKZGAccumulatorFieldElements; + + // Account for the serialized buffer size at start + const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize; + const publicInputsSplitIndex = numPublicInputs * fieldByteSize; + + // Construct the proof without the public inputs + const numPublicInputsBytes = numPublicInputs * fieldByteSize; + const numHeaderPlusPreambleBytes = numSerdeHeaderBytes + numProofPreambleElements * fieldByteSize; + const proofNoPIs = new Uint8Array(proofWithPublicInputs.length - numPublicInputsBytes); + // copy the elements before the public inputs + proofNoPIs.set(proofWithPublicInputs.subarray(0, numHeaderPlusPreambleBytes), 0); + // copy the elements after the public inputs + proofNoPIs.set( + proofWithPublicInputs.subarray(numHeaderPlusPreambleBytes + numPublicInputsBytes), + numHeaderPlusPreambleBytes, + ); + const proof: string[] = deflattenFields(proofNoPIs.slice(numSerdeHeaderBytes)); + + // Fetch the number of public inputs out of the proof string + const publicInputsConcatenated = proofWithPublicInputs.slice( + publicInputsOffset, + publicInputsOffset + publicInputsSplitIndex, + ); + const publicInputs = deflattenFields(publicInputsConcatenated); + + return { proof, publicInputs }; + } + async verifyProof(proofData: ProofData, options?: UltraHonkBackendOptions): Promise { await this.instantiate(); @@ -265,7 +322,7 @@ export class UltraHonkBackend { return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()).slice(0,-1) // WORKTODO, why this? + proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), // WORKTODO, why this? }; } diff --git a/barretenberg/ts/src/proof/index.ts b/barretenberg/ts/src/proof/index.ts index 9d099c8a9324..5213aafcb2ad 100644 --- a/barretenberg/ts/src/proof/index.ts +++ b/barretenberg/ts/src/proof/index.ts @@ -9,6 +9,17 @@ export type ProofData = { proof: Uint8Array; }; +/** + * @description + * The representation of a proof + * */ +export type ProofDataForRecursion = { + /** @description Public inputs of a proof */ + publicInputs: string[]; + /** @description An byte array representing the proof */ + proof: string[]; +}; + // Buffers are prepended with their size. The size takes 4 bytes. const serializedBufferSize = 4; const fieldByteSize = 32; diff --git a/yarn-project/bb-bench/circuits/first/src/main.nr b/yarn-project/bb-bench/circuits/first/src/main.nr index 6e170de75fca..6e870c5ba67d 100644 --- a/yarn-project/bb-bench/circuits/first/src/main.nr +++ b/yarn-project/bb-bench/circuits/first/src/main.nr @@ -1,3 +1,4 @@ -fn main(x : Field, y : pub Field) { +fn main(x: Field, y: pub Field, z: pub Field) { assert(x != y); + assert(y != z); } diff --git a/yarn-project/bb-bench/circuits/second/src/main.nr b/yarn-project/bb-bench/circuits/second/src/main.nr index c5f6a756b67d..5af43a51c62c 100644 --- a/yarn-project/bb-bench/circuits/second/src/main.nr +++ b/yarn-project/bb-bench/circuits/second/src/main.nr @@ -8,7 +8,7 @@ fn main( // This is the proof without public inputs attached. // This means: the size of this does not change with the number of public inputs. proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], - public_inputs: pub [Field; 1], + public_inputs: pub [Field; 2], // This is currently not public. It is fine given that the vk is a part of the circuit definition. // I believe we want to eventually make it public too though. mut key_hash: Field, diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 93f5e6155f28..01a2321fd6e3 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -43,7 +43,8 @@ export async function witnessGenSecondCircuit(args: SecondInputType): Promise { const witnessGenResult = await witnessGenFirstCircuit({ x: '0x1', - y: '0x2', + y: '0x10', + z: '0x100', }); logger('generated first circuit'); @@ -74,7 +75,7 @@ export async function generateSecondCircuit( export type ProverOutputForRecursion = { proof: FixedLengthArray; - public_inputs: FixedLengthArray; + public_inputs: FixedLengthArray; // public_inputs: FixedLengthArray; }; @@ -87,13 +88,11 @@ export async function proveUltraHonk( const backend = new UltraHonkBackend(bytecode, { threads: threads }, { recursive: true }); try { logger(`proving...`); - const proverOutput = await backend.generateProof(witness); - logger(`done proving. generating recursive proof artifacts...`); - const artifacts = await backend.generateRecursiveProofArtifacts(proverOutput.proof); + const proverOutput = await backend.generateProofForRecursiveAggregation(witness); logger(`done generating recursive proof artifacts.`); return { - proof: artifacts.proofAsFields as FixedLengthArray, - public_inputs: proverOutput.publicInputs as FixedLengthArray, + proof: proverOutput.proof as FixedLengthArray, + public_inputs: proverOutput.publicInputs as FixedLengthArray, // public_inputs: proverOutput.publicInputs as FixedLengthArray, }; } finally { diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 165b4a5f10a4..21699b9fe173 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -23,6 +23,8 @@ function setupConsoleOutput() { const copyButton = document.createElement('button'); copyButton.innerText = 'Copy Logs to Clipboard'; copyButton.style.marginBottom = '10px'; + copyButton.style.padding = '5px 10px'; + copyButton.style.cursor = 'pointer'; container.appendChild(copyButton); const logContainer = document.createElement('pre'); diff --git a/yarn-project/bb-bench/src/types/index.ts b/yarn-project/bb-bench/src/types/index.ts index fbf446ca946f..6678802167d4 100644 --- a/yarn-project/bb-bench/src/types/index.ts +++ b/yarn-project/bb-bench/src/types/index.ts @@ -11,30 +11,32 @@ export type Field = string; export type FirstInputType = { x: Field; y: Field; + z: Field; }; export async function First( x: Field, y: Field, + z: Field, First_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { const program = new Noir(First_circuit); - const args: InputMap = { x, y }; + const args: InputMap = { x, y, z }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; } export type SecondInputType = { verification_key: FixedLengthArray; proof: FixedLengthArray; - public_inputs: FixedLengthArray; + public_inputs: FixedLengthArray; key_hash: Field; }; export async function Second( verification_key: FixedLengthArray, proof: FixedLengthArray, - public_inputs: FixedLengthArray, + public_inputs: FixedLengthArray, key_hash: Field, Second_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, From e45f4745eef5f24d70fa1ff3a9fa5aef08827263 Mon Sep 17 00:00:00 2001 From: Cody Date: Sat, 18 Jan 2025 04:04:43 +0000 Subject: [PATCH 25/43] Refine naming --- yarn-project/bb-bench/src/index.ts | 8 +++----- yarn-project/bb-bench/src/serve.ts | 14 +++++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 01a2321fd6e3..1091b7a3cf42 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -60,7 +60,6 @@ export async function generateSecondCircuit( ): Promise<[string, Uint8Array]> { const witnessGenResult = await witnessGenSecondCircuit({ public_inputs: proverOutput.public_inputs, - // public_inputs: proverOutput.public_inputs.slice(0, -16) as FixedLengthArray, key_hash: '0x0', proof: proverOutput.proof, verification_key: previousVk as FixedLengthArray, @@ -73,13 +72,13 @@ export async function generateSecondCircuit( return [bytecode, witness]; } +// TODO: comptime lengths here restrict the prove function, because of need to cast below, because of generating the input types. export type ProverOutputForRecursion = { proof: FixedLengthArray; public_inputs: FixedLengthArray; - // public_inputs: FixedLengthArray; }; -export async function proveUltraHonk( +export async function proveFirstCircuit( bytecode: string, witness: Uint8Array, threads?: number, @@ -93,14 +92,13 @@ export async function proveUltraHonk( return { proof: proverOutput.proof as FixedLengthArray, public_inputs: proverOutput.publicInputs as FixedLengthArray, - // public_inputs: proverOutput.publicInputs as FixedLengthArray, }; } finally { await backend.destroy(); } } -export async function proveThenVerifyUltraHonk( +export async function proveThenVerifySecondCircuit( bytecode: string, witness: Uint8Array, vk: Uint8Array, diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 21699b9fe173..43e8bfa9f9f2 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -6,8 +6,8 @@ import { generateFirstCircuit, generateSecondCircuit, logger, - proveThenVerifyUltraHonk, - proveUltraHonk, + proveFirstCircuit, + proveThenVerifySecondCircuit, } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome @@ -133,7 +133,7 @@ function hexStringToUint8Array(hex: string): Uint8Array { } document.addEventListener('DOMContentLoaded', function () { - setupConsoleOutput(); // Initialize console output capture + setupConsoleOutput(); const button = document.createElement('button'); button.innerText = 'Run Test'; @@ -141,11 +141,15 @@ document.addEventListener('DOMContentLoaded', function () { logger(`generating circuit and witness...`); const [bytecode1, witness1] = await generateFirstCircuit(); logger(`done generating circuit and witness. proving...`); - const proverOutput = await proveUltraHonk(bytecode1, witness1); + const proverOutput = await proveFirstCircuit(bytecode1, witness1); logger(`done proving. generating second circuit and witness...`); const [bytecode2, witness2] = await generateSecondCircuit(proverOutput, FirstVk.keyAsFields); logger(`done. generating circuit and witness. proving then verifying...`); - const verified = await proveThenVerifyUltraHonk(bytecode2, witness2, hexStringToUint8Array(SecondVk.keyAsBytes)); + const verified = await proveThenVerifySecondCircuit( + bytecode2, + witness2, + hexStringToUint8Array(SecondVk.keyAsBytes), + ); logger(`verified? ${verified}`); }); document.body.appendChild(button); From 9c4c9681396a91dc8cfeff72d249cfff9ca03299 Mon Sep 17 00:00:00 2001 From: Cody Date: Sat, 18 Jan 2025 04:24:54 +0000 Subject: [PATCH 26/43] Use numeral names --- .../circuits/{first => circuit_1}/Nargo.toml | 2 +- .../circuits/{first => circuit_1}/Prover.toml | 0 .../circuits/{first => circuit_1}/src/main.nr | 0 .../circuits/{second => circuit_2}/Nargo.toml | 2 +- .../{second => circuit_2}/Prover.toml | 0 .../{second => circuit_2}/src/main.nr | 0 yarn-project/bb-bench/src/index.ts | 37 +++++++++---------- .../src/scripts/generate_ts_from_abi.ts | 2 +- yarn-project/bb-bench/src/serve.ts | 26 ++++--------- yarn-project/bb-bench/src/types/index.ts | 16 ++++---- 10 files changed, 37 insertions(+), 48 deletions(-) rename yarn-project/bb-bench/circuits/{first => circuit_1}/Nargo.toml (81%) rename yarn-project/bb-bench/circuits/{first => circuit_1}/Prover.toml (100%) rename yarn-project/bb-bench/circuits/{first => circuit_1}/src/main.nr (100%) rename yarn-project/bb-bench/circuits/{second => circuit_2}/Nargo.toml (81%) rename yarn-project/bb-bench/circuits/{second => circuit_2}/Prover.toml (100%) rename yarn-project/bb-bench/circuits/{second => circuit_2}/src/main.nr (100%) diff --git a/yarn-project/bb-bench/circuits/first/Nargo.toml b/yarn-project/bb-bench/circuits/circuit_1/Nargo.toml similarity index 81% rename from yarn-project/bb-bench/circuits/first/Nargo.toml rename to yarn-project/bb-bench/circuits/circuit_1/Nargo.toml index 13aac9878b92..60a609f31150 100644 --- a/yarn-project/bb-bench/circuits/first/Nargo.toml +++ b/yarn-project/bb-bench/circuits/circuit_1/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "first" +name = "circuit_1" type = "bin" authors = [""] compiler_version = ">=0.31.0" diff --git a/yarn-project/bb-bench/circuits/first/Prover.toml b/yarn-project/bb-bench/circuits/circuit_1/Prover.toml similarity index 100% rename from yarn-project/bb-bench/circuits/first/Prover.toml rename to yarn-project/bb-bench/circuits/circuit_1/Prover.toml diff --git a/yarn-project/bb-bench/circuits/first/src/main.nr b/yarn-project/bb-bench/circuits/circuit_1/src/main.nr similarity index 100% rename from yarn-project/bb-bench/circuits/first/src/main.nr rename to yarn-project/bb-bench/circuits/circuit_1/src/main.nr diff --git a/yarn-project/bb-bench/circuits/second/Nargo.toml b/yarn-project/bb-bench/circuits/circuit_2/Nargo.toml similarity index 81% rename from yarn-project/bb-bench/circuits/second/Nargo.toml rename to yarn-project/bb-bench/circuits/circuit_2/Nargo.toml index faecc6bf436a..f8ae3dab6d68 100644 --- a/yarn-project/bb-bench/circuits/second/Nargo.toml +++ b/yarn-project/bb-bench/circuits/circuit_2/Nargo.toml @@ -1,5 +1,5 @@ [package] -name = "second" +name = "circuit_2" type = "bin" authors = [""] compiler_version = ">=0.31.0" diff --git a/yarn-project/bb-bench/circuits/second/Prover.toml b/yarn-project/bb-bench/circuits/circuit_2/Prover.toml similarity index 100% rename from yarn-project/bb-bench/circuits/second/Prover.toml rename to yarn-project/bb-bench/circuits/circuit_2/Prover.toml diff --git a/yarn-project/bb-bench/circuits/second/src/main.nr b/yarn-project/bb-bench/circuits/circuit_2/src/main.nr similarity index 100% rename from yarn-project/bb-bench/circuits/second/src/main.nr rename to yarn-project/bb-bench/circuits/circuit_2/src/main.nr diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index 1091b7a3cf42..da9b38a280e8 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -1,14 +1,13 @@ +/* eslint-disable camelcase */ import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; import createDebug from 'debug'; -import FirstCircuit from '../artifacts/first.json' assert { type: 'json' }; -import SecondCircuit from '../artifacts/second.json' assert { type: 'json' }; -import type { FirstInputType, FixedLengthArray, SecondInputType } from './types/index.js'; +import Circuit1 from '../artifacts/circuit_1.json' assert { type: 'json' }; +import Circuit2 from '../artifacts/circuit_2.json' assert { type: 'json' }; +import type { Circuit_1InputType, Circuit_2InputType, FixedLengthArray } from './types/index.js'; export const logger = createDebug('aztec:bb-bench'); -/* eslint-disable camelcase */ - export const MOCK_MAX_COMMITMENTS_PER_TX = 4; function foreignCallHandler(): Promise { @@ -22,8 +21,8 @@ export interface WitnessGenResult { export type u8 = string; -export async function witnessGenFirstCircuit(args: FirstInputType): Promise> { - const program = new Noir(FirstCircuit); +export async function witnessGenCircuit1(args: Circuit_1InputType): Promise> { + const program = new Noir(Circuit1); const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { witness, @@ -31,8 +30,8 @@ export async function witnessGenFirstCircuit(args: FirstInputType): Promise> { - const program = new Noir(SecondCircuit); +export async function witnessGenCircuit2(args: Circuit_2InputType): Promise> { + const program = new Noir(Circuit2); const { witness, returnValue } = await program.execute(args, foreignCallHandler); return { witness, @@ -40,33 +39,33 @@ export async function witnessGenSecondCircuit(args: SecondInputType): Promise { - const witnessGenResult = await witnessGenFirstCircuit({ +export async function generateCircuit1(): Promise<[string, Uint8Array]> { + const witnessGenResult = await witnessGenCircuit1({ x: '0x1', y: '0x10', z: '0x100', }); - logger('generated first circuit'); + logger('generated circuit 1'); - const bytecode = FirstCircuit.bytecode; + const bytecode = Circuit1.bytecode; const witness = witnessGenResult.witness; return [bytecode, witness]; } -export async function generateSecondCircuit( +export async function generateCircuit2( proverOutput: ProverOutputForRecursion, previousVk: string[], ): Promise<[string, Uint8Array]> { - const witnessGenResult = await witnessGenSecondCircuit({ + const witnessGenResult = await witnessGenCircuit2({ public_inputs: proverOutput.public_inputs, key_hash: '0x0', proof: proverOutput.proof, verification_key: previousVk as FixedLengthArray, }); - logger('generated second circuit'); + logger('generated circuit 2'); - const bytecode = SecondCircuit.bytecode; + const bytecode = Circuit2.bytecode; const witness = witnessGenResult.witness; return [bytecode, witness]; @@ -78,7 +77,7 @@ export type ProverOutputForRecursion = { public_inputs: FixedLengthArray; }; -export async function proveFirstCircuit( +export async function proveCircuit1( bytecode: string, witness: Uint8Array, threads?: number, @@ -98,7 +97,7 @@ export async function proveFirstCircuit( } } -export async function proveThenVerifySecondCircuit( +export async function proveThenVerifyCircuit2( bytecode: string, witness: Uint8Array, vk: Uint8Array, diff --git a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts index 1b9b0bcdb406..bdfa95fa02d1 100644 --- a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts +++ b/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts @@ -7,7 +7,7 @@ import { promises as fs } from 'fs'; const log = createConsoleLogger('mock-circuits'); -const circuits = ['first', 'second']; +const circuits = ['circuit_1', 'circuit_2']; const main = async () => { try { diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/bb-bench/src/serve.ts index 43e8bfa9f9f2..968940d35b5e 100644 --- a/yarn-project/bb-bench/src/serve.ts +++ b/yarn-project/bb-bench/src/serve.ts @@ -1,14 +1,8 @@ import createDebug from 'debug'; -import FirstVk from '../artifacts/keys/first.vk.data.json' assert { type: 'json' }; -import SecondVk from '../artifacts/keys/second.vk.data.json' assert { type: 'json' }; -import { - generateFirstCircuit, - generateSecondCircuit, - logger, - proveFirstCircuit, - proveThenVerifySecondCircuit, -} from './index.js'; +import Vk1 from '../artifacts/keys/circuit_1.vk.data.json' assert { type: 'json' }; +import Vk2 from '../artifacts/keys/circuit_2.vk.data.json' assert { type: 'json' }; +import { generateCircuit1, generateCircuit2, logger, proveCircuit1, proveThenVerifyCircuit2 } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome @@ -139,17 +133,13 @@ document.addEventListener('DOMContentLoaded', function () { button.innerText = 'Run Test'; button.addEventListener('click', async () => { logger(`generating circuit and witness...`); - const [bytecode1, witness1] = await generateFirstCircuit(); + const [bytecode1, witness1] = await generateCircuit1(); logger(`done generating circuit and witness. proving...`); - const proverOutput = await proveFirstCircuit(bytecode1, witness1); - logger(`done proving. generating second circuit and witness...`); - const [bytecode2, witness2] = await generateSecondCircuit(proverOutput, FirstVk.keyAsFields); + const proverOutput = await proveCircuit1(bytecode1, witness1); + logger(`done proving. generating circuit 2 and witness...`); + const [bytecode2, witness2] = await generateCircuit2(proverOutput, Vk1.keyAsFields); logger(`done. generating circuit and witness. proving then verifying...`); - const verified = await proveThenVerifySecondCircuit( - bytecode2, - witness2, - hexStringToUint8Array(SecondVk.keyAsBytes), - ); + const verified = await proveThenVerifyCircuit2(bytecode2, witness2, hexStringToUint8Array(Vk2.keyAsBytes)); logger(`verified? ${verified}`); }); document.body.appendChild(button); diff --git a/yarn-project/bb-bench/src/types/index.ts b/yarn-project/bb-bench/src/types/index.ts index 6678802167d4..77ea47f313ef 100644 --- a/yarn-project/bb-bench/src/types/index.ts +++ b/yarn-project/bb-bench/src/types/index.ts @@ -8,40 +8,40 @@ export { ForeignCallHandler } from '@noir-lang/noir_js'; export type FixedLengthArray = L extends 0 ? never[] : T[] & { length: L }; export type Field = string; -export type FirstInputType = { +export type Circuit_1InputType = { x: Field; y: Field; z: Field; }; -export async function First( +export async function Circuit_1( x: Field, y: Field, z: Field, - First_circuit: CompiledCircuit, + Circuit_1_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { - const program = new Noir(First_circuit); + const program = new Noir(Circuit_1_circuit); const args: InputMap = { x, y, z }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; } -export type SecondInputType = { +export type Circuit_2InputType = { verification_key: FixedLengthArray; proof: FixedLengthArray; public_inputs: FixedLengthArray; key_hash: Field; }; -export async function Second( +export async function Circuit_2( verification_key: FixedLengthArray, proof: FixedLengthArray, public_inputs: FixedLengthArray, key_hash: Field, - Second_circuit: CompiledCircuit, + Circuit_2_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { - const program = new Noir(Second_circuit); + const program = new Noir(Circuit_2_circuit); const args: InputMap = { verification_key, proof, public_inputs, key_hash }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; From 9ab78e0d2bcaa31c5645f00fd8ddc43484c98912 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 17:30:53 +0000 Subject: [PATCH 27/43] Revert lockfile --- yarn-project/yarn.lock | 177 +++++++++++++++++++++-------------------- 1 file changed, 89 insertions(+), 88 deletions(-) diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index 1dc6bf4dc2e1..42ff73d29423 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -290,6 +290,7 @@ __metadata: resolution: "@aztec/bb-bench@workspace:bb-bench" dependencies: "@aztec/bb-prover": "workspace:^" + "@aztec/bb.js": ../../ts "@aztec/foundation": "workspace:^" "@jest/globals": "npm:^29.5.0" "@noir-lang/noir_codegen": "portal:../../noir/packages/noir_codegen" @@ -4595,9 +4596,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.30.1" +"@rollup/rollup-android-arm-eabi@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.31.0" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -4609,9 +4610,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-android-arm64@npm:4.30.1" +"@rollup/rollup-android-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-android-arm64@npm:4.31.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -4623,9 +4624,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.30.1" +"@rollup/rollup-darwin-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.31.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -4637,9 +4638,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.30.1" +"@rollup/rollup-darwin-x64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.31.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -4651,9 +4652,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.30.1" +"@rollup/rollup-freebsd-arm64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.31.0" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -4665,9 +4666,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.30.1" +"@rollup/rollup-freebsd-x64@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.31.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -4679,9 +4680,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard @@ -4693,9 +4694,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.30.1" +"@rollup/rollup-linux-arm-musleabihf@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.31.0" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard @@ -4707,9 +4708,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.30.1" +"@rollup/rollup-linux-arm64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.31.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -4721,16 +4722,16 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.30.1" +"@rollup/rollup-linux-arm64-musl@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.31.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard @@ -4742,9 +4743,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard @@ -4756,9 +4757,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.30.1" +"@rollup/rollup-linux-riscv64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.31.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard @@ -4770,9 +4771,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.30.1" +"@rollup/rollup-linux-s390x-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.31.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard @@ -4784,9 +4785,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.30.1" +"@rollup/rollup-linux-x64-gnu@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.31.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -4798,9 +4799,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.30.1" +"@rollup/rollup-linux-x64-musl@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.31.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -4812,9 +4813,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.30.1" +"@rollup/rollup-win32-arm64-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.31.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -4826,9 +4827,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.30.1" +"@rollup/rollup-win32-ia32-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.31.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -4840,9 +4841,9 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.30.1": - version: 4.30.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.30.1" +"@rollup/rollup-win32-x64-msvc@npm:4.31.0": + version: 4.31.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.31.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -16153,7 +16154,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.25": +"nanoid@npm:^3.1.25, nanoid@npm:^3.3.8": version: 3.3.8 resolution: "nanoid@npm:3.3.8" bin: @@ -17387,13 +17388,13 @@ __metadata: linkType: hard "postcss@npm:^8.4.43": - version: 8.4.49 - resolution: "postcss@npm:8.4.49" + version: 8.5.1 + resolution: "postcss@npm:8.5.1" dependencies: - nanoid: "npm:^3.3.7" + nanoid: "npm:^3.3.8" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10/28fe1005b1339870e0a5006375ba5ac1213fd69800f79e7db09c398e074421ba6e162898e94f64942fed554037fd292db3811d87835d25ab5ef7f3c9daacb6ca + checksum: 10/1fbd28753143f7f03e4604813639918182b15343c7ad0f4e72f3875fc2cc0b8494c887f55dc05008fad5fbf1e1e908ce2edbbce364a91f84dcefb71edf7cd31d languageName: node linkType: hard @@ -18430,28 +18431,28 @@ __metadata: linkType: hard "rollup@npm:^4.20.0": - version: 4.30.1 - resolution: "rollup@npm:4.30.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.30.1" - "@rollup/rollup-android-arm64": "npm:4.30.1" - "@rollup/rollup-darwin-arm64": "npm:4.30.1" - "@rollup/rollup-darwin-x64": "npm:4.30.1" - "@rollup/rollup-freebsd-arm64": "npm:4.30.1" - "@rollup/rollup-freebsd-x64": "npm:4.30.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.30.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.30.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.30.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.30.1" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.30.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.30.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.30.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.30.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.30.1" - "@rollup/rollup-linux-x64-musl": "npm:4.30.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.30.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.30.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.30.1" + version: 4.31.0 + resolution: "rollup@npm:4.31.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.31.0" + "@rollup/rollup-android-arm64": "npm:4.31.0" + "@rollup/rollup-darwin-arm64": "npm:4.31.0" + "@rollup/rollup-darwin-x64": "npm:4.31.0" + "@rollup/rollup-freebsd-arm64": "npm:4.31.0" + "@rollup/rollup-freebsd-x64": "npm:4.31.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.31.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.31.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.31.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.31.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.31.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.31.0" + "@rollup/rollup-linux-x64-musl": "npm:4.31.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.31.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.31.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.31.0" "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -18497,7 +18498,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10/f5d240a76a8c3cd7918f7dc97b7eaec5d97d27b3901e3843f74e18b4e9195c77abe8aa61575cd64ad7897f6a6dea6c68a7ad1a8073e3cf3139529e9fa7d06c2b + checksum: 10/4f5fac0a0df7878ca810512c283df0e81b21d42fed262943b412c488a30beceb0149a4be36dbf2750b6c5cbfa4d4cf5097a134266f1425a9e213c2a2a09853fc languageName: node linkType: hard @@ -21087,8 +21088,8 @@ __metadata: linkType: hard "vite@npm:^5.3.4": - version: 5.4.11 - resolution: "vite@npm:5.4.11" + version: 5.4.14 + resolution: "vite@npm:5.4.14" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -21125,7 +21126,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/719c4dea896e9547958643354003c8c9ea98e5367196d98f5f46cffb3ec963fead3ea5853f5af941c79bbfb73583dec19bbb0d28d2f644b95d7f59c55e22919d + checksum: 10/ce382f4059eb6c939823b8f62163794752243755d84c71a4b73ad0f7d4d9f4c7a557a6ef4c78e0640f4bcf5ae5ec6b20c7ee4816419af3c81ba275f478b73468 languageName: node linkType: hard From 0a053095f6f57356a4c967d6910d1e680e33f04c Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 17:33:59 +0000 Subject: [PATCH 28/43] Some cleanup --- .../src/barretenberg/dsl/acir_proofs/c_bind.cpp | 14 -------------- .../honk_verifier/oink_recursive_verifier.cpp | 3 --- barretenberg/ts/src/barretenberg/backend.ts | 4 ++-- barretenberg/ts/src/barretenberg_api/index.ts | 12 ------------ barretenberg/ts/src/crs/node/ignition_files_crs.ts | 1 - 5 files changed, 2 insertions(+), 32 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp index 3b94bf147892..a3e037af23f4 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_proofs/c_bind.cpp @@ -422,20 +422,6 @@ WASM_EXPORT void acir_honk_solidity_verifier(uint8_t const* proof_buf, uint8_t c *out = to_heap_buffer(str); } -WASM_EXPORT void acir_proof_no_pis_as_fields_ultra_honk(uint8_t const* proof_buf, fr::vec_out_buf out) -{ - auto proof = from_buffer>(from_buffer>(proof_buf)); - info("starting proof size: ", proof.size()); - const auto num_public_inputs = static_cast(proof[1] - 16); - info("num_public_inputs: ", num_public_inputs); - const auto offset = static_cast(proof[2]) + bb::HONK_PROOF_PUBLIC_INPUT_OFFSET; - info("offset: ", offset); - proof.erase(proof.begin() + static_cast(offset), proof.begin() + static_cast(offset + num_public_inputs)); - info("ending proof size: ", proof.size()); - - *out = to_heap_buffer(proof); -} - WASM_EXPORT void acir_proof_as_fields_ultra_honk(uint8_t const* proof_buf, fr::vec_out_buf out) { auto proof = from_buffer>(from_buffer>(proof_buf)); diff --git a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp index 984e1ee21931..d9974b8f056d 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/honk_verifier/oink_recursive_verifier.cpp @@ -51,9 +51,6 @@ template void OinkRecursiveVerifier_::verify() throw_or_abort("OinkRecursiveVerifier::verify: proof circuit size does not match verification key"); } if (static_cast(public_input_size.get_value()) != verification_key->verification_key->num_public_inputs) { - info("public_input_size.get_value(): ", public_input_size.get_value()); - info("verification_key->verification_key->num_public_inputs: ", - verification_key->verification_key->num_public_inputs); throw_or_abort("OinkRecursiveVerifier::verify: proof public input size does not match verification key"); } if (static_cast(pub_inputs_offset.get_value()) != verification_key->verification_key->pub_inputs_offset) { diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index e77623c65509..39d6d9299f3e 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -209,7 +209,7 @@ export class UltraHonkBackend { const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4)); - const numPublicInputs = Number(proofAsStrings[1]) - 16; // WORKTODO + const numPublicInputs = Number(proofAsStrings[1]); // Account for the serialized buffer size at start const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize; @@ -322,7 +322,7 @@ export class UltraHonkBackend { return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), // WORKTODO, why this? + proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), }; } diff --git a/barretenberg/ts/src/barretenberg_api/index.ts b/barretenberg/ts/src/barretenberg_api/index.ts index 7f112fb86527..4bd05354276b 100644 --- a/barretenberg/ts/src/barretenberg_api/index.ts +++ b/barretenberg/ts/src/barretenberg_api/index.ts @@ -678,18 +678,6 @@ export class BarretenbergApi { return out[0]; } - async acirProofNoPIsAsFieldsUltraHonk(proofBuf: Uint8Array): Promise { - const inArgs = [proofBuf].map(serializeBufferable); - const outTypes: OutputType[] = [VectorDeserializer(Fr)]; - const result = await this.wasm.callWasmExport( - 'acir_proof_no_pis_as_fields_ultra_honk', - inArgs, - outTypes.map(t => t.SIZE_IN_BYTES), - ); - const out = result.map((r, i) => outTypes[i].fromBuffer(r)); - return out[0]; - } - async acirVkAsFieldsUltraHonk(vkBuf: Uint8Array): Promise { const inArgs = [vkBuf].map(serializeBufferable); const outTypes: OutputType[] = [VectorDeserializer(Fr)]; diff --git a/barretenberg/ts/src/crs/node/ignition_files_crs.ts b/barretenberg/ts/src/crs/node/ignition_files_crs.ts index ddd86af8cd5b..697f45ae01d5 100644 --- a/barretenberg/ts/src/crs/node/ignition_files_crs.ts +++ b/barretenberg/ts/src/crs/node/ignition_files_crs.ts @@ -47,7 +47,6 @@ export class IgnitionFilesCrs { const g1Start = 28; const g1End = g1Start + this.numPoints * 64; - console.log(`this.path: ${this.path}`); const data = await readFile(this.path + '/transcript00.dat'); this.data = data.subarray(g1Start, g1End); From a593246b4d8182a6184f4479398b518c8f34e6b8 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 17:38:40 +0000 Subject: [PATCH 29/43] Condense two generating functions --- yarn-project/bb-bench/src/index.ts | 71 ++++++++++-------------------- 1 file changed, 24 insertions(+), 47 deletions(-) diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/bb-bench/src/index.ts index da9b38a280e8..1d46a7e7223e 100644 --- a/yarn-project/bb-bench/src/index.ts +++ b/yarn-project/bb-bench/src/index.ts @@ -1,10 +1,11 @@ /* eslint-disable camelcase */ import { type ForeignCallOutput, Noir } from '@noir-lang/noir_js'; +import { type InputValue } from '@noir-lang/noirc_abi'; import createDebug from 'debug'; import Circuit1 from '../artifacts/circuit_1.json' assert { type: 'json' }; import Circuit2 from '../artifacts/circuit_2.json' assert { type: 'json' }; -import type { Circuit_1InputType, Circuit_2InputType, FixedLengthArray } from './types/index.js'; +import type { FixedLengthArray } from './types/index.js'; export const logger = createDebug('aztec:bb-bench'); @@ -14,64 +15,40 @@ function foreignCallHandler(): Promise { throw new Error('Unexpected foreign call'); } -export interface WitnessGenResult { - witness: Uint8Array; - publicInputs: PublicInputsType; -} - export type u8 = string; -export async function witnessGenCircuit1(args: Circuit_1InputType): Promise> { +export async function generateCircuit1(): Promise<[string, Uint8Array, InputValue]> { const program = new Noir(Circuit1); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as u8, - }; -} - -export async function witnessGenCircuit2(args: Circuit_2InputType): Promise> { - const program = new Noir(Circuit2); - const { witness, returnValue } = await program.execute(args, foreignCallHandler); - return { - witness, - publicInputs: returnValue as u8, - }; -} - -export async function generateCircuit1(): Promise<[string, Uint8Array]> { - const witnessGenResult = await witnessGenCircuit1({ - x: '0x1', - y: '0x10', - z: '0x100', - }); + const { witness, returnValue } = await program.execute( + { + x: '0x1', + y: '0x10', + z: '0x100', + }, + foreignCallHandler, + ); logger('generated circuit 1'); - - const bytecode = Circuit1.bytecode; - const witness = witnessGenResult.witness; - - return [bytecode, witness]; + return [Circuit1.bytecode, witness, returnValue]; } export async function generateCircuit2( proverOutput: ProverOutputForRecursion, previousVk: string[], -): Promise<[string, Uint8Array]> { - const witnessGenResult = await witnessGenCircuit2({ - public_inputs: proverOutput.public_inputs, - key_hash: '0x0', - proof: proverOutput.proof, - verification_key: previousVk as FixedLengthArray, - }); +): Promise<[string, Uint8Array, InputValue]> { + const program = new Noir(Circuit2); + const { witness, returnValue } = await program.execute( + { + public_inputs: proverOutput.public_inputs, + key_hash: '0x0', + proof: proverOutput.proof, + verification_key: previousVk as FixedLengthArray, + }, + foreignCallHandler, + ); logger('generated circuit 2'); - - const bytecode = Circuit2.bytecode; - const witness = witnessGenResult.witness; - - return [bytecode, witness]; + return [Circuit2.bytecode, witness, returnValue]; } -// TODO: comptime lengths here restrict the prove function, because of need to cast below, because of generating the input types. export type ProverOutputForRecursion = { proof: FixedLengthArray; public_inputs: FixedLengthArray; From 8ffa5b79c31a83ba427067a6bff3b46163361326 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 19:55:54 +0000 Subject: [PATCH 30/43] No Prover.tomls --- .../bb-bench/circuits/circuit_1/Prover.toml | 2 - .../bb-bench/circuits/circuit_2/Prover.toml | 595 ------------------ 2 files changed, 597 deletions(-) delete mode 100644 yarn-project/bb-bench/circuits/circuit_1/Prover.toml delete mode 100644 yarn-project/bb-bench/circuits/circuit_2/Prover.toml diff --git a/yarn-project/bb-bench/circuits/circuit_1/Prover.toml b/yarn-project/bb-bench/circuits/circuit_1/Prover.toml deleted file mode 100644 index 2c1854573a40..000000000000 --- a/yarn-project/bb-bench/circuits/circuit_1/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 1 -y = 2 diff --git a/yarn-project/bb-bench/circuits/circuit_2/Prover.toml b/yarn-project/bb-bench/circuits/circuit_2/Prover.toml deleted file mode 100644 index d2507d3046ae..000000000000 --- a/yarn-project/bb-bench/circuits/circuit_2/Prover.toml +++ /dev/null @@ -1,595 +0,0 @@ -key_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" -proof = [ - "0x0000000000000000000000000000000000000000000000000000000000000040", - "0x0000000000000000000000000000000000000000000000000000000000000011", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", - "0x00000000000000000000000000000000000000000000000b75c020998797da78", - "0x0000000000000000000000000000000000000000000000005a107acb64952eca", - "0x000000000000000000000000000000000000000000000000000031e97a575e9d", - "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", - "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", - "0x00000000000000000000000000000000000000000000000d722669117f9758a4", - "0x000000000000000000000000000000000000000000000000000178cbf4206471", - "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", - "0x000000000000000000000000000000000000000000000007fd51009034b3357f", - "0x000000000000000000000000000000000000000000000009889939f81e9c7402", - "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", - "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", - "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", - "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", - "0x0000000000000000000000000000000000000000000000000001b52c2020d746", - "0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9", - "0x00000000000000000000000000000000002486186d84437da79bbfff6970470f", - "0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00", - "0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e", - "0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8", - "0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99", - "0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a", - "0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612", - "0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739", - "0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee", - "0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d", - "0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a", - "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", - "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", - "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", - "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", - "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", - "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", - "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", - "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", - "0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6", - "0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a", - "0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2", - "0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa", - "0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992", - "0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f", - "0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c", - "0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc", - "0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c", - "0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436", - "0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c", - "0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489", - "0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7", - "0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a", - "0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0", - "0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96", - "0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260", - "0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20", - "0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9", - "0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545", - "0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b", - "0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05", - "0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679", - "0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd", - "0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c", - "0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952", - "0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f", - "0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073", - "0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683", - "0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc", - "0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e", - "0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f", - "0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473", - "0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9", - "0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5", - "0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139", - "0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a", - "0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22", - "0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298", - "0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84", - "0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c", - "0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b", - "0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6", - "0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012", - "0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8", - "0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c", - "0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f", - "0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f", - "0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926", - "0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761", - "0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8", - "0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a", - "0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47", - "0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9", - "0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9", - "0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d", - "0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14", - "0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d", - "0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09", - "0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3", - "0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c", - "0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72", - "0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4", - "0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45", - "0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b", - "0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56", - "0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382", - "0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b", - "0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44", - "0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422", - "0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4", - "0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555", - "0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac", - "0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7", - "0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6", - "0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d", - "0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a", - "0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac", - "0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f", - "0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7", - "0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac", - "0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b", - "0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e", - "0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031", - "0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261", - "0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33", - "0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc", - "0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d", - "0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c", - "0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551", - "0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb", - "0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834", - "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", - "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", - "0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7", - "0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1", - "0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa", - "0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b", - "0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3", - "0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05", - "0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda", - "0x000000000000000000000000000000b25425c2869931def122b407e6d248b112", - "0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf", - "0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a", - "0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1", - "0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048", - "0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5", - "0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852", - "0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49", - "0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c", - "0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7", - "0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee", - "0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d", - "0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2", - "0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e", - "0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e", - "0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6", - "0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b", - "0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f", - "0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d", - "0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb", - "0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5", - "0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191", - "0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9", - "0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f", - "0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb", - "0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7", - "0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f", - "0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859", - "0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291", - "0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2", -] -public_inputs = [ - "0x0000000000000000000000000000000000000000000000000000000000000002", -] -verification_key = [ - "0x0000000000000000000000000000000000000000000000000000000000000040", - "0x0000000000000000000000000000000000000000000000000000000000000011", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000004", - "0x0000000000000000000000000000000000000000000000000000000000000005", - "0x0000000000000000000000000000000000000000000000000000000000000006", - "0x0000000000000000000000000000000000000000000000000000000000000007", - "0x0000000000000000000000000000000000000000000000000000000000000008", - "0x0000000000000000000000000000000000000000000000000000000000000009", - "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x000000000000000000000000000000000000000000000000000000000000000b", - "0x000000000000000000000000000000000000000000000000000000000000000c", - "0x000000000000000000000000000000000000000000000000000000000000000d", - "0x000000000000000000000000000000000000000000000000000000000000000e", - "0x000000000000000000000000000000000000000000000000000000000000000f", - "0x0000000000000000000000000000000000000000000000000000000000000010", - "0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483", - "0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247", - "0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130", - "0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a", - "0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d", - "0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c", - "0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525", - "0x00000000000000000000000000000000000956f29100ad56f516e047143f8088", - "0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6", - "0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb", - "0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c", - "0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c", - "0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d", - "0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c", - "0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec", - "0x00000000000000000000000000000000002c004dc89326c7a22d126130396137", - "0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b", - "0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c", - "0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48", - "0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1", - "0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9", - "0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee", - "0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77", - "0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668", - "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", - "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", - "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", - "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", - "0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e", - "0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b", - "0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58", - "0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c", - "0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88", - "0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e", - "0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e", - "0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5", - "0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c", - "0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d", - "0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98", - "0x000000000000000000000000000000000006e0242610dd531470885e9c150693", - "0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d", - "0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841", - "0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06", - "0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20", - "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", - "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", - "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", - "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", - "0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a", - "0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606", - "0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba", - "0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b", - "0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b", - "0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013", - "0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36", - "0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2", - "0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f", - "0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e", - "0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b", - "0x00000000000000000000000000000000000b34126647568e29587731e7318989", - "0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915", - "0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059", - "0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b", - "0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae", - "0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba", - "0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4", - "0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1", - "0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd", - "0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640", - "0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77", - "0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93", - "0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28", - "0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70", - "0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb", - "0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a", - "0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957", - "0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2", - "0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2", - "0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf", - "0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d", - "0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597", - "0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee", - "0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7", - "0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb", - "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", - "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", - "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", - "0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6", - "0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2", - "0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312", - "0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b", - "0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af", - "0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173", - "0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4", - "0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8", - "0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee", - "0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628", - "0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72", - "0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39", - "0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444", - "0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25", - "0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb", - "0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a", -] From dfe906f848c9badd7fdb3dafa44b84cec8a6fab2 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 19:56:36 +0000 Subject: [PATCH 31/43] Ignore Prover.tomls --- yarn-project/bb-bench/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/bb-bench/.gitignore index 94d6095ac0da..e47407045af3 100644 --- a/yarn-project/bb-bench/.gitignore +++ b/yarn-project/bb-bench/.gitignore @@ -1,2 +1,3 @@ artifacts/ circuits/**/proofs/* +circuits/**/Prover.toml From 163886e63d2d8d01e828e75c4d61dcbc83893fa0 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 20:04:33 +0000 Subject: [PATCH 32/43] Remove _bb-bench for now --- yarn-project/_bb-bench/.gitignore | 3 - yarn-project/_bb-bench/README.md | 29 - yarn-project/_bb-bench/bench_native.sh | 4 - yarn-project/_bb-bench/index.html | 53 -- yarn-project/_bb-bench/main/Nargo.toml | 7 - yarn-project/_bb-bench/main/Prover.toml | 2 - yarn-project/_bb-bench/main/src/main.nr | 3 - yarn-project/_bb-bench/package.json | 23 - yarn-project/_bb-bench/recursion/Nargo.toml | 7 - yarn-project/_bb-bench/recursion/Prover.toml | 595 ----------------- yarn-project/_bb-bench/recursion/src/main.nr | 29 - yarn-project/_bb-bench/src/main.js | 158 ----- yarn-project/_bb-bench/vite.config.js | 64 -- yarn-project/package.json | 1 - yarn-project/yarn.lock | 650 +------------------ 15 files changed, 6 insertions(+), 1622 deletions(-) delete mode 100644 yarn-project/_bb-bench/.gitignore delete mode 100644 yarn-project/_bb-bench/README.md delete mode 100755 yarn-project/_bb-bench/bench_native.sh delete mode 100644 yarn-project/_bb-bench/index.html delete mode 100644 yarn-project/_bb-bench/main/Nargo.toml delete mode 100644 yarn-project/_bb-bench/main/Prover.toml delete mode 100644 yarn-project/_bb-bench/main/src/main.nr delete mode 100644 yarn-project/_bb-bench/package.json delete mode 100644 yarn-project/_bb-bench/recursion/Nargo.toml delete mode 100644 yarn-project/_bb-bench/recursion/Prover.toml delete mode 100644 yarn-project/_bb-bench/recursion/src/main.nr delete mode 100644 yarn-project/_bb-bench/src/main.js delete mode 100644 yarn-project/_bb-bench/vite.config.js diff --git a/yarn-project/_bb-bench/.gitignore b/yarn-project/_bb-bench/.gitignore deleted file mode 100644 index 8a6fd650a421..000000000000 --- a/yarn-project/_bb-bench/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -main/proofs -recursion/proofs -dist/ diff --git a/yarn-project/_bb-bench/README.md b/yarn-project/_bb-bench/README.md deleted file mode 100644 index 3757446244be..000000000000 --- a/yarn-project/_bb-bench/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# recursion-benchmarks - -This is a copy from 0xPARC recursion-benchmarks repo containing only benchmark code for the Barretenberg backend. - -## Main idea -**Compare diverse properties** (proving time, proof size, etc) **for a recursive circuit** that does the same set of operations (recursion, hash, signature verification, etc) **across different proving systems**. - -Having a reproducible setup that we can run on different devices. - - -## Run - -- barretenberg: - - setup: - - install Noir v0.31.0 and the Barretenberg backend - - `noirup --version 0.31.0` - - (To get `noirup`, run `curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash`) - - `bbup` - - (To get `bbup`, run `curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/refs/heads/master/barretenberg/bbup/install | bash`) - - `cd nonrust/barretenberg/browser` - - `npm install && npm run build` - - to run the benchmarks: - - native: - - `cd nonrust/barretenberg` - - `python native.py` - - browser: - - `cd nonrust/barretenberg/browser` - - `npm run preview` - - go to http://localhost:4173/ diff --git a/yarn-project/_bb-bench/bench_native.sh b/yarn-project/_bb-bench/bench_native.sh deleted file mode 100755 index 1b1ddfb07a6d..000000000000 --- a/yarn-project/_bb-bench/bench_native.sh +++ /dev/null @@ -1,4 +0,0 @@ -# WORKTODO: create proof dir if it doesn't exist -CIRCUIT=recursion -BB=../../../barretenberg/cpp/build/bin/bb -cd $CIRCUIT && BB_VERBOSE=1 $BB prove_and_verify_ultra_honk -b ./target/$CIRCUIT.json -w ./target/$CIRCUIT.gz -v \ No newline at end of file diff --git a/yarn-project/_bb-bench/index.html b/yarn-project/_bb-bench/index.html deleted file mode 100644 index 2b80fd81588d..000000000000 --- a/yarn-project/_bb-bench/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - wasm test - - - - - -
- -

Open the browser console to see the execution logs.

-
-

recursion benchmarks

-
-
- -

-
- (logs will appear after the execution ends) -
- - - \ No newline at end of file diff --git a/yarn-project/_bb-bench/main/Nargo.toml b/yarn-project/_bb-bench/main/Nargo.toml deleted file mode 100644 index 285c6d7dcfe3..000000000000 --- a/yarn-project/_bb-bench/main/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "main" -type = "bin" -authors = [""] -compiler_version = ">=0.31.0" - -[dependencies] diff --git a/yarn-project/_bb-bench/main/Prover.toml b/yarn-project/_bb-bench/main/Prover.toml deleted file mode 100644 index 2c1854573a40..000000000000 --- a/yarn-project/_bb-bench/main/Prover.toml +++ /dev/null @@ -1,2 +0,0 @@ -x = 1 -y = 2 diff --git a/yarn-project/_bb-bench/main/src/main.nr b/yarn-project/_bb-bench/main/src/main.nr deleted file mode 100644 index 6e170de75fca..000000000000 --- a/yarn-project/_bb-bench/main/src/main.nr +++ /dev/null @@ -1,3 +0,0 @@ -fn main(x : Field, y : pub Field) { - assert(x != y); -} diff --git a/yarn-project/_bb-bench/package.json b/yarn-project/_bb-bench/package.json deleted file mode 100644 index fdd975f31358..000000000000 --- a/yarn-project/_bb-bench/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "browser", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "run:native": "./bench_native.sh", - "compile-circuits": "NARGO=../../../noir/noir-repo/target/release/nargo && cd main && $NARGO compile && $NARGO execute && cd ../recursion && $NARGO compile && $NARGO execute", - "generate": "BB=../../../barretenberg/cpp/build/bin/bb && cd main && $BB prove_ultra_honk_output_all -b target/main.json -w target/main.gz --recursive" - }, - "devDependencies": { - "@aztec/foundation": "workspace:^", - "rollup-plugin-copy": "^3.5.0", - "vite": "^5.3.4" - }, - "dependencies": { - "@aztec/bb.js": "../barretenberg/ts", - "@noir-lang/noir_js": "file:../../noir/packages/noir_js" - } -} diff --git a/yarn-project/_bb-bench/recursion/Nargo.toml b/yarn-project/_bb-bench/recursion/Nargo.toml deleted file mode 100644 index b74431517bc7..000000000000 --- a/yarn-project/_bb-bench/recursion/Nargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "recursion" -type = "bin" -authors = [""] -compiler_version = ">=0.66.0" - -[dependencies] diff --git a/yarn-project/_bb-bench/recursion/Prover.toml b/yarn-project/_bb-bench/recursion/Prover.toml deleted file mode 100644 index d2507d3046ae..000000000000 --- a/yarn-project/_bb-bench/recursion/Prover.toml +++ /dev/null @@ -1,595 +0,0 @@ -key_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" -proof = [ - "0x0000000000000000000000000000000000000000000000000000000000000040", - "0x0000000000000000000000000000000000000000000000000000000000000011", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf", - "0x00000000000000000000000000000000000000000000000b75c020998797da78", - "0x0000000000000000000000000000000000000000000000005a107acb64952eca", - "0x000000000000000000000000000000000000000000000000000031e97a575e9d", - "0x00000000000000000000000000000000000000000000000b5666547acf8bd5a4", - "0x00000000000000000000000000000000000000000000000c410db10a01750aeb", - "0x00000000000000000000000000000000000000000000000d722669117f9758a4", - "0x000000000000000000000000000000000000000000000000000178cbf4206471", - "0x000000000000000000000000000000000000000000000000e91b8a11e7842c38", - "0x000000000000000000000000000000000000000000000007fd51009034b3357f", - "0x000000000000000000000000000000000000000000000009889939f81e9c7402", - "0x0000000000000000000000000000000000000000000000000000f94656a2ca48", - "0x000000000000000000000000000000000000000000000006fb128b46c1ddb67f", - "0x0000000000000000000000000000000000000000000000093fe27776f50224bd", - "0x000000000000000000000000000000000000000000000004a0c80c0da527a081", - "0x0000000000000000000000000000000000000000000000000001b52c2020d746", - "0x00000000000000000000000000000087048163cb8fb6df84f06da0ef11c7bcb9", - "0x00000000000000000000000000000000002486186d84437da79bbfff6970470f", - "0x00000000000000000000000000000047be6e723bfe4a17f7a0c02d89a408af00", - "0x0000000000000000000000000000000000276cdfccea0565858f4dc24411c29e", - "0x0000000000000000000000000000001351a3baf64e6bfe55a3ea563d56cbcbf8", - "0x000000000000000000000000000000000027e0597f556d1f3a6f0cc3109c8c99", - "0x000000000000000000000000000000f8e0ebc6a1c5570fb97f9d7e0e223bef4a", - "0x00000000000000000000000000000000002b5d16adc3b9f876a00240b4b52612", - "0x000000000000000000000000000000c123d24c2ad72c29dcc0ef6860042c9739", - "0x00000000000000000000000000000000002f6758fa4b2ddb0113d9e7d37a16ee", - "0x000000000000000000000000000000b2aa4d4cc131718a9d5d08166fe1a0d55d", - "0x000000000000000000000000000000000028f6296fbc4ecedfd914f993729b9a", - "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", - "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", - "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", - "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", - "0x00000000000000000000000000000079cf93b804469cfd1aed183baaeae73de8", - "0x00000000000000000000000000000000000e59187557f6855bde567cb35ede86", - "0x0000000000000000000000000000008bd253f9ec6d2aa0aa50326c8365f4771f", - "0x0000000000000000000000000000000000094ed7be0bdab40ba71f0b5a713f46", - "0x00000000000000000000000000000024f8f98da6b8d20b4bc11d40b917eefca6", - "0x0000000000000000000000000000000000060a5009534b2be1ab73d3d564bd3a", - "0x0000000000000000000000000000004cc25c407ee717a8a97cd3c603d1d0d1d2", - "0x00000000000000000000000000000000000709a97e3e8ed7df80b5e11d3821fa", - "0x0000000000000000000000000000002d373d73794a54002b7aa0651f61f21992", - "0x000000000000000000000000000000000010e14efed63334aff78eeb2460331f", - "0x000000000000000000000000000000a8fd863c6a7ae04005d6b80314a5c6da1c", - "0x00000000000000000000000000000000000ed81f29c0c9ddd8c77156d78426cc", - "0x0000000000000000000000000000000a2ad94f9d035c90beb57ec62ec33e611c", - "0x00000000000000000000000000000000002082bf8fe67eaffba2b5add0599436", - "0x0000000000000000000000000000008bda90eefa13748d23361b3699e6f23c2c", - "0x00000000000000000000000000000000000075acc50033e715f92c4e43bc3489", - "0x0c45370edeff19f3b1681bab351785ab8584136ab897402de8c6de7235b9bae7", - "0x241f17640232863606e82a0b4c69d2b1a2afd4ddc12230635b1b1721ba46451a", - "0x2a90866ae1a30365f04cfb37b9c189458979b1a7b5e2dc2f90e9b28d982bcab0", - "0x17c6aa67ebf92e3251daa275a8348870d6fb50806e87031f277a615f7116db96", - "0x017cbc48650d2700fcacdd118d77d5b841fc1ec3b081a3abc97ea6627a211260", - "0x0f3c52514351421cd499163871f3c7ed1ec5e4e1edd153adfff85818f2c16b20", - "0x13f293f9c41a4865f736ea623d1879f57169d1c8e420f32a1b29d7195936f3a9", - "0x1f987c15df20a9a7ee41124a907bf016a7e1573f7054cd710ebdb03eec6dd545", - "0x197a6414553bdbcadc9ca5a9bbaf6d4d9c5b955c8a9e6562694063bb1b4c587b", - "0x1b879f2ed343e7c29d3b7b3205d826f93ee0209ebdb1f1c3456377feadca0d05", - "0x0a7b4608511441e6396624145885e55314a8777297f5b735b62887f71ce1a679", - "0x07fa149d4be37c284a22eff25fa9093a3aa7442de9936f24c6cb993f186055cd", - "0x118dc56b396db3a7b7372a4bad2b555c83dee0492953eda9437b9739847edf3c", - "0x14eb5a9b19a69e413b34d1a7f2de2d88a004239a4d006e919a2655555f9f1952", - "0x0021e28ce5137466a2a939e59dee0880e702ebc75f6d49ab89a6460ae330e53f", - "0x2e7a54a99a2ff78f370d2519d6ddc50919cc2c81c7a0ef722715d1b9bfbea073", - "0x16dcd9e7ad91a0ad5037eb13dc118c6cb1ed13815dae23c9d833b1a33e876683", - "0x2a12ac337a1f08ff6549b22e5200465253b6aa9df761ccfd0bb39d4f4bb603bc", - "0x0f35772e6c3e036052fcd1815f5a783eca8702ebe032e78e811de33ba586379e", - "0x1f2d3861acb485d397fdd79f4b9ca707fd4399445890b3d9f7fd831d19d4b30f", - "0x0067dff27b7b596e0c2fe4474c99e073772e7ab98a0d23b564fd5576bd987473", - "0x21fc9dac4c5f306c84bf295742988c1bb1b3b4b01ede7784cc2b40b378307ef9", - "0x11dd85040ce8d488ac18dc7053e4a2ca83618bb82d55d8645bf2c5d33171c6a5", - "0x1b69f3567c23b3168871db8b9b0508a80af052c5a1ebe2b3ccd1825182755139", - "0x10f14141b969d8ae294d7e9a5166a5f5a8ed6beb67467aa9e37dcae0ccf2393a", - "0x14cf4b2130eeaabb18947417350119b6f40393128420f517a19d77bfadd5bf22", - "0x28915774ec94d0a3996ea12e15375864a235a1899aea3e69a857124dc7a8a298", - "0x16ea12102dc79509557dd5e421032e76c4e394823e961d3d08f52bf36cc48d84", - "0x302e4dac6fb1f9b4fd2ed6cbacffd1c24c000ced3242bbaad50b0f4aae79469c", - "0x14fa414d93599f7b61a2a2be73a9fc3f308f43b1fe88b9cdb8b38d22ce4c0d9b", - "0x270c4a9655983a1be1982aa0ab5df1a6c4f5c2d275d2cd0b54d574d0dd61dcd6", - "0x24f852098c546b5e483e9580466c6d5c9d3593445dbb2baca8d4e60b5a149012", - "0x053f3eeec13d45046a787a815752ce7f07ec31b875815cfddffc98f33f89a6c8", - "0x2a444d7fcc85b601b8c2b6124e7ec31d865fdc3df0e099fab0ebc2d2f5f4bf9c", - "0x15ff7e17b5a782a705fe07e23d69a4a647dd8e834f2323551d4becb1a254175f", - "0x14dc88d0c4fdb7fe03fdd6e027bc8b315c9276b0024a31e7bc4a6722473de58f", - "0x12389d8c665f45904d898966f54b08ab1f31a0ec2b96cfdff6e3b7295825d926", - "0x0caa88b916a46b8b3c5f07bd3e61b595e03f5b38fe8ac1596829826f50c07761", - "0x09ba4403571c5385ece27158ae779650dc660e86f932083514fd28f486077fe8", - "0x1a34de4a4a87b466986bd60881c661fbf67045e35ee154e046e4ed0200df565a", - "0x304edcf4a8278930725bfeb912c4d4f02702aa4a8ad27b2501bf67555dfcbb47", - "0x1e0741967c06cd4aa2b7d5c11b7ad3f6036d3b24e7c4d1c22d2351034418c9b9", - "0x2e0cc312d39fee9767b25900e8c5b1e967b6c5eeb2347708a46f498f1fb316d9", - "0x0ac6aeb2ccab4776091f31a1998ec0f88acbd19d3564180b89d8d9eec253d39d", - "0x2822b27747e6c56feeb13a52bd4c723d145a5776e532c84612aad800516edb14", - "0x2e21d17ebe315df1301219e6828d76c3ecf5d31b99733e3617249883158a6d5d", - "0x216561173c463315819dea3ca48cda6832060c640cdaa4ceaf3ed98c211d9f09", - "0x2b4ed72023e42021cfdd2651a23e1933c936cd71b61e1a73b1061188ac978bf2", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x25c2e91d0c8c91c978391d5bdc738753d166f52ac7fcb7cc1a2f3f8d98b62bc3", - "0x20272816637b5e051790079c60c753a421aeaa4bcc18768260f2fb27fed56f5c", - "0x1268c0bf5e426c62894ebf5d5a282558c4d10d36142c4ef4610e3cec77eeeb72", - "0x0dffffd347bacd9b2280171922d42e8d3a30dcd0e12d6c9e017528abc01e2ec4", - "0x0fe940670f28c4bf04913f1c1ef6884c129a3dff1c4ec532d2527b374fae7d45", - "0x2ba2f6f43094c1242267ae8a41454e9cc0b0746e5d25025cb67c74f763e2f44b", - "0x29cbde02c7b03ade1205a5c845299356bccd0366c4dc43a090eefff1bbc42f56", - "0x1097248f21f9c99fd340ee325e0f9571f2369f6f5fc74d082a265af1ab0fd382", - "0x282d1a582a06dc74c88039122ab48ce10df22d10c62f032df07fadd58ba7125b", - "0x00b611783c1a31df8358f52b513e11962026ce6f844fcdebd32365a880697a44", - "0x00f7c1ee92d421424d648c97db9bd44aa423e923d493c300103c25cd025de422", - "0x09e9afad87ff193580a4dcf11e87179fdb8e4fb858902caa32f9e16ae06d3be4", - "0x0a0b1ee3a1c037a8b8ce97c3047546b0d85ec1df4a732a896377ab6f28ab8555", - "0x0556b9d85371910d9fa2dfd5f781e9abcebb26382842ca31d6289dccffc019ac", - "0x02a7e48487cbcf5d0fbb5371a2084a7416550cb1c9727909b0fa43fe9f62f1c7", - "0x0b10be6d9bc474c289e9eac096e735fde126ea95aa6cf8a19100aa795950d8f6", - "0x1cd57fbd5fbd59909aa080ead5d72f58f6bf457d9b23007fed34f4b786483a7d", - "0x068e850711971f2ee1657471e34f5933569a030ebf64b6edefb4f639044c4a2a", - "0x0b8834356129b4dac9269c978136f4fe506a6b6337a4c42e0350ace7b59e89ac", - "0x02ecce925b12ecf5babd358cfd2b605abe73602851f1b586e561166fd8e2055f", - "0x2df140575d0b28c80a99f8a8ca5ddf240ceaee49fd33670d08fe3a6947d0bac7", - "0x0beeaf45b33966e97afef156b28220119069600be0ceb1a9b3d2fe35ba62ebac", - "0x0700755b2315565c37c393cc5eca71abada8e0aacd02efbbbb5bc2611af8b49b", - "0x2317767fbec3ab1d80061f538828e3ff55171102bf0f2c2c698bfd56c59c9b3e", - "0x112d967a064fca0bf0963b8db1b019c2c3210da95056bb60613c222d8d4ec031", - "0x14555572e5e0187cb425958b33f5662196390f716e0fb33e234a9e087ad68261", - "0x1188a85b589e07642df9a152ec0c6516a59ef65840980df22fc538e948e75f33", - "0x2c9465ef4be2a84272cf4aff142d1c761cf884f3cc8757232d8d52a28f2489cc", - "0x07f1e21c7d585ac6fc45b06da79233e52d7694a85dae81809db5d70961e6113d", - "0x0cc540a6ae9290470deec69541c2b762b1417ea2b417879de74f4f8de6a2256c", - "0x0f6afd11686a2e1d39882f76603858a43751039fcfa37c3f048688fe3f267551", - "0x282bfc3f4517053398713efb7ca3dffc2495f56abd80c75f837e27adabe1e8fb", - "0x0607b00c2e3bbe8de6b8f11013e0b70ab75f7232c8e81268d93df8fd48af9834", - "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", - "0x066d2c06196893ee874cf02b84a7784c00bd876f90ccc194eadf594aa8e5bead", - "0x06eea0bc738499a4e87dccb6b5694f2366992756a0e3712b92d25885a69d42a7", - "0x176a4def0d503ff9816008e893dbe5f9efc1d315628491e2651bb62baf9133f1", - "0x0541819af8759df6e8b9a7a4f9551ba58e1ab1d7a8aeea5bb0bcce8fe25389fa", - "0x2c082f2b1ab20d237efed9ef507a3ec66ffb8f776f0853494a790b85e9e6959b", - "0x2380f93f51fc17ea7ff4ce5f94c327ebbf35cf96a4a658e7864be06bba0451e3", - "0x000000000000000000000000000000c9b51f3eb0ac0d865d8ed03b1079d74c05", - "0x00000000000000000000000000000000001ca4806bab49ff45e62ef00af8dcda", - "0x000000000000000000000000000000b25425c2869931def122b407e6d248b112", - "0x00000000000000000000000000000000002879495264f8ddf5b81a261d1ccabf", - "0x00000000000000000000000000000033278b2f104c24852f492de45ea92dbf1a", - "0x00000000000000000000000000000000001b35d015f09b30fe9844801b65acd1", - "0x0000000000000000000000000000008abff03740ed0cd61f7767c59f9dfd8048", - "0x00000000000000000000000000000000002a374139440f421d1f58be7d5664b5", - "0x0000000000000000000000000000000aa659b3593bdfc7e5ecbe4955cdf90852", - "0x00000000000000000000000000000000000c5bfd1d47f1bce9ddc35e9a812d49", - "0x000000000000000000000000000000f1dbefb286dcfc7454cd337d31fa845f2c", - "0x00000000000000000000000000000000000ad8f8741c06a2ce109adf8bddc5c7", - "0x0000000000000000000000000000003ac6e75aed6c7d5d476eef2a4df4352bee", - "0x000000000000000000000000000000000005c8cc30285eb82c5ca3dfd43f080d", - "0x0000000000000000000000000000000b185101dad5047d689f074d2afbd14ee2", - "0x0000000000000000000000000000000000107807c004d7a90ec6fcdc4b57c61e", - "0x00000000000000000000000000000005e19f0b52ec5734f4bfb13072363dcd8e", - "0x00000000000000000000000000000000002f08887c363eb5c1175e615dadb5a6", - "0x0000000000000000000000000000001581548ba8db715d4daf98844aa814dd8b", - "0x0000000000000000000000000000000000009ce921295670ecc4ed755c416d47", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x089cf88680c944191d60f6fe42d63321fdf380d62d29d921f063e681bd6f905f", - "0x0ecfeb8601dfbb024990738e900c09a283397f260ac3a7063acde9c29a28053d", - "0x117738183e9a6f8f6207695c2dcb4d4570f1233c4ea2ed1aa4b1b4f3e09a34cb", - "0x079a15aa460a47222c7dad43e12c6bb0168bbe098033465e57bafdafd8c78db5", - "0x210a25799bc6045c71ac3eba505f4123b59b6d4000cda691cb0d4eab54cbd191", - "0x08de49f45e144f96b6b94b1c35fe975cb592f55621197b2fbec1fce7859120cd", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000000000292d3a3673055d25cf56b751f61c8299a9", - "0x0000000000000000000000000000000000026668a3d2aa4988e45280caa7377f", - "0x000000000000000000000000000000103b3a2495e3c8082a864aa8d5f1438edb", - "0x0000000000000000000000000000000000052e1918e0434ba14e70dc245ddfb7", - "0x000000000000000000000000000000e8602ff5bbc69c7c86ebf2bbd6bf00343f", - "0x00000000000000000000000000000000002f7ce8600b056d6a6e42e3022d2859", - "0x0000000000000000000000000000000566cb164642bc5503ac8ab839a9aff291", - "0x00000000000000000000000000000000001656dccbaad07078abc9ec4d334bf2", -] -public_inputs = [ - "0x0000000000000000000000000000000000000000000000000000000000000002", -] -verification_key = [ - "0x0000000000000000000000000000000000000000000000000000000000000040", - "0x0000000000000000000000000000000000000000000000000000000000000011", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000003", - "0x0000000000000000000000000000000000000000000000000000000000000004", - "0x0000000000000000000000000000000000000000000000000000000000000005", - "0x0000000000000000000000000000000000000000000000000000000000000006", - "0x0000000000000000000000000000000000000000000000000000000000000007", - "0x0000000000000000000000000000000000000000000000000000000000000008", - "0x0000000000000000000000000000000000000000000000000000000000000009", - "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x000000000000000000000000000000000000000000000000000000000000000b", - "0x000000000000000000000000000000000000000000000000000000000000000c", - "0x000000000000000000000000000000000000000000000000000000000000000d", - "0x000000000000000000000000000000000000000000000000000000000000000e", - "0x000000000000000000000000000000000000000000000000000000000000000f", - "0x0000000000000000000000000000000000000000000000000000000000000010", - "0x000000000000000000000000000000a8c8cc8ddd4a99148e6d07f1df5187e483", - "0x00000000000000000000000000000000001de81301b39c2c695ec21fec0a0247", - "0x0000000000000000000000000000002150a8651ce31b3541457e70c5664c3130", - "0x000000000000000000000000000000000009650e9dd6c751c17f8fe4d485b15a", - "0x000000000000000000000000000000324a06ab3f91db70f74999ae804b01913d", - "0x0000000000000000000000000000000000247cd15b8cb7bcc68d1a9298c89c7c", - "0x000000000000000000000000000000337f3d0f63fbc50ec98e70fd1d6aece525", - "0x00000000000000000000000000000000000956f29100ad56f516e047143f8088", - "0x000000000000000000000000000000d2e9aa2c6e54009aab0d62fad69323d1a6", - "0x000000000000000000000000000000000028af520b87bbb637cc65bc731647bb", - "0x00000000000000000000000000000013b6a29f448c1472e9fcbf3ba4106f3b8c", - "0x0000000000000000000000000000000000088f2bb3c71e3e3a0237b2abb5c69c", - "0x00000000000000000000000000000055f6e10177ed1a8b34a769df4ceb7f167d", - "0x00000000000000000000000000000000001fd08c0fd2719f942943c1827d1f2c", - "0x00000000000000000000000000000032953330d43cad58d0afb8b07840c91dec", - "0x00000000000000000000000000000000002c004dc89326c7a22d126130396137", - "0x000000000000000000000000000000cd3e462c6a3906d31062f210e6a002f10b", - "0x00000000000000000000000000000000000fed3f51e3147e50ed07e6ab85fe5c", - "0x00000000000000000000000000000056325680bde153912e21db9f9b8811aa48", - "0x000000000000000000000000000000000016866ebe14e73c8c7c6ee7e48d77a1", - "0x0000000000000000000000000000002342d214f53b0426a5040f67e2fb5186b9", - "0x000000000000000000000000000000000009d7bc86c741d0b4a5cf1fc76f15ee", - "0x0000000000000000000000000000008054db3b0843b15184543661e07d41fd77", - "0x0000000000000000000000000000000000200f0ac7e0c149049ff946ae7eb668", - "0x000000000000000000000000000000bc3661650d53f9b24d923d8f404cb0bbc9", - "0x00000000000000000000000000000000000c4032c3079594eb75a8449d3d5ce8", - "0x00000000000000000000000000000054eb5fe796a0ca89441369b7c24301f851", - "0x00000000000000000000000000000000001084d709650356d40f0158fd6da81f", - "0x0000000000000000000000000000009f14760f1c1a73b7f983d8ef4f4493cc7e", - "0x00000000000000000000000000000000000cf0c8b0771199c10b0e39ce6f603b", - "0x0000000000000000000000000000006b468ac452eead94b0550f93ada8995c58", - "0x00000000000000000000000000000000000ac772afd45b2f736d7a87cc83dc1c", - "0x00000000000000000000000000000089426a481c616eccc3c4dfdec92b5c4f88", - "0x00000000000000000000000000000000002dd40f29b553d279524bd54aa1f11e", - "0x00000000000000000000000000000012d2edc48feb388fd685730874e3ced77e", - "0x00000000000000000000000000000000001a15eb2b67468425209b384b0ca2f5", - "0x000000000000000000000000000000c91386bec1cdf05451ce4915dcbf4d340c", - "0x00000000000000000000000000000000001f0726235025cac62a56e9e6a6983d", - "0x000000000000000000000000000000638809020a57843f3f4cc7933b77effa98", - "0x000000000000000000000000000000000006e0242610dd531470885e9c150693", - "0x00000000000000000000000000000045ca32aacaf62e026424ed3f0b9f055e0d", - "0x000000000000000000000000000000000010068742f2aa61171f9ed76f9be841", - "0x000000000000000000000000000000cd8bdd71c0fb77dde2ef4d254c6a828c06", - "0x00000000000000000000000000000000002cb0b65e0510c6b14a74e46e49ef20", - "0x000000000000000000000000000000f68b70e0e4b0cb9e2c7bd64fa4b75b32dd", - "0x00000000000000000000000000000000001bcedd9106bdd4e13e0b751c672a83", - "0x00000000000000000000000000000042fd857eb4bf620db08b0e181807df9f59", - "0x00000000000000000000000000000000001ccfa89524772b4bd5b6bf6741d71f", - "0x000000000000000000000000000000a35a8758e8de801673cea21e9a03b7ff4a", - "0x00000000000000000000000000000000001a81d9ac52aa2a7fde7ee8b78f3606", - "0x000000000000000000000000000000a0e7fc566a64737406aeeabe279ece22ba", - "0x00000000000000000000000000000000001d22d13122365e7ce6b1015f81eb2b", - "0x000000000000000000000000000000af495d285fc076e71869b790fb924caa6b", - "0x0000000000000000000000000000000000170a45bbed6081116bd6bc2bc8e013", - "0x00000000000000000000000000000066c93722154710a4b17c5ec4771449cd36", - "0x0000000000000000000000000000000000088ccad85dd53f5516c74eeebf4cb2", - "0x0000000000000000000000000000001b5ed533172838f9004373caa06e4e771f", - "0x000000000000000000000000000000000013ccb16a0fdef0c273b20a84ed0b3e", - "0x000000000000000000000000000000c7e84a5f0d90460d54a2ba4d404f46704b", - "0x00000000000000000000000000000000000b34126647568e29587731e7318989", - "0x000000000000000000000000000000b86da4d3f3241895e9100736167ff1e915", - "0x000000000000000000000000000000000014344c1abfea2b41be3debe8bca059", - "0x00000000000000000000000000000096f4b5efef85b824046660084c0fc2684b", - "0x00000000000000000000000000000000001686c9f12d5f4684fe0935a5fdceae", - "0x0000000000000000000000000000004ef740b6e4bc3318801495e2904a9339ba", - "0x0000000000000000000000000000000000249545abffb101721dd4d894a540d4", - "0x0000000000000000000000000000007d1fd82e0d84774f4bb9569c0c58885ad1", - "0x0000000000000000000000000000000000289114ea0b2b88b1ddd5b3d37ddfbd", - "0x0000000000000000000000000000008c0eb2e2e95012f5a4335f5a0fb49b5640", - "0x0000000000000000000000000000000000190689ec49ef28f99274cb5e570c77", - "0x000000000000000000000000000000cb67ca688ed1078fc116f69d2654624e93", - "0x00000000000000000000000000000000002c8bf1909a4269c8d3f29b9b189b28", - "0x00000000000000000000000000000025142c9dfeb43e14177b98187b3feebc70", - "0x00000000000000000000000000000000001ea0ebab9d4ee2eb2882931707febb", - "0x000000000000000000000000000000101d9c2f3a1103f5ea5c58087a671a934a", - "0x00000000000000000000000000000000000376830349cae9e322e7bbe986e957", - "0x0000000000000000000000000000000d01ea16df9dda0a0bd33b547fd2e45ef2", - "0x0000000000000000000000000000000000247530c4144e2f9165f876abd55ff2", - "0x000000000000000000000000000000228ea3bddfba92ccbf2f4848bd675fcdcf", - "0x00000000000000000000000000000000001ecd2996a4e09c3273c2934022ca3d", - "0x000000000000000000000000000000484cd91cef737788aa44a78e5bc1c9e597", - "0x00000000000000000000000000000000001f4e375294b495a3f66088d75044ee", - "0x0000000000000000000000000000009b599c97da21bfd1859296bc7c1ceb79b7", - "0x000000000000000000000000000000000007aba46b520066e27054bd1978e6eb", - "0x0000000000000000000000000000002b1c1c2637db3f8fecd9d8bb38442cc468", - "0x00000000000000000000000000000000000450f8716810dff987300c3bc10a89", - "0x0000000000000000000000000000005db2bf83f8a194086a4cca39916b578faf", - "0x000000000000000000000000000000000010005567f9eb3d3a97098baa0d71c6", - "0x00000000000000000000000000000031e12e1ce3a444583203ea04c16ec69eb2", - "0x0000000000000000000000000000000000103bcf2cf468d53c71d57b5c0ab312", - "0x0000000000000000000000000000004207277f4116e0af5a9268b38a5d34910b", - "0x00000000000000000000000000000000000c5d6e7a8b0b14d4ed8f51217ae8af", - "0x00000000000000000000000000000083bc4ff48edd6aa66759994187f28dd173", - "0x000000000000000000000000000000000017cb85a0f539b780ee6319982f5ba4", - "0x00000000000000000000000000000012fb642de7b51efcce75a189bdf598f3b8", - "0x000000000000000000000000000000000026fa70b6c942ddd3700064b48ba1ee", - "0x000000000000000000000000000000eb0ab515191143e5a3c8bd587526486628", - "0x0000000000000000000000000000000000132b76a71278e567595f3aaf837a72", - "0x0000000000000000000000000000002c37ccc495848c2887f98bfbaca776ca39", - "0x00000000000000000000000000000000002c6b2a0de0a3fefdfc4fb4f3b8381d", - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000f079744ec926fc2a41fb8a0489d1fb444", - "0x000000000000000000000000000000000026131fc1251eb7746e72a19f9f9b25", - "0x000000000000000000000000000000867f03abc37431898437d94c0822213fbb", - "0x000000000000000000000000000000000003588be01690f20304e3d200c3b81a", -] diff --git a/yarn-project/_bb-bench/recursion/src/main.nr b/yarn-project/_bb-bench/recursion/src/main.nr deleted file mode 100644 index c5f6a756b67d..000000000000 --- a/yarn-project/_bb-bench/recursion/src/main.nr +++ /dev/null @@ -1,29 +0,0 @@ -use std::hash::poseidon; - -// This circuit aggregates a single Honk proof from `assert_statement`. -global SIZE_OF_PROOF_IF_LOGN_IS_28: u32 = 459; -global HONK_IDENTIFIER: u32 = 1; -fn main( - verification_key: [Field; 128], - // This is the proof without public inputs attached. - // This means: the size of this does not change with the number of public inputs. - proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], - public_inputs: pub [Field; 1], - // This is currently not public. It is fine given that the vk is a part of the circuit definition. - // I believe we want to eventually make it public too though. - mut key_hash: Field, -) { - std::verify_proof_with_type( - verification_key, - proof, - public_inputs, - key_hash, - HONK_IDENTIFIER, - ); - - for _ in 0..250 { - key_hash += poseidon::bn254::hash_1([key_hash]); - } - - assert(key_hash != 0); -} diff --git a/yarn-project/_bb-bench/src/main.js b/yarn-project/_bb-bench/src/main.js deleted file mode 100644 index 397b3a40b350..000000000000 --- a/yarn-project/_bb-bench/src/main.js +++ /dev/null @@ -1,158 +0,0 @@ -import { UltraHonkBackend } from '@aztec/bb.js'; - -import { Noir } from '@noir-lang/noir_js'; -import createDebug from 'debug'; - -import main from '../main/target/main.json'; -import recursion from '../recursion/target/recursion.json'; - -const logger = createDebug('bb-bench:'); - -/* eslint-disable no-console */ - -// Function to set up the output element and redirect all console output -function setupConsoleOutput() { - const container = document.createElement('div'); - container.style.marginBottom = '10px'; - document.body.appendChild(container); - - const copyButton = document.createElement('button'); - copyButton.innerText = 'Copy Logs to Clipboard'; - copyButton.style.marginBottom = '10px'; - copyButton.addEventListener('click', () => { - const logContent = logContainer.textContent || ''; // Get text content of log container - navigator.clipboard - .writeText(logContent) - .then(() => { - alert('Logs copied to clipboard!'); - }) - .catch(err => { - console.error('Failed to copy logs:', err); - }); - }); - container.appendChild(copyButton); - - const logContainer = document.createElement('pre'); - logContainer.id = 'logOutput'; - logContainer.style.border = '1px solid #ccc'; - logContainer.style.padding = '10px'; - logContainer.style.maxHeight = '400px'; - logContainer.style.overflowY = 'auto'; - container.appendChild(logContainer); - - // Helper to append messages to logContainer - function addLogMessage(message) { - logContainer.textContent += message + '\n'; - logContainer.scrollTop = logContainer.scrollHeight; // Auto-scroll to the bottom - } - - // Override console methods to output clean logs - const originalLog = console.log; - const originalDebug = console.debug; - - console.log = function (...args) { - const message = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : arg, - ) - .join(' '); - originalLog.apply(console, args); // Keep original behavior - addLogMessage(message); - }; - - console.debug = function (...args) { - const message = args - .map(arg => - typeof arg === 'string' - ? arg - .replace(/%c/g, '') - .replace(/color:.*?(;|$)/g, '') - .trim() - : arg, - ) - .join(' '); - originalDebug.apply(console, args); // Keep original behavior - addLogMessage(message); - }; -} - -document.getElementById('bbProveMulti').addEventListener('click', async () => { - // Currently if you pass a non-power of 2 number of threads, you only get as many as the nearest smaller power of two - // We expect this to be easy to fix. - prove(1 << Math.log2(navigator.hardwareConcurrency)); -}); - -document.getElementById('bbProveSingle').addEventListener('click', async () => { - prove(1); -}); - -const prove = async threads => { - console.log(`Running with ${threads} threads`); - try { - var backend = new UltraHonkBackend(main.bytecode, { threads }, { recursive: true }); - var noir = new Noir(main); - const baseInput = { - x: 1, - y: 2, - }; - - // generate the base proof - console.log('Generating base witness... ⌛'); - var startTime = performance.now(); - var { witness } = await noir.execute(baseInput); // WORKTODO: this has to change - var endTime = performance.now(); - console.log(`Witness generation took ${endTime - startTime} ms`); - - console.log('Generating base proof... ⌛'); - startTime = performance.now(); - const baseProof = await backend.generateProof(witness); - endTime = performance.now(); - console.log('Generating base proof... ✅'); - console.log(`Base proof generation took ${endTime - startTime} ms`); - - console.log('Verifying base proof... ⌛'); - var isValid = await backend.verifyProof(baseProof); - if (isValid) console.log('Verifying base proof... ✅'); - - const proofArtifacts = await backend.generateRecursiveProofArtifacts(baseProof.proof, baseProof.publicInputs); - - // generate the recursion proof - backend = new UltraHonkBackend(recursion.bytecode, { threads: threads }, { recursive: false }); - noir = new Noir(recursion); - const { publicInputs } = baseProof; - const { vkAsFields, proofAsFields, vkHash } = proofArtifacts; - const recursionInput = { - verification_key: vkAsFields, - proof: proofAsFields, - public_inputs: [publicInputs[0]], - key_hash: vkHash, - }; - - console.log('Generating recursion witness... ⌛'); - startTime = performance.now(); - var { witness } = await noir.execute(recursionInput); - endTime = performance.now(); - console.log(`Witness generation took ${endTime - startTime} ms`); - - console.log('Generating recursion proof... ⌛'); - startTime = performance.now(); - const recursionProof = await backend.generateProof(witness); - endTime = performance.now(); - console.log(`Recursive proof generation took ${endTime - startTime} ms`); - - console.log('Verifying recursion proof... ⌛'); - isValid = await backend.verifyProof(recursionProof); - if (isValid) console.log('Verifying recursion proof... ✅'); - } catch (err) { - console.error(`Proof generation failed: ${err}`); - } -}; - -document.addEventListener('DOMContentLoaded', function () { - setupConsoleOutput(); // Initialize console output capture -}); diff --git a/yarn-project/_bb-bench/vite.config.js b/yarn-project/_bb-bench/vite.config.js deleted file mode 100644 index 30940d15921c..000000000000 --- a/yarn-project/_bb-bench/vite.config.js +++ /dev/null @@ -1,64 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import copy from 'rollup-plugin-copy'; -import { defineConfig } from 'vite'; - -const wasmContentTypePlugin = { - name: 'wasm-content-type-plugin', - configureServer(server) { - server.middlewares.use(async (req, res, next) => { - if (req.url.endsWith('.wasm')) { - res.setHeader('Content-Type', 'application/wasm'); - const newPath = req.url.replace('deps', 'dist'); - const targetPath = path.join(__dirname, newPath); - const wasmContent = fs.readFileSync(targetPath); - return res.end(wasmContent); - } - next(); - }); - }, -}; - -export default defineConfig(({ command }) => { - if (command === 'serve') { - return { - server: { - host: true, - headers: { - 'Cross-Origin-Embedder-Policy': 'require-corp', - 'Cross-Origin-Opener-Policy': 'same-origin', - }, - }, - build: { - target: 'esnext', - rollupOptions: { - external: ['@aztec/bb.js'], - }, - }, - optimizeDeps: { - esbuildOptions: { - target: 'esnext', - }, - }, - plugins: [ - copy({ - targets: [{ src: 'node_modules/**/*.wasm', dest: 'node_modules/.vite/dist' }], - copySync: true, - hook: 'buildStart', - }), - command === 'serve' ? wasmContentTypePlugin : [], - ], - }; - } - - return { - build: { - target: 'esnext', - }, - optimizeDeps: { - esbuildOptions: { - target: 'esnext', - }, - }, - }; -}); diff --git a/yarn-project/package.json b/yarn-project/package.json index abeaa31ec471..5d262be82f2c 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -25,7 +25,6 @@ "aztec-faucet", "aztec-node", "validator-client", - "_bb-bench", "bb-bench", "bb-prover", "blob-sink", diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index d0780541a29a..af06f68ea113 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -2071,13 +2071,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/aix-ppc64@npm:0.24.0" @@ -2092,13 +2085,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm64@npm:0.24.0" @@ -2113,13 +2099,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-arm@npm:0.24.0" @@ -2134,13 +2113,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/android-x64@npm:0.24.0" @@ -2155,13 +2127,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-arm64@npm:0.24.0" @@ -2176,13 +2141,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/darwin-x64@npm:0.24.0" @@ -2197,13 +2155,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-arm64@npm:0.24.0" @@ -2218,13 +2169,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/freebsd-x64@npm:0.24.0" @@ -2239,13 +2183,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm64@npm:0.24.0" @@ -2260,13 +2197,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-arm@npm:0.24.0" @@ -2281,13 +2211,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ia32@npm:0.24.0" @@ -2302,13 +2225,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-loong64@npm:0.24.0" @@ -2323,13 +2239,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-mips64el@npm:0.24.0" @@ -2344,13 +2253,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-ppc64@npm:0.24.0" @@ -2365,13 +2267,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-riscv64@npm:0.24.0" @@ -2386,13 +2281,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-s390x@npm:0.24.0" @@ -2407,13 +2295,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/linux-x64@npm:0.24.0" @@ -2428,13 +2309,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/netbsd-x64@npm:0.24.0" @@ -2456,13 +2330,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/openbsd-x64@npm:0.21.5" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/openbsd-x64@npm:0.24.0" @@ -2477,13 +2344,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/sunos-x64@npm:0.21.5" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/sunos-x64@npm:0.24.0" @@ -2498,13 +2358,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-arm64@npm:0.21.5" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-arm64@npm:0.24.0" @@ -2519,13 +2372,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-ia32@npm:0.21.5" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-ia32@npm:0.24.0" @@ -2540,13 +2386,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-x64@npm:0.21.5" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.24.0": version: 0.24.0 resolution: "@esbuild/win32-x64@npm:0.24.0" @@ -4732,13 +4571,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.31.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-android-arm64@npm:4.27.4" @@ -4746,13 +4578,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-android-arm64@npm:4.31.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-arm64@npm:4.27.4" @@ -4760,13 +4585,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.31.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-darwin-x64@npm:4.27.4" @@ -4774,13 +4592,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.31.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-arm64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-arm64@npm:4.27.4" @@ -4788,13 +4599,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.31.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-x64@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-freebsd-x64@npm:4.27.4" @@ -4802,13 +4606,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.31.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4" @@ -4816,13 +4613,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.31.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4" @@ -4830,13 +4620,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.31.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.27.4" @@ -4844,13 +4627,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.31.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.27.4" @@ -4858,20 +4634,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.31.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.31.0" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4" @@ -4879,13 +4641,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.31.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4" @@ -4893,13 +4648,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.31.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-s390x-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.27.4" @@ -4907,13 +4655,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.31.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.27.4" @@ -4921,13 +4662,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.31.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-linux-x64-musl@npm:4.27.4" @@ -4935,13 +4669,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.31.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.27.4" @@ -4949,13 +4676,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.31.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.27.4" @@ -4963,13 +4683,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.31.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.27.4": version: 4.27.4 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.27.4" @@ -4977,13 +4690,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.31.0": - version: 4.31.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.31.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": version: 1.1.6 resolution: "@scure/base@npm:1.1.6" @@ -5611,25 +5317,6 @@ __metadata: languageName: node linkType: hard -"@types/fs-extra@npm:^8.0.1": - version: 8.1.5 - resolution: "@types/fs-extra@npm:8.1.5" - dependencies: - "@types/node": "npm:*" - checksum: 10/565d9e55cd05064b3ab272b8748ed512b8fa5cddc23fd32b0d5f147f9ea3a45981577c4478b5060cae7b3d914c508bd2ea97eb84d9c1fa6f967982c892e4ab26 - languageName: node - linkType: hard - -"@types/glob@npm:^7.1.1": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: 10/6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 - languageName: node - linkType: hard - "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -5979,13 +5666,6 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 - languageName: node - linkType: hard - "@types/minimist@npm:^1.2.0": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" @@ -8141,18 +7821,6 @@ __metadata: languageName: node linkType: hard -"browser@workspace:_bb-bench": - version: 0.0.0-use.local - resolution: "browser@workspace:_bb-bench" - dependencies: - "@aztec/bb.js": ../barretenberg/ts - "@aztec/foundation": "workspace:^" - "@noir-lang/noir_js": "file:../../noir/packages/noir_js" - rollup-plugin-copy: "npm:^3.5.0" - vite: "npm:^5.3.4" - languageName: unknown - linkType: soft - "browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -9011,13 +8679,6 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^1.1.0": - version: 1.4.0 - resolution: "colorette@npm:1.4.0" - checksum: 10/c8d6c8c3ef5a99acfc3dd9a68f48019f1479ec347551387e4a1762e40f69e98ce19d4dc321ffb4919d1f28a7bdc90c39d4e9a901f4c474fd2124ad93a00c0454 - languageName: node - linkType: hard - "colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.20, colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -10990,86 +10651,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10/d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b - languageName: node - linkType: hard - "esbuild@npm:^0.24.0": version: 0.24.0 resolution: "esbuild@npm:0.24.0" @@ -11755,19 +11336,6 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.0.3": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10/dcc6432b269762dd47381d8b8358bf964d8f4f60286ac6aa41c01ade70bda459ff2001b516690b96d5365f68a49242966112b5d5cc9cd82395fa8f9d017c90ad - languageName: node - linkType: hard - "fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" @@ -12171,17 +11739,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^8.1.0": - version: 8.1.0 - resolution: "fs-extra@npm:8.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^4.0.0" - universalify: "npm:^0.1.0" - checksum: 10/6fb12449f5349be724a138b4a7b45fe6a317d2972054517f5971959c26fbd17c0e145731a11c7324460262baa33e0a799b183ceace98f7a372c95fbb6f20f5de - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -12217,7 +11774,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -12236,7 +11793,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -12560,22 +12117,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:10.0.1": - version: 10.0.1 - resolution: "globby@npm:10.0.1" - dependencies: - "@types/glob": "npm:^7.1.1" - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.0.3" - glob: "npm:^7.1.3" - ignore: "npm:^5.1.1" - merge2: "npm:^1.2.3" - slash: "npm:^3.0.0" - checksum: 10/ea724a820d7d4eafc5aa3882d667a7ef3505b3018652b2658185d58752f122b75d3370086e4d4a7b1bbcdf8c2e700e5709a48db189a930df37005e1b3c86c256 - languageName: node - linkType: hard - "globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -13221,13 +12762,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 - languageName: node - linkType: hard - "ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -13780,13 +13314,6 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^3.0.0": - version: 3.0.1 - resolution: "is-plain-object@npm:3.0.1" - checksum: 10/d13fe75db350d4ac669595cdfe0242ae87fcecddf2bca858d2dd443a6ed6eb1f69951fac8c2fa85b16106c6b0d7738fea86c2aca2ecee7fd61de15c1574f2cc5 - languageName: node - linkType: hard - "is-port-reachable@npm:4.0.0": version: 4.0.0 resolution: "is-port-reachable@npm:4.0.0" @@ -14997,18 +14524,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: "npm:^4.1.6" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10/17796f0ab1be8479827d3683433f97ebe0a1c6932c3360fa40348eac36904d69269aab26f8b16da311882d94b42e9208e8b28e490bf926364f3ac9bff134c226 - languageName: node - linkType: hard - "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -15907,7 +15422,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -15931,7 +15446,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.8": +"micromatch@npm:^4.0.2": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -16541,7 +16056,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.25, nanoid@npm:^3.3.8": +"nanoid@npm:^3.1.25": version: 3.3.8 resolution: "nanoid@npm:3.3.8" bin: @@ -17549,7 +17064,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.0": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 @@ -17788,17 +17303,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.43": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10/1fbd28753143f7f03e4604813639918182b15343c7ad0f4e72f3875fc2cc0b8494c887f55dc05008fad5fbf1e1e908ce2edbbce364a91f84dcefb71edf7cd31d - languageName: node - linkType: hard - "precinct@npm:^8.1.0": version: 8.3.1 resolution: "precinct@npm:8.3.1" @@ -18844,19 +18348,6 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-copy@npm:^3.5.0": - version: 3.5.0 - resolution: "rollup-plugin-copy@npm:3.5.0" - dependencies: - "@types/fs-extra": "npm:^8.0.1" - colorette: "npm:^1.1.0" - fs-extra: "npm:^8.1.0" - globby: "npm:10.0.1" - is-plain-object: "npm:^3.0.0" - checksum: 10/706ba6bd2052b95d1037f12963ff4b50749730f18aefad10544f9574aff7c035c88c5dd9ae1f0c0408cf09862e595a0ea4d68e13c2717addaea2bda3ade0d0e0 - languageName: node - linkType: hard - "rollup@npm:^3.27.1": version: 3.29.4 resolution: "rollup@npm:3.29.4" @@ -18871,78 +18362,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.20.0": - version: 4.31.0 - resolution: "rollup@npm:4.31.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.31.0" - "@rollup/rollup-android-arm64": "npm:4.31.0" - "@rollup/rollup-darwin-arm64": "npm:4.31.0" - "@rollup/rollup-darwin-x64": "npm:4.31.0" - "@rollup/rollup-freebsd-arm64": "npm:4.31.0" - "@rollup/rollup-freebsd-x64": "npm:4.31.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.31.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.31.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.31.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.31.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.31.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.31.0" - "@rollup/rollup-linux-x64-musl": "npm:4.31.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.31.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.31.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.31.0" - "@types/estree": "npm:1.0.6" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loongarch64-gnu": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10/4f5fac0a0df7878ca810512c283df0e81b21d42fed262943b412c488a30beceb0149a4be36dbf2750b6c5cbfa4d4cf5097a134266f1425a9e213c2a2a09853fc - languageName: node - linkType: hard - "rollup@npm:^4.4.0": version: 4.27.4 resolution: "rollup@npm:4.27.4" @@ -19625,13 +19044,6 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 - languageName: node - linkType: hard - "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -21288,13 +20700,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 10/40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -21587,49 +20992,6 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.3.4": - version: 5.4.14 - resolution: "vite@npm:5.4.14" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10/ce382f4059eb6c939823b8f62163794752243755d84c71a4b73ad0f7d4d9f4c7a557a6ef4c78e0640f4bcf5ae5ec6b20c7ee4816419af3c81ba275f478b73468 - languageName: node - linkType: hard - "vm-browserify@npm:^1.0.0": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" From 8b9bc55bc0f01091d54aa01b9e58506fb519e3fd Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 20:12:32 +0000 Subject: [PATCH 33/43] update readme --- yarn-project/bb-bench/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn-project/bb-bench/README.md b/yarn-project/bb-bench/README.md index a953e2c74add..4cdaa6fa9ec4 100644 --- a/yarn-project/bb-bench/README.md +++ b/yarn-project/bb-bench/README.md @@ -1,3 +1,3 @@ -# IVC Integration +# Prover benchmarking suite -This module is used to test the IVC integration between mock noir protocol circuits and barretenberg. +The goal of this module is to provide a simple place for people to construct benchmarks of witness generation and proving performance. At the moment it only pertains to UltraHonk recursion, but we have a similar module in ivc-integration that shows prover performance of our ClientIVC suite. From d70791dcdec96b26312e679f52f44e61bbbff8ff Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 21 Jan 2025 20:13:45 +0000 Subject: [PATCH 34/43] rename more generically --- yarn-project/package.json | 2 +- yarn-project/{bb-bench => prover-bench}/.eslintrc.cjs | 0 yarn-project/{bb-bench => prover-bench}/.gitignore | 0 yarn-project/{bb-bench => prover-bench}/.prettierignore | 0 yarn-project/{bb-bench => prover-bench}/README.md | 0 .../{bb-bench => prover-bench}/circuits/circuit_1/Nargo.toml | 0 .../{bb-bench => prover-bench}/circuits/circuit_1/src/main.nr | 0 .../{bb-bench => prover-bench}/circuits/circuit_2/Nargo.toml | 0 .../{bb-bench => prover-bench}/circuits/circuit_2/src/main.nr | 0 yarn-project/{bb-bench => prover-bench}/generate_artifacts.sh | 0 yarn-project/{bb-bench => prover-bench}/package.json | 0 yarn-project/{bb-bench => prover-bench}/package.local.json | 0 yarn-project/{bb-bench => prover-bench}/serve.mt.json | 0 yarn-project/{bb-bench => prover-bench}/serve.sh | 0 yarn-project/{bb-bench => prover-bench}/src/index.html | 0 yarn-project/{bb-bench => prover-bench}/src/index.ts | 0 .../src/scripts/generate_declaration_files.ts | 0 .../src/scripts/generate_ts_from_abi.ts | 0 yarn-project/{bb-bench => prover-bench}/src/serve.ts | 0 yarn-project/{bb-bench => prover-bench}/src/types/index.ts | 0 yarn-project/{bb-bench => prover-bench}/tsconfig.json | 0 yarn-project/{bb-bench => prover-bench}/webpack.config.js | 0 22 files changed, 1 insertion(+), 1 deletion(-) rename yarn-project/{bb-bench => prover-bench}/.eslintrc.cjs (100%) rename yarn-project/{bb-bench => prover-bench}/.gitignore (100%) rename yarn-project/{bb-bench => prover-bench}/.prettierignore (100%) rename yarn-project/{bb-bench => prover-bench}/README.md (100%) rename yarn-project/{bb-bench => prover-bench}/circuits/circuit_1/Nargo.toml (100%) rename yarn-project/{bb-bench => prover-bench}/circuits/circuit_1/src/main.nr (100%) rename yarn-project/{bb-bench => prover-bench}/circuits/circuit_2/Nargo.toml (100%) rename yarn-project/{bb-bench => prover-bench}/circuits/circuit_2/src/main.nr (100%) rename yarn-project/{bb-bench => prover-bench}/generate_artifacts.sh (100%) rename yarn-project/{bb-bench => prover-bench}/package.json (100%) rename yarn-project/{bb-bench => prover-bench}/package.local.json (100%) rename yarn-project/{bb-bench => prover-bench}/serve.mt.json (100%) rename yarn-project/{bb-bench => prover-bench}/serve.sh (100%) rename yarn-project/{bb-bench => prover-bench}/src/index.html (100%) rename yarn-project/{bb-bench => prover-bench}/src/index.ts (100%) rename yarn-project/{bb-bench => prover-bench}/src/scripts/generate_declaration_files.ts (100%) rename yarn-project/{bb-bench => prover-bench}/src/scripts/generate_ts_from_abi.ts (100%) rename yarn-project/{bb-bench => prover-bench}/src/serve.ts (100%) rename yarn-project/{bb-bench => prover-bench}/src/types/index.ts (100%) rename yarn-project/{bb-bench => prover-bench}/tsconfig.json (100%) rename yarn-project/{bb-bench => prover-bench}/webpack.config.js (100%) diff --git a/yarn-project/package.json b/yarn-project/package.json index 5d262be82f2c..0ad186727503 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -25,7 +25,7 @@ "aztec-faucet", "aztec-node", "validator-client", - "bb-bench", + "prover-bench", "bb-prover", "blob-sink", "bot", diff --git a/yarn-project/bb-bench/.eslintrc.cjs b/yarn-project/prover-bench/.eslintrc.cjs similarity index 100% rename from yarn-project/bb-bench/.eslintrc.cjs rename to yarn-project/prover-bench/.eslintrc.cjs diff --git a/yarn-project/bb-bench/.gitignore b/yarn-project/prover-bench/.gitignore similarity index 100% rename from yarn-project/bb-bench/.gitignore rename to yarn-project/prover-bench/.gitignore diff --git a/yarn-project/bb-bench/.prettierignore b/yarn-project/prover-bench/.prettierignore similarity index 100% rename from yarn-project/bb-bench/.prettierignore rename to yarn-project/prover-bench/.prettierignore diff --git a/yarn-project/bb-bench/README.md b/yarn-project/prover-bench/README.md similarity index 100% rename from yarn-project/bb-bench/README.md rename to yarn-project/prover-bench/README.md diff --git a/yarn-project/bb-bench/circuits/circuit_1/Nargo.toml b/yarn-project/prover-bench/circuits/circuit_1/Nargo.toml similarity index 100% rename from yarn-project/bb-bench/circuits/circuit_1/Nargo.toml rename to yarn-project/prover-bench/circuits/circuit_1/Nargo.toml diff --git a/yarn-project/bb-bench/circuits/circuit_1/src/main.nr b/yarn-project/prover-bench/circuits/circuit_1/src/main.nr similarity index 100% rename from yarn-project/bb-bench/circuits/circuit_1/src/main.nr rename to yarn-project/prover-bench/circuits/circuit_1/src/main.nr diff --git a/yarn-project/bb-bench/circuits/circuit_2/Nargo.toml b/yarn-project/prover-bench/circuits/circuit_2/Nargo.toml similarity index 100% rename from yarn-project/bb-bench/circuits/circuit_2/Nargo.toml rename to yarn-project/prover-bench/circuits/circuit_2/Nargo.toml diff --git a/yarn-project/bb-bench/circuits/circuit_2/src/main.nr b/yarn-project/prover-bench/circuits/circuit_2/src/main.nr similarity index 100% rename from yarn-project/bb-bench/circuits/circuit_2/src/main.nr rename to yarn-project/prover-bench/circuits/circuit_2/src/main.nr diff --git a/yarn-project/bb-bench/generate_artifacts.sh b/yarn-project/prover-bench/generate_artifacts.sh similarity index 100% rename from yarn-project/bb-bench/generate_artifacts.sh rename to yarn-project/prover-bench/generate_artifacts.sh diff --git a/yarn-project/bb-bench/package.json b/yarn-project/prover-bench/package.json similarity index 100% rename from yarn-project/bb-bench/package.json rename to yarn-project/prover-bench/package.json diff --git a/yarn-project/bb-bench/package.local.json b/yarn-project/prover-bench/package.local.json similarity index 100% rename from yarn-project/bb-bench/package.local.json rename to yarn-project/prover-bench/package.local.json diff --git a/yarn-project/bb-bench/serve.mt.json b/yarn-project/prover-bench/serve.mt.json similarity index 100% rename from yarn-project/bb-bench/serve.mt.json rename to yarn-project/prover-bench/serve.mt.json diff --git a/yarn-project/bb-bench/serve.sh b/yarn-project/prover-bench/serve.sh similarity index 100% rename from yarn-project/bb-bench/serve.sh rename to yarn-project/prover-bench/serve.sh diff --git a/yarn-project/bb-bench/src/index.html b/yarn-project/prover-bench/src/index.html similarity index 100% rename from yarn-project/bb-bench/src/index.html rename to yarn-project/prover-bench/src/index.html diff --git a/yarn-project/bb-bench/src/index.ts b/yarn-project/prover-bench/src/index.ts similarity index 100% rename from yarn-project/bb-bench/src/index.ts rename to yarn-project/prover-bench/src/index.ts diff --git a/yarn-project/bb-bench/src/scripts/generate_declaration_files.ts b/yarn-project/prover-bench/src/scripts/generate_declaration_files.ts similarity index 100% rename from yarn-project/bb-bench/src/scripts/generate_declaration_files.ts rename to yarn-project/prover-bench/src/scripts/generate_declaration_files.ts diff --git a/yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts b/yarn-project/prover-bench/src/scripts/generate_ts_from_abi.ts similarity index 100% rename from yarn-project/bb-bench/src/scripts/generate_ts_from_abi.ts rename to yarn-project/prover-bench/src/scripts/generate_ts_from_abi.ts diff --git a/yarn-project/bb-bench/src/serve.ts b/yarn-project/prover-bench/src/serve.ts similarity index 100% rename from yarn-project/bb-bench/src/serve.ts rename to yarn-project/prover-bench/src/serve.ts diff --git a/yarn-project/bb-bench/src/types/index.ts b/yarn-project/prover-bench/src/types/index.ts similarity index 100% rename from yarn-project/bb-bench/src/types/index.ts rename to yarn-project/prover-bench/src/types/index.ts diff --git a/yarn-project/bb-bench/tsconfig.json b/yarn-project/prover-bench/tsconfig.json similarity index 100% rename from yarn-project/bb-bench/tsconfig.json rename to yarn-project/prover-bench/tsconfig.json diff --git a/yarn-project/bb-bench/webpack.config.js b/yarn-project/prover-bench/webpack.config.js similarity index 100% rename from yarn-project/bb-bench/webpack.config.js rename to yarn-project/prover-bench/webpack.config.js From 11cf03315a11b489b4fe1ea91649e566ce85dc47 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 00:41:05 +0000 Subject: [PATCH 35/43] Maybe would work but is peripheral --- barretenberg/ts/src/barretenberg/backend.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index 39d6d9299f3e..a4975c3f1b92 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -315,14 +315,24 @@ export class UltraHonkBackend { return await this.api.acirHonkSolidityVerifier(this.acirUncompressedBytecode, new RawBuffer(vkBuf)); } - // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself - async generateRecursiveProofArtifacts(proof: Uint8Array): Promise<{ proofAsFields: string[] }> { + async generateRecursiveProofArtifacts( + proof: Uint8Array, + ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> { await this.instantiate(); const proofAsFrs = await this.api.acirProofAsFieldsUltraHonk(proof); + // TODO: perhaps we should put this in the init function. Need to benchmark + // TODO how long it takes. + const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive); + const vk = await this.api.acirVkAsFieldsUltraHonk(vkBuf); return { // TODO(https://github.com/noir-lang/noir/issues/5661) proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), + vkAsFields: vk.map(vk => vk.toString()), + // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts + // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit + // they expect + vkHash: '', }; } From ab813b108cb02bac7b40a8b22fc471740d8dacf4 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 00:41:47 +0000 Subject: [PATCH 36/43] Revert unused changes --- barretenberg/ts/src/barretenberg/backend.ts | 17 ++++++++++++++--- yarn-project/yarn.lock | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/barretenberg/ts/src/barretenberg/backend.ts b/barretenberg/ts/src/barretenberg/backend.ts index a4975c3f1b92..c04d362d048b 100644 --- a/barretenberg/ts/src/barretenberg/backend.ts +++ b/barretenberg/ts/src/barretenberg/backend.ts @@ -315,11 +315,22 @@ export class UltraHonkBackend { return await this.api.acirHonkSolidityVerifier(this.acirUncompressedBytecode, new RawBuffer(vkBuf)); } + // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself async generateRecursiveProofArtifacts( - proof: Uint8Array, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _proof: Uint8Array, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _numOfPublicInputs: number, ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> { await this.instantiate(); - const proofAsFrs = await this.api.acirProofAsFieldsUltraHonk(proof); + // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation. + // There is still a proofAsFields method but we could consider getting rid of it as the proof itself + // is a list of field elements. + // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead + // inserted at an offset. + // const proof = reconstructProofWithPublicInputs(proofData); + // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs); + // TODO: perhaps we should put this in the init function. Need to benchmark // TODO how long it takes. const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive); @@ -327,7 +338,7 @@ export class UltraHonkBackend { return { // TODO(https://github.com/noir-lang/noir/issues/5661) - proofAsFields: proofAsFrs.map(proofAsFrs => proofAsFrs.toString()), + proofAsFields: [], vkAsFields: vk.map(vk => vk.toString()), // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index af06f68ea113..cbd773f4ea78 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -285,9 +285,9 @@ __metadata: languageName: unknown linkType: soft -"@aztec/bb-bench@workspace:bb-bench": +"@aztec/bb-bench@workspace:prover-bench": version: 0.0.0-use.local - resolution: "@aztec/bb-bench@workspace:bb-bench" + resolution: "@aztec/bb-bench@workspace:prover-bench" dependencies: "@aztec/bb-prover": "workspace:^" "@aztec/bb.js": ../../ts From 7a03ddfec1c0d47588adcb7ac89388207f2d52c6 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 00:54:49 +0000 Subject: [PATCH 37/43] Revert local CRS serving change --- barretenberg/ts/src/crs/net_crs.ts | 3 +-- yarn-project/prover-bench/serve.sh | 43 +++++++++++++++--------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/barretenberg/ts/src/crs/net_crs.ts b/barretenberg/ts/src/crs/net_crs.ts index 04394fcd2b26..97dcfa68a953 100644 --- a/barretenberg/ts/src/crs/net_crs.ts +++ b/barretenberg/ts/src/crs/net_crs.ts @@ -28,8 +28,7 @@ export class NetCrs { const g1End = this.numPoints * 64 - 1; - // const response = await fetch('https://aztec-ignition.s3.amazonaws.com/MAIN%20IGNITION/flat/g1.dat', { - const response = await fetch('http://localhost:8081/g1.dat', { + const response = await fetch('https://aztec-ignition.s3.amazonaws.com/MAIN%20IGNITION/flat/g1.dat', { headers: { Range: `bytes=0-${g1End}`, }, diff --git a/yarn-project/prover-bench/serve.sh b/yarn-project/prover-bench/serve.sh index 6ce541df7593..7c8ed5379cd8 100755 --- a/yarn-project/prover-bench/serve.sh +++ b/yarn-project/prover-bench/serve.sh @@ -4,20 +4,20 @@ cleanup() { echo "Initiating cleanup..." - # Terminate the first yarn serve process (port 8081) + # Terminate the first yarn serve process (port 8080) if kill "$PID1" 2>/dev/null; then - echo "Killed yarn serve on port 8081 (PID $PID1)." - else - echo "No active yarn serve process found on port 8081." - fi - - # Terminate the second yarn serve process (port 8080) - if kill "$PID2" 2>/dev/null; then - echo "Killed yarn serve on port 8080 (PID $PID2)." + echo "Killed yarn serve on port 8080 (PID $PID1)." else echo "No active yarn serve process found on port 8080." fi + # # Terminate the second yarn serve process (port 8081) + # if kill "$PID2" 2>/dev/null; then + # echo "Killed yarn serve on port 8081 (PID $PID2)." + # else + # echo "No active yarn serve process found on port 8081." + # fi + echo "Cleanup completed." exit 0 } @@ -25,29 +25,30 @@ cleanup() { # Trap common termination signals and invoke the cleanup function trap cleanup SIGINT SIGTERM EXIT -# Start the first yarn serve process on port 8081 in the background -yarn serve -n -L -p 8081 --cors -c serve.mt.json "$HOME/.bb-crs" & -PID1=$! -echo "Started yarn serve on port 8081 with PID $PID1." - # Start the second yarn serve process on port 8080 in the background yarn serve -n -L -p 8080 --cors -c ../serve.mt.json dest & -PID2=$! -echo "Started yarn serve on port 8080 with PID $PID2." +PID1=$! +echo "Started yarn serve on port 8080 with PID $PID1." + +# # Start the first yarn serve process on port 8081 in the background +# yarn serve -n -L -p 8081 --cors -c serve.mt.json "$HOME/.bb-crs" & +# PID2=$! +# echo "Started yarn serve on port 8081 with PID $PID2." + # Function to monitor background processes monitor_processes() { while true; do # Check if either process has exited if ! kill -0 "$PID1" 2>/dev/null; then - echo "yarn serve on port 8081 (PID $PID1) has exited." + echo "yarn serve on port 8080 (PID $PID1) has exited." cleanup fi - if ! kill -0 "$PID2" 2>/dev/null; then - echo "yarn serve on port 8080 (PID $PID2) has exited." - cleanup - fi + # if ! kill -0 "$PID2" 2>/dev/null; then + # echo "yarn serve on port 8081 (PID $PID2) has exited." + # cleanup + # fi sleep 1 done From 4a29e15b687219ab0aba7df296a8e44f603aaffd Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 02:38:20 +0000 Subject: [PATCH 38/43] Encapsulate stack creation for testing --- yarn-project/prover-bench/README.md | 2 +- yarn-project/prover-bench/src/index.ts | 27 ++++++++++++++++++++++++++ yarn-project/prover-bench/src/serve.ts | 26 ++----------------------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/yarn-project/prover-bench/README.md b/yarn-project/prover-bench/README.md index 4cdaa6fa9ec4..9c432e3d5453 100644 --- a/yarn-project/prover-bench/README.md +++ b/yarn-project/prover-bench/README.md @@ -1,3 +1,3 @@ # Prover benchmarking suite -The goal of this module is to provide a simple place for people to construct benchmarks of witness generation and proving performance. At the moment it only pertains to UltraHonk recursion, but we have a similar module in ivc-integration that shows prover performance of our ClientIVC suite. +The goal of this module is to provide a simple place for people to construct benchmarks of witness generation and proving. At the moment it only pertains to UltraHonk recursion in the browser, but we have a similar module in ivc-integration that shows prover performance of our ClientIVC suite. diff --git a/yarn-project/prover-bench/src/index.ts b/yarn-project/prover-bench/src/index.ts index 1d46a7e7223e..1ddd88101b91 100644 --- a/yarn-project/prover-bench/src/index.ts +++ b/yarn-project/prover-bench/src/index.ts @@ -5,6 +5,8 @@ import createDebug from 'debug'; import Circuit1 from '../artifacts/circuit_1.json' assert { type: 'json' }; import Circuit2 from '../artifacts/circuit_2.json' assert { type: 'json' }; +import Vk1 from '../artifacts/keys/circuit_1.vk.data.json' assert { type: 'json' }; +import Vk2 from '../artifacts/keys/circuit_2.vk.data.json' assert { type: 'json' }; import type { FixedLengthArray } from './types/index.js'; export const logger = createDebug('aztec:bb-bench'); @@ -95,3 +97,28 @@ export async function proveThenVerifyCircuit2( await backend.destroy(); } } + +function hexStringToUint8Array(hex: string): Uint8Array { + const length = hex.length / 2; + const uint8Array = new Uint8Array(length); + + for (let i = 0; i < length; i++) { + const byte = hex.substr(i * 2, 2); + uint8Array[i] = parseInt(byte, 16); + } + + return uint8Array; +} + +export async function proveThenVerifyStack(): Promise { + logger(`generating circuit and witness...`); + const [bytecode1, witness1] = await generateCircuit1(); + logger(`done generating circuit and witness. proving...`); + const proverOutput = await proveCircuit1(bytecode1, witness1); + logger(`done proving. generating circuit 2 and witness...`); + const [bytecode2, witness2] = await generateCircuit2(proverOutput, Vk1.keyAsFields); + logger(`done. generating circuit and witness. proving then verifying...`); + const verified = await proveThenVerifyCircuit2(bytecode2, witness2, hexStringToUint8Array(Vk2.keyAsBytes)); + logger(`verified? ${verified}`); + return verified; +} diff --git a/yarn-project/prover-bench/src/serve.ts b/yarn-project/prover-bench/src/serve.ts index 968940d35b5e..754be460f6d7 100644 --- a/yarn-project/prover-bench/src/serve.ts +++ b/yarn-project/prover-bench/src/serve.ts @@ -1,8 +1,6 @@ import createDebug from 'debug'; -import Vk1 from '../artifacts/keys/circuit_1.vk.data.json' assert { type: 'json' }; -import Vk2 from '../artifacts/keys/circuit_2.vk.data.json' assert { type: 'json' }; -import { generateCircuit1, generateCircuit2, logger, proveCircuit1, proveThenVerifyCircuit2 } from './index.js'; +import { proveThenVerifyStack } from './index.js'; createDebug.enable('*'); // needed for logging in Firefox but not Chrome @@ -114,33 +112,13 @@ function overrideCreateDebugLog(addLogMessage: (message: string) => void): void }; } -function hexStringToUint8Array(hex: string): Uint8Array { - const length = hex.length / 2; - const uint8Array = new Uint8Array(length); - - for (let i = 0; i < length; i++) { - const byte = hex.substr(i * 2, 2); - uint8Array[i] = parseInt(byte, 16); - } - - return uint8Array; -} - document.addEventListener('DOMContentLoaded', function () { setupConsoleOutput(); const button = document.createElement('button'); button.innerText = 'Run Test'; button.addEventListener('click', async () => { - logger(`generating circuit and witness...`); - const [bytecode1, witness1] = await generateCircuit1(); - logger(`done generating circuit and witness. proving...`); - const proverOutput = await proveCircuit1(bytecode1, witness1); - logger(`done proving. generating circuit 2 and witness...`); - const [bytecode2, witness2] = await generateCircuit2(proverOutput, Vk1.keyAsFields); - logger(`done. generating circuit and witness. proving then verifying...`); - const verified = await proveThenVerifyCircuit2(bytecode2, witness2, hexStringToUint8Array(Vk2.keyAsBytes)); - logger(`verified? ${verified}`); + const _ = await proveThenVerifyStack(); }); document.body.appendChild(button); }); From 0f1ca8d0f46fbc36b3cdf1c3326984e72faf3418 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 03:18:10 +0000 Subject: [PATCH 39/43] Add test and rename suite --- .../.eslintrc.cjs | 0 .../.gitignore | 0 .../.prettierignore | 0 .../{prover-bench => noir-bb-bench}/README.md | 2 +- .../circuits/circuit_1/Nargo.toml | 0 .../circuits/circuit_1/src/main.nr | 0 .../circuits/circuit_2/Nargo.toml | 0 .../circuits/circuit_2/src/main.nr | 0 .../generate_artifacts.sh | 0 .../package.json | 0 .../package.local.json | 0 .../serve.mt.json | 0 .../{prover-bench => noir-bb-bench}/serve.sh | 0 .../src/index.html | 0 .../src/index.ts | 0 .../src/scripts/generate_declaration_files.ts | 0 .../src/scripts/generate_ts_from_abi.ts | 0 .../src/serve.ts | 0 .../src/types/index.ts | 0 yarn-project/noir-bb-bench/src/wasm.test.ts | 20 +++++++++++++++++++ .../tsconfig.json | 0 .../webpack.config.js | 0 yarn-project/package.json | 2 +- yarn-project/yarn.lock | 4 ++-- 24 files changed, 24 insertions(+), 4 deletions(-) rename yarn-project/{prover-bench => noir-bb-bench}/.eslintrc.cjs (100%) rename yarn-project/{prover-bench => noir-bb-bench}/.gitignore (100%) rename yarn-project/{prover-bench => noir-bb-bench}/.prettierignore (100%) rename yarn-project/{prover-bench => noir-bb-bench}/README.md (90%) rename yarn-project/{prover-bench => noir-bb-bench}/circuits/circuit_1/Nargo.toml (100%) rename yarn-project/{prover-bench => noir-bb-bench}/circuits/circuit_1/src/main.nr (100%) rename yarn-project/{prover-bench => noir-bb-bench}/circuits/circuit_2/Nargo.toml (100%) rename yarn-project/{prover-bench => noir-bb-bench}/circuits/circuit_2/src/main.nr (100%) rename yarn-project/{prover-bench => noir-bb-bench}/generate_artifacts.sh (100%) rename yarn-project/{prover-bench => noir-bb-bench}/package.json (100%) rename yarn-project/{prover-bench => noir-bb-bench}/package.local.json (100%) rename yarn-project/{prover-bench => noir-bb-bench}/serve.mt.json (100%) rename yarn-project/{prover-bench => noir-bb-bench}/serve.sh (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/index.html (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/index.ts (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/scripts/generate_declaration_files.ts (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/scripts/generate_ts_from_abi.ts (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/serve.ts (100%) rename yarn-project/{prover-bench => noir-bb-bench}/src/types/index.ts (100%) create mode 100644 yarn-project/noir-bb-bench/src/wasm.test.ts rename yarn-project/{prover-bench => noir-bb-bench}/tsconfig.json (100%) rename yarn-project/{prover-bench => noir-bb-bench}/webpack.config.js (100%) diff --git a/yarn-project/prover-bench/.eslintrc.cjs b/yarn-project/noir-bb-bench/.eslintrc.cjs similarity index 100% rename from yarn-project/prover-bench/.eslintrc.cjs rename to yarn-project/noir-bb-bench/.eslintrc.cjs diff --git a/yarn-project/prover-bench/.gitignore b/yarn-project/noir-bb-bench/.gitignore similarity index 100% rename from yarn-project/prover-bench/.gitignore rename to yarn-project/noir-bb-bench/.gitignore diff --git a/yarn-project/prover-bench/.prettierignore b/yarn-project/noir-bb-bench/.prettierignore similarity index 100% rename from yarn-project/prover-bench/.prettierignore rename to yarn-project/noir-bb-bench/.prettierignore diff --git a/yarn-project/prover-bench/README.md b/yarn-project/noir-bb-bench/README.md similarity index 90% rename from yarn-project/prover-bench/README.md rename to yarn-project/noir-bb-bench/README.md index 9c432e3d5453..41d0ed4ec3d2 100644 --- a/yarn-project/prover-bench/README.md +++ b/yarn-project/noir-bb-bench/README.md @@ -1,3 +1,3 @@ -# Prover benchmarking suite +# Noir + Bb benchmarking suite The goal of this module is to provide a simple place for people to construct benchmarks of witness generation and proving. At the moment it only pertains to UltraHonk recursion in the browser, but we have a similar module in ivc-integration that shows prover performance of our ClientIVC suite. diff --git a/yarn-project/prover-bench/circuits/circuit_1/Nargo.toml b/yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml similarity index 100% rename from yarn-project/prover-bench/circuits/circuit_1/Nargo.toml rename to yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml diff --git a/yarn-project/prover-bench/circuits/circuit_1/src/main.nr b/yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr similarity index 100% rename from yarn-project/prover-bench/circuits/circuit_1/src/main.nr rename to yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr diff --git a/yarn-project/prover-bench/circuits/circuit_2/Nargo.toml b/yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml similarity index 100% rename from yarn-project/prover-bench/circuits/circuit_2/Nargo.toml rename to yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml diff --git a/yarn-project/prover-bench/circuits/circuit_2/src/main.nr b/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr similarity index 100% rename from yarn-project/prover-bench/circuits/circuit_2/src/main.nr rename to yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr diff --git a/yarn-project/prover-bench/generate_artifacts.sh b/yarn-project/noir-bb-bench/generate_artifacts.sh similarity index 100% rename from yarn-project/prover-bench/generate_artifacts.sh rename to yarn-project/noir-bb-bench/generate_artifacts.sh diff --git a/yarn-project/prover-bench/package.json b/yarn-project/noir-bb-bench/package.json similarity index 100% rename from yarn-project/prover-bench/package.json rename to yarn-project/noir-bb-bench/package.json diff --git a/yarn-project/prover-bench/package.local.json b/yarn-project/noir-bb-bench/package.local.json similarity index 100% rename from yarn-project/prover-bench/package.local.json rename to yarn-project/noir-bb-bench/package.local.json diff --git a/yarn-project/prover-bench/serve.mt.json b/yarn-project/noir-bb-bench/serve.mt.json similarity index 100% rename from yarn-project/prover-bench/serve.mt.json rename to yarn-project/noir-bb-bench/serve.mt.json diff --git a/yarn-project/prover-bench/serve.sh b/yarn-project/noir-bb-bench/serve.sh similarity index 100% rename from yarn-project/prover-bench/serve.sh rename to yarn-project/noir-bb-bench/serve.sh diff --git a/yarn-project/prover-bench/src/index.html b/yarn-project/noir-bb-bench/src/index.html similarity index 100% rename from yarn-project/prover-bench/src/index.html rename to yarn-project/noir-bb-bench/src/index.html diff --git a/yarn-project/prover-bench/src/index.ts b/yarn-project/noir-bb-bench/src/index.ts similarity index 100% rename from yarn-project/prover-bench/src/index.ts rename to yarn-project/noir-bb-bench/src/index.ts diff --git a/yarn-project/prover-bench/src/scripts/generate_declaration_files.ts b/yarn-project/noir-bb-bench/src/scripts/generate_declaration_files.ts similarity index 100% rename from yarn-project/prover-bench/src/scripts/generate_declaration_files.ts rename to yarn-project/noir-bb-bench/src/scripts/generate_declaration_files.ts diff --git a/yarn-project/prover-bench/src/scripts/generate_ts_from_abi.ts b/yarn-project/noir-bb-bench/src/scripts/generate_ts_from_abi.ts similarity index 100% rename from yarn-project/prover-bench/src/scripts/generate_ts_from_abi.ts rename to yarn-project/noir-bb-bench/src/scripts/generate_ts_from_abi.ts diff --git a/yarn-project/prover-bench/src/serve.ts b/yarn-project/noir-bb-bench/src/serve.ts similarity index 100% rename from yarn-project/prover-bench/src/serve.ts rename to yarn-project/noir-bb-bench/src/serve.ts diff --git a/yarn-project/prover-bench/src/types/index.ts b/yarn-project/noir-bb-bench/src/types/index.ts similarity index 100% rename from yarn-project/prover-bench/src/types/index.ts rename to yarn-project/noir-bb-bench/src/types/index.ts diff --git a/yarn-project/noir-bb-bench/src/wasm.test.ts b/yarn-project/noir-bb-bench/src/wasm.test.ts new file mode 100644 index 000000000000..f0308024624b --- /dev/null +++ b/yarn-project/noir-bb-bench/src/wasm.test.ts @@ -0,0 +1,20 @@ +import { jest } from '@jest/globals'; +import createDebug from 'debug'; + +import { proveThenVerifyStack } from './index.js'; + +createDebug.enable('*'); + +/* eslint-disable camelcase */ + +jest.setTimeout(120_000); + +// Reinforce that the functions used in the benchmarking app produce a valid proof. +describe('Prover Bench', () => { + beforeEach(async () => {}); + + it('Should generate a verifiable UltraHonk proof', async () => { + const verifyResult = await proveThenVerifyStack(); + expect(verifyResult).toEqual(true); + }); +}); diff --git a/yarn-project/prover-bench/tsconfig.json b/yarn-project/noir-bb-bench/tsconfig.json similarity index 100% rename from yarn-project/prover-bench/tsconfig.json rename to yarn-project/noir-bb-bench/tsconfig.json diff --git a/yarn-project/prover-bench/webpack.config.js b/yarn-project/noir-bb-bench/webpack.config.js similarity index 100% rename from yarn-project/prover-bench/webpack.config.js rename to yarn-project/noir-bb-bench/webpack.config.js diff --git a/yarn-project/package.json b/yarn-project/package.json index 0ad186727503..a9ce40ca702b 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -25,7 +25,6 @@ "aztec-faucet", "aztec-node", "validator-client", - "prover-bench", "bb-prover", "blob-sink", "bot", @@ -48,6 +47,7 @@ "l1-artifacts", "merkle-tree", "ivc-integration", + "noir-bb-bench", "noir-contracts.js", "noir-protocol-circuits-types", "p2p", diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index cbd773f4ea78..1bcb94072b77 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -285,9 +285,9 @@ __metadata: languageName: unknown linkType: soft -"@aztec/bb-bench@workspace:prover-bench": +"@aztec/bb-bench@workspace:noir-bb-bench": version: 0.0.0-use.local - resolution: "@aztec/bb-bench@workspace:prover-bench" + resolution: "@aztec/bb-bench@workspace:noir-bb-bench" dependencies: "@aztec/bb-prover": "workspace:^" "@aztec/bb.js": ../../ts From 0a89b4d7f1632a70edc1939d1a5169edd7d100df Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 03:23:42 +0000 Subject: [PATCH 40/43] Pare down nargo.tomls --- yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml | 2 -- yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml | 2 -- 2 files changed, 4 deletions(-) diff --git a/yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml b/yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml index 60a609f31150..b44d34c69fe3 100644 --- a/yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml +++ b/yarn-project/noir-bb-bench/circuits/circuit_1/Nargo.toml @@ -1,7 +1,5 @@ [package] name = "circuit_1" type = "bin" -authors = [""] -compiler_version = ">=0.31.0" [dependencies] diff --git a/yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml b/yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml index f8ae3dab6d68..50adcab9b13c 100644 --- a/yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml +++ b/yarn-project/noir-bb-bench/circuits/circuit_2/Nargo.toml @@ -1,7 +1,5 @@ [package] name = "circuit_2" type = "bin" -authors = [""] -compiler_version = ">=0.31.0" [dependencies] From 80b0a5a215cd74139864168fce3579b0e1e917bf Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 03:24:55 +0000 Subject: [PATCH 41/43] remove unused serving logic --- yarn-project/noir-bb-bench/serve.sh | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/yarn-project/noir-bb-bench/serve.sh b/yarn-project/noir-bb-bench/serve.sh index 7c8ed5379cd8..26f3caaeb0a2 100755 --- a/yarn-project/noir-bb-bench/serve.sh +++ b/yarn-project/noir-bb-bench/serve.sh @@ -3,21 +3,12 @@ # Function to handle cleanup when the script is terminated cleanup() { echo "Initiating cleanup..." - # Terminate the first yarn serve process (port 8080) if kill "$PID1" 2>/dev/null; then echo "Killed yarn serve on port 8080 (PID $PID1)." else echo "No active yarn serve process found on port 8080." fi - - # # Terminate the second yarn serve process (port 8081) - # if kill "$PID2" 2>/dev/null; then - # echo "Killed yarn serve on port 8081 (PID $PID2)." - # else - # echo "No active yarn serve process found on port 8081." - # fi - echo "Cleanup completed." exit 0 } @@ -30,11 +21,6 @@ yarn serve -n -L -p 8080 --cors -c ../serve.mt.json dest & PID1=$! echo "Started yarn serve on port 8080 with PID $PID1." -# # Start the first yarn serve process on port 8081 in the background -# yarn serve -n -L -p 8081 --cors -c serve.mt.json "$HOME/.bb-crs" & -# PID2=$! -# echo "Started yarn serve on port 8081 with PID $PID2." - # Function to monitor background processes monitor_processes() { @@ -44,12 +30,6 @@ monitor_processes() { echo "yarn serve on port 8080 (PID $PID1) has exited." cleanup fi - - # if ! kill -0 "$PID2" 2>/dev/null; then - # echo "yarn serve on port 8081 (PID $PID2) has exited." - # cleanup - # fi - sleep 1 done } From d34bb9a567cb7bcacfc9d295c0c9e78e8637680f Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 22 Jan 2025 03:35:47 +0000 Subject: [PATCH 42/43] Touch up circuits --- .../circuits/circuit_1/src/main.nr | 3 +-- .../circuits/circuit_2/src/main.nr | 22 +++++++++---------- yarn-project/noir-bb-bench/src/index.ts | 2 +- yarn-project/noir-bb-bench/src/types/index.ts | 12 +++++----- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr b/yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr index 6e870c5ba67d..4e1fd3c9035b 100644 --- a/yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr +++ b/yarn-project/noir-bb-bench/circuits/circuit_1/src/main.nr @@ -1,4 +1,3 @@ -fn main(x: Field, y: pub Field, z: pub Field) { +fn main(x: Field, y: pub Field) { assert(x != y); - assert(y != z); } diff --git a/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr b/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr index 5af43a51c62c..05ee0535ead9 100644 --- a/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr +++ b/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr @@ -1,17 +1,16 @@ use std::hash::poseidon; // This circuit aggregates a single Honk proof from `assert_statement`. -global SIZE_OF_PROOF_IF_LOGN_IS_28: u32 = 459; +global ULTRA_VK_SIZE: u32 = 128; +global ULTRA_PROOF_SIZE: u32 = 459; +global NUM_NON_ACCUMULATOR_PUBLIC_INPUTS: u32 = 1; global HONK_IDENTIFIER: u32 = 1; fn main( - verification_key: [Field; 128], - // This is the proof without public inputs attached. - // This means: the size of this does not change with the number of public inputs. - proof: [Field; SIZE_OF_PROOF_IF_LOGN_IS_28], - public_inputs: pub [Field; 2], - // This is currently not public. It is fine given that the vk is a part of the circuit definition. - // I believe we want to eventually make it public too though. - mut key_hash: Field, + verification_key: [Field; ULTRA_VK_SIZE], + proof: [Field; ULTRA_PROOF_SIZE], + public_inputs: pub [Field; NUM_NON_ACCUMULATOR_PUBLIC_INPUTS], + key_hash: Field, + mut x: Field ) { std::verify_proof_with_type( verification_key, @@ -22,8 +21,9 @@ fn main( ); for _ in 0..250 { - key_hash += poseidon::bn254::hash_1([key_hash]); + x += poseidon::bn254::hash_1([x]); } - assert(key_hash != 0); + // Make sure the hash value is used so it's not optimized away. + assert(x != 0); } diff --git a/yarn-project/noir-bb-bench/src/index.ts b/yarn-project/noir-bb-bench/src/index.ts index 1ddd88101b91..08025bbef7d6 100644 --- a/yarn-project/noir-bb-bench/src/index.ts +++ b/yarn-project/noir-bb-bench/src/index.ts @@ -25,7 +25,6 @@ export async function generateCircuit1(): Promise<[string, Uint8Array, InputValu { x: '0x1', y: '0x10', - z: '0x100', }, foreignCallHandler, ); @@ -44,6 +43,7 @@ export async function generateCircuit2( key_hash: '0x0', proof: proverOutput.proof, verification_key: previousVk as FixedLengthArray, + x: '0xd00d', }, foreignCallHandler, ); diff --git a/yarn-project/noir-bb-bench/src/types/index.ts b/yarn-project/noir-bb-bench/src/types/index.ts index 77ea47f313ef..173590de112d 100644 --- a/yarn-project/noir-bb-bench/src/types/index.ts +++ b/yarn-project/noir-bb-bench/src/types/index.ts @@ -11,38 +11,38 @@ export type Field = string; export type Circuit_1InputType = { x: Field; y: Field; - z: Field; }; export async function Circuit_1( x: Field, y: Field, - z: Field, Circuit_1_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { const program = new Noir(Circuit_1_circuit); - const args: InputMap = { x, y, z }; + const args: InputMap = { x, y }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; } export type Circuit_2InputType = { verification_key: FixedLengthArray; proof: FixedLengthArray; - public_inputs: FixedLengthArray; + public_inputs: FixedLengthArray; key_hash: Field; + x: Field; }; export async function Circuit_2( verification_key: FixedLengthArray, proof: FixedLengthArray, - public_inputs: FixedLengthArray, + public_inputs: FixedLengthArray, key_hash: Field, + x: Field, Circuit_2_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { const program = new Noir(Circuit_2_circuit); - const args: InputMap = { verification_key, proof, public_inputs, key_hash }; + const args: InputMap = { verification_key, proof, public_inputs, key_hash, x }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; } From b7fb5fe84200781e14d78c08b9f967ba1ca16078 Mon Sep 17 00:00:00 2001 From: Cody Date: Thu, 23 Jan 2025 15:39:38 +0000 Subject: [PATCH 43/43] Update readme --- yarn-project/noir-bb-bench/README.md | 16 ++++++++++++++++ .../noir-bb-bench/circuits/circuit_2/src/main.nr | 6 +++--- yarn-project/noir-bb-bench/package.json | 1 + yarn-project/noir-bb-bench/src/index.ts | 2 +- yarn-project/noir-bb-bench/src/types/index.ts | 6 +++--- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/yarn-project/noir-bb-bench/README.md b/yarn-project/noir-bb-bench/README.md index 41d0ed4ec3d2..407e3ef1a6dd 100644 --- a/yarn-project/noir-bb-bench/README.md +++ b/yarn-project/noir-bb-bench/README.md @@ -1,3 +1,19 @@ # Noir + Bb benchmarking suite The goal of this module is to provide a simple place for people to construct benchmarks of witness generation and proving. At the moment it only pertains to UltraHonk recursion in the browser, but we have a similar module in ivc-integration that shows prover performance of our ClientIVC suite. + +## Building + +The package assumes that bb.js has been built, but it is easy to rebuild, as we show below. + +The full build command `yarn build` deletes all circuit artifacts and generated code, compiles the circuits, computes their verification keys, generates declarations and types for parsing circuit bytecode and verification keys in typescript, generates additional type information for noir.js and bb.js, and builds the typescript. With all of this, `yarn test` will run whatever jest tests are present, and `yarn serve:app` will serve a simple app with proving for execution in a web browser. but we can build more incrementally as well. + +Scenario: I have made changes to bb.js and now I want to rebuild and run the browser app with multithreaded proving and symbols for the meaningful WASM stack traces. Command: +``` +cd ../../barretenberg/ts && SKIP_ST_BUILD=1 NO_STRIP=1 yarn build && cd - && yarn build:app && yarn serve:app +``` + +Scenario: bb.js is unchanged, but I have changed one of my test circuits, and I want to run all tests. Command: +``` +yarn generate && yarn build:ts && yarn test +``` diff --git a/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr b/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr index 05ee0535ead9..808120506cde 100644 --- a/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr +++ b/yarn-project/noir-bb-bench/circuits/circuit_2/src/main.nr @@ -10,7 +10,7 @@ fn main( proof: [Field; ULTRA_PROOF_SIZE], public_inputs: pub [Field; NUM_NON_ACCUMULATOR_PUBLIC_INPUTS], key_hash: Field, - mut x: Field + mut z: Field ) { std::verify_proof_with_type( verification_key, @@ -21,9 +21,9 @@ fn main( ); for _ in 0..250 { - x += poseidon::bn254::hash_1([x]); + z += poseidon::bn254::hash_1([z]); } // Make sure the hash value is used so it's not optimized away. - assert(x != 0); + assert(z != 0); } diff --git a/yarn-project/noir-bb-bench/package.json b/yarn-project/noir-bb-bench/package.json index 5bb96eecfcf6..dd644431dc5e 100644 --- a/yarn-project/noir-bb-bench/package.json +++ b/yarn-project/noir-bb-bench/package.json @@ -16,6 +16,7 @@ "generate": "yarn generate:artifacts && yarn generate:code", "generate:artifacts": "mkdir -p artifacts/keys && ls circuits | xargs -n 1 ./generate_artifacts.sh", "generate:code": "node --no-warnings --loader ts-node/esm src/scripts/generate_declaration_files.ts && node --no-warnings --loader ts-node/esm src/scripts/generate_ts_from_abi.ts && run -T prettier -w ./src/types", + "build:ts": "tsc -b", "build:app": "tsc -b && rm -rf dest && webpack && cp ../../barretenberg/favicon.ico dest", "build:dev": "tsc -b --watch", "serve:app": "./serve.sh", diff --git a/yarn-project/noir-bb-bench/src/index.ts b/yarn-project/noir-bb-bench/src/index.ts index 08025bbef7d6..0930819589ee 100644 --- a/yarn-project/noir-bb-bench/src/index.ts +++ b/yarn-project/noir-bb-bench/src/index.ts @@ -43,7 +43,7 @@ export async function generateCircuit2( key_hash: '0x0', proof: proverOutput.proof, verification_key: previousVk as FixedLengthArray, - x: '0xd00d', + z: '0xd00d', }, foreignCallHandler, ); diff --git a/yarn-project/noir-bb-bench/src/types/index.ts b/yarn-project/noir-bb-bench/src/types/index.ts index 173590de112d..eaeae0b101ee 100644 --- a/yarn-project/noir-bb-bench/src/types/index.ts +++ b/yarn-project/noir-bb-bench/src/types/index.ts @@ -29,7 +29,7 @@ export type Circuit_2InputType = { proof: FixedLengthArray; public_inputs: FixedLengthArray; key_hash: Field; - x: Field; + z: Field; }; export async function Circuit_2( @@ -37,12 +37,12 @@ export async function Circuit_2( proof: FixedLengthArray, public_inputs: FixedLengthArray, key_hash: Field, - x: Field, + z: Field, Circuit_2_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler, ): Promise { const program = new Noir(Circuit_2_circuit); - const args: InputMap = { verification_key, proof, public_inputs, key_hash, x }; + const args: InputMap = { verification_key, proof, public_inputs, key_hash, z }; const { returnValue } = await program.execute(args, foreignCallHandler); return returnValue as null; }