@aztec/bb.js 0.0.0-devnet
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -0
- package/dest/browser/522.index.js +10 -0
- package/dest/browser/barretenberg/backend.d.ts +85 -0
- package/dest/browser/barretenberg/backend.d.ts.map +1 -0
- package/dest/browser/barretenberg/index.d.ts +47 -0
- package/dest/browser/barretenberg/index.d.ts.map +1 -0
- package/dest/browser/barretenberg/verifier.d.ts +16 -0
- package/dest/browser/barretenberg/verifier.d.ts.map +1 -0
- package/dest/browser/barretenberg_api/index.d.ts +113 -0
- package/dest/browser/barretenberg_api/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
- package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/helpers/index.d.ts +2 -0
- package/dest/browser/barretenberg_wasm/helpers/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts +22 -0
- package/dest/browser/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
- package/dest/browser/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/index.d.ts +18 -0
- package/dest/browser/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/browser/bigint-array/index.d.ts +3 -0
- package/dest/browser/bigint-array/index.d.ts.map +1 -0
- package/dest/browser/crs/browser/cached_net_crs.d.ts +43 -0
- package/dest/browser/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/browser/crs/browser/index.d.ts +2 -0
- package/dest/browser/crs/browser/index.d.ts.map +1 -0
- package/dest/browser/crs/index.d.ts +2 -0
- package/dest/browser/crs/index.d.ts.map +1 -0
- package/dest/browser/crs/net_crs.d.ts +61 -0
- package/dest/browser/crs/net_crs.d.ts.map +1 -0
- package/dest/browser/crs/node/index.d.ts +36 -0
- package/dest/browser/crs/node/index.d.ts.map +1 -0
- package/dest/browser/index.d.ts +5 -0
- package/dest/browser/index.d.ts.map +1 -0
- package/dest/browser/index.js +16205 -0
- package/dest/browser/proof/index.d.ts +19 -0
- package/dest/browser/proof/index.d.ts.map +1 -0
- package/dest/browser/random/browser/index.d.ts +2 -0
- package/dest/browser/random/browser/index.d.ts.map +1 -0
- package/dest/browser/random/index.d.ts +2 -0
- package/dest/browser/random/index.d.ts.map +1 -0
- package/dest/browser/random/node/index.d.ts +2 -0
- package/dest/browser/random/node/index.d.ts.map +1 -0
- package/dest/browser/serialize/buffer_reader.d.ts +28 -0
- package/dest/browser/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/browser/serialize/index.d.ts +4 -0
- package/dest/browser/serialize/index.d.ts.map +1 -0
- package/dest/browser/serialize/output_type.d.ts +11 -0
- package/dest/browser/serialize/output_type.d.ts.map +1 -0
- package/dest/browser/serialize/serialize.d.ts +53 -0
- package/dest/browser/serialize/serialize.d.ts.map +1 -0
- package/dest/browser/types/fields.d.ts +43 -0
- package/dest/browser/types/fields.d.ts.map +1 -0
- package/dest/browser/types/fixed_size_buffer.d.ts +26 -0
- package/dest/browser/types/fixed_size_buffer.d.ts.map +1 -0
- package/dest/browser/types/index.d.ts +6 -0
- package/dest/browser/types/index.d.ts.map +1 -0
- package/dest/browser/types/point.d.ts +17 -0
- package/dest/browser/types/point.d.ts.map +1 -0
- package/dest/browser/types/ptr.d.ts +13 -0
- package/dest/browser/types/ptr.d.ts.map +1 -0
- package/dest/browser/types/raw_buffer.d.ts +3 -0
- package/dest/browser/types/raw_buffer.d.ts.map +1 -0
- package/dest/node/async_map/index.d.ts +10 -0
- package/dest/node/async_map/index.d.ts.map +1 -0
- package/dest/node/async_map/index.js +16 -0
- package/dest/node/barretenberg/backend.d.ts +85 -0
- package/dest/node/barretenberg/backend.d.ts.map +1 -0
- package/dest/node/barretenberg/backend.js +247 -0
- package/dest/node/barretenberg/blake2s.test.d.ts +2 -0
- package/dest/node/barretenberg/blake2s.test.d.ts.map +1 -0
- package/dest/node/barretenberg/blake2s.test.js +54 -0
- package/dest/node/barretenberg/common.test.d.ts +2 -0
- package/dest/node/barretenberg/common.test.d.ts.map +1 -0
- package/dest/node/barretenberg/common.test.js +20 -0
- package/dest/node/barretenberg/index.d.ts +47 -0
- package/dest/node/barretenberg/index.d.ts.map +1 -0
- package/dest/node/barretenberg/index.js +97 -0
- package/dest/node/barretenberg/pedersen.test.d.ts +2 -0
- package/dest/node/barretenberg/pedersen.test.d.ts.map +1 -0
- package/dest/node/barretenberg/pedersen.test.js +55 -0
- package/dest/node/barretenberg/poseidon.test.d.ts +2 -0
- package/dest/node/barretenberg/poseidon.test.d.ts.map +1 -0
- package/dest/node/barretenberg/poseidon.test.js +35 -0
- package/dest/node/barretenberg/schnorr.test.d.ts +2 -0
- package/dest/node/barretenberg/schnorr.test.d.ts.map +1 -0
- package/dest/node/barretenberg/schnorr.test.js +113 -0
- package/dest/node/barretenberg/verifier.d.ts +16 -0
- package/dest/node/barretenberg/verifier.d.ts.map +1 -0
- package/dest/node/barretenberg/verifier.js +40 -0
- package/dest/node/barretenberg_api/index.d.ts +113 -0
- package/dest/node/barretenberg_api/index.d.ts.map +1 -0
- package/dest/node/barretenberg_api/index.js +728 -0
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +125 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +10 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +12 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +18 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts +2 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.js +9 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +57 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +107 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +10 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +12 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +18 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts +2 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.js +9 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.js +40 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.js +12 -0
- package/dest/node/barretenberg_wasm/fetch_code/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/index.js +2 -0
- package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/node/index.js +22 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.js +18 -0
- package/dest/node/barretenberg_wasm/helpers/index.d.ts +2 -0
- package/dest/node/barretenberg_wasm/helpers/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/helpers/index.js +2 -0
- package/dest/node/barretenberg_wasm/helpers/node/index.d.ts +22 -0
- package/dest/node/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/helpers/node/index.js +39 -0
- package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
- package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/helpers/node/node_endpoint.js +28 -0
- package/dest/node/barretenberg_wasm/index.d.ts +18 -0
- package/dest/node/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/index.js +45 -0
- package/dest/node/barretenberg_wasm/index.test.d.ts +2 -0
- package/dest/node/barretenberg_wasm/index.test.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/index.test.js +38 -0
- package/dest/node/benchmark/index.d.ts +3 -0
- package/dest/node/benchmark/index.d.ts.map +1 -0
- package/dest/node/benchmark/index.js +25 -0
- package/dest/node/benchmark/timer.d.ts +34 -0
- package/dest/node/benchmark/timer.d.ts.map +1 -0
- package/dest/node/benchmark/timer.js +41 -0
- package/dest/node/bigint-array/index.d.ts +3 -0
- package/dest/node/bigint-array/index.d.ts.map +1 -0
- package/dest/node/bigint-array/index.js +21 -0
- package/dest/node/bindgen/function_declaration.d.ts +11 -0
- package/dest/node/bindgen/function_declaration.d.ts.map +1 -0
- package/dest/node/bindgen/function_declaration.js +2 -0
- package/dest/node/bindgen/index.d.ts +2 -0
- package/dest/node/bindgen/index.d.ts.map +1 -0
- package/dest/node/bindgen/index.js +15 -0
- package/dest/node/bindgen/mappings.d.ts +4 -0
- package/dest/node/bindgen/mappings.d.ts.map +1 -0
- package/dest/node/bindgen/mappings.js +63 -0
- package/dest/node/bindgen/rust.d.ts +2 -0
- package/dest/node/bindgen/rust.d.ts.map +1 -0
- package/dest/node/bindgen/rust.js +43 -0
- package/dest/node/bindgen/to_camel_case.d.ts +2 -0
- package/dest/node/bindgen/to_camel_case.d.ts.map +1 -0
- package/dest/node/bindgen/to_camel_case.js +11 -0
- package/dest/node/bindgen/typescript.d.ts +2 -0
- package/dest/node/bindgen/typescript.d.ts.map +1 -0
- package/dest/node/bindgen/typescript.js +100 -0
- package/dest/node/crs/browser/cached_net_crs.d.ts +43 -0
- package/dest/node/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/node/crs/browser/cached_net_crs.js +90 -0
- package/dest/node/crs/browser/index.d.ts +2 -0
- package/dest/node/crs/browser/index.d.ts.map +1 -0
- package/dest/node/crs/browser/index.js +2 -0
- package/dest/node/crs/index.d.ts +2 -0
- package/dest/node/crs/index.d.ts.map +1 -0
- package/dest/node/crs/index.js +2 -0
- package/dest/node/crs/net_crs.d.ts +61 -0
- package/dest/node/crs/net_crs.d.ts.map +1 -0
- package/dest/node/crs/net_crs.js +97 -0
- package/dest/node/crs/node/ignition_files_crs.d.ts +38 -0
- package/dest/node/crs/node/ignition_files_crs.d.ts.map +1 -0
- package/dest/node/crs/node/ignition_files_crs.js +65 -0
- package/dest/node/crs/node/index.d.ts +36 -0
- package/dest/node/crs/node/index.d.ts.map +1 -0
- package/dest/node/crs/node/index.js +93 -0
- package/dest/node/examples/simple.rawtest.d.ts +2 -0
- package/dest/node/examples/simple.rawtest.d.ts.map +1 -0
- package/dest/node/examples/simple.rawtest.js +30 -0
- package/dest/node/examples/simple.test.d.ts +2 -0
- package/dest/node/examples/simple.test.d.ts.map +1 -0
- package/dest/node/examples/simple.test.js +23 -0
- package/dest/node/index.d.ts +5 -0
- package/dest/node/index.d.ts.map +1 -0
- package/dest/node/index.js +5 -0
- package/dest/node/main.d.ts +23 -0
- package/dest/node/main.d.ts.map +1 -0
- package/dest/node/main.js +712 -0
- package/dest/node/proof/index.d.ts +19 -0
- package/dest/node/proof/index.d.ts.map +1 -0
- package/dest/node/proof/index.js +85 -0
- package/dest/node/random/browser/index.d.ts +2 -0
- package/dest/node/random/browser/index.d.ts.map +1 -0
- package/dest/node/random/browser/index.js +31 -0
- package/dest/node/random/index.d.ts +2 -0
- package/dest/node/random/index.d.ts.map +1 -0
- package/dest/node/random/index.js +2 -0
- package/dest/node/random/node/index.d.ts +2 -0
- package/dest/node/random/node/index.d.ts.map +1 -0
- package/dest/node/random/node/index.js +5 -0
- package/dest/node/serialize/buffer_reader.d.ts +28 -0
- package/dest/node/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/node/serialize/buffer_reader.js +66 -0
- package/dest/node/serialize/index.d.ts +4 -0
- package/dest/node/serialize/index.d.ts.map +1 -0
- package/dest/node/serialize/index.js +4 -0
- package/dest/node/serialize/output_type.d.ts +11 -0
- package/dest/node/serialize/output_type.d.ts.map +1 -0
- package/dest/node/serialize/output_type.js +44 -0
- package/dest/node/serialize/serialize.d.ts +53 -0
- package/dest/node/serialize/serialize.d.ts.map +1 -0
- package/dest/node/serialize/serialize.js +139 -0
- package/dest/node/types/fields.d.ts +43 -0
- package/dest/node/types/fields.d.ts.map +1 -0
- package/dest/node/types/fields.js +97 -0
- package/dest/node/types/fixed_size_buffer.d.ts +26 -0
- package/dest/node/types/fixed_size_buffer.d.ts.map +1 -0
- package/dest/node/types/fixed_size_buffer.js +51 -0
- package/dest/node/types/index.d.ts +6 -0
- package/dest/node/types/index.d.ts.map +1 -0
- package/dest/node/types/index.js +6 -0
- package/dest/node/types/point.d.ts +17 -0
- package/dest/node/types/point.d.ts.map +1 -0
- package/dest/node/types/point.js +31 -0
- package/dest/node/types/ptr.d.ts +13 -0
- package/dest/node/types/ptr.d.ts.map +1 -0
- package/dest/node/types/ptr.js +19 -0
- package/dest/node/types/raw_buffer.d.ts +3 -0
- package/dest/node/types/raw_buffer.d.ts.map +1 -0
- package/dest/node/types/raw_buffer.js +5 -0
- package/dest/node-cjs/async_map/index.d.ts +10 -0
- package/dest/node-cjs/async_map/index.d.ts.map +1 -0
- package/dest/node-cjs/async_map/index.js +20 -0
- package/dest/node-cjs/barretenberg/backend.d.ts +85 -0
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/backend.js +253 -0
- package/dest/node-cjs/barretenberg/blake2s.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/blake2s.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/blake2s.test.js +56 -0
- package/dest/node-cjs/barretenberg/common.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/common.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/common.test.js +22 -0
- package/dest/node-cjs/barretenberg/index.d.ts +47 -0
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/index.js +106 -0
- package/dest/node-cjs/barretenberg/pedersen.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/pedersen.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/pedersen.test.js +57 -0
- package/dest/node-cjs/barretenberg/poseidon.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/poseidon.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/poseidon.test.js +37 -0
- package/dest/node-cjs/barretenberg/schnorr.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/schnorr.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/schnorr.test.js +115 -0
- package/dest/node-cjs/barretenberg/verifier.d.ts +16 -0
- package/dest/node-cjs/barretenberg/verifier.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/verifier.js +44 -0
- package/dest/node-cjs/barretenberg_api/index.d.ts +113 -0
- package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/index.js +733 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +44 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +130 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +22 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.js +11 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +21 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +61 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +47 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +112 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +22 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.js +11 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.js +44 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.js +17 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.js +5 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.js +27 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.js +26 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.js +5 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts +22 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.js +48 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.js +32 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts +18 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/index.js +51 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.js +40 -0
- package/dest/node-cjs/benchmark/index.d.ts +3 -0
- package/dest/node-cjs/benchmark/index.d.ts.map +1 -0
- package/dest/node-cjs/benchmark/index.js +30 -0
- package/dest/node-cjs/benchmark/timer.d.ts +34 -0
- package/dest/node-cjs/benchmark/timer.d.ts.map +1 -0
- package/dest/node-cjs/benchmark/timer.js +45 -0
- package/dest/node-cjs/bigint-array/index.d.ts +3 -0
- package/dest/node-cjs/bigint-array/index.d.ts.map +1 -0
- package/dest/node-cjs/bigint-array/index.js +26 -0
- package/dest/node-cjs/bindgen/function_declaration.d.ts +11 -0
- package/dest/node-cjs/bindgen/function_declaration.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/function_declaration.js +3 -0
- package/dest/node-cjs/bindgen/index.d.ts +2 -0
- package/dest/node-cjs/bindgen/index.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/index.js +17 -0
- package/dest/node-cjs/bindgen/mappings.d.ts +4 -0
- package/dest/node-cjs/bindgen/mappings.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/mappings.js +68 -0
- package/dest/node-cjs/bindgen/rust.d.ts +2 -0
- package/dest/node-cjs/bindgen/rust.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/rust.js +48 -0
- package/dest/node-cjs/bindgen/to_camel_case.d.ts +2 -0
- package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/to_camel_case.js +15 -0
- package/dest/node-cjs/bindgen/typescript.d.ts +2 -0
- package/dest/node-cjs/bindgen/typescript.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/typescript.js +105 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.d.ts +43 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.js +95 -0
- package/dest/node-cjs/crs/browser/index.d.ts +2 -0
- package/dest/node-cjs/crs/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/browser/index.js +7 -0
- package/dest/node-cjs/crs/index.d.ts +2 -0
- package/dest/node-cjs/crs/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/index.js +7 -0
- package/dest/node-cjs/crs/net_crs.d.ts +61 -0
- package/dest/node-cjs/crs/net_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/net_crs.js +102 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.d.ts +38 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.js +69 -0
- package/dest/node-cjs/crs/node/index.d.ts +36 -0
- package/dest/node-cjs/crs/node/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/node/index.js +99 -0
- package/dest/node-cjs/examples/simple.rawtest.d.ts +2 -0
- package/dest/node-cjs/examples/simple.rawtest.d.ts.map +1 -0
- package/dest/node-cjs/examples/simple.rawtest.js +33 -0
- package/dest/node-cjs/examples/simple.test.d.ts +2 -0
- package/dest/node-cjs/examples/simple.test.d.ts.map +1 -0
- package/dest/node-cjs/examples/simple.test.js +25 -0
- package/dest/node-cjs/index.d.ts +5 -0
- package/dest/node-cjs/index.d.ts.map +1 -0
- package/dest/node-cjs/index.js +20 -0
- package/dest/node-cjs/main.d.ts +23 -0
- package/dest/node-cjs/main.d.ts.map +1 -0
- package/dest/node-cjs/main.js +735 -0
- package/dest/node-cjs/package.json +3 -0
- package/dest/node-cjs/proof/index.d.ts +19 -0
- package/dest/node-cjs/proof/index.d.ts.map +1 -0
- package/dest/node-cjs/proof/index.js +93 -0
- package/dest/node-cjs/random/browser/index.d.ts +2 -0
- package/dest/node-cjs/random/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/random/browser/index.js +35 -0
- package/dest/node-cjs/random/index.d.ts +2 -0
- package/dest/node-cjs/random/index.d.ts.map +1 -0
- package/dest/node-cjs/random/index.js +5 -0
- package/dest/node-cjs/random/node/index.d.ts +2 -0
- package/dest/node-cjs/random/node/index.d.ts.map +1 -0
- package/dest/node-cjs/random/node/index.js +9 -0
- package/dest/node-cjs/serialize/buffer_reader.d.ts +28 -0
- package/dest/node-cjs/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/node-cjs/serialize/buffer_reader.js +70 -0
- package/dest/node-cjs/serialize/index.d.ts +4 -0
- package/dest/node-cjs/serialize/index.d.ts.map +1 -0
- package/dest/node-cjs/serialize/index.js +7 -0
- package/dest/node-cjs/serialize/output_type.d.ts +11 -0
- package/dest/node-cjs/serialize/output_type.d.ts.map +1 -0
- package/dest/node-cjs/serialize/output_type.js +52 -0
- package/dest/node-cjs/serialize/serialize.d.ts +53 -0
- package/dest/node-cjs/serialize/serialize.d.ts.map +1 -0
- package/dest/node-cjs/serialize/serialize.js +161 -0
- package/dest/node-cjs/types/fields.d.ts +43 -0
- package/dest/node-cjs/types/fields.d.ts.map +1 -0
- package/dest/node-cjs/types/fields.js +102 -0
- package/dest/node-cjs/types/fixed_size_buffer.d.ts +26 -0
- package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +1 -0
- package/dest/node-cjs/types/fixed_size_buffer.js +57 -0
- package/dest/node-cjs/types/index.d.ts +6 -0
- package/dest/node-cjs/types/index.d.ts.map +1 -0
- package/dest/node-cjs/types/index.js +9 -0
- package/dest/node-cjs/types/point.d.ts +17 -0
- package/dest/node-cjs/types/point.d.ts.map +1 -0
- package/dest/node-cjs/types/point.js +35 -0
- package/dest/node-cjs/types/ptr.d.ts +13 -0
- package/dest/node-cjs/types/ptr.d.ts.map +1 -0
- package/dest/node-cjs/types/ptr.js +23 -0
- package/dest/node-cjs/types/raw_buffer.d.ts +3 -0
- package/dest/node-cjs/types/raw_buffer.d.ts.map +1 -0
- package/dest/node-cjs/types/raw_buffer.js +9 -0
- package/package.json +105 -0
- package/src/async_map/index.ts +15 -0
- package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +156 -0
- package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +40 -0
- package/src/barretenberg/backend.ts +362 -0
- package/src/barretenberg/blake2s.test.ts +70 -0
- package/src/barretenberg/common.test.ts +23 -0
- package/src/barretenberg/index.ts +130 -0
- package/src/barretenberg/pedersen.test.ts +62 -0
- package/src/barretenberg/poseidon.test.ts +39 -0
- package/src/barretenberg/schnorr.test.ts +182 -0
- package/src/barretenberg/verifier.ts +55 -0
- package/src/barretenberg_api/index.ts +1305 -0
- package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +138 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.ts +10 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.ts +15 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +18 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.ts +10 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +60 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +138 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.ts +10 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.ts +15 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +18 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.ts +10 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/index.ts +47 -0
- package/src/barretenberg_wasm/fetch_code/browser/index.ts +12 -0
- package/src/barretenberg_wasm/fetch_code/browser/wasm-module.d.ts +4 -0
- package/src/barretenberg_wasm/fetch_code/index.ts +1 -0
- package/src/barretenberg_wasm/fetch_code/node/index.ts +22 -0
- package/src/barretenberg_wasm/helpers/browser/index.ts +22 -0
- package/src/barretenberg_wasm/helpers/index.ts +1 -0
- package/src/barretenberg_wasm/helpers/node/index.ts +44 -0
- package/src/barretenberg_wasm/helpers/node/node_endpoint.ts +28 -0
- package/src/barretenberg_wasm/index.test.ts +45 -0
- package/src/barretenberg_wasm/index.ts +50 -0
- package/src/benchmark/index.ts +26 -0
- package/src/benchmark/timer.ts +45 -0
- package/src/bigint-array/index.ts +21 -0
- package/src/bindgen/function_declaration.ts +11 -0
- package/src/bindgen/index.ts +17 -0
- package/src/bindgen/mappings.ts +66 -0
- package/src/bindgen/rust.ts +52 -0
- package/src/bindgen/to_camel_case.ts +10 -0
- package/src/bindgen/typescript.ts +116 -0
- package/src/crs/browser/cached_net_crs.ts +99 -0
- package/src/crs/browser/index.ts +1 -0
- package/src/crs/index.ts +1 -0
- package/src/crs/net_crs.ts +115 -0
- package/src/crs/node/ignition_files_crs.ts +74 -0
- package/src/crs/node/index.ts +102 -0
- package/src/examples/simple.rawtest.ts +38 -0
- package/src/examples/simple.test.ts +28 -0
- package/src/index.html +9 -0
- package/src/index.ts +12 -0
- package/src/main.ts +834 -0
- package/src/proof/index.ts +120 -0
- package/src/random/browser/index.ts +32 -0
- package/src/random/index.ts +1 -0
- package/src/random/node/index.ts +5 -0
- package/src/serialize/buffer_reader.ts +82 -0
- package/src/serialize/index.ts +3 -0
- package/src/serialize/output_type.ts +53 -0
- package/src/serialize/serialize.ts +157 -0
- package/src/types/fields.ts +115 -0
- package/src/types/fixed_size_buffer.ts +59 -0
- package/src/types/index.ts +5 -0
- package/src/types/point.ts +35 -0
- package/src/types/ptr.ts +20 -0
- package/src/types/raw_buffer.ts +3 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`poseidon sync poseidonHash 1`] = `
|
|
4
|
+
Fr {
|
|
5
|
+
"value": Uint8Array [
|
|
6
|
+
43,
|
|
7
|
+
202,
|
|
8
|
+
235,
|
|
9
|
+
109,
|
|
10
|
+
88,
|
|
11
|
+
187,
|
|
12
|
+
56,
|
|
13
|
+
186,
|
|
14
|
+
247,
|
|
15
|
+
83,
|
|
16
|
+
213,
|
|
17
|
+
140,
|
|
18
|
+
60,
|
|
19
|
+
150,
|
|
20
|
+
97,
|
|
21
|
+
143,
|
|
22
|
+
234,
|
|
23
|
+
130,
|
|
24
|
+
22,
|
|
25
|
+
51,
|
|
26
|
+
69,
|
|
27
|
+
41,
|
|
28
|
+
94,
|
|
29
|
+
180,
|
|
30
|
+
14,
|
|
31
|
+
136,
|
|
32
|
+
52,
|
|
33
|
+
78,
|
|
34
|
+
235,
|
|
35
|
+
12,
|
|
36
|
+
226,
|
|
37
|
+
161,
|
|
38
|
+
],
|
|
39
|
+
}
|
|
40
|
+
`;
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { BackendOptions, Barretenberg, CircuitOptions } from './index.js';
|
|
2
|
+
import { RawBuffer } from '../types/raw_buffer.js';
|
|
3
|
+
import { decompressSync as gunzip } from 'fflate';
|
|
4
|
+
import {
|
|
5
|
+
deflattenFields,
|
|
6
|
+
flattenFieldsAsArray,
|
|
7
|
+
ProofData,
|
|
8
|
+
reconstructHonkProof,
|
|
9
|
+
reconstructUltraPlonkProof,
|
|
10
|
+
} from '../proof/index.js';
|
|
11
|
+
|
|
12
|
+
export class UltraPlonkBackend {
|
|
13
|
+
// These type assertions are used so that we don't
|
|
14
|
+
// have to initialize `api` and `acirComposer` in the constructor.
|
|
15
|
+
// These are initialized asynchronously in the `init` function,
|
|
16
|
+
// constructors cannot be asynchronous which is why we do this.
|
|
17
|
+
|
|
18
|
+
protected api!: Barretenberg;
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
protected acirComposer: any;
|
|
21
|
+
|
|
22
|
+
protected acirUncompressedBytecode: Uint8Array;
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
acirBytecode: string,
|
|
26
|
+
protected backendOptions: BackendOptions = { threads: 1 },
|
|
27
|
+
protected circuitOptions: CircuitOptions = { recursive: false },
|
|
28
|
+
) {
|
|
29
|
+
this.acirUncompressedBytecode = acirToUint8Array(acirBytecode);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @ignore */
|
|
33
|
+
async instantiate(): Promise<void> {
|
|
34
|
+
if (!this.api) {
|
|
35
|
+
const api = await Barretenberg.new(this.backendOptions);
|
|
36
|
+
|
|
37
|
+
const honkRecursion = false;
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
+
const [_total, subgroupSize] = await api.acirGetCircuitSizes(
|
|
40
|
+
this.acirUncompressedBytecode,
|
|
41
|
+
this.circuitOptions.recursive,
|
|
42
|
+
honkRecursion,
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
await api.initSRSForCircuitSize(subgroupSize);
|
|
46
|
+
this.acirComposer = await api.acirNewAcirComposer(subgroupSize);
|
|
47
|
+
await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
48
|
+
this.api = api;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** @description Generates a proof */
|
|
53
|
+
async generateProof(compressedWitness: Uint8Array): Promise<ProofData> {
|
|
54
|
+
await this.instantiate();
|
|
55
|
+
const proofWithPublicInputs = await this.api.acirCreateProof(
|
|
56
|
+
this.acirComposer,
|
|
57
|
+
this.acirUncompressedBytecode,
|
|
58
|
+
this.circuitOptions.recursive,
|
|
59
|
+
gunzip(compressedWitness),
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// This is the number of bytes in a UltraPlonk proof
|
|
63
|
+
// minus the public inputs.
|
|
64
|
+
const numBytesInProofWithoutPublicInputs = 2144;
|
|
65
|
+
|
|
66
|
+
const splitIndex = proofWithPublicInputs.length - numBytesInProofWithoutPublicInputs;
|
|
67
|
+
|
|
68
|
+
const publicInputsConcatenated = proofWithPublicInputs.slice(0, splitIndex);
|
|
69
|
+
const proof = proofWithPublicInputs.slice(splitIndex);
|
|
70
|
+
const publicInputs = deflattenFields(publicInputsConcatenated);
|
|
71
|
+
|
|
72
|
+
return { proof, publicInputs };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Generates artifacts that will be passed to a circuit that will verify this proof.
|
|
77
|
+
*
|
|
78
|
+
* Instead of passing the proof and verification key as a byte array, we pass them
|
|
79
|
+
* as fields which makes it cheaper to verify in a circuit.
|
|
80
|
+
*
|
|
81
|
+
* The proof that is passed here will have been created by passing the `recursive`
|
|
82
|
+
* parameter to a backend.
|
|
83
|
+
*
|
|
84
|
+
* The number of public inputs denotes how many public inputs are in the inner proof.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const artifacts = await backend.generateRecursiveProofArtifacts(proof, numOfPublicInputs);
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
async generateRecursiveProofArtifacts(
|
|
92
|
+
proofData: ProofData,
|
|
93
|
+
numOfPublicInputs = 0,
|
|
94
|
+
): Promise<{
|
|
95
|
+
proofAsFields: string[];
|
|
96
|
+
vkAsFields: string[];
|
|
97
|
+
vkHash: string;
|
|
98
|
+
}> {
|
|
99
|
+
await this.instantiate();
|
|
100
|
+
|
|
101
|
+
const proof = reconstructUltraPlonkProof(proofData);
|
|
102
|
+
const proofAsFields = (
|
|
103
|
+
await this.api.acirSerializeProofIntoFields(this.acirComposer, proof, numOfPublicInputs)
|
|
104
|
+
).slice(numOfPublicInputs);
|
|
105
|
+
|
|
106
|
+
// TODO: perhaps we should put this in the init function. Need to benchmark
|
|
107
|
+
// TODO how long it takes.
|
|
108
|
+
await this.api.acirInitVerificationKey(this.acirComposer);
|
|
109
|
+
|
|
110
|
+
// Note: If you don't init verification key, `acirSerializeVerificationKeyIntoFields`` will just hang on serialization
|
|
111
|
+
const vk = await this.api.acirSerializeVerificationKeyIntoFields(this.acirComposer);
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
proofAsFields: proofAsFields.map(p => p.toString()),
|
|
115
|
+
vkAsFields: vk[0].map(vk => vk.toString()),
|
|
116
|
+
vkHash: vk[1].toString(),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** @description Verifies a proof */
|
|
121
|
+
async verifyProof(proofData: ProofData): Promise<boolean> {
|
|
122
|
+
await this.instantiate();
|
|
123
|
+
await this.api.acirInitVerificationKey(this.acirComposer);
|
|
124
|
+
const proof = reconstructUltraPlonkProof(proofData);
|
|
125
|
+
return await this.api.acirVerifyProof(this.acirComposer, proof);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** @description Returns the verification key */
|
|
129
|
+
async getVerificationKey(): Promise<Uint8Array> {
|
|
130
|
+
await this.instantiate();
|
|
131
|
+
await this.api.acirInitVerificationKey(this.acirComposer);
|
|
132
|
+
return await this.api.acirGetVerificationKey(this.acirComposer);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** @description Returns a solidity verifier */
|
|
136
|
+
async getSolidityVerifier(): Promise<string> {
|
|
137
|
+
await this.instantiate();
|
|
138
|
+
await this.api.acirInitVerificationKey(this.acirComposer);
|
|
139
|
+
return await this.api.acirGetSolidityVerifier(this.acirComposer);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async destroy(): Promise<void> {
|
|
143
|
+
if (!this.api) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
await this.api.destroy();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Buffers are prepended with their size. The size takes 4 bytes.
|
|
151
|
+
const serializedBufferSize = 4;
|
|
152
|
+
const fieldByteSize = 32;
|
|
153
|
+
const publicInputOffset = 3;
|
|
154
|
+
const publicInputsOffsetBytes = publicInputOffset * fieldByteSize;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Options for the UltraHonkBackend.
|
|
158
|
+
*/
|
|
159
|
+
export type UltraHonkBackendOptions = {
|
|
160
|
+
/**Selecting this option will use the keccak hash function instead of poseidon
|
|
161
|
+
* when generating challenges in the proof.
|
|
162
|
+
* Use this when you want to verify the created proof on an EVM chain.
|
|
163
|
+
*/
|
|
164
|
+
keccak: boolean;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export class UltraHonkBackend {
|
|
168
|
+
// These type assertions are used so that we don't
|
|
169
|
+
// have to initialize `api` in the constructor.
|
|
170
|
+
// These are initialized asynchronously in the `init` function,
|
|
171
|
+
// constructors cannot be asynchronous which is why we do this.
|
|
172
|
+
|
|
173
|
+
protected api!: Barretenberg;
|
|
174
|
+
protected acirUncompressedBytecode: Uint8Array;
|
|
175
|
+
|
|
176
|
+
constructor(
|
|
177
|
+
acirBytecode: string,
|
|
178
|
+
protected backendOptions: BackendOptions = { threads: 1 },
|
|
179
|
+
protected circuitOptions: CircuitOptions = { recursive: false },
|
|
180
|
+
) {
|
|
181
|
+
this.acirUncompressedBytecode = acirToUint8Array(acirBytecode);
|
|
182
|
+
}
|
|
183
|
+
/** @ignore */
|
|
184
|
+
async instantiate(): Promise<void> {
|
|
185
|
+
if (!this.api) {
|
|
186
|
+
const api = await Barretenberg.new(this.backendOptions);
|
|
187
|
+
const honkRecursion = true;
|
|
188
|
+
await api.acirInitSRS(this.acirUncompressedBytecode, this.circuitOptions.recursive, honkRecursion);
|
|
189
|
+
|
|
190
|
+
// We don't init a proving key here in the Honk API
|
|
191
|
+
// await api.acirInitProvingKey(this.acirComposer, this.acirUncompressedBytecode);
|
|
192
|
+
this.api = api;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
async generateProof(compressedWitness: Uint8Array, options?: UltraHonkBackendOptions): Promise<ProofData> {
|
|
197
|
+
await this.instantiate();
|
|
198
|
+
|
|
199
|
+
const proveUltraHonk = options?.keccak
|
|
200
|
+
? this.api.acirProveUltraKeccakHonk.bind(this.api)
|
|
201
|
+
: this.api.acirProveUltraHonk.bind(this.api);
|
|
202
|
+
|
|
203
|
+
const proofWithPublicInputs = await proveUltraHonk(
|
|
204
|
+
this.acirUncompressedBytecode,
|
|
205
|
+
this.circuitOptions.recursive,
|
|
206
|
+
gunzip(compressedWitness),
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4));
|
|
210
|
+
|
|
211
|
+
const numPublicInputs = Number(proofAsStrings[1]);
|
|
212
|
+
|
|
213
|
+
// Account for the serialized buffer size at start
|
|
214
|
+
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
215
|
+
// Get the part before and after the public inputs
|
|
216
|
+
const proofStart = proofWithPublicInputs.slice(0, publicInputsOffset);
|
|
217
|
+
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
218
|
+
const proofEnd = proofWithPublicInputs.slice(publicInputsOffset + publicInputsSplitIndex);
|
|
219
|
+
// Construct the proof without the public inputs
|
|
220
|
+
const proof = new Uint8Array([...proofStart, ...proofEnd]);
|
|
221
|
+
|
|
222
|
+
// Fetch the number of public inputs out of the proof string
|
|
223
|
+
const publicInputsConcatenated = proofWithPublicInputs.slice(
|
|
224
|
+
publicInputsOffset,
|
|
225
|
+
publicInputsOffset + publicInputsSplitIndex,
|
|
226
|
+
);
|
|
227
|
+
const publicInputs = deflattenFields(publicInputsConcatenated);
|
|
228
|
+
|
|
229
|
+
return { proof, publicInputs };
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async verifyProof(proofData: ProofData, options?: UltraHonkBackendOptions): Promise<boolean> {
|
|
233
|
+
await this.instantiate();
|
|
234
|
+
|
|
235
|
+
const proof = reconstructHonkProof(flattenFieldsAsArray(proofData.publicInputs), proofData.proof);
|
|
236
|
+
|
|
237
|
+
const writeVkUltraHonk = options?.keccak
|
|
238
|
+
? this.api.acirWriteVkUltraKeccakHonk.bind(this.api)
|
|
239
|
+
: this.api.acirWriteVkUltraHonk.bind(this.api);
|
|
240
|
+
const verifyUltraHonk = options?.keccak
|
|
241
|
+
? this.api.acirVerifyUltraKeccakHonk.bind(this.api)
|
|
242
|
+
: this.api.acirVerifyUltraHonk.bind(this.api);
|
|
243
|
+
|
|
244
|
+
const vkBuf = await writeVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
245
|
+
return await verifyUltraHonk(proof, new RawBuffer(vkBuf));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
async getVerificationKey(): Promise<Uint8Array> {
|
|
249
|
+
await this.instantiate();
|
|
250
|
+
return await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** @description Returns a solidity verifier */
|
|
254
|
+
async getSolidityVerifier(vk?: Uint8Array): Promise<string> {
|
|
255
|
+
await this.instantiate();
|
|
256
|
+
const vkBuf =
|
|
257
|
+
vk ?? (await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive));
|
|
258
|
+
return await this.api.acirHonkSolidityVerifier(this.acirUncompressedBytecode, new RawBuffer(vkBuf));
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// 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
|
|
262
|
+
async generateRecursiveProofArtifacts(
|
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
264
|
+
_proof: Uint8Array,
|
|
265
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
266
|
+
_numOfPublicInputs: number,
|
|
267
|
+
): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> {
|
|
268
|
+
await this.instantiate();
|
|
269
|
+
// TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation.
|
|
270
|
+
// There is still a proofAsFields method but we could consider getting rid of it as the proof itself
|
|
271
|
+
// is a list of field elements.
|
|
272
|
+
// UltraHonk also does not have public inputs directly prepended to the proof and they are still instead
|
|
273
|
+
// inserted at an offset.
|
|
274
|
+
// const proof = reconstructProofWithPublicInputs(proofData);
|
|
275
|
+
// const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs);
|
|
276
|
+
|
|
277
|
+
// TODO: perhaps we should put this in the init function. Need to benchmark
|
|
278
|
+
// TODO how long it takes.
|
|
279
|
+
const vkBuf = await this.api.acirWriteVkUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
280
|
+
const vk = await this.api.acirVkAsFieldsUltraHonk(vkBuf);
|
|
281
|
+
|
|
282
|
+
return {
|
|
283
|
+
// TODO(https://github.com/noir-lang/noir/issues/5661)
|
|
284
|
+
proofAsFields: [],
|
|
285
|
+
vkAsFields: vk.map(vk => vk.toString()),
|
|
286
|
+
// We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts
|
|
287
|
+
// The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit
|
|
288
|
+
// they expect
|
|
289
|
+
vkHash: '',
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
async destroy(): Promise<void> {
|
|
294
|
+
if (!this.api) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
await this.api.destroy();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
export class AztecClientBackend {
|
|
302
|
+
// These type assertions are used so that we don't
|
|
303
|
+
// have to initialize `api` in the constructor.
|
|
304
|
+
// These are initialized asynchronously in the `init` function,
|
|
305
|
+
// constructors cannot be asynchronous which is why we do this.
|
|
306
|
+
|
|
307
|
+
protected api!: Barretenberg;
|
|
308
|
+
|
|
309
|
+
constructor(protected acirMsgpack: Uint8Array[], protected options: BackendOptions = { threads: 1 }) {}
|
|
310
|
+
|
|
311
|
+
/** @ignore */
|
|
312
|
+
async instantiate(): Promise<void> {
|
|
313
|
+
if (!this.api) {
|
|
314
|
+
const api = await Barretenberg.new(this.options);
|
|
315
|
+
await api.initSRSClientIVC();
|
|
316
|
+
this.api = api;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
async prove(witnessMsgpack: Uint8Array[]): Promise<[Uint8Array, Uint8Array]> {
|
|
321
|
+
await this.instantiate();
|
|
322
|
+
return this.api.acirProveAztecClient(this.acirMsgpack, witnessMsgpack);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
async verify(proof: Uint8Array, vk: Uint8Array): Promise<boolean> {
|
|
326
|
+
await this.instantiate();
|
|
327
|
+
return this.api.acirVerifyAztecClient(proof, vk);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
async proveAndVerify(witnessMsgpack: Uint8Array[]): Promise<boolean> {
|
|
331
|
+
await this.instantiate();
|
|
332
|
+
return this.api.acirProveAndVerifyAztecClient(this.acirMsgpack, witnessMsgpack);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
async destroy(): Promise<void> {
|
|
336
|
+
if (!this.api) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
await this.api.destroy();
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Converts bytecode from a base64 string to a Uint8Array
|
|
344
|
+
function acirToUint8Array(base64EncodedBytecode: string): Uint8Array {
|
|
345
|
+
const compressedByteCode = base64Decode(base64EncodedBytecode);
|
|
346
|
+
return gunzip(compressedByteCode);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Since this is a simple function, we can use feature detection to
|
|
350
|
+
// see if we are in the nodeJs environment or the browser environment.
|
|
351
|
+
function base64Decode(input: string): Uint8Array {
|
|
352
|
+
if (typeof Buffer !== 'undefined') {
|
|
353
|
+
// Node.js environment
|
|
354
|
+
const b = Buffer.from(input, 'base64');
|
|
355
|
+
return new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
|
|
356
|
+
} else if (typeof atob === 'function') {
|
|
357
|
+
// Browser environment
|
|
358
|
+
return Uint8Array.from(atob(input), c => c.charCodeAt(0));
|
|
359
|
+
} else {
|
|
360
|
+
throw new Error('No implementation found for base64 decoding.');
|
|
361
|
+
}
|
|
362
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Barretenberg, BarretenbergSync } from './index.js';
|
|
2
|
+
import { Buffer32, Fr } from '../types/index.js';
|
|
3
|
+
|
|
4
|
+
describe('blake2s async', () => {
|
|
5
|
+
let api: Barretenberg;
|
|
6
|
+
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
api = await Barretenberg.new({ threads: 1 });
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
afterAll(async () => {
|
|
12
|
+
await api.destroy();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('blake2s', async () => {
|
|
16
|
+
const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
|
|
17
|
+
const expected = Buffer32.fromBuffer(
|
|
18
|
+
new Uint8Array([
|
|
19
|
+
0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
|
|
20
|
+
0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
|
|
21
|
+
]),
|
|
22
|
+
);
|
|
23
|
+
const result = await api.blake2s(input);
|
|
24
|
+
expect(result).toEqual(expected);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('blake2sToField', async () => {
|
|
28
|
+
const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
|
|
29
|
+
const expected = Fr.fromBufferReduce(
|
|
30
|
+
new Uint8Array([
|
|
31
|
+
0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
|
|
32
|
+
0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
|
|
33
|
+
]),
|
|
34
|
+
);
|
|
35
|
+
const result = await api.blake2sToField(input);
|
|
36
|
+
expect(result).toEqual(expected);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('blake2s sync', () => {
|
|
41
|
+
let api: BarretenbergSync;
|
|
42
|
+
|
|
43
|
+
beforeAll(async () => {
|
|
44
|
+
api = await BarretenbergSync.new();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('blake2s', () => {
|
|
48
|
+
const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
|
|
49
|
+
const expected = Buffer32.fromBuffer(
|
|
50
|
+
new Uint8Array([
|
|
51
|
+
0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
|
|
52
|
+
0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
|
|
53
|
+
]),
|
|
54
|
+
);
|
|
55
|
+
const result = api.blake2s(input);
|
|
56
|
+
expect(result).toEqual(expected);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('blake2sToField', () => {
|
|
60
|
+
const input = Buffer.from('abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789');
|
|
61
|
+
const expected = Fr.fromBufferReduce(
|
|
62
|
+
new Uint8Array([
|
|
63
|
+
0x44, 0xdd, 0xdb, 0x39, 0xbd, 0xb2, 0xaf, 0x80, 0xc1, 0x47, 0x89, 0x4c, 0x1d, 0x75, 0x6a, 0xda, 0x3d, 0x1c,
|
|
64
|
+
0x2a, 0xc2, 0xb1, 0x00, 0x54, 0x1e, 0x04, 0xfe, 0x87, 0xb4, 0xa5, 0x9e, 0x12, 0x43,
|
|
65
|
+
]),
|
|
66
|
+
);
|
|
67
|
+
const result = api.blake2sToField(input);
|
|
68
|
+
expect(result).toEqual(expected);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Barretenberg } from './index.js';
|
|
2
|
+
|
|
3
|
+
describe('env', () => {
|
|
4
|
+
let api: Barretenberg;
|
|
5
|
+
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
api = await Barretenberg.new({ threads: 3 });
|
|
8
|
+
}, 30000);
|
|
9
|
+
|
|
10
|
+
afterAll(async () => {
|
|
11
|
+
if (api) {
|
|
12
|
+
await api.destroy();
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('thread test', async () => {
|
|
17
|
+
// Main thread doesn't do anything in this test, so -1.
|
|
18
|
+
const threads = (await api.getNumThreads()) - 1;
|
|
19
|
+
const iterations = 100000;
|
|
20
|
+
const result = await api.testThreads(threads, iterations);
|
|
21
|
+
expect(result).toBe(iterations);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { proxy } from 'comlink';
|
|
2
|
+
import { BarretenbergApi, BarretenbergApiSync } from '../barretenberg_api/index.js';
|
|
3
|
+
import { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';
|
|
4
|
+
import { BarretenbergWasmMain, BarretenbergWasmMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
|
|
5
|
+
import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';
|
|
6
|
+
import { BarretenbergWasmWorker, fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
|
|
7
|
+
import createDebug from 'debug';
|
|
8
|
+
import { Crs, GrumpkinCrs } from '../crs/index.js';
|
|
9
|
+
import { RawBuffer } from '../types/raw_buffer.js';
|
|
10
|
+
|
|
11
|
+
export { BarretenbergVerifier } from './verifier.js';
|
|
12
|
+
export { UltraPlonkBackend, UltraHonkBackend, AztecClientBackend } from './backend.js';
|
|
13
|
+
|
|
14
|
+
const debug = createDebug('bb.js:wasm');
|
|
15
|
+
|
|
16
|
+
export type BackendOptions = {
|
|
17
|
+
/** @description Number of threads to run the backend worker on */
|
|
18
|
+
threads?: number;
|
|
19
|
+
|
|
20
|
+
/** @description Initial and Maximum memory to be alloted to the backend worker */
|
|
21
|
+
memory?: { initial?: number; maximum?: number };
|
|
22
|
+
|
|
23
|
+
/** @description Path to download CRS files */
|
|
24
|
+
crsPath?: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type CircuitOptions = {
|
|
28
|
+
/** @description Whether to produce SNARK friendly proofs */
|
|
29
|
+
recursive: boolean;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The main class library consumers interact with.
|
|
34
|
+
* It extends the generated api, and provides a static constructor "new" to compose components.
|
|
35
|
+
*/
|
|
36
|
+
export class Barretenberg extends BarretenbergApi {
|
|
37
|
+
private options: BackendOptions;
|
|
38
|
+
|
|
39
|
+
private constructor(private worker: any, wasm: BarretenbergWasmWorker, options: BackendOptions) {
|
|
40
|
+
super(wasm);
|
|
41
|
+
this.options = options;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Constructs an instance of Barretenberg.
|
|
46
|
+
* Launches it within a worker. This is necessary as it blocks waiting on child threads to complete,
|
|
47
|
+
* and blocking the main thread in the browser is not allowed.
|
|
48
|
+
* It threads > 1 (defaults to hardware availability), child threads will be created on their own workers.
|
|
49
|
+
*/
|
|
50
|
+
static async new(options: BackendOptions = {}) {
|
|
51
|
+
const worker = createMainWorker();
|
|
52
|
+
const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
|
|
53
|
+
const { module, threads } = await fetchModuleAndThreads(options.threads);
|
|
54
|
+
await wasm.init(module, threads, proxy(debug), options.memory?.initial, options.memory?.maximum);
|
|
55
|
+
return new Barretenberg(worker, wasm, options);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async getNumThreads() {
|
|
59
|
+
return await this.wasm.getNumThreads();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async initSRSForCircuitSize(circuitSize: number): Promise<void> {
|
|
63
|
+
const crs = await Crs.new(circuitSize + 1, this.options.crsPath);
|
|
64
|
+
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?
|
|
65
|
+
// await this.commonInitSlabAllocator(circuitSize);
|
|
66
|
+
await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async initSRSClientIVC(): Promise<void> {
|
|
70
|
+
// crsPath can be undefined
|
|
71
|
+
const crs = await Crs.new(2 ** 20 + 1, this.options.crsPath);
|
|
72
|
+
const grumpkinCrs = await GrumpkinCrs.new(2 ** 15 + 1, this.options.crsPath);
|
|
73
|
+
|
|
74
|
+
// Load CRS into wasm global CRS state.
|
|
75
|
+
// TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
|
|
76
|
+
await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
|
|
77
|
+
await this.srsInitGrumpkinSrs(new RawBuffer(grumpkinCrs.getG1Data()), grumpkinCrs.numPoints);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async acirInitSRS(bytecode: Uint8Array, recursive: boolean, honkRecursion: boolean): Promise<void> {
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
82
|
+
const [_total, subgroupSize] = await this.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
|
|
83
|
+
return this.initSRSForCircuitSize(subgroupSize);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async destroy() {
|
|
87
|
+
await this.wasm.destroy();
|
|
88
|
+
await this.worker.terminate();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
let barretenbergSyncSingleton: BarretenbergSync;
|
|
93
|
+
let barretenbergSyncSingletonPromise: Promise<BarretenbergSync>;
|
|
94
|
+
|
|
95
|
+
export class BarretenbergSync extends BarretenbergApiSync {
|
|
96
|
+
private constructor(wasm: BarretenbergWasmMain) {
|
|
97
|
+
super(wasm);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static async new() {
|
|
101
|
+
const wasm = new BarretenbergWasmMain();
|
|
102
|
+
const { module, threads } = await fetchModuleAndThreads(1);
|
|
103
|
+
await wasm.init(module, threads);
|
|
104
|
+
return new BarretenbergSync(wasm);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static initSingleton() {
|
|
108
|
+
if (!barretenbergSyncSingletonPromise) {
|
|
109
|
+
barretenbergSyncSingletonPromise = BarretenbergSync.new().then(s => (barretenbergSyncSingleton = s));
|
|
110
|
+
}
|
|
111
|
+
return barretenbergSyncSingletonPromise;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static getSingleton() {
|
|
115
|
+
if (!barretenbergSyncSingleton) {
|
|
116
|
+
throw new Error('First call BarretenbergSync.initSingleton() on @aztec/bb.js module.');
|
|
117
|
+
}
|
|
118
|
+
return barretenbergSyncSingleton;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
getWasm() {
|
|
122
|
+
return this.wasm;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// If we're in ESM environment, use top level await. CJS users need to call it manually.
|
|
127
|
+
// Need to ignore for cjs build.
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
129
|
+
// @ts-ignore
|
|
130
|
+
await BarretenbergSync.initSingleton(); // POSTPROCESS ESM ONLY
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BarretenbergSync } from './index.js';
|
|
2
|
+
import { Timer } from '../benchmark/timer.js';
|
|
3
|
+
import { Fr } from '../types/index.js';
|
|
4
|
+
|
|
5
|
+
describe('pedersen sync', () => {
|
|
6
|
+
let api: BarretenbergSync;
|
|
7
|
+
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
api = await BarretenbergSync.new();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('pedersenHash', () => {
|
|
13
|
+
const result = api.pedersenHash([new Fr(4n), new Fr(8n)], 7);
|
|
14
|
+
expect(result).toMatchSnapshot();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('pedersenHash perf test', () => {
|
|
18
|
+
const loops = 1000;
|
|
19
|
+
const fields = Array.from({ length: loops * 2 }).map(() => Fr.random());
|
|
20
|
+
const t = new Timer();
|
|
21
|
+
for (let i = 0; i < loops; ++i) {
|
|
22
|
+
api.pedersenHash([fields[i * 2], fields[i * 2 + 1]], 0);
|
|
23
|
+
}
|
|
24
|
+
const us = t.us() / loops;
|
|
25
|
+
console.log(`Executed ${loops} hashes at an average ${us}us / hash`);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('pedersenHashes perf test', () => {
|
|
29
|
+
const loops = 10;
|
|
30
|
+
const numHashesPerLoop = 1024;
|
|
31
|
+
const fields = Array.from({ length: numHashesPerLoop * 2 }).map(() => Fr.random());
|
|
32
|
+
const t = new Timer();
|
|
33
|
+
for (let i = 0; i < loops; ++i) {
|
|
34
|
+
api.pedersenHashes(fields, 0);
|
|
35
|
+
}
|
|
36
|
+
const us = t.us() / (numHashesPerLoop * loops);
|
|
37
|
+
console.log(`Executed ${numHashesPerLoop * loops} hashes at an average ${us}us / hash`);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('pedersenHashBuffer', () => {
|
|
41
|
+
const input = Buffer.alloc(123);
|
|
42
|
+
input.writeUint32BE(321, 0);
|
|
43
|
+
input.writeUint32BE(456, 119);
|
|
44
|
+
const r = api.pedersenHashBuffer(input, 0);
|
|
45
|
+
expect(r).toMatchSnapshot();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('pedersenCommit', () => {
|
|
49
|
+
const result = api.pedersenCommit([new Fr(4n), new Fr(8n), new Fr(12n)], 0);
|
|
50
|
+
expect(result).toMatchSnapshot();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it.skip('pedersenCommit perf test', () => {
|
|
54
|
+
const loops = 1000;
|
|
55
|
+
const fields = Array.from({ length: loops * 2 }).map(() => Fr.random());
|
|
56
|
+
const t = new Timer();
|
|
57
|
+
for (let i = 0; i < loops; ++i) {
|
|
58
|
+
api.pedersenCommit([fields[i * 2], fields[i * 2 + 1]], 0);
|
|
59
|
+
}
|
|
60
|
+
console.log(t.us() / loops);
|
|
61
|
+
});
|
|
62
|
+
});
|