自分でコンパイルする
Rand Wallet のクライアントはすべて、GPL-3.0-only のもとで公開されている一つのリポジトリ randprotocol/clients からビルドされます。公開されているダウンロードは、このページのコマンドだけで作られています。したがって、同じパッケージを自分のマシンで作ることができます。バージョン 0.8.0 はタグ v0.8.0 です。
インストールするもの
必要なのは、ビルドしたいクライアントの行だけです。どのクライアントでも最初のビルドではプルーバーをコンパイルするため、数分かかります。以降の再ビルドは短時間で終わります。
1. ソースを取得する
リポジトリを、唯一のサブモジュールであるフルノードとともにクローンします。フルノードのコードが、このウォレットの暗号処理そのものです。公開されたものを正確にビルドするにはリリースタグをチェックアウトし、最新の状態を使うには main のままにします。GitHub アカウントも SSH 鍵も不要です。
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 ライブラリです。そのテストでは実際に証明を生成し、チェーン自身のベリファイアで検証します。最初のコンパイル後、所要時間はおよそ 1 分です。
cd core && cargo test --release && cd .. 3. デスクトップ: Linux、Windows、macOS
スクリプトが一つあり、実行した OS 向けのパッケージを、リリースで使われているのと同じ名前で作成します。Linux では AppImage、.deb、.rpm、そして .tar.gz に入ったバイナリ単体です。Windows では、Git Bash から .msi と -setup.exe を作成します。macOS では .dmg です。各プラットフォームでは、そのプラットフォーム自身のパッケージだけがビルドされます。
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 # パッケージ化せず、そのまま実行する場合 最初のビルドではプルーバーをコンパイルするため、数分かかります。
4. Chrome と Firefox の拡張機能
コアを WebAssembly にコンパイルし、続いて各ブラウザーのパック用スクリプトがファイルを dist/ にコピーして zip にまとめます。バンドラーもミニファイアーも使いません。WebAssembly モジュールを除けば、読み込むファイルはリポジトリにあるファイルそのものです。
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 → Developer mode → Load unpacked → dist/chrome。Firefox: about:debugging → This Firefox → Load Temporary Add-on… → dist/firefox/manifest.json。
5. Android
コアを arm64 と x86_64 向けのネイティブライブラリとしてビルドし、そのうえで Gradle がアプリをビルドします。デバッグビルドはどのスマートフォンやエミュレーターにもインストールできます。リリースビルドには、自分で作成した鍵で署名します。
詳細: Android.
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.
core/scripts/build-ios.sh # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj # シミュレーターまたは実機を選び、Run を押します web/wallet/serve.sh # ビルドしてから http://127.0.0.1:8787/ で配信します 8. テストを実行する
共有インターフェース、Web ウォレット、拡張機能には JavaScript のテストスイートが一つあります。デスクトップアプリと Android アプリには、それぞれ独自のものがあります。
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 のランナーが同じスクリプトを実行します。macOS・Windows・Linux 向けのデスクトップアプリ、両方の拡張機能の zip、ソースアーカイブが対象で、SHA256SUMS とともにリリースに添付されます。ワークフローは .github/workflows/release.yml で、Jenkinsfile は同じパイプラインを別の環境で実行します。Android パッケージは、署名鍵がどの CI にも置かれていないため、メンテナーのマシンでビルドと署名を行います。
わからないこと
SHA-256 が一致するダウンロードは、公開されたファイルそのものです。ビルドはまだビット単位では再現できないため、自分でビルドしたものの合計値は公開されたものと同じにはなりません。また、合計値が一致しても、そのファイルがどのソースから作られたかの証明にはなりません。それが知りたいことであれば、答えはこのページにあります。自分でビルドし、ビルドしたものを実行してください。