Rand Protocol
ساخت از روی کد منبع

خودتان کامپایلش کنید

هر کلاینت Rand Wallet از یک مخزن عمومی ساخته می‌شود، یعنی randprotocol/clients، با مجوز GPL-3.0-only. فایل‌های منتشرشده‌ی دانلود تنها با دستورهای همین صفحه ساخته می‌شوند و چیز دیگری در کار نیست، پس می‌توانید همان بسته‌ها را روی دستگاه خودتان بسازید. نسخه‌ی 0.8.0 همان تگ v0.8.0 است.

پیش از شروع

چه چیزی نصب کنیم

فقط ردیف‌های مربوط به کلاینتی را که می‌خواهید. نخستین ساخت هر کلاینت، prover را کامپایل می‌کند و چند دقیقه طول می‌کشد؛ پس از آن، ساخت دوباره سریع است.

هر کلاینت
git، rustup و Node 22 یا بالاتر. rustup در نخستین اجرای cargo در مخزن کلون‌شده، 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
Visual Studio Build Tools همراه با «Desktop development with C++» و Git for Windows که Git Bash آن اسکریپت‌ها را اجرا می‌کند
دسکتاپ روی macOS
Xcode Command Line Tools: xcode-select --install
Chrome، Firefox، کیف پول وب
چیز دیگری لازم نیست. ساخت، خودش wasm-bindgen-cli را نصب می‌کند.
Android
JDK 17 یا بالاتر، و Android SDK همراه با platform 36، build-tools 36 و NDK 27
iOS
یک Mac با Xcode 16 یا بالاتر

۱. دریافت کد منبع

مخزن را همراه تنها زیرماژولش کلون کنید؛ این زیرماژول همان نود کامل است که کدش رمزنگاری کیف پول را تشکیل می‌دهد. برای ساختن دقیقاً همان چیزی که منتشر شده، تگ انتشار را checkout کنید، یا برای آخرین تغییرات روی 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 را از صفحه‌ی انتشار دانلود و باز کنید. زیرماژول در آن هست، چیزی که آرشیوهای «Source code» خود GitHub آن را ندارند.

۲. آزمون هسته (اختیاری)

هسته همان کتابخانه‌ی Rust است که هر کلاینت آن را در بر می‌گیرد. آزمون‌هایش یک اثبات واقعی می‌سازند و با verifier خود زنجیره آن را وارسی می‌کنند؛ پس از نخستین کامپایل، حدود یک دقیقه طول می‌کشد.

۲. آزمون هسته (اختیاری)
bash
cd core && cargo test --release && cd ..

۳. دسکتاپ: 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   # فایل .dmg مخصوص Intel، از روی یک Mac با تراشه‌ی Apple

cd desktop/src-tauri && cargo tauri dev   # یا فقط اجرایش کنید، بدون بسته‌بندی

نخستین ساخت، prover را کامپایل می‌کند و چند دقیقه طول می‌کشد.

۴. افزونه‌های 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 → Developer mode → Load unpacked → dist/chrome. Firefox: about:debugging → This Firefox → Load Temporary Add-on… → dist/firefox/manifest.json.

۵. 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

۶. iOS

هسته به صورت XCFramework برای دستگاه و شبیه‌ساز ساخته می‌شود و برنامه یک پروژه‌ی معمولی Xcode است. اجرای آن روی iPhone خودتان به Apple ID شما در Xcode → Settings → Accounts و انتخاب تیمتان در Signing & Capabilities نیاز دارد.

بیشتر درباره‌ی iOS.

۶. iOS
bash
core/scripts/build-ios.sh   # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj   # یک شبیه‌ساز یا دستگاه خود را انتخاب کنید، سپس Run

۷. کیف پول وب محلی

همان کیف پول در یک تب مرورگر، که یک سرور کوچک آن را در اختیار شما می‌گذارد و فقط روی 127.0.0.1 گوش می‌دهد.

بیشتر درباره‌ی Web.

۷. کیف پول وب محلی
bash
web/wallet/serve.sh   # می‌سازد، سپس http://127.0.0.1:8787/ را ارائه می‌کند

۸. اجرای آزمون‌ها

رابط مشترک، کیف پول وب و افزونه یک مجموعه‌آزمون 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 )
انتشارها

فایل‌های منتشرشده چگونه ساخته می‌شوند

روی یک تگ انتشار، runnerهای GitHub همین اسکریپت‌ها را اجرا می‌کنند: برنامه‌ی دسکتاپ روی macOS، Windows و Linux، هر دو zip افزونه، و آرشیو کد منبع، که همراه SHA256SUMS به انتشار پیوست می‌شوند. گردش‌کار .github/workflows/release.yml است و یک Jenkinsfile همین خط لوله را جای دیگری اجرا می‌کند. بسته‌ی Android روی دستگاه یکی از نگهدارندگان ساخته و امضا می‌شود، چون کلید امضای آن در هیچ CI نیست.

آنچه یک checksum به شما می‌گوید

و آنچه نمی‌گوید

دانلودی که با SHA-256 خود مطابقت دارد، همان فایلی است که منتشر شده. ساخت‌ها هنوز بیت به بیت بازتولیدپذیر نیستند، پس ساخت شما مجموع کنترلی یکسانی با نسخه‌ی منتشرشده نخواهد داشت و مطابقت یک مجموع کنترلی، گواه این نیست که فایل از چه کد منبعی آمده است. اگر پرسش این است، پاسخ همین صفحه است: آن را بسازید و همان چیزی را که ساخته‌اید اجرا کنید.