ابنِه بنفسك
يُبنى كل عميل من عملاء Rand Wallet من مستودع عام واحد، هو randprotocol/clients، بموجب الرخصة GPL-3.0-only. التنزيلات المنشورة تُنتَج بالأوامر الواردة في هذه الصفحة دون سواها، فيمكنك إنتاج الحزم نفسها على جهازك. الإصدار 0.8.0 هو الوسم v0.8.0.
ما الذي يجب تثبيته
الصفوف الخاصة بالعميل الذي تريده فقط. أول بناء لأي عميل يترجم المُثبِت (prover) ويستغرق عدة دقائق؛ وبعد ذلك تكون إعادة البناء سريعة.
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 من الإصدار وفُكّ ضغطه. فهو يحوي الوحدة الفرعية في داخله، وهي ما تُسقطه أرشيفات «Source code» التي يولّدها GitHub.
2. اختبر النواة (اختياري)
النواة هي مكتبة Rust التي يغلّفها كل عميل. تُنتج اختباراتها برهانًا حقيقيًا وتتحقق منه بالمُتحقِّق (verifier) الخاص بالسلسلة نفسها، ويستغرق ذلك نحو دقيقة بعد أول ترجمة.
cd core && cargo test --release && cd .. 3. سطح المكتب: 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 silicon
cd desktop/src-tauri && cargo tauri dev # أو شغّله مباشرة دون تحزيم يترجم أول بناء المُثبِت (prover) ويستغرق عدة دقائق.
4. امتدادا Chrome وFirefox
تُترجم النواة إلى WebAssembly، ثم ينسخ البرنامج النصي لتحزيم كل متصفح الملفات إلى dist/ ويضغطها. لا توجد أداة تجميع ولا أداة تصغير: فباستثناء وحدة WebAssembly، الملفات التي تحمّلها هي الملفات الموجودة في المستودع نفسها.
core/scripts/build-wasm.sh # → extension/shared/core/
chrome/pack.sh # → dist/chrome/ and dist/rand-wallet-chrome-<version>.zip
firefox/pack.sh # → dist/firefox/ and 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 الخاص بك يتطلب إضافة Apple ID في Xcode → Settings → Accounts واختيار فريقك ضمن Signing & Capabilities.
المزيد عن iOS.
core/scripts/build-ios.sh # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj # اختر محاكيًا أو جهازك، ثم Run 7. محفظة الويب المحلية
المحفظة نفسها في تبويب متصفح، يقدّمها لك خادم صغير لا يستمع إلا على 127.0.0.1.
المزيد عن Web.
web/wallet/serve.sh # يبني، ثم يخدم http://127.0.0.1:8787/ 8. شغّل الاختبارات
للواجهة المشتركة ومحفظة الويب والامتداد مجموعة اختبارات 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 فتُبنى وتُوقَّع على جهاز أحد المشرفين على المشروع، لأن مفتاح توقيعها ليس في أي نظام تكامل مستمر.
وما الذي لا يخبرك به
التنزيل المطابق لـ SHA-256 هو الملف الذي نُشر. لكن عمليات البناء ليست قابلة لإعادة الإنتاج بت ببت بعد، فلن يكون للنسخة التي تبنيها المجموع نفسه الذي للنسخة المنشورة، ولا يُعدّ تطابق المجموع دليلًا على المصدر الذي جاء منه الملف. فإن كان هذا هو السؤال، فجوابه هذه الصفحة: ابنِ الملف، وشغّل ما بنيته.