#barretenberg #bindings #nix #link #brew #version #flake

sys build barretenberg-sys

Barretenberg的FFI绑定

5 个版本

0.2.0 2023年6月1日
0.1.3 2023年4月21日
0.1.2 2023年4月21日
0.1.1 2023年4月12日
0.1.0 2023年4月6日

#503 in 构建工具

Apache-2.0

25KB
439

barretenberg-sys

Barretenberg的FFI绑定

依赖

这是一个 *-sys,这意味着它会探测系统中的Barretenberg,将其链接到系统中,并提供其他Rust项目可以消费的高级绑定。

我们为在Rust项目中使用Barretenberg提供了一套完整的 Nix Flake,但如果你想全局安装所有内容,你需要

  1. libomp

    通常可以通过 brew install libompapt install libomp-dev 安装。

  2. pkg-config

    通常可以通过 brew install pkg-configapt install pkg-config 安装。

  3. lld

    由Clang提供的链接器,但可能需要通过 apt install lld 安装。

  4. barretenberg(最好在提交 87aeb375d7b434e0faf47abb79f97753ab760987 时)

    需要按照README中的说明进行构建和安装。注意,Barretenberg有其自己的依赖项,需要安装,例如 cmakeninja

用法

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)
    );
}

在此项目中工作

由于有大量的本地依赖项,该项目使用 Nixdirenv 来简化开发体验。

设置环境

为了获得最佳体验,请按照以下说明设置您的环境

  1. 按照 它们的指南 在您的操作系统上安装Nix
  2. 创建文件 ~/.config/nix/nix.conf,其内容如下:
experimental-features = nix-command
extra-experimental-features = flakes
  1. 通过运行以下命令将 direnv 安装到您的 Nix 配置文件中:
nix profile install nixpkgs#direnv
  1. 按照他们的指南将 direnv 添加到您的 shell 中
  2. 重启您的 shell

Shell 和编辑器体验

现在,您的环境已经设置好了,您就可以开始在这个项目上工作了。

  1. 克隆仓库,例如:
git clone [email protected]:noir-lang/barretenberg-sys
  1. 导航到目录
cd barretenberg-sys
  1. 您应该会看到一个 direnv 错误,因为默认情况下不允许项目。请确保您信任我们的 .envrc 文件,然后您需要运行:
direnv allow
  1. 现在,等待一段时间,直到所有本地依赖项构建完成。这需要一些时间,direnv 将会警告您这需要很长时间,但我们只需要让它运行。
  2. 当您再次看到提示时,您可以在项目目录中启动您的编辑器(我们推荐 VSCode
code .
  1. (推荐)当您第一次启动 VSCode 时,您应该会收到提示安装我们推荐的插件。我们强烈推荐安装这些插件以获得最佳开发体验。

构建和测试

假设您正在使用 direnv 来设置您的环境,构建和测试项目可以使用典型的 cargo buildcargo testcargo clippy 命令。您会注意到 cargo 版本与我们在 flake.nix 中指定的版本相匹配,当时为 1.66.0。

如果您想在隔离沙盒中构建整个项目,可以使用 Nix 命令

  1. nix build .(或使用 nix build . -L 以获得详细输出)在 Nix 沙盒中构建项目
  2. nix flake check(或使用 nix flake check -L 以获得详细输出)在 Nix 沙盒中运行 clippy 和测试

针对不同的 Barretenberg 本地/远程版本构建

如果您正在处理此包,那么您可能想将某些其他版本的 Barretenberg 的更改合并进来,而不是使用此项目所针对的版本。

要引用 Barretenberg 的不同版本,您需要用您的版本替换锁文件版本。这可以通过运行以下命令来完成:

nix flake lock --override-input barretenberg /absolute/path/to/your/barretenberg

您也可以使用以下方式指向 GitHub 上的一个分叉和/或分支:

nix flake lock --override-input barretenberg github:phated/barretenberg/mybranch

注意:您不希望提交更新后的锁文件,因为它将导致 CI 失败!

不使用 direnv

如果您对使用 direnv 有疑虑,您可以使用 nix develop 启动一个子 shell,然后从子 shell 中启动您的编辑器。但是,如果 VSCode 已经在项目目录中启动,环境将不会更新。

(高级)如果您既不使用 direnv 也不在子 shell 中启动您的编辑器,您可以尝试安装 barretenberg 和包需要的其他全局依赖项。这是一个高级工作流程,可能不会得到支持!

依赖

~0–2.5MB
~48K SLoC