Rand Protocol
Compilar a partir do código-fonte

Compile você mesmo

Todo cliente do Rand Wallet é compilado a partir de um único repositório público, randprotocol/clients, sob a licença GPL-3.0-only. Os downloads publicados são gerados pelos comandos desta página e por nada além deles, de modo que você pode gerar os mesmos pacotes na sua própria máquina. A versão 0.8.0 é a tag v0.8.0.

Antes de começar

O que instalar

Apenas as linhas do cliente que você deseja. A primeira compilação de qualquer cliente compila o prover e leva vários minutos; depois disso, uma recompilação é rápida.

Todos os clientes
git, rustup e Node 22 ou posterior. O rustup instala o Rust 1.98.1, a versão fixada pelo repositório, na primeira vez que o cargo é executado no checkout.
Desktop, qualquer sistema operacional
tauri-cli 2: cargo install tauri-cli --version "^2" --locked
Desktop no Linux
sudo apt install build-essential libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf rpm file (nomes para Debian e Ubuntu; outras distribuições têm equivalentes)
Desktop no Windows
Visual Studio Build Tools com “Desktop development with C++” e Git for Windows, cujo Git Bash executa os scripts
Desktop no macOS
Xcode Command Line Tools: xcode-select --install
Chrome, Firefox, carteira web
Nada além disso. A compilação instala o wasm-bindgen-cli por conta própria.
Android
JDK 17 ou posterior e o Android SDK com platform 36, build-tools 36 e NDK 27
iOS
Um Mac com Xcode 16 ou posterior

1. Obtenha o código-fonte

Clone o repositório com seu único submódulo, o full node, cujo código é a criptografia da carteira. Faça o checkout da tag da versão para compilar exatamente o que foi publicado, ou permaneça em main para a versão mais recente. Não é necessária conta no GitHub nem chave SSH.

Obtenha o código-fonte
bash
git clone --recurse-submodules https://github.com/randprotocol/clients.git
cd clients
git checkout v0.8.0 && git submodule update --init   # a versão publicada, em vez de main

Sem git: baixe rand-wallet-0.8.0-source.tar.gz da versão publicada e descompacte-o. Ele traz o submódulo incluído, o que os arquivos “Source code” do próprio GitHub não trazem.

2. Teste o núcleo (opcional)

O núcleo é a biblioteca Rust que todo cliente encapsula. Seus testes geram uma prova real e a verificam com o próprio verifier da cadeia, o que leva cerca de um minuto após a primeira compilação.

Teste o núcleo (opcional)
bash
cd core && cargo test --release && cd ..

3. Desktop: Linux, Windows, macOS

Um único script compila os pacotes do sistema operacional em que é executado, com os nomes usados nas versões publicadas. No Linux: um AppImage, um .deb, um .rpm e o binário puro em um .tar.gz. No Windows, a partir do Git Bash: o .msi e o -setup.exe. No macOS: o .dmg. Cada plataforma compila apenas os seus próprios pacotes.

Mais em Linux, Windows, macOS.

Desktop: Linux, Windows, macOS
bash
cargo install tauri-cli --version "^2" --locked   # uma vez
scripts/release/build-desktop.sh   # → dist/release/v<version>/
scripts/release/build-desktop.sh --target x86_64-apple-darwin   # o .dmg para Intel, a partir de um Mac com Apple silicon

cd desktop/src-tauri && cargo tauri dev   # ou apenas execute, sem empacotar

A primeira compilação compila o prover e leva vários minutos.

4. Extensões para Chrome e Firefox

O núcleo é compilado para WebAssembly; em seguida, o script de empacotamento de cada navegador copia os arquivos para dist/ e os compacta em um zip. Não há bundler nem minificador: exceto pelo módulo WebAssembly, os arquivos que você carrega são os arquivos do repositório.

Mais em Chrome, Firefox.

Extensões para 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

O núcleo é compilado como uma biblioteca nativa para arm64 e x86_64; em seguida, o Gradle compila o aplicativo em torno dela. Uma compilação de depuração é instalada em qualquer celular ou emulador; uma compilação de release é assinada com uma chave que você mesmo cria.

Mais em Android.

Android
bash
core/scripts/build-android.sh   # → android/app/src/main/jniLibs/
cd android
echo "sdk.dir=$HOME/Android/Sdk" > local.properties   # onde quer que esteja o seu SDK
./gradlew assembleDebug   # → app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk

6. iOS

O núcleo é compilado como um XCFramework para dispositivo e simulador, e o aplicativo é um projeto Xcode comum. Para executá-lo no seu próprio iPhone, é preciso ter o seu Apple ID em Xcode → Settings → Accounts e a sua equipe escolhida em Signing & Capabilities.

Mais em iOS.

iOS
bash
core/scripts/build-ios.sh   # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj   # escolha um simulador ou o seu dispositivo e, em seguida, Run

7. A carteira web local

A mesma carteira em uma aba do navegador, servida a você por um pequeno servidor que escuta somente em 127.0.0.1.

Mais em Web.

A carteira web local
bash
web/wallet/serve.sh   # compila e, em seguida, serve http://127.0.0.1:8787/

8. Execute os testes

A interface compartilhada, a carteira web e a extensão têm uma única suíte em JavaScript; o aplicativo desktop e o aplicativo Android têm as suas próprias.

Execute os testes
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 )
Versões

Como os arquivos publicados são gerados

Em uma tag de versão, os runners do GitHub executam os mesmos scripts: o aplicativo desktop no macOS, no Windows e no Linux, os dois zips de extensão e o arquivo do código-fonte, anexados à versão com o SHA256SUMS. O workflow é .github/workflows/release.yml, e um Jenkinsfile executa o mesmo pipeline em outro lugar. O pacote Android é compilado e assinado na máquina de um mantenedor, porque a sua chave de assinatura não está em nenhum CI.

O que um checksum informa

E o que ele não informa

Um download cujo SHA-256 confere é o arquivo que foi publicado. As compilações ainda não são reproduzíveis bit a bit, portanto a sua própria compilação não terá a mesma soma da publicada, e uma soma que confere não prova de qual código-fonte um arquivo veio. Se essa é a dúvida, a resposta é esta página: compile-o e execute o que você compilou.