1个不稳定版本

0.2.0 2024年2月18日

#61 in #nix

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 版本进行构建

如果您正在处理这个 crate,您可能想集成来自 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.4MB
~46K SLoC