Compile it yourself
Every Rand Wallet client is built from one public repository, randprotocol/clients, under GPL-3.0-only. The published downloads are made by the commands on this page and nothing else, so you can make the same packages on your own machine. Version 0.8.0 is tag v0.8.0.
What to install
Only the rows for the client you want. The first build of any client compiles the prover and takes several minutes; after that a rebuild is quick.
1. Get the source
Clone the repository with its one submodule, the full node, whose code is the wallet's cryptography. Check out the release tag to build exactly what was published, or stay on main for the latest. No GitHub account or SSH key is needed.
git clone --recurse-submodules https://github.com/randprotocol/clients.git
cd clients
git checkout v0.8.0 && git submodule update --init # the release, rather than main Without git: download rand-wallet-0.8.0-source.tar.gz from the release and unpack it. It has the submodule inside, which GitHub's own “Source code” archives leave out.
2. Test the core (optional)
The core is the Rust library every client wraps. Its tests make a real proof and check it with the chain's own verifier, which takes about a minute after the first compile.
cd core && cargo test --release && cd .. 3. Desktop: Linux, Windows, macOS
One script builds the packages of the OS it runs on, under the names the releases use. On Linux: an AppImage, a .deb, an .rpm and the bare binary in a .tar.gz. On Windows, from Git Bash: the .msi and the -setup.exe. On macOS: the .dmg. A platform builds only its own packages.
cargo install tauri-cli --version "^2" --locked # once
scripts/release/build-desktop.sh # → dist/release/v<version>/
scripts/release/build-desktop.sh --target x86_64-apple-darwin # the Intel .dmg, from an Apple-silicon Mac
cd desktop/src-tauri && cargo tauri dev # or just run it, without packaging The first build compiles the prover and takes several minutes.
4. Chrome and Firefox extensions
The core is compiled to WebAssembly, then each browser's pack script copies the files into dist/ and zips them. There is no bundler and no minifier: apart from the WebAssembly module, the files you load are the files in the repository.
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
The core is built as a native library for arm64 and x86_64, then Gradle builds the app around it. A debug build installs on any phone or emulator; a release build is signed with a key you create yourself.
More on Android.
core/scripts/build-android.sh # → android/app/src/main/jniLibs/
cd android
echo "sdk.dir=$HOME/Android/Sdk" > local.properties # wherever your SDK is
./gradlew assembleDebug # → app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk 6. iOS
The core is built as an XCFramework for device and simulator, and the app is an ordinary Xcode project. Running it on your own iPhone needs your Apple ID in Xcode → Settings → Accounts and your team chosen under Signing & Capabilities.
More on iOS.
core/scripts/build-ios.sh # → ios/Frameworks/RandWalletCore.xcframework
open ios/RandWallet.xcodeproj # choose a simulator or your device, then Run 7. The local web wallet
The same wallet in a browser tab, served to you by a small server that listens on 127.0.0.1 only.
More on Web.
web/wallet/serve.sh # builds, then serves http://127.0.0.1:8787/ 8. Run the tests
The shared interface, the web wallet and the extension have one JavaScript suite; the desktop app and the Android app have their own.
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 ) How the published files are made
On a release tag, GitHub's runners run the same scripts: the desktop app on macOS, Windows and Linux, both extension zips, and the source archive, attached to the release with SHA256SUMS. The workflow is .github/workflows/release.yml, and a Jenkinsfile runs the same pipeline elsewhere. The Android package is built and signed on a maintainer's machine, because its signing key is in no CI.
And what it does not
A download that matches its SHA-256 is the file that was published. The builds are not reproducible bit for bit yet, so your own build will not have the same sum as the published one, and a matching sum is not proof of what source a file came from. If that is the question, the answer is this page: build it, and run what you built.