خودتان کامپایلش کنید
هر کلاینت Rand Wallet از یک مخزن عمومی ساخته میشود، یعنی randprotocol/clients، با مجوز GPL-3.0-only. فایلهای منتشرشدهی دانلود تنها با دستورهای همین صفحه ساخته میشوند و چیز دیگری در کار نیست، پس میتوانید همان بستهها را روی دستگاه خودتان بسازید. نسخهی 0.8.0 همان تگ v0.8.0 است.
چه چیزی نصب کنیم
فقط ردیفهای مربوط به کلاینتی را که میخواهید. نخستین ساخت هر کلاینت، prover را کامپایل میکند و چند دقیقه طول میکشد؛ پس از آن، ساخت دوباره سریع است.
۱. دریافت کد منبع
مخزن را همراه تنها زیرماژولش کلون کنید؛ این زیرماژول همان نود کامل است که کدش رمزنگاری کیف پول را تشکیل میدهد. برای ساختن دقیقاً همان چیزی که منتشر شده، تگ انتشار را checkout کنید، یا برای آخرین تغییرات روی 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 را از صفحهی انتشار دانلود و باز کنید. زیرماژول در آن هست، چیزی که آرشیوهای «Source code» خود GitHub آن را ندارند.
۲. آزمون هسته (اختیاری)
هسته همان کتابخانهی Rust است که هر کلاینت آن را در بر میگیرد. آزمونهایش یک اثبات واقعی میسازند و با verifier خود زنجیره آن را وارسی میکنند؛ پس از نخستین کامپایل، حدود یک دقیقه طول میکشد.
cd core && cargo test --release && cd .. ۳. دسکتاپ: Linux، Windows، macOS
یک اسکریپت بستههای سیستمعاملی را که روی آن اجرا میشود میسازد، با همان نامهایی که انتشارها دارند. روی 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 # فایل .dmg مخصوص Intel، از روی یک Mac با تراشهی Apple
cd desktop/src-tauri && cargo tauri dev # یا فقط اجرایش کنید، بدون بستهبندی نخستین ساخت، prover را کامپایل میکند و چند دقیقه طول میکشد.
۴. افزونههای Chrome و Firefox
هسته به WebAssembly کامپایل میشود، سپس اسکریپت بستهبندی هر مرورگر فایلها را در dist/ کپی و zip میکند. نه bundler در کار است و نه minifier: جز ماژول 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.
۵. Android
هسته به صورت کتابخانهی بومی برای arm64 و x86_64 ساخته میشود، سپس Gradle برنامه را پیرامون آن میسازد. نسخهی debug روی هر گوشی یا شبیهساز نصب میشود؛ نسخهی release با کلیدی امضا میشود که خودتان میسازید.
بیشتر دربارهی 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 ۶. iOS
هسته به صورت XCFramework برای دستگاه و شبیهساز ساخته میشود و برنامه یک پروژهی معمولی Xcode است. اجرای آن روی iPhone خودتان به Apple ID شما در Xcode → Settings → Accounts و انتخاب تیمتان در Signing & Capabilities نیاز دارد.
بیشتر دربارهی iOS.
core/scripts/build-ios.sh # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj # یک شبیهساز یا دستگاه خود را انتخاب کنید، سپس Run ۷. کیف پول وب محلی
همان کیف پول در یک تب مرورگر، که یک سرور کوچک آن را در اختیار شما میگذارد و فقط روی 127.0.0.1 گوش میدهد.
بیشتر دربارهی Web.
web/wallet/serve.sh # میسازد، سپس http://127.0.0.1:8787/ را ارائه میکند ۸. اجرای آزمونها
رابط مشترک، کیف پول وب و افزونه یک مجموعهآزمون 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 ) فایلهای منتشرشده چگونه ساخته میشوند
روی یک تگ انتشار، runnerهای GitHub همین اسکریپتها را اجرا میکنند: برنامهی دسکتاپ روی macOS، Windows و Linux، هر دو zip افزونه، و آرشیو کد منبع، که همراه SHA256SUMS به انتشار پیوست میشوند. گردشکار .github/workflows/release.yml است و یک Jenkinsfile همین خط لوله را جای دیگری اجرا میکند. بستهی Android روی دستگاه یکی از نگهدارندگان ساخته و امضا میشود، چون کلید امضای آن در هیچ CI نیست.
و آنچه نمیگوید
دانلودی که با SHA-256 خود مطابقت دارد، همان فایلی است که منتشر شده. ساختها هنوز بیت به بیت بازتولیدپذیر نیستند، پس ساخت شما مجموع کنترلی یکسانی با نسخهی منتشرشده نخواهد داشت و مطابقت یک مجموع کنترلی، گواه این نیست که فایل از چه کد منبعی آمده است. اگر پرسش این است، پاسخ همین صفحه است: آن را بسازید و همان چیزی را که ساختهاید اجرا کنید.