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