Rand Protocol
Compilare dal sorgente

Compilalo da te

Ogni client di Rand Wallet è compilato da un unico repository pubblico, randprotocol/clients, con licenza GPL-3.0-only. I download pubblicati sono prodotti dai comandi di questa pagina e da nient'altro, quindi puoi ottenere gli stessi pacchetti sulla tua macchina. La versione 0.8.0 corrisponde al tag v0.8.0.

Prima di iniziare

Cosa installare

Solo le righe relative al client che ti interessa. La prima compilazione di qualsiasi client compila il prover e richiede diversi minuti; in seguito una ricompilazione è rapida.

Ogni client
git, rustup e Node 22 o successivo. rustup installa Rust 1.98.1, la versione fissata dal repository, la prima volta che cargo viene eseguito nel checkout.
Desktop, qualsiasi sistema operativo
tauri-cli 2: cargo install tauri-cli --version "^2" --locked
Desktop su Linux
sudo apt install build-essential libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf rpm file (nomi per Debian e Ubuntu; le altre distribuzioni hanno equivalenti)
Desktop su Windows
Visual Studio Build Tools con “Desktop development with C++” e Git for Windows, il cui Git Bash esegue gli script
Desktop su macOS
Xcode Command Line Tools: xcode-select --install
Chrome, Firefox, wallet web
Nient'altro. La build installa da sola wasm-bindgen-cli.
Android
JDK 17 o successivo e Android SDK con platform 36, build-tools 36 e NDK 27
iOS
Un Mac con Xcode 16 o successivo

1. Ottenere il sorgente

Clona il repository insieme al suo unico submodule, il full node, il cui codice è la crittografia del wallet. Fai il checkout del tag di release per compilare esattamente ciò che è stato pubblicato, oppure resta su main per la versione più recente. Non servono un account GitHub né una chiave SSH.

Ottenere il sorgente
bash
git clone --recurse-submodules https://github.com/randprotocol/clients.git
cd clients
git checkout v0.8.0 && git submodule update --init   # la release, anziché main

Senza git: scarica rand-wallet-0.8.0-source.tar.gz dalla release e decomprimilo. Contiene il submodule, che gli archivi “Source code” di GitHub non includono.

2. Testare il core (facoltativo)

Il core è la libreria Rust che ogni client incorpora. I suoi test generano una prova reale e la verificano con il verifier della chain stessa, il che richiede circa un minuto dopo la prima compilazione.

Testare il core (facoltativo)
bash
cd core && cargo test --release && cd ..

3. Desktop: Linux, Windows, macOS

Uno script compila i pacchetti del sistema operativo su cui viene eseguito, con i nomi usati dalle release. Su Linux: un AppImage, un .deb, un .rpm e il binario puro in un .tar.gz. Su Windows, da Git Bash: il .msi e il -setup.exe. Su macOS: il .dmg. Ogni piattaforma compila solo i propri pacchetti.

Approfondimenti su Linux, Windows, macOS.

Desktop: Linux, Windows, macOS
bash
cargo install tauri-cli --version "^2" --locked   # una sola volta
scripts/release/build-desktop.sh   # → dist/release/v<version>/
scripts/release/build-desktop.sh --target x86_64-apple-darwin   # il .dmg per Intel, da un Mac con Apple silicon

cd desktop/src-tauri && cargo tauri dev   # oppure eseguilo direttamente, senza creare il pacchetto

La prima compilazione compila il prover e richiede diversi minuti.

4. Estensioni per Chrome e Firefox

Il core viene compilato in WebAssembly, poi lo script di packaging di ciascun browser copia i file in dist/ e li comprime in uno zip. Non ci sono bundler né minificatori: a parte il modulo WebAssembly, i file che carichi sono i file presenti nel repository.

Approfondimenti su Chrome, Firefox.

Estensioni per Chrome e Firefox
bash
core/scripts/build-wasm.sh   # → extension/shared/core/
chrome/pack.sh   # → dist/chrome/ e dist/rand-wallet-chrome-<version>.zip
firefox/pack.sh   # → dist/firefox/ e 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

Il core viene compilato come libreria nativa per arm64 e x86_64, poi Gradle compila l'app attorno ad esso. Una build di debug si installa su qualsiasi telefono o emulatore; una build di release è firmata con una chiave che crei tu stesso.

Approfondimenti su Android.

Android
bash
core/scripts/build-android.sh   # → android/app/src/main/jniLibs/
cd android
echo "sdk.dir=$HOME/Android/Sdk" > local.properties   # ovunque si trovi il tuo SDK
./gradlew assembleDebug   # → app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk

6. iOS

Il core viene compilato come XCFramework per dispositivo e simulatore, e l'app è un normale progetto Xcode. Per eseguirla sul tuo iPhone serve il tuo Apple ID in Xcode → Settings → Accounts e il tuo team selezionato in Signing & Capabilities.

Approfondimenti su iOS.

iOS
bash
core/scripts/build-ios.sh   # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj   # scegli un simulatore o il tuo dispositivo, poi Run

7. Il wallet web locale

Lo stesso wallet in una scheda del browser, servito da un piccolo server che ascolta solo su 127.0.0.1.

Approfondimenti su Web.

Il wallet web locale
bash
web/wallet/serve.sh   # compila, poi serve http://127.0.0.1:8787/

8. Eseguire i test

L'interfaccia condivisa, il wallet web e l'estensione hanno un'unica suite JavaScript; l'app desktop e l'app Android hanno le proprie.

Eseguire i test
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 )
Release

Come vengono creati i file pubblicati

Su un tag di release, i runner di GitHub eseguono gli stessi script: l'app desktop su macOS, Windows e Linux, entrambi gli zip delle estensioni e l'archivio dei sorgenti, allegati alla release con SHA256SUMS. Il workflow è .github/workflows/release.yml, e un Jenkinsfile esegue la stessa pipeline altrove. Il pacchetto Android viene compilato e firmato sulla macchina di un maintainer, perché la sua chiave di firma non è presente in nessun sistema di CI.

Cosa ti dice un checksum

E cosa no

Un download che corrisponde al proprio SHA-256 è il file che è stato pubblicato. Le build non sono ancora riproducibili bit per bit, quindi la tua build non avrà la stessa somma di quella pubblicata, e una somma coincidente non prova da quale sorgente provenga un file. Se la domanda è questa, la risposta è questa pagina: compilalo ed esegui ciò che hai compilato.