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 Command Line Tools: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   # Intel 版 .dmg,在 Apple silicon 的 Mac 上建置

cd desktop/src-tauri && cargo tauri dev   # 或直接執行,無需打包

首次建置會編譯 prover,需時數分鐘。

4. Chrome 和 Firefox 擴充功能

核心先編譯為 WebAssembly,然後各瀏覽器的打包指令碼會把檔案複製到 dist/ 並壓縮成 zip。過程不使用打包工具(bundler),也不使用壓縮工具(minifier):除 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 圍繞它建置應用程式。debug 版本可安裝於任何手機或模擬器;release 版本則以你自行建立的金鑰簽署。

更多資料見 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 若相符,即表示它就是已發佈的檔案。建置結果尚未達到逐位元可重現,因此你自行建置的檔案與已發佈檔案的校驗碼不會相同,而校驗碼相符亦不能證明檔案源自哪份原始碼。若你關心的是這一點,答案就是本頁:自行建置,並執行你建置出來的成品。