Crates.io | bb-sys |
lib.rs | bb-sys |
version | 0.2.0 |
source | src |
created_at | 2024-02-18 19:40:05.618559 |
updated_at | 2024-02-18 19:40:05.618559 |
description | FFI bindings to Barretenberg |
homepage | |
repository | https://github.com/noir-lang/barretenberg-sys/ |
max_upload_size | |
id | 1144342 |
size | 56,114 |
FFI bindings to Barretenberg
This is a *-sys
package, which means it will
probe the system for Barretenberg, link to it, and provide higher-level bindings that can be consumed by other Rust projects.
We provide a comprehensive Nix Flake for consuming Barretenberg within Rust projects, but if you instead want to install everything globally, you'll need:
libomp
Usually installable via brew install libomp
or apt install libomp-dev
.
pkg-config
Usually installable via brew install pkg-config
or apt install pkg-config
.
lld
Linker provided by Clang, but might need to be installed via apt install lld
.
barretenberg
(preferably at commit 87aeb375d7b434e0faf47abb79f97753ab760987
)
Needs to be built and installed following the instructions in the README. Note that barretenberg has its own dependencies that will need to be installed, such as cmake
and ninja
.
pub fn pedersen() {
let input = vec![0; 64];
barretenberg_sys::blake2s::hash_to_field(&input);
let f_zero = [0_u8; 32];
let mut f_one = [0_u8; 32];
f_one[31] = 1;
let got = barretenberg_sys::pedersen::compress_native(&f_zero, &f_one);
assert_eq!(
"229fb88be21cec523e9223a21324f2e305aea8bff9cdbcb3d0c6bba384666ea1",
hex::encode(got)
);
}
Due to the large number of native dependencies, this project uses Nix and direnv to streamline the development experience.
For the best experience, please follow these instructions to setup your environment:
~/.config/nix/nix.conf
with the contents:experimental-features = nix-command
extra-experimental-features = flakes
nix profile install nixpkgs#direnv
Now that your environment is set up, you can get to work on the project.
git clone git@github.com:noir-lang/barretenberg-sys
cd barretenberg-sys
.envrc
file, then you need to run:direnv allow
code .
Assuming you are using direnv
to populate your environment, building and testing the project can be done
with the typical cargo build
, cargo test
, and cargo clippy
commands. You'll notice that the cargo
version matches the version we specify in flake.nix, which is 1.66.0 at the time of this writing.
If you want to build the entire project in an isolated sandbox, you can use Nix commands:
nix build .
(or nix build . -L
for verbose output) to build the project in a Nix sandboxnix flake check
(or nix flake check -L
for verbose output) to run clippy and tests in a Nix sandboxIf you are working on this crate, it is likely that you want to incorporate changes from some other version of Barretenberg instead of the version this project is pinned against.
To reference a different version of Barretenberg, you want to replace the lockfile version with your version. This can be done by running:
nix flake lock --override-input barretenberg /absolute/path/to/your/barretenberg
You can also point at a fork and/or branch on GitHub using:
nix flake lock --override-input barretenberg github:phated/barretenberg/mybranch
Note: You don't want to commit the updated lockfile, as it will fail in CI!
If you have hesitations with using direnv
, you can launch a subshell with nix develop
and then launch your editor
from within the subshell. However, if VSCode was already launched in the project directory, the environment won't be updated.
Advanced: If you aren't using direnv
nor launching your editor within the subshell, you can try to install barretenberg and other global dependencies the package needs. This is an advanced workflow and likely won't receive support!