Rand Protocol
从源码构建

自己动手编译

每一个 Rand Wallet 客户端都由同一个公开仓库构建,即 randprotocol/clients,采用 GPL-3.0-only 许可。已发布的下载文件仅由本页的命令生成,别无其他,因此你可以在自己的机器上生成相同的安装包。版本 0.8.0 对应标签 v0.8.0。

开始之前

需要安装什么

只需安装你所需客户端对应的行。任何客户端的首次构建都会编译 prover(证明器),耗时数分钟;之后的重新构建很快。

所有客户端
git、rustup 和 Node 22 或更高版本。首次在检出的仓库中运行 cargo 时,rustup 会安装仓库锁定的 Rust 1.98.1 版本。
桌面应用(任意操作系统)
tauri-cli 2:cargo install tauri-cli --version "^2" --locked
Linux 桌面应用
sudo apt install build-essential libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf rpm file(此为 Debian 和 Ubuntu 的包名;其他发行版有对应的包)
Windows 桌面应用
安装带有“使用 C++ 的桌面开发”工作负载的 Visual Studio Build Tools,以及 Git for Windows,脚本由其 Git Bash 运行
macOS 桌面应用
Xcode 命令行工具:xcode-select --install
Chrome、Firefox、网页钱包
无需其他依赖。构建过程会自行安装 wasm-bindgen-cli。
Android
JDK 17 或更高版本,以及包含 platform 36、build-tools 36 和 NDK 27 的 Android SDK
iOS
装有 Xcode 16 或更高版本的 Mac

1. 获取源码

克隆仓库及其唯一的子模块,即全节点,钱包的密码学代码就来自该节点。检出发布标签即可构建与已发布版本完全一致的内容,或停留在 main 分支获取最新代码。无需 GitHub 账户或 SSH 密钥。

获取源码
bash
git clone --recurse-submodules https://github.com/randprotocol/clients.git
cd clients
git checkout v0.8.0 && git submodule update --init   # 发布版本,而非 main

不使用 git:从该发布版本下载 rand-wallet-0.8.0-source.tar.gz 并解压。其中包含子模块,而 GitHub 自带的“Source code”压缩包不包含子模块。

2. 测试核心(可选)

核心是每个客户端所封装的 Rust 库。其测试会生成真实的证明,并用链自身的 verifier(验证器)进行校验,首次编译之后约需一分钟。

测试核心(可选)
bash
cd core && cargo test --release && cd ..

3. 桌面应用:Linux、Windows、macOS

一个脚本即可构建其所运行的操作系统对应的安装包,命名与发布版本一致。Linux 上:一个 AppImage、一个 .deb、一个 .rpm,以及打包在 .tar.gz 中的裸二进制文件。Windows 上,在 Git Bash 中:.msi 和 -setup.exe。macOS 上:.dmg。每个平台只构建自己的安装包。

更多内容见 Linux, Windows, macOS.

桌面应用:Linux、Windows、macOS
bash
cargo install tauri-cli --version "^2" --locked   # 一次即可
scripts/release/build-desktop.sh   # → dist/release/v<version>/
scripts/release/build-desktop.sh --target x86_64-apple-darwin   # 在 Apple 芯片的 Mac 上构建 Intel 版 .dmg

cd desktop/src-tauri && cargo tauri dev   # 或者直接运行,无需打包

首次构建会编译 prover,耗时数分钟。

4. Chrome 和 Firefox 扩展

核心先被编译为 WebAssembly,然后各浏览器的打包脚本将文件复制到 dist/ 并压缩为 zip。没有打包器,也没有压缩混淆器:除 WebAssembly 模块外,你加载的文件就是仓库中的文件。

更多内容见 Chrome, Firefox.

Chrome 和 Firefox 扩展
bash
core/scripts/build-wasm.sh   # → extension/shared/core/
chrome/pack.sh   # → dist/chrome/ 和 dist/rand-wallet-chrome-<version>.zip
firefox/pack.sh   # → dist/firefox/ 和 dist/rand-wallet-firefox-<version>.zip

Chrome:chrome://extensions → 开发者模式 → 加载已解压的扩展程序 → dist/chrome。Firefox:about:debugging → 此 Firefox → 临时载入附加组件… → dist/firefox/manifest.json。

5. Android

核心被构建为适用于 arm64 和 x86_64 的原生库,然后由 Gradle 围绕它构建应用。调试版本可安装在任何手机或模拟器上;发布版本则使用你自己创建的密钥签名。

更多内容见 Android.

Android
bash
core/scripts/build-android.sh   # → android/app/src/main/jniLibs/
cd android
echo "sdk.dir=$HOME/Android/Sdk" > local.properties   # 填写你的 SDK 所在位置
./gradlew assembleDebug   # → app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk

6. iOS

核心被构建为适用于真机和模拟器的 XCFramework,应用是一个普通的 Xcode 项目。要在你自己的 iPhone 上运行,需要在 Xcode → Settings → Accounts 中登录你的 Apple ID,并在 Signing & Capabilities 下选择你的团队。

更多内容见 iOS.

iOS
bash
core/scripts/build-ios.sh   # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj   # 选择模拟器或你的设备,然后点击 Run

7. 本地网页钱包

同一个钱包运行在浏览器标签页中,由一个仅监听 127.0.0.1 的小型服务器提供。

更多内容见 Web.

本地网页钱包
bash
web/wallet/serve.sh   # 先构建,然后在 http://127.0.0.1:8787/ 提供服务

8. 运行测试

共享界面、网页钱包和扩展共用一套 JavaScript 测试;桌面应用和 Android 应用各有自己的测试。

运行测试
bash
npm ci --prefix ui
node --test "ui/test/**/*.test.mjs" "web/wallet/test/**/*.test.mjs" "extension/test/*.test.mjs"
( cd desktop/src-tauri && cargo test )
( cd android && ./gradlew testDebugUnitTest )
发布

已发布文件是如何生成的

在发布标签上,GitHub 的 runner 运行相同的脚本:在 macOS、Windows 和 Linux 上构建桌面应用,生成两个扩展 zip 和源码压缩包,并连同 SHA256SUMS 一起附加到发布版本中。工作流为 .github/workflows/release.yml,另有一个 Jenkinsfile 在别处运行同样的流水线。Android 安装包在维护者的机器上构建并签名,因为其签名密钥不在任何 CI 中。

校验和能告诉你什么

以及不能告诉你什么

与其 SHA-256 相符的下载文件,就是当初发布的那个文件。目前的构建还不能做到逐位可复现,因此你自己构建的文件校验和与已发布的不会相同,而校验和相符也不能证明文件出自哪份源码。如果你关心的是这个问题,答案就是本页:自己构建,然后运行你构建出的成果。