Outline
- Crates
- Usage
- Testing the Project
- Benchmarking the Project
- Setting-up barustenberg-wasm
- Contributing
- Getting Help
- External Resources
- License
Crates
Usage
- Add the following to the
[dependencies]
section of yourCargo.toml
file for using the rust-onlybarustenberg
crate/workspace:
barustenberg = "0.1.0"
- Add the following to the
[dependencies]
section of yourCargo.toml
file for usingbarustenberg-wasm
crate/workspace:
barustenberg-wasm = "0.1.0"
Testing the Project
-
Run tests for crate/workspace
barustenberg
:cd barustenberg && cargo test
-
To run tests for crate/workspace
barustenberg-wasm
, follow the instructions in barustenberg-wasm, which leverages wasm-pack.
Benchmarking the Project
For benchmarking and measuring performance, this workspaces provides a Rust-specific benchmarking package leveraging criterion and a test_utils
feature flag for integrating proptest within the suite for working with strategies and sampling from randomly generated values.
-
Run benchmarks
cargo bench -p barustenberg-benches
Note: Currently, this workspace only supports Rust-native benchmarking, as wasm-bindgen
support for criterion is still an open issue. However, with some extra work, benchmarks can be compiled to wasi and run with wasmer/wasmtime or in the brower with webassembly.sh. Please catch-up with wasm support for criterion on their user-guide.
Setting-up barustenberg-wasm
The Wasm targetted version of this project relies on wasm-pack for building, testing, and publishing artifacts sutiable for Node.js, web broswers, or bundlers like webpack.
Please read more on working with wasm-pack
directly in barustenberg-wasm.
Contributing
Nix
This repository contains a Nix flake that initiates both the Rust toolchain set in rust-toolchain.toml and a pre-commit hook. It also installs helpful cargo binaries for development. Please install nix and direnv to get started.
Run nix develop
or direnv allow
to load the devShell
flake output, according to your preference.
Formatting
For formatting Rust in particular, we automatically format on nightly
, as it uses specific nightly features we recommend by default.
Pre-commit Hook
This library recommends using pre-commit for running pre-commit hooks. Please run this before every commit and/or push.
- If you are doing interim commits locally, and for some reason if you don't want pre-commit hooks to fire, you can run
git commit -a -m "Your message here" --no-verify
.
Recommended Development Flow
- We recommend leveraging cargo-watch, cargo-expand and irust for Rust development.
- We recommend using cargo-udeps for removing unused dependencies before commits and pull-requests.
Conventional Commits
This project lightly follows the Conventional Commits convention to help explain commit history and tie in with our release process. The full specification can be found here. We recommend prefixing your commits with a type of fix
, feat
, docs
, ci
, refactor
, etc..., structured like so:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Getting Help
For usage questions, usecases, or issues please open an issue in our repository.
We would be happy to try to answer your question or try opening a new issue on Github.
External Resources
These are references to specifications, talks and presentations, etc.
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.