1个不稳定版本
0.2.0 | 2024年2月18日 |
---|
#61 in #nix
25KB
439 代码行(不含注释)
barretenberg-sys
Barretenberg的FFI绑定
依赖
这是一个 *-sys
包,这意味着它会探测系统中的Barretenberg,将其链接并提供建议的更高层次绑定,供其他Rust项目使用。
我们为在Rust项目中使用Barretenberg提供了一个全面的 Nix Flake,但如果您想全局安装所有内容,则需要
-
libomp
通常可以通过
brew install libomp
或apt install libomp-dev
来安装。 -
pkg-config
通常可以通过
brew install pkg-config
或apt install pkg-config
来安装。 -
lld
由Clang提供的链接器,但可能需要通过
apt install lld
来安装。 -
barretenberg
(最好在提交87aeb375d7b434e0faf47abb79f97753ab760987
上)需要按照README中的说明进行构建和安装。注意,barretenberg有自己的依赖项,需要安装,例如
cmake
和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)
);
}
在此项目上工作
由于存在大量本地依赖项,此项目使用 Nix 和 direnv 来简化开发体验。
设置您的环境
为了获得最佳体验,请按照以下说明设置您的环境
- 按照他们的指南为您的操作系统安装Nix
- 创建文件
~/.config/nix/nix.conf
,内容如下
experimental-features = nix-command
extra-experimental-features = flakes
- 通过运行以下命令将direnv安装到您的Nix配置文件中
nix profile install nixpkgs#direnv
- 按照他们的指南将direnv添加到您的shell中
- 重启您的shell
Shell和编辑器体验
现在您的环境已设置好,您就可以开始处理项目了。
- 克隆仓库,例如
git clone [email protected]:noir-lang/barretenberg-sys
- 导航到目录
cd barretenberg-sys
- 您应该会看到一个 direnv 错误,因为默认情况下不允许项目。请确保您信任我们的
.envrc
文件,然后您需要运行
direnv allow
- 现在,等待一段时间,以便构建所有本地依赖项。这将花费一些时间,direnv 会警告您这需要很长时间,但我们需要让它运行。
- 一旦再次出现您的提示,您就可以在项目目录内启动您的编辑器(我们推荐 VSCode)
code .
- (推荐)在第一次启动 VSCode 时,您应该会被提示安装我们的推荐插件。我们强烈建议安装这些插件以获得最佳的开发体验。
构建和测试
假设您正在使用 direnv
来配置您的环境,构建和测试项目可以使用典型的 cargo build
、cargo test
和 cargo clippy
命令。您会注意到 cargo
版本与我们在 flake.nix 中指定的版本相匹配,即写作时的 1.66.0。
如果您想在隔离的沙盒中构建整个项目,可以使用 Nix 命令
nix build .
(或用于详细输出的nix build . -L
)在 Nix 沙盒中构建项目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