@aztec/bb.js 0.0.1-alpha.7 → 0.0.1-commit.24de95ac
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 +55 -84
- package/build/amd64-linux/bb +0 -0
- package/build/amd64-linux/nodejs_module.node +0 -0
- package/build/amd64-macos/bb +0 -0
- package/build/amd64-macos/nodejs_module.node +0 -0
- package/build/arm64-linux/bb +0 -0
- package/build/arm64-linux/nodejs_module.node +0 -0
- package/build/arm64-macos/bb +0 -0
- package/build/arm64-macos/nodejs_module.node +0 -0
- package/dest/browser/async_map/index.d.ts.map +1 -0
- package/dest/{async_map → browser/async_map}/index.js +1 -1
- package/dest/browser/barretenberg/backend.d.ts +75 -0
- package/dest/browser/barretenberg/backend.d.ts.map +1 -0
- package/dest/browser/barretenberg/backend.js +301 -0
- package/dest/browser/barretenberg/index.d.ts +67 -0
- package/dest/browser/barretenberg/index.d.ts.map +1 -0
- package/dest/browser/barretenberg/index.js +191 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +45 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.js +125 -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/index.js +11 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +2 -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/browser/main.worker.js +12 -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/heap_allocator.js +70 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +53 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +170 -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/index.js +11 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +2 -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/browser/thread.worker.js +12 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +29 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/index.js +40 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +2 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +2 -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/browser/index.js +36 -0
- package/dest/browser/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/fetch_code/index.js +2 -0
- package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts +13 -0
- package/dest/browser/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/helpers/browser/index.js +40 -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/index.js +2 -0
- package/dest/browser/barretenberg_wasm/index.d.ts +5 -0
- package/dest/browser/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/browser/barretenberg_wasm/index.js +16 -0
- package/dest/browser/bb_backends/browser/index.d.ts +11 -0
- package/dest/browser/bb_backends/browser/index.d.ts.map +1 -0
- package/dest/browser/bb_backends/browser/index.js +39 -0
- package/dest/browser/bb_backends/index.d.ts +45 -0
- package/dest/browser/bb_backends/index.d.ts.map +1 -0
- package/dest/browser/bb_backends/index.js +15 -0
- package/dest/browser/bb_backends/interface.d.ts +33 -0
- package/dest/browser/bb_backends/interface.d.ts.map +1 -0
- package/dest/browser/bb_backends/interface.js +2 -0
- package/dest/browser/bb_backends/sync_to_async_adapter.d.ts +15 -0
- package/dest/browser/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
- package/dest/browser/bb_backends/sync_to_async_adapter.js +20 -0
- package/dest/browser/bb_backends/wasm.d.ts +49 -0
- package/dest/browser/bb_backends/wasm.d.ts.map +1 -0
- package/dest/browser/bb_backends/wasm.js +83 -0
- package/dest/browser/bbapi_exception.d.ts +7 -0
- package/dest/browser/bbapi_exception.d.ts.map +1 -0
- package/dest/browser/bbapi_exception.js +14 -0
- package/dest/browser/bigint-array/index.d.ts +17 -0
- package/dest/browser/bigint-array/index.d.ts.map +1 -0
- package/dest/browser/bigint-array/index.js +37 -0
- package/dest/browser/cbind/generate.d.ts +5 -0
- package/dest/browser/cbind/generate.d.ts.map +1 -0
- package/dest/browser/cbind/generate.js +151 -0
- package/dest/browser/cbind/generated/api_types.d.ts +2051 -0
- package/dest/browser/cbind/generated/api_types.d.ts.map +1 -0
- package/dest/browser/cbind/generated/api_types.js +2747 -0
- package/dest/browser/cbind/generated/async.d.ts +62 -0
- package/dest/browser/cbind/generated/async.d.ts.map +1 -0
- package/dest/browser/cbind/generated/async.js +662 -0
- package/dest/browser/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/browser/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/browser/cbind/generated/curve_constants.js +45 -0
- package/dest/browser/cbind/generated/sync.d.ts +62 -0
- package/dest/browser/cbind/generated/sync.d.ts.map +1 -0
- package/dest/browser/cbind/generated/sync.js +609 -0
- package/dest/browser/cbind/schema_compiler.d.ts +68 -0
- package/dest/browser/cbind/schema_compiler.d.ts.map +1 -0
- package/dest/browser/cbind/schema_compiler.js +599 -0
- package/dest/{crs → browser/crs}/browser/cached_net_crs.d.ts +18 -0
- package/dest/browser/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/browser/crs/browser/cached_net_crs.js +90 -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/browser/index.js +2 -0
- package/dest/browser/crs/index.d.ts +2 -0
- package/dest/browser/crs/index.d.ts.map +1 -0
- package/dest/browser/crs/index.js +2 -0
- package/dest/browser/crs/net_crs.d.ts +85 -0
- package/dest/browser/crs/net_crs.d.ts.map +1 -0
- package/dest/browser/crs/net_crs.js +136 -0
- package/dest/browser/index.d.ts +8 -0
- package/dest/browser/index.d.ts.map +1 -0
- package/dest/browser/index.js +8 -0
- package/dest/browser/log/browser/index.d.ts +6 -0
- package/dest/browser/log/browser/index.d.ts.map +1 -0
- package/dest/browser/log/browser/index.js +28 -0
- package/dest/browser/log/index.d.ts +2 -0
- package/dest/browser/log/index.d.ts.map +1 -0
- package/dest/browser/log/index.js +2 -0
- package/dest/browser/log/types.d.ts +6 -0
- package/dest/browser/log/types.d.ts.map +1 -0
- package/dest/browser/log/types.js +2 -0
- package/dest/browser/proof/index.d.ts +21 -0
- package/dest/browser/proof/index.d.ts.map +1 -0
- package/dest/browser/proof/index.js +63 -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/browser/index.js +31 -0
- package/dest/browser/random/index.d.ts +2 -0
- package/dest/browser/random/index.d.ts.map +1 -0
- package/dest/browser/random/index.js +2 -0
- package/dest/browser/retry/index.d.ts +26 -0
- package/dest/browser/retry/index.d.ts.map +1 -0
- package/dest/browser/retry/index.js +50 -0
- package/dest/browser/serialize/index.d.ts +2 -0
- package/dest/browser/serialize/index.d.ts.map +1 -0
- package/dest/browser/serialize/index.js +2 -0
- package/dest/browser/serialize/serialize.d.ts +18 -0
- package/dest/browser/serialize/serialize.d.ts.map +1 -0
- package/dest/browser/serialize/serialize.js +72 -0
- package/dest/browser/types/fields.d.ts +23 -0
- package/dest/browser/types/fields.d.ts.map +1 -0
- package/dest/browser/types/fields.js +61 -0
- package/dest/browser/types/index.d.ts +3 -0
- package/dest/browser/types/index.d.ts.map +1 -0
- package/dest/browser/types/index.js +3 -0
- package/dest/browser/types/point.d.ts +18 -0
- package/dest/browser/types/point.d.ts.map +1 -0
- package/dest/browser/types/point.js +28 -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/__snapshots__/pedersen.test.js.snap +156 -0
- package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +40 -0
- package/dest/node/barretenberg/backend.d.ts +75 -0
- package/dest/node/barretenberg/backend.d.ts.map +1 -0
- package/dest/node/barretenberg/backend.js +301 -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 +57 -0
- package/dest/node/barretenberg/index.d.ts +67 -0
- package/dest/node/barretenberg/index.d.ts.map +1 -0
- package/dest/node/barretenberg/index.js +191 -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 +62 -0
- package/dest/node/barretenberg/poseidon.bench.test.d.ts +2 -0
- package/dest/node/barretenberg/poseidon.bench.test.d.ts.map +1 -0
- package/dest/node/barretenberg/poseidon.bench.test.js +217 -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_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +45 -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 +11 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +2 -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 +3 -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 +21 -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 +16 -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 +70 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +53 -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 +170 -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 +11 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +2 -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 +3 -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 +21 -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 +16 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +29 -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/barretenberg-threads.d.ts +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/fetch_code/browser/barretenberg.js +3 -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 +36 -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 +35 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts +13 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/helpers/browser/index.js +40 -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 +48 -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 +5 -0
- package/dest/node/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/node/barretenberg_wasm/index.js +16 -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 +39 -0
- package/dest/node/bb_backends/browser/index.d.ts +11 -0
- package/dest/node/bb_backends/browser/index.d.ts.map +1 -0
- package/dest/node/bb_backends/browser/index.js +39 -0
- package/dest/node/bb_backends/index.d.ts +45 -0
- package/dest/node/bb_backends/index.d.ts.map +1 -0
- package/dest/node/bb_backends/index.js +15 -0
- package/dest/node/bb_backends/interface.d.ts +33 -0
- package/dest/node/bb_backends/interface.d.ts.map +1 -0
- package/dest/node/bb_backends/interface.js +2 -0
- package/dest/node/bb_backends/node/index.d.ts +11 -0
- package/dest/node/bb_backends/node/index.d.ts.map +1 -0
- package/dest/node/bb_backends/node/index.js +80 -0
- package/dest/node/bb_backends/node/native_pipe.d.ts +25 -0
- package/dest/node/bb_backends/node/native_pipe.d.ts.map +1 -0
- package/dest/node/bb_backends/node/native_pipe.js +113 -0
- package/dest/node/bb_backends/node/native_shm.d.ts +28 -0
- package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -0
- package/dest/node/bb_backends/node/native_shm.js +150 -0
- package/dest/node/bb_backends/node/native_socket.d.ts +34 -0
- package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -0
- package/dest/node/bb_backends/node/native_socket.js +269 -0
- package/dest/node/bb_backends/node/platform.d.ts +27 -0
- package/dest/node/bb_backends/node/platform.d.ts.map +1 -0
- package/dest/node/bb_backends/node/platform.js +124 -0
- package/dest/node/bb_backends/sync_to_async_adapter.d.ts +15 -0
- package/dest/node/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
- package/dest/node/bb_backends/sync_to_async_adapter.js +20 -0
- package/dest/node/bb_backends/wasm.d.ts +49 -0
- package/dest/node/bb_backends/wasm.d.ts.map +1 -0
- package/dest/node/bb_backends/wasm.js +83 -0
- package/dest/node/bbapi_exception.d.ts +7 -0
- package/dest/node/bbapi_exception.d.ts.map +1 -0
- package/dest/node/bbapi_exception.js +14 -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 +17 -0
- package/dest/node/bigint-array/index.d.ts.map +1 -0
- package/dest/node/bigint-array/index.js +37 -0
- package/dest/node/cbind/generate.d.ts +5 -0
- package/dest/node/cbind/generate.d.ts.map +1 -0
- package/dest/node/cbind/generate.js +151 -0
- package/dest/node/cbind/generated/api_types.d.ts +2051 -0
- package/dest/node/cbind/generated/api_types.d.ts.map +1 -0
- package/dest/node/cbind/generated/api_types.js +2747 -0
- package/dest/node/cbind/generated/async.d.ts +62 -0
- package/dest/node/cbind/generated/async.d.ts.map +1 -0
- package/dest/node/cbind/generated/async.js +662 -0
- package/dest/node/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/node/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/node/cbind/generated/curve_constants.js +45 -0
- package/dest/node/cbind/generated/sync.d.ts +62 -0
- package/dest/node/cbind/generated/sync.d.ts.map +1 -0
- package/dest/node/cbind/generated/sync.js +609 -0
- package/dest/node/cbind/schema_compiler.d.ts +68 -0
- package/dest/node/cbind/schema_compiler.d.ts.map +1 -0
- package/dest/node/cbind/schema_compiler.js +599 -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 +85 -0
- package/dest/node/crs/net_crs.d.ts.map +1 -0
- package/dest/node/crs/net_crs.js +136 -0
- package/dest/node/crs/node/index.d.ts +38 -0
- package/dest/node/crs/node/index.d.ts.map +1 -0
- package/dest/node/crs/node/index.js +102 -0
- package/dest/node/index.d.ts +8 -0
- package/dest/node/index.d.ts.map +1 -0
- package/dest/node/index.js +8 -0
- package/dest/node/log/browser/index.d.ts +6 -0
- package/dest/node/log/browser/index.d.ts.map +1 -0
- package/dest/node/log/browser/index.js +28 -0
- package/dest/node/log/index.d.ts +2 -0
- package/dest/node/log/index.d.ts.map +1 -0
- package/dest/node/log/index.js +2 -0
- package/dest/node/log/node/index.d.ts +6 -0
- package/dest/node/log/node/index.d.ts.map +1 -0
- package/dest/node/log/node/index.js +40 -0
- package/dest/node/log/types.d.ts +6 -0
- package/dest/node/log/types.d.ts.map +1 -0
- package/dest/node/log/types.js +2 -0
- package/dest/node/proof/index.d.ts +21 -0
- package/dest/node/proof/index.d.ts.map +1 -0
- package/dest/node/proof/index.js +63 -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/{random → node/random}/index.js +1 -1
- 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/retry/index.d.ts +26 -0
- package/dest/node/retry/index.d.ts.map +1 -0
- package/dest/node/retry/index.js +50 -0
- package/dest/node/serialize/index.d.ts +2 -0
- package/dest/node/serialize/index.d.ts.map +1 -0
- package/dest/node/serialize/index.js +2 -0
- package/dest/node/serialize/serialize.d.ts +18 -0
- package/dest/node/serialize/serialize.d.ts.map +1 -0
- package/dest/node/serialize/serialize.js +72 -0
- package/dest/node/types/fields.d.ts +23 -0
- package/dest/node/types/fields.d.ts.map +1 -0
- package/dest/node/types/fields.js +61 -0
- package/dest/node/types/index.d.ts +3 -0
- package/dest/node/types/index.d.ts.map +1 -0
- package/dest/node/types/index.js +3 -0
- package/dest/node/types/point.d.ts +18 -0
- package/dest/node/types/point.d.ts.map +1 -0
- package/dest/node/types/point.js +28 -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 +19 -0
- package/dest/node-cjs/barretenberg/backend.d.ts +75 -0
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/backend.js +308 -0
- package/dest/node-cjs/barretenberg/blake2s.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/blake2s.test.js +59 -0
- package/dest/node-cjs/barretenberg/index.d.ts +67 -0
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/index.js +200 -0
- package/dest/node-cjs/barretenberg/pedersen.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/pedersen.test.js +64 -0
- package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/poseidon.bench.test.js +219 -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_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +45 -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 +129 -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 +14 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +2 -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 +14 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +3 -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 +24 -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 +18 -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 +74 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +53 -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 +174 -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 +14 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +2 -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 +14 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +3 -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 +24 -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 +18 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +29 -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/barretenberg-threads.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg-threads.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +6 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/barretenberg.js +6 -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 +40 -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 +39 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts +13 -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 +50 -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 +57 -0
- package/dest/{barretenberg_wasm → node-cjs/barretenberg_wasm/helpers}/node/node_endpoint.d.ts +1 -1
- 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 +31 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts +5 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/index.js +19 -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 +41 -0
- package/dest/node-cjs/bb_backends/browser/index.d.ts +11 -0
- package/dest/node-cjs/bb_backends/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/browser/index.js +43 -0
- package/dest/node-cjs/bb_backends/index.d.ts +45 -0
- package/dest/node-cjs/bb_backends/index.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/index.js +18 -0
- package/dest/node-cjs/bb_backends/interface.d.ts +33 -0
- package/dest/node-cjs/bb_backends/interface.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/interface.js +3 -0
- package/dest/node-cjs/bb_backends/node/index.d.ts +11 -0
- package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/node/index.js +84 -0
- package/dest/node-cjs/bb_backends/node/native_pipe.d.ts +25 -0
- package/dest/node-cjs/bb_backends/node/native_pipe.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/node/native_pipe.js +117 -0
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts +28 -0
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/node/native_shm.js +154 -0
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts +34 -0
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/node/native_socket.js +274 -0
- package/dest/node-cjs/bb_backends/node/platform.d.ts +27 -0
- package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/node/platform.js +131 -0
- package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts +15 -0
- package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/sync_to_async_adapter.js +24 -0
- package/dest/node-cjs/bb_backends/wasm.d.ts +49 -0
- package/dest/node-cjs/bb_backends/wasm.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/wasm.js +88 -0
- package/dest/node-cjs/bbapi_exception.d.ts +7 -0
- package/dest/node-cjs/bbapi_exception.d.ts.map +1 -0
- package/dest/node-cjs/bbapi_exception.js +18 -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 +29 -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 +17 -0
- package/dest/node-cjs/bigint-array/index.d.ts.map +1 -0
- package/dest/node-cjs/bigint-array/index.js +43 -0
- package/dest/node-cjs/cbind/generate.d.ts +5 -0
- package/dest/node-cjs/cbind/generate.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generate.js +153 -0
- package/dest/node-cjs/cbind/generated/api_types.d.ts +2051 -0
- package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generated/api_types.js +2989 -0
- package/dest/node-cjs/cbind/generated/async.d.ts +62 -0
- package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generated/async.js +666 -0
- package/dest/node-cjs/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/node-cjs/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generated/curve_constants.js +48 -0
- package/dest/node-cjs/cbind/generated/sync.d.ts +62 -0
- package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generated/sync.js +613 -0
- package/dest/node-cjs/cbind/schema_compiler.d.ts +68 -0
- package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -0
- package/dest/node-cjs/cbind/schema_compiler.js +606 -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 +85 -0
- package/dest/node-cjs/crs/net_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/net_crs.js +141 -0
- package/dest/node-cjs/crs/node/index.d.ts +38 -0
- package/dest/node-cjs/crs/node/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/node/index.js +107 -0
- package/dest/node-cjs/index.d.ts +8 -0
- package/dest/node-cjs/index.d.ts.map +1 -0
- package/dest/node-cjs/index.js +37 -0
- package/dest/node-cjs/log/browser/index.d.ts +6 -0
- package/dest/node-cjs/log/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/log/browser/index.js +30 -0
- package/dest/node-cjs/log/index.d.ts +2 -0
- package/dest/node-cjs/log/index.d.ts.map +1 -0
- package/dest/node-cjs/log/index.js +8 -0
- package/dest/node-cjs/log/node/index.d.ts +6 -0
- package/dest/node-cjs/log/node/index.d.ts.map +1 -0
- package/dest/node-cjs/log/node/index.js +42 -0
- package/dest/node-cjs/log/types.d.ts +6 -0
- package/dest/node-cjs/log/types.d.ts.map +1 -0
- package/dest/node-cjs/log/types.js +3 -0
- package/dest/node-cjs/package.json +3 -0
- package/dest/node-cjs/proof/index.d.ts +21 -0
- package/dest/node-cjs/proof/index.d.ts.map +1 -0
- package/dest/node-cjs/proof/index.js +72 -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 +8 -0
- package/dest/node-cjs/retry/index.d.ts +26 -0
- package/dest/node-cjs/retry/index.d.ts.map +1 -0
- package/dest/node-cjs/retry/index.js +55 -0
- package/dest/node-cjs/serialize/index.d.ts +2 -0
- package/dest/node-cjs/serialize/index.d.ts.map +1 -0
- package/dest/node-cjs/serialize/index.js +5 -0
- package/dest/node-cjs/serialize/serialize.d.ts +18 -0
- package/dest/node-cjs/serialize/serialize.d.ts.map +1 -0
- package/dest/node-cjs/serialize/serialize.js +82 -0
- package/dest/node-cjs/types/fields.d.ts +23 -0
- package/dest/node-cjs/types/fields.d.ts.map +1 -0
- package/dest/node-cjs/types/fields.js +65 -0
- package/dest/node-cjs/types/index.d.ts +3 -0
- package/dest/node-cjs/types/index.d.ts.map +1 -0
- package/dest/node-cjs/types/index.js +6 -0
- package/dest/node-cjs/types/point.d.ts +18 -0
- package/dest/node-cjs/types/point.d.ts.map +1 -0
- package/dest/node-cjs/types/point.js +32 -0
- package/package.json +57 -46
- 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 +390 -0
- package/src/barretenberg/blake2s.test.ts +69 -0
- package/src/barretenberg/index.ts +223 -0
- package/src/barretenberg/pedersen.test.ts +69 -0
- package/src/barretenberg/poseidon.bench.test.ts +268 -0
- package/src/barretenberg/poseidon.test.ts +39 -0
- package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +138 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.ts +11 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.ts +13 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +21 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.ts +19 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +72 -0
- package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +218 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.ts +11 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.ts +13 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +21 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.ts +19 -0
- package/src/barretenberg_wasm/barretenberg_wasm_thread/index.ts +47 -0
- package/src/barretenberg_wasm/fetch_code/browser/barretenberg-threads.ts +3 -0
- package/src/barretenberg_wasm/fetch_code/browser/barretenberg.ts +3 -0
- package/src/barretenberg_wasm/fetch_code/browser/index.ts +34 -0
- package/src/barretenberg_wasm/fetch_code/index.ts +1 -0
- package/src/barretenberg_wasm/fetch_code/node/index.ts +34 -0
- package/src/barretenberg_wasm/fetch_code/wasm-module.d.ts +4 -0
- package/src/barretenberg_wasm/helpers/browser/index.ts +47 -0
- package/src/barretenberg_wasm/helpers/index.ts +1 -0
- package/src/barretenberg_wasm/{node → helpers/node}/index.ts +24 -15
- package/src/barretenberg_wasm/index.test.ts +46 -0
- package/src/barretenberg_wasm/index.ts +22 -1
- package/src/bb_backends/browser/index.ts +50 -0
- package/src/bb_backends/index.ts +49 -0
- package/src/bb_backends/interface.ts +35 -0
- package/src/bb_backends/node/index.ts +94 -0
- package/src/bb_backends/node/native_pipe.ts +127 -0
- package/src/bb_backends/node/native_shm.ts +171 -0
- package/src/bb_backends/node/native_socket.ts +312 -0
- package/src/bb_backends/node/platform.ts +151 -0
- package/src/bb_backends/sync_to_async_adapter.ts +21 -0
- package/src/bb_backends/wasm.ts +103 -0
- package/src/bbapi_exception.ts +13 -0
- package/src/benchmark/index.ts +26 -0
- package/src/benchmark/timer.ts +45 -0
- package/src/bigint-array/index.ts +39 -17
- package/src/cbind/README.md +1 -0
- package/src/cbind/generate.ts +182 -0
- package/src/cbind/generated/api_types.ts +4271 -0
- package/src/cbind/generated/async.ts +717 -0
- package/src/cbind/generated/curve_constants.ts +53 -0
- package/src/cbind/generated/sync.ts +663 -0
- package/src/cbind/schema_compiler.ts +745 -0
- package/src/crs/browser/cached_net_crs.ts +41 -1
- package/src/crs/browser/index.ts +1 -1
- package/src/crs/index.ts +1 -1
- package/src/crs/net_crs.ts +114 -19
- package/src/crs/node/index.ts +96 -26
- package/src/index.html +1 -1
- package/src/index.ts +41 -5
- package/src/log/browser/index.ts +35 -0
- package/src/log/index.ts +1 -0
- package/src/log/node/index.ts +52 -0
- package/src/log/types.ts +6 -0
- package/src/proof/index.ts +94 -0
- package/src/random/browser/index.ts +1 -1
- package/src/retry/index.ts +50 -0
- package/src/serialize/index.ts +0 -2
- package/src/serialize/serialize.ts +0 -82
- package/src/types/fields.ts +44 -65
- package/src/types/index.ts +0 -3
- package/src/types/point.ts +17 -20
- package/dest/async_map/index.d.ts.map +0 -1
- package/dest/barretenberg-threads.wasm +0 -0
- package/dest/barretenberg.wasm +0 -0
- package/dest/barretenberg_api/blake2s.test.d.ts.map +0 -1
- package/dest/barretenberg_api/blake2s.test.js +0 -30
- package/dest/barretenberg_api/common.test.d.ts +0 -2
- package/dest/barretenberg_api/common.test.d.ts.map +0 -1
- package/dest/barretenberg_api/common.test.js +0 -18
- package/dest/barretenberg_api/index.d.ts +0 -103
- package/dest/barretenberg_api/index.d.ts.map +0 -1
- package/dest/barretenberg_api/index.js +0 -379
- package/dest/barretenberg_api/pedersen.test.d.ts.map +0 -1
- package/dest/barretenberg_api/pedersen.test.js +0 -69
- package/dest/barretenberg_api/schnorr.test.d.ts +0 -2
- package/dest/barretenberg_api/schnorr.test.d.ts.map +0 -1
- package/dest/barretenberg_api/schnorr.test.js +0 -113
- package/dest/barretenberg_binder/heap_allocator.d.ts +0 -22
- package/dest/barretenberg_binder/heap_allocator.d.ts.map +0 -1
- package/dest/barretenberg_binder/heap_allocator.js +0 -59
- package/dest/barretenberg_binder/heap_allocator_sync.d.ts +0 -22
- package/dest/barretenberg_binder/heap_allocator_sync.d.ts.map +0 -1
- package/dest/barretenberg_binder/heap_allocator_sync.js +0 -58
- package/dest/barretenberg_binder/index.d.ts +0 -32
- package/dest/barretenberg_binder/index.d.ts.map +0 -1
- package/dest/barretenberg_binder/index.js +0 -73
- package/dest/barretenberg_wasm/barretenberg_wasm.d.ts +0 -50
- package/dest/barretenberg_wasm/barretenberg_wasm.d.ts.map +0 -1
- package/dest/barretenberg_wasm/barretenberg_wasm.js +0 -212
- package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts +0 -2
- package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts.map +0 -1
- package/dest/barretenberg_wasm/barretenberg_wasm.test.js +0 -43
- package/dest/barretenberg_wasm/browser/index.d.ts +0 -8
- package/dest/barretenberg_wasm/browser/index.d.ts.map +0 -1
- package/dest/barretenberg_wasm/browser/index.js +0 -26
- package/dest/barretenberg_wasm/browser/worker.d.ts +0 -2
- package/dest/barretenberg_wasm/browser/worker.d.ts.map +0 -1
- package/dest/barretenberg_wasm/browser/worker.js +0 -11
- package/dest/barretenberg_wasm/index.d.ts +0 -2
- package/dest/barretenberg_wasm/index.d.ts.map +0 -1
- package/dest/barretenberg_wasm/index.js +0 -2
- package/dest/barretenberg_wasm/node/index.d.ts +0 -17
- package/dest/barretenberg_wasm/node/index.d.ts.map +0 -1
- package/dest/barretenberg_wasm/node/index.js +0 -40
- package/dest/barretenberg_wasm/node/node_endpoint.d.ts.map +0 -1
- package/dest/barretenberg_wasm/node/node_endpoint.js +0 -28
- package/dest/barretenberg_wasm/node/worker.d.ts +0 -2
- package/dest/barretenberg_wasm/node/worker.d.ts.map +0 -1
- package/dest/barretenberg_wasm/node/worker.js +0 -9
- package/dest/barretenberg_wasm.js +0 -2
- package/dest/barretenberg_wasm.js.LICENSE.txt +0 -5
- package/dest/bigint-array/index.d.ts +0 -3
- package/dest/bigint-array/index.d.ts.map +0 -1
- package/dest/bigint-array/index.js +0 -21
- package/dest/bindgen/function_declaration.d.ts +0 -11
- package/dest/bindgen/function_declaration.d.ts.map +0 -1
- package/dest/bindgen/function_declaration.js +0 -2
- package/dest/bindgen/index.d.ts +0 -2
- package/dest/bindgen/index.d.ts.map +0 -1
- package/dest/bindgen/index.js +0 -15
- package/dest/bindgen/mappings.d.ts +0 -4
- package/dest/bindgen/mappings.d.ts.map +0 -1
- package/dest/bindgen/mappings.js +0 -63
- package/dest/bindgen/rust.d.ts +0 -2
- package/dest/bindgen/rust.d.ts.map +0 -1
- package/dest/bindgen/rust.js +0 -43
- package/dest/bindgen/to_camel_case.d.ts +0 -2
- package/dest/bindgen/to_camel_case.d.ts.map +0 -1
- package/dest/bindgen/to_camel_case.js +0 -11
- package/dest/bindgen/typescript.d.ts +0 -2
- package/dest/bindgen/typescript.d.ts.map +0 -1
- package/dest/bindgen/typescript.js +0 -80
- package/dest/crs/browser/cached_net_crs.d.ts.map +0 -1
- package/dest/crs/browser/cached_net_crs.js +0 -54
- package/dest/crs/browser/index.d.ts +0 -2
- package/dest/crs/browser/index.d.ts.map +0 -1
- package/dest/crs/browser/index.js +0 -2
- package/dest/crs/index.d.ts +0 -2
- package/dest/crs/index.d.ts.map +0 -1
- package/dest/crs/index.js +0 -2
- package/dest/crs/net_crs.d.ts +0 -36
- package/dest/crs/net_crs.d.ts.map +0 -1
- package/dest/crs/net_crs.js +0 -59
- package/dest/crs/node/ignition_files_crs.d.ts +0 -37
- package/dest/crs/node/ignition_files_crs.d.ts.map +0 -1
- package/dest/crs/node/ignition_files_crs.js +0 -51
- package/dest/crs/node/index.d.ts +0 -21
- package/dest/crs/node/index.d.ts.map +0 -1
- package/dest/crs/node/index.js +0 -54
- package/dest/examples/simple.rawtest.d.ts +0 -2
- package/dest/examples/simple.rawtest.d.ts.map +0 -1
- package/dest/examples/simple.rawtest.js +0 -29
- package/dest/examples/simple.test.d.ts +0 -2
- package/dest/examples/simple.test.d.ts.map +0 -1
- package/dest/examples/simple.test.js +0 -22
- package/dest/factory/index.d.ts +0 -21
- package/dest/factory/index.d.ts.map +0 -1
- package/dest/factory/index.js +0 -34
- package/dest/index.d.ts +0 -6
- package/dest/index.d.ts.map +0 -1
- package/dest/index.html +0 -1
- package/dest/index.js +0 -6
- package/dest/main.d.ts +0 -10
- package/dest/main.d.ts.map +0 -1
- package/dest/main.js +0 -275
- package/dest/random/browser/index.d.ts +0 -2
- package/dest/random/browser/index.d.ts.map +0 -1
- package/dest/random/browser/index.js +0 -31
- package/dest/random/index.d.ts.map +0 -1
- package/dest/random/node/index.d.ts +0 -2
- package/dest/random/node/index.d.ts.map +0 -1
- package/dest/random/node/index.js +0 -5
- package/dest/serialize/buffer_reader.d.ts +0 -28
- package/dest/serialize/buffer_reader.d.ts.map +0 -1
- package/dest/serialize/buffer_reader.js +0 -66
- package/dest/serialize/index.d.ts +0 -4
- package/dest/serialize/index.d.ts.map +0 -1
- package/dest/serialize/index.js +0 -4
- package/dest/serialize/output_type.d.ts +0 -11
- package/dest/serialize/output_type.d.ts.map +0 -1
- package/dest/serialize/output_type.js +0 -44
- package/dest/serialize/serialize.d.ts +0 -53
- package/dest/serialize/serialize.d.ts.map +0 -1
- package/dest/serialize/serialize.js +0 -139
- package/dest/simple_test.js +0 -2
- package/dest/simple_test.js.LICENSE.txt +0 -14
- package/dest/types/fields.d.ts +0 -33
- package/dest/types/fields.d.ts.map +0 -1
- package/dest/types/fields.js +0 -86
- package/dest/types/fixed_size_buffer.d.ts +0 -26
- package/dest/types/fixed_size_buffer.d.ts.map +0 -1
- package/dest/types/fixed_size_buffer.js +0 -54
- package/dest/types/index.d.ts +0 -6
- package/dest/types/index.d.ts.map +0 -1
- package/dest/types/index.js +0 -6
- package/dest/types/point.d.ts +0 -17
- package/dest/types/point.d.ts.map +0 -1
- package/dest/types/point.js +0 -32
- package/dest/types/ptr.d.ts +0 -13
- package/dest/types/ptr.d.ts.map +0 -1
- package/dest/types/ptr.js +0 -20
- package/dest/types/raw_buffer.d.ts +0 -3
- package/dest/types/raw_buffer.d.ts.map +0 -1
- package/dest/types/raw_buffer.js +0 -5
- package/src/barretenberg_api/blake2s.test.ts +0 -39
- package/src/barretenberg_api/common.test.ts +0 -21
- package/src/barretenberg_api/index.ts +0 -649
- package/src/barretenberg_api/pedersen.test.ts +0 -84
- package/src/barretenberg_api/schnorr.test.ts +0 -169
- package/src/barretenberg_binder/heap_allocator.ts +0 -62
- package/src/barretenberg_binder/heap_allocator_sync.ts +0 -61
- package/src/barretenberg_binder/index.ts +0 -76
- package/src/barretenberg_wasm/barretenberg_wasm.test.ts +0 -52
- package/src/barretenberg_wasm/barretenberg_wasm.ts +0 -246
- package/src/barretenberg_wasm/browser/index.ts +0 -32
- package/src/barretenberg_wasm/browser/worker.ts +0 -13
- package/src/barretenberg_wasm/node/worker.ts +0 -10
- package/src/bindgen/function_declaration.ts +0 -11
- package/src/bindgen/index.ts +0 -17
- package/src/bindgen/mappings.ts +0 -66
- package/src/bindgen/rust.ts +0 -52
- package/src/bindgen/to_camel_case.ts +0 -10
- package/src/bindgen/typescript.ts +0 -91
- package/src/crs/node/ignition_files_crs.ts +0 -60
- package/src/examples/simple.rawtest.ts +0 -37
- package/src/examples/simple.test.ts +0 -27
- package/src/factory/index.ts +0 -36
- package/src/main.ts +0 -311
- package/src/serialize/buffer_reader.ts +0 -82
- package/src/serialize/output_type.ts +0 -53
- package/src/types/fixed_size_buffer.ts +0 -59
- package/src/types/ptr.ts +0 -20
- package/src/types/raw_buffer.ts +0 -3
- /package/dest/{async_map → browser/async_map}/index.d.ts +0 -0
- /package/dest/{random → browser/barretenberg_wasm/fetch_code}/index.d.ts +0 -0
- /package/dest/{barretenberg_api → node-cjs/barretenberg}/blake2s.test.d.ts +0 -0
- /package/dest/{barretenberg_api → node-cjs/barretenberg}/pedersen.test.d.ts +0 -0
- /package/src/barretenberg_wasm/{node → helpers/node}/node_endpoint.ts +0 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { type Worker } from 'worker_threads';
|
|
2
|
+
import { Remote } from 'comlink';
|
|
3
|
+
import { getNumCpu, getRemoteBarretenbergWasm, getSharedMemoryAvailable } from '../helpers/index.js';
|
|
4
|
+
import { createThreadWorker } from '../barretenberg_wasm_thread/factory/node/index.js';
|
|
5
|
+
import { type BarretenbergWasmThreadWorker } from '../barretenberg_wasm_thread/index.js';
|
|
6
|
+
import { BarretenbergWasmBase } from '../barretenberg_wasm_base/index.js';
|
|
7
|
+
import { HeapAllocator } from './heap_allocator.js';
|
|
8
|
+
import { createDebugLogger } from '../../log/index.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* This is the "main thread" implementation of BarretenbergWasm.
|
|
12
|
+
* It spawns a bunch of "child thread" implementations.
|
|
13
|
+
* In a browser context, this still runs on a worker, as it will block waiting on child threads.
|
|
14
|
+
*/
|
|
15
|
+
export class BarretenbergWasmMain extends BarretenbergWasmBase {
|
|
16
|
+
static MAX_THREADS = 32;
|
|
17
|
+
private workers: Worker[] = [];
|
|
18
|
+
private remoteWasms: BarretenbergWasmThreadWorker[] = [];
|
|
19
|
+
private nextWorker = 0;
|
|
20
|
+
private nextThreadId = 1;
|
|
21
|
+
|
|
22
|
+
// Pre-allocated scratch buffers for msgpack I/O to avoid malloc/free overhead
|
|
23
|
+
private msgpackInputScratch: number = 0; // 8MB input buffer
|
|
24
|
+
private msgpackOutputScratch: number = 0; // 8MB output buffer
|
|
25
|
+
private readonly MSGPACK_SCRATCH_SIZE = 1024 * 1024 * 8; // 8MB
|
|
26
|
+
|
|
27
|
+
public getNumThreads() {
|
|
28
|
+
return this.workers.length + 1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Init as main thread. Spawn child threads.
|
|
33
|
+
*/
|
|
34
|
+
public async init(
|
|
35
|
+
module: WebAssembly.Module,
|
|
36
|
+
threads = Math.min(getNumCpu(), BarretenbergWasmMain.MAX_THREADS),
|
|
37
|
+
logger: (msg: string) => void = createDebugLogger('bb_wasm'),
|
|
38
|
+
initial = 33,
|
|
39
|
+
maximum = this.getDefaultMaximumMemoryPages(),
|
|
40
|
+
) {
|
|
41
|
+
this.logger = logger;
|
|
42
|
+
|
|
43
|
+
const initialMb = (initial * 2 ** 16) / (1024 * 1024);
|
|
44
|
+
const maxMb = (maximum * 2 ** 16) / (1024 * 1024);
|
|
45
|
+
const shared = getSharedMemoryAvailable();
|
|
46
|
+
|
|
47
|
+
this.logger(
|
|
48
|
+
`Initializing bb wasm: initial memory ${initial} pages ${initialMb}MiB; ` +
|
|
49
|
+
`max memory: ${maximum} pages, ${maxMb}MiB; ` +
|
|
50
|
+
`threads: ${threads}; shared memory: ${shared}`,
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
this.memory = new WebAssembly.Memory({ initial, maximum, shared });
|
|
54
|
+
|
|
55
|
+
const instance = await WebAssembly.instantiate(module, this.getImportObj(this.memory));
|
|
56
|
+
|
|
57
|
+
this.instance = instance;
|
|
58
|
+
|
|
59
|
+
// Init all global/static data.
|
|
60
|
+
this.call('_initialize');
|
|
61
|
+
|
|
62
|
+
// Allocate dedicated msgpack scratch buffers (never freed, reused for all msgpack calls)
|
|
63
|
+
this.msgpackInputScratch = this.call('bbmalloc', this.MSGPACK_SCRATCH_SIZE);
|
|
64
|
+
this.msgpackOutputScratch = this.call('bbmalloc', this.MSGPACK_SCRATCH_SIZE);
|
|
65
|
+
this.logger(
|
|
66
|
+
`Allocated msgpack scratch buffers: ` +
|
|
67
|
+
`input @ ${this.msgpackInputScratch}, output @ ${this.msgpackOutputScratch} (${this.MSGPACK_SCRATCH_SIZE} bytes each)`,
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
// Create worker threads. Create 1 less than requested, as main thread counts as a thread.
|
|
71
|
+
if (threads > 1) {
|
|
72
|
+
this.logger(`Creating ${threads} worker threads`);
|
|
73
|
+
this.workers = await Promise.all(Array.from({ length: threads - 1 }).map(createThreadWorker));
|
|
74
|
+
this.remoteWasms = await Promise.all(this.workers.map(getRemoteBarretenbergWasm<BarretenbergWasmThreadWorker>));
|
|
75
|
+
await Promise.all(this.remoteWasms.map(w => w.initThread(module, this.memory)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private getDefaultMaximumMemoryPages(): number {
|
|
80
|
+
// iOS browser is very aggressive with memory. Check if running in browser and on iOS
|
|
81
|
+
// We at any rate expect the mobile iOS browser to kill us >=1GB, so we don't set a maximum higher than that.
|
|
82
|
+
if (typeof window !== 'undefined' && /iPad|iPhone/.test(navigator.userAgent)) {
|
|
83
|
+
return 2 ** 14;
|
|
84
|
+
}
|
|
85
|
+
return 2 ** 16;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Called on main thread. Signals child threads to gracefully exit.
|
|
90
|
+
*/
|
|
91
|
+
public async destroy() {
|
|
92
|
+
await Promise.all(this.workers.map(w => w.terminate()));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
protected getImportObj(memory: WebAssembly.Memory) {
|
|
96
|
+
const baseImports = super.getImportObj(memory);
|
|
97
|
+
|
|
98
|
+
/* eslint-disable camelcase */
|
|
99
|
+
return {
|
|
100
|
+
...baseImports,
|
|
101
|
+
wasi: {
|
|
102
|
+
'thread-spawn': (arg: number) => {
|
|
103
|
+
arg = arg >>> 0;
|
|
104
|
+
const id = this.nextThreadId++;
|
|
105
|
+
const worker = this.nextWorker++ % this.remoteWasms.length;
|
|
106
|
+
// this.logger(`spawning thread ${id} on worker ${worker} with arg ${arg >>> 0}`);
|
|
107
|
+
this.remoteWasms[worker].call('wasi_thread_start', id, arg).catch(this.logger);
|
|
108
|
+
// this.remoteWasms[worker].postMessage({ msg: 'thread', data: { id, arg } });
|
|
109
|
+
return id;
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
env: {
|
|
113
|
+
...baseImports.env,
|
|
114
|
+
env_hardware_concurrency: () => {
|
|
115
|
+
// If there are no workers (we're already running as a worker, or the main thread requested no workers)
|
|
116
|
+
// then we return 1, which should cause any algos using threading to just not create a thread.
|
|
117
|
+
return this.remoteWasms.length + 1;
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
/* eslint-enable camelcase */
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
callWasmExport(funcName: string, inArgs: (Uint8Array | number)[], outLens: (number | undefined)[]) {
|
|
125
|
+
const alloc = new HeapAllocator(this);
|
|
126
|
+
const inPtrs = alloc.getInputs(inArgs);
|
|
127
|
+
const outPtrs = alloc.getOutputPtrs(outLens);
|
|
128
|
+
this.call(funcName, ...inPtrs, ...outPtrs);
|
|
129
|
+
const outArgs = this.getOutputArgs(outLens, outPtrs, alloc);
|
|
130
|
+
alloc.freeAll();
|
|
131
|
+
return outArgs;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private getOutputArgs(outLens: (number | undefined)[], outPtrs: number[], alloc: HeapAllocator) {
|
|
135
|
+
return outLens.map((len, i) => {
|
|
136
|
+
if (len) {
|
|
137
|
+
return this.getMemorySlice(outPtrs[i], outPtrs[i] + len);
|
|
138
|
+
}
|
|
139
|
+
const slice = this.getMemorySlice(outPtrs[i], outPtrs[i] + 4);
|
|
140
|
+
const ptr = new DataView(slice.buffer, slice.byteOffset, slice.byteLength).getUint32(0, true);
|
|
141
|
+
|
|
142
|
+
// Add our heap buffer to the dealloc list.
|
|
143
|
+
alloc.addOutputPtr(ptr);
|
|
144
|
+
|
|
145
|
+
// The length will be found in the first 4 bytes of the buffer, big endian. See to_heap_buffer.
|
|
146
|
+
const lslice = this.getMemorySlice(ptr, ptr + 4);
|
|
147
|
+
const length = new DataView(lslice.buffer, lslice.byteOffset, lslice.byteLength).getUint32(0, false);
|
|
148
|
+
|
|
149
|
+
return this.getMemorySlice(ptr + 4, ptr + 4 + length);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
cbindCall(cbind: string, inputBuffer: Uint8Array): any {
|
|
154
|
+
const needsCustomInputBuffer = inputBuffer.length > this.MSGPACK_SCRATCH_SIZE;
|
|
155
|
+
let inputPtr: number;
|
|
156
|
+
|
|
157
|
+
if (needsCustomInputBuffer) {
|
|
158
|
+
// Allocate temporary buffer for oversized input
|
|
159
|
+
inputPtr = this.call('bbmalloc', inputBuffer.length);
|
|
160
|
+
} else {
|
|
161
|
+
// Use pre-allocated scratch buffer
|
|
162
|
+
inputPtr = this.msgpackInputScratch;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Write input to buffer
|
|
166
|
+
this.writeMemory(inputPtr, inputBuffer);
|
|
167
|
+
|
|
168
|
+
// Setup output scratch buffer with IN-OUT parameter pattern:
|
|
169
|
+
// Reserve 8 bytes for metadata (pointer + size), rest is scratch data space
|
|
170
|
+
const METADATA_SIZE = 8;
|
|
171
|
+
const outputPtrLocation = this.msgpackOutputScratch;
|
|
172
|
+
const outputSizeLocation = this.msgpackOutputScratch + 4;
|
|
173
|
+
const scratchDataPtr = this.msgpackOutputScratch + METADATA_SIZE;
|
|
174
|
+
const scratchDataSize = this.MSGPACK_SCRATCH_SIZE - METADATA_SIZE;
|
|
175
|
+
|
|
176
|
+
// Get memory and create DataView for writing IN values
|
|
177
|
+
let mem = this.getMemory();
|
|
178
|
+
let view = new DataView(mem.buffer);
|
|
179
|
+
|
|
180
|
+
// Write IN values: provide scratch buffer pointer and size to C++
|
|
181
|
+
view.setUint32(outputPtrLocation, scratchDataPtr, true);
|
|
182
|
+
view.setUint32(outputSizeLocation, scratchDataSize, true);
|
|
183
|
+
|
|
184
|
+
// Call WASM
|
|
185
|
+
this.call(cbind, inputPtr, inputBuffer.length, outputPtrLocation, outputSizeLocation);
|
|
186
|
+
|
|
187
|
+
// Free custom input buffer if allocated
|
|
188
|
+
if (needsCustomInputBuffer) {
|
|
189
|
+
this.call('bbfree', inputPtr);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Re-fetch memory after WASM call, as the buffer may have been detached if memory grew
|
|
193
|
+
mem = this.getMemory();
|
|
194
|
+
view = new DataView(mem.buffer);
|
|
195
|
+
|
|
196
|
+
// Read OUT values: C++ returns actual buffer pointer and size
|
|
197
|
+
const outputDataPtr = view.getUint32(outputPtrLocation, true);
|
|
198
|
+
const outputSize = view.getUint32(outputSizeLocation, true);
|
|
199
|
+
|
|
200
|
+
// Check if C++ used scratch (pointer unchanged) or allocated (pointer changed)
|
|
201
|
+
const usedScratch = outputDataPtr === scratchDataPtr;
|
|
202
|
+
|
|
203
|
+
// Copy output data from WASM memory
|
|
204
|
+
const encodedResult = this.getMemorySlice(outputDataPtr, outputDataPtr + outputSize);
|
|
205
|
+
|
|
206
|
+
// Only free if C++ allocated beyond scratch
|
|
207
|
+
if (!usedScratch) {
|
|
208
|
+
this.call('bbfree', outputDataPtr);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return encodedResult;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* The comlink type that asyncifies the BarretenbergWasmMain api.
|
|
217
|
+
*/
|
|
218
|
+
export type BarretenbergWasmMainWorker = Remote<BarretenbergWasmMain>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { logOptions } from '../../../../log/index.js';
|
|
2
|
+
import { readinessListener } from '../../../helpers/browser/index.js';
|
|
3
|
+
|
|
4
|
+
export async function createThreadWorker() {
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const worker = new Worker(new URL('./thread.worker.js', import.meta.url), { type: 'module' });
|
|
8
|
+
worker.postMessage({ log: logOptions });
|
|
9
|
+
await new Promise<void>(resolve => readinessListener(worker, resolve));
|
|
10
|
+
return worker;
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { expose } from 'comlink';
|
|
2
|
+
import { BarretenbergWasmThread } from '../../index.js';
|
|
3
|
+
import { Ready } from '../../../helpers/browser/index.js';
|
|
4
|
+
import { initLogger } from '../../../../log/browser/index.js';
|
|
5
|
+
|
|
6
|
+
addEventListener('message', e => {
|
|
7
|
+
if (e.data.log) {
|
|
8
|
+
initLogger(e.data.log);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
expose(new BarretenbergWasmThread());
|
|
13
|
+
postMessage(Ready);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Worker } from 'worker_threads';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { logOptions } from '../../../../log/index.js';
|
|
5
|
+
|
|
6
|
+
function getCurrentDir() {
|
|
7
|
+
if (typeof __dirname !== 'undefined') {
|
|
8
|
+
return __dirname;
|
|
9
|
+
} else {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
return dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createThreadWorker() {
|
|
17
|
+
const __dirname = getCurrentDir();
|
|
18
|
+
const worker = new Worker(__dirname + `/thread.worker.js`);
|
|
19
|
+
worker.postMessage({ log: logOptions });
|
|
20
|
+
return Promise.resolve(worker);
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { parentPort } from 'worker_threads';
|
|
2
|
+
import { expose } from 'comlink';
|
|
3
|
+
import { BarretenbergWasmThread } from '../../index.js';
|
|
4
|
+
import { nodeEndpoint } from '../../../helpers/node/node_endpoint.js';
|
|
5
|
+
import { initLogger } from '../../../../log/node/index.js';
|
|
6
|
+
|
|
7
|
+
if (!parentPort) {
|
|
8
|
+
throw new Error('No parentPort');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const endpoint = nodeEndpoint(parentPort);
|
|
12
|
+
|
|
13
|
+
endpoint.addEventListener('message', (e: any) => {
|
|
14
|
+
if (e.data.log) {
|
|
15
|
+
initLogger(e.data.log);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
expose(new BarretenbergWasmThread(), endpoint);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Remote } from 'comlink';
|
|
2
|
+
import { killSelf, threadLogger } from '../helpers/index.js';
|
|
3
|
+
import { BarretenbergWasmBase } from '../barretenberg_wasm_base/index.js';
|
|
4
|
+
|
|
5
|
+
export class BarretenbergWasmThread extends BarretenbergWasmBase {
|
|
6
|
+
/**
|
|
7
|
+
* Init as worker thread.
|
|
8
|
+
*/
|
|
9
|
+
public async initThread(module: WebAssembly.Module, memory: WebAssembly.Memory) {
|
|
10
|
+
this.logger = threadLogger() || this.logger;
|
|
11
|
+
this.memory = memory;
|
|
12
|
+
this.instance = await WebAssembly.instantiate(module, this.getImportObj(this.memory));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public destroy() {
|
|
16
|
+
killSelf();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
protected getImportObj(memory: WebAssembly.Memory) {
|
|
20
|
+
const baseImports = super.getImportObj(memory);
|
|
21
|
+
|
|
22
|
+
/* eslint-disable camelcase */
|
|
23
|
+
return {
|
|
24
|
+
...baseImports,
|
|
25
|
+
wasi: {
|
|
26
|
+
'thread-spawn': () => {
|
|
27
|
+
this.logger('PANIC: threads cannot spawn threads!');
|
|
28
|
+
this.logger(new Error().stack!);
|
|
29
|
+
killSelf();
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
// These are functions implementations for imports we've defined are needed.
|
|
34
|
+
// The native C++ build defines these in a module called "env". We must implement TypeScript versions here.
|
|
35
|
+
env: {
|
|
36
|
+
...baseImports.env,
|
|
37
|
+
env_hardware_concurrency: () => {
|
|
38
|
+
// We return 1, which should cause any algos using threading to just not create a thread.
|
|
39
|
+
return 1;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/* eslint-enable camelcase */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type BarretenbergWasmThreadWorker = Remote<BarretenbergWasmThread>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import pako from 'pako';
|
|
2
|
+
|
|
3
|
+
// Annoyingly the wasm declares if it's memory is shared or not. So now we need two wasms if we want to be
|
|
4
|
+
// able to fallback on "non shared memory" situations.
|
|
5
|
+
export async function fetchCode(multithreaded: boolean, wasmPath?: string) {
|
|
6
|
+
let url: string;
|
|
7
|
+
if (wasmPath) {
|
|
8
|
+
const suffix = multithreaded ? '-threads' : '';
|
|
9
|
+
const filePath = wasmPath.split('/').slice(0, -1).join('/');
|
|
10
|
+
const fileNameWithExtensions = wasmPath.split('/').pop();
|
|
11
|
+
const [fileName, ...extensions] = fileNameWithExtensions!.split('.');
|
|
12
|
+
url = `${filePath}/${fileName}${suffix}.${extensions.join('.')}`;
|
|
13
|
+
} else {
|
|
14
|
+
url = multithreaded
|
|
15
|
+
? (await import('./barretenberg-threads.js')).default
|
|
16
|
+
: (await import('./barretenberg.js')).default;
|
|
17
|
+
}
|
|
18
|
+
const res = await fetch(url);
|
|
19
|
+
// Default bb wasm is compressed, but user could point it to a non-compressed version
|
|
20
|
+
const maybeCompressedData = await res.arrayBuffer();
|
|
21
|
+
const buffer = new Uint8Array(maybeCompressedData);
|
|
22
|
+
const isGzip =
|
|
23
|
+
// Check magic number
|
|
24
|
+
buffer[0] === 0x1f &&
|
|
25
|
+
buffer[1] === 0x8b &&
|
|
26
|
+
// Check compression method:
|
|
27
|
+
buffer[2] === 0x08;
|
|
28
|
+
if (isGzip) {
|
|
29
|
+
const decompressedData = pako.ungzip(buffer);
|
|
30
|
+
return decompressedData.buffer as unknown as Uint8Array<ArrayBuffer>;
|
|
31
|
+
} else {
|
|
32
|
+
return buffer;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './node/index.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import pako from 'pako';
|
|
5
|
+
|
|
6
|
+
function getCurrentDir() {
|
|
7
|
+
if (typeof __dirname !== 'undefined') {
|
|
8
|
+
return __dirname;
|
|
9
|
+
} else {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
return dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
+
export async function fetchCode(multithreaded: boolean, wasmPath?: string) {
|
|
18
|
+
const path = wasmPath ?? getCurrentDir() + '/../../barretenberg-threads.wasm.gz';
|
|
19
|
+
// Default bb wasm is compressed, but user could point it to a non-compressed version
|
|
20
|
+
const maybeCompressedData = await readFile(path);
|
|
21
|
+
const buffer = new Uint8Array(maybeCompressedData);
|
|
22
|
+
const isGzip =
|
|
23
|
+
// Check magic number
|
|
24
|
+
buffer[0] === 0x1f &&
|
|
25
|
+
buffer[1] === 0x8b &&
|
|
26
|
+
// Check compression method:
|
|
27
|
+
buffer[2] === 0x08;
|
|
28
|
+
if (isGzip) {
|
|
29
|
+
const decompressedData = pako.ungzip(buffer);
|
|
30
|
+
return decompressedData.buffer as unknown as Uint8Array<ArrayBuffer>;
|
|
31
|
+
} else {
|
|
32
|
+
return buffer;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { wrap } from 'comlink';
|
|
2
|
+
|
|
3
|
+
export function getSharedMemoryAvailable() {
|
|
4
|
+
const globalScope = typeof window !== 'undefined' ? window : globalThis;
|
|
5
|
+
return typeof SharedArrayBuffer !== 'undefined' && globalScope.crossOriginIsolated;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function getRemoteBarretenbergWasm<T>(worker: Worker) {
|
|
9
|
+
return wrap<T>(worker);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function getNumCpu() {
|
|
13
|
+
return navigator.hardwareConcurrency;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function threadLogger(): ((msg: string) => void) | undefined {
|
|
17
|
+
return console.log;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function killSelf() {
|
|
21
|
+
self.close();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function getAvailableThreads(logger: (msg: string) => void): number {
|
|
25
|
+
if (typeof navigator !== 'undefined' && navigator.hardwareConcurrency) {
|
|
26
|
+
return navigator.hardwareConcurrency;
|
|
27
|
+
} else {
|
|
28
|
+
logger(`Could not detect environment to query number of threads. Falling back to one thread.`);
|
|
29
|
+
return 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Solution to async initialization of workers, taken from
|
|
34
|
+
// https://github.com/GoogleChromeLabs/comlink/issues/635#issuecomment-1598913044
|
|
35
|
+
|
|
36
|
+
/** The message expected by the `readinessListener`. */
|
|
37
|
+
export const Ready = { ready: true };
|
|
38
|
+
|
|
39
|
+
/** Listen for the readiness message from the Worker and call the `callback` once. */
|
|
40
|
+
export function readinessListener(worker: Worker, callback: () => void) {
|
|
41
|
+
worker.addEventListener('message', function ready(event: MessageEvent<typeof Ready>) {
|
|
42
|
+
if (!!event.data && event.data.ready === true) {
|
|
43
|
+
worker.removeEventListener('message', ready);
|
|
44
|
+
callback();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './node/index.js';
|
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
import { Worker } from 'worker_threads';
|
|
2
|
-
import { dirname } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
import { readFile } from 'fs/promises';
|
|
5
2
|
import os from 'os';
|
|
6
|
-
import { type BarretenbergWasm, type BarretenbergWasmWorker } from '../barretenberg_wasm.js';
|
|
7
3
|
import { wrap } from 'comlink';
|
|
8
4
|
import { nodeEndpoint } from './node_endpoint.js';
|
|
9
5
|
import { writeSync } from 'fs';
|
|
10
6
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
return await readFile(__dirname + '/../../' + name);
|
|
7
|
+
export function getSharedMemoryAvailable() {
|
|
8
|
+
return true;
|
|
14
9
|
}
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export function getRemoteBarretenbergWasm(worker: Worker)
|
|
22
|
-
return wrap<
|
|
11
|
+
/**
|
|
12
|
+
* Comlink allows you to produce a Proxy to the worker, enabling you to call methods as if it were a normal class.
|
|
13
|
+
* Note we give it the type information it needs so the returned Proxy object looks like that type.
|
|
14
|
+
* Node has a different implementation, needing this nodeEndpoint wrapper, hence this function exists here.
|
|
15
|
+
*/
|
|
16
|
+
export function getRemoteBarretenbergWasm<T>(worker: Worker) {
|
|
17
|
+
return wrap<T>(nodeEndpoint(worker));
|
|
23
18
|
}
|
|
24
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Returns number of cpus as reported by the system, unless overriden by HARDWARE_CONCURRENCY env var.
|
|
22
|
+
*/
|
|
25
23
|
export function getNumCpu() {
|
|
26
|
-
return os.cpus().length;
|
|
24
|
+
return +process.env.HARDWARE_CONCURRENCY! || os.cpus().length;
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
/**
|
|
@@ -44,3 +42,14 @@ export function killSelf(): never {
|
|
|
44
42
|
process.kill(process.pid);
|
|
45
43
|
throw new Error();
|
|
46
44
|
}
|
|
45
|
+
|
|
46
|
+
export function getAvailableThreads(logger: (msg: string) => void): number {
|
|
47
|
+
try {
|
|
48
|
+
return os.cpus().length;
|
|
49
|
+
} catch (e: any) {
|
|
50
|
+
logger(
|
|
51
|
+
`Could not detect environment to query number of threads. Falling back to one thread. Error: ${e.message ?? e}`,
|
|
52
|
+
);
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';
|
|
2
|
+
import { BarretenbergWasmMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
|
|
3
|
+
import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';
|
|
4
|
+
import { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
|
|
5
|
+
import { Worker } from 'worker_threads';
|
|
6
|
+
|
|
7
|
+
describe('barretenberg wasm', () => {
|
|
8
|
+
let wasm: BarretenbergWasmMainWorker;
|
|
9
|
+
let worker: Worker;
|
|
10
|
+
|
|
11
|
+
beforeAll(async () => {
|
|
12
|
+
worker = await createMainWorker();
|
|
13
|
+
wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
|
|
14
|
+
const { module, threads } = await fetchModuleAndThreads(2);
|
|
15
|
+
await wasm.init(module, threads);
|
|
16
|
+
}, 20000);
|
|
17
|
+
|
|
18
|
+
afterAll(async () => {
|
|
19
|
+
await wasm.destroy();
|
|
20
|
+
await worker.terminate();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('should new malloc, transfer and slice mem', async () => {
|
|
24
|
+
const length = 1024;
|
|
25
|
+
const ptr = await wasm.call('bbmalloc', length);
|
|
26
|
+
const buf = Buffer.alloc(length, 128);
|
|
27
|
+
await wasm.writeMemory(ptr, Uint8Array.from(buf));
|
|
28
|
+
const result = Buffer.from(await wasm.getMemorySlice(ptr, ptr + length));
|
|
29
|
+
await wasm.call('bbfree', ptr);
|
|
30
|
+
expect(result).toStrictEqual(buf);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('test abort', async () => {
|
|
34
|
+
await expect(() => wasm.call('test_abort')).rejects.toThrow();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should new malloc, transfer and slice mem', async () => {
|
|
38
|
+
const length = 1024;
|
|
39
|
+
const ptr = await wasm.call('bbmalloc', length);
|
|
40
|
+
const buf = Buffer.alloc(length, 128);
|
|
41
|
+
await wasm.writeMemory(ptr, Uint8Array.from(buf));
|
|
42
|
+
const result = Buffer.from(await wasm.getMemorySlice(ptr, ptr + length));
|
|
43
|
+
await wasm.call('bbfree', ptr);
|
|
44
|
+
expect(result).toStrictEqual(buf);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -1 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
import { getSharedMemoryAvailable, getAvailableThreads } from './helpers/node/index.js';
|
|
2
|
+
import { fetchCode } from './fetch_code/index.js';
|
|
3
|
+
import { createDebugLogger } from '../log/index.js';
|
|
4
|
+
|
|
5
|
+
export async function fetchModuleAndThreads(
|
|
6
|
+
desiredThreads = 32,
|
|
7
|
+
wasmPath?: string,
|
|
8
|
+
logger: (msg: string) => void = createDebugLogger('fetch_mat'),
|
|
9
|
+
) {
|
|
10
|
+
const shared = getSharedMemoryAvailable();
|
|
11
|
+
|
|
12
|
+
const availableThreads = shared ? await getAvailableThreads(logger) : 1;
|
|
13
|
+
// We limit the number of threads to 32 as we do not benefit from greater numbers.
|
|
14
|
+
const limitedThreads = Math.min(desiredThreads, availableThreads, 32);
|
|
15
|
+
|
|
16
|
+
logger(`Fetching bb wasm from ${wasmPath ?? 'default location'}`);
|
|
17
|
+
const code = await fetchCode(shared, wasmPath);
|
|
18
|
+
logger(`Compiling bb wasm of ${code.byteLength} bytes`);
|
|
19
|
+
const module = await WebAssembly.compile(code);
|
|
20
|
+
logger('Compilation of bb wasm complete');
|
|
21
|
+
return { module, threads: limitedThreads };
|
|
22
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BarretenbergWasmSyncBackend, BarretenbergWasmAsyncBackend } from '../wasm.js';
|
|
2
|
+
import { Barretenberg, BarretenbergSync } from '../../barretenberg/index.js';
|
|
3
|
+
import { BackendOptions, BackendType } from '../index.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create backend of specific type (no fallback)
|
|
7
|
+
*/
|
|
8
|
+
export async function createAsyncBackend(
|
|
9
|
+
type: BackendType,
|
|
10
|
+
options: BackendOptions,
|
|
11
|
+
logger: (msg: string) => void,
|
|
12
|
+
): Promise<Barretenberg> {
|
|
13
|
+
switch (type) {
|
|
14
|
+
case BackendType.Wasm:
|
|
15
|
+
case BackendType.WasmWorker: {
|
|
16
|
+
const useWorker = type === BackendType.WasmWorker;
|
|
17
|
+
logger(`Using WASM backend (worker: ${useWorker})`);
|
|
18
|
+
const wasm = await BarretenbergWasmAsyncBackend.new({
|
|
19
|
+
threads: options.threads,
|
|
20
|
+
wasmPath: options.wasmPath,
|
|
21
|
+
logger,
|
|
22
|
+
memory: options.memory,
|
|
23
|
+
useWorker,
|
|
24
|
+
});
|
|
25
|
+
return new Barretenberg(wasm, options);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
default:
|
|
29
|
+
throw new Error(`Unknown backend type: ${type}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Create backend of specific type (no fallback)
|
|
35
|
+
*/
|
|
36
|
+
export async function createSyncBackend(
|
|
37
|
+
type: BackendType,
|
|
38
|
+
options: BackendOptions,
|
|
39
|
+
logger: (msg: string) => void,
|
|
40
|
+
): Promise<BarretenbergSync> {
|
|
41
|
+
switch (type) {
|
|
42
|
+
case BackendType.Wasm:
|
|
43
|
+
logger('Using WASM backend');
|
|
44
|
+
const wasm = await BarretenbergWasmSyncBackend.new(options.wasmPath, logger);
|
|
45
|
+
return new BarretenbergSync(wasm);
|
|
46
|
+
|
|
47
|
+
default:
|
|
48
|
+
throw new Error(`Backend ${type} not supported for BarretenbergSync`);
|
|
49
|
+
}
|
|
50
|
+
}
|