Rand Protocol
سورس سے بنائیں

اسے خود کمپائل کریں

Rand Wallet کا ہر کلائنٹ ایک ہی عوامی ریپوزٹری، randprotocol/clients، سے GPL-3.0-only کے تحت بنایا جاتا ہے۔ شائع شدہ ڈاؤن لوڈز اسی صفحے پر درج کمانڈز سے بنتے ہیں اور کسی اور چیز سے نہیں، اس لیے آپ یہی پیکجز اپنی مشین پر بنا سکتے ہیں۔ ورژن 0.8.0 ٹیگ v0.8.0 ہے۔

شروع کرنے سے پہلے

کیا انسٹال کرنا ہے

صرف اس کلائنٹ کی قطاریں جو آپ چاہتے ہیں۔ کسی بھی کلائنٹ کا پہلا بلڈ پروور کو کمپائل کرتا ہے اور کئی منٹ لیتا ہے؛ اس کے بعد دوبارہ بلڈ جلد ہو جاتا ہے۔

ہر کلائنٹ
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 پر ڈیسک ٹاپ
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 مع پلیٹ فارم 36، build-tools 36 اور NDK 27
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 لائبریری ہے جسے ہر کلائنٹ اپنے اندر لپیٹتا ہے۔ اس کے ٹیسٹ ایک حقیقی ثبوت بناتے ہیں اور اسے چین کے اپنے تصدیق کنندہ سے جانچتے ہیں، جس میں پہلی کمپائل کے بعد تقریباً ایک منٹ لگتا ہے۔

کور کی جانچ کریں (اختیاری)
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   # یا پیکجنگ کے بغیر بس اسے چلائیں

پہلا بلڈ پروور کو کمپائل کرتا ہے اور کئی منٹ لیتا ہے۔

4. Chrome اور Firefox ایکسٹینشنز

کور کو WebAssembly میں کمپائل کیا جاتا ہے، پھر ہر براؤزر کا پیک اسکرپٹ فائلوں کو dist/ میں نقل کر کے انہیں zip کرتا ہے۔ نہ کوئی بنڈلر ہے نہ کوئی منیفائر: 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۔

5. Android

کور کو arm64 اور x86_64 کے لیے نیٹو لائبریری کے طور پر بنایا جاتا ہے، پھر Gradle اس کے گرد ایپ بناتا ہے۔ ڈیبگ بلڈ کسی بھی فون یا ایمولیٹر پر انسٹال ہو جاتا ہے؛ ریلیز بلڈ پر اس کلید سے دستخط ہوتے ہیں جو آپ خود بناتے ہیں۔

مزید برائے 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 کے رنرز یہی اسکرپٹس چلاتے ہیں: macOS، Windows اور Linux پر ڈیسک ٹاپ ایپ، دونوں ایکسٹینشن zip فائلیں، اور سورس آرکائیو، جو SHA256SUMS کے ساتھ ریلیز سے منسلک کیے جاتے ہیں۔ ورک فلو .github/workflows/release.yml ہے، اور ایک Jenkinsfile یہی پائپ لائن کہیں اور چلاتی ہے۔ Android پیکج ایک مینٹینر کی مشین پر بنایا اور دستخط کیا جاتا ہے، کیونکہ اس کی دستخطی کلید کسی CI میں نہیں ہے۔

چیک سم آپ کو کیا بتاتا ہے

اور کیا نہیں بتاتا

جو ڈاؤن لوڈ اپنے SHA-256 سے مطابقت رکھتا ہے وہ وہی فائل ہے جو شائع ہوئی تھی۔ بلڈز ابھی بٹ بہ بٹ قابلِ تکرار نہیں ہیں، اس لیے آپ کے اپنے بلڈ کا سم شائع شدہ بلڈ جیسا نہیں ہوگا، اور مطابقت رکھنے والا سم اس بات کا ثبوت نہیں کہ فائل کس سورس سے بنی۔ اگر سوال یہی ہے تو جواب یہ صفحہ ہے: اسے بنائیں، اور جو آپ نے بنایا وہی چلائیں۔