Repository navigation
Built for Rand testnet chain 21 (cut 2026-10-12 on fullnode v0.8.0, c0878c3; genesis ca76c2766ed6090ac6ba5dad86b724dd5d2b80c0edfaed287cd8b129e663ca9a), on fullnode v0.8.0 (c0878c3), which this wallet core vendors. Chain 21 runs constraint set 9, so this is the first wallet that can send on it: 0.7.x wallets refuse chain 21, and this one refuses chain 20, which stopped at the cut. Fixes for chain 20 go to the release/chain20 branch.
Your keys, addresses and viewing keys carry over unchanged; chain 21 was cut from chain 20's state. The wallet's note store does not: a wallet that scanned chain 20 opens on a "This node is on a different chain" banner once — choose Rescan and it reads chain 21 from its genesis. On iOS and Android a saved chain id of 20 becomes 21 by itself; the extension, the desktop app and the web wallet never stored one. A custom RPC URL is kept only if the node behind it answers chain 21.
Testnet software: not audited, not for real value.
Download
| you have | file |
|---|---|
| macOS, Apple silicon | rand-wallet-0.8.0-macos-arm64.dmg |
| macOS, Intel | rand-wallet-0.8.0-macos-x64.dmg |
| Windows 10 / 11 | rand-wallet-0.8.0-windows-x64.msi (or …-setup.exe, the same app) |
| Debian, Ubuntu | rand-wallet-0.8.0-linux-x86_64.deb |
| Fedora, openSUSE | rand-wallet-0.8.0-linux-x86_64.rpm |
| any other Linux | rand-wallet-0.8.0-linux-x86_64.AppImage, or the bare binary in …-linux-x86_64.tar.gz |
| Linux on arm64 | the same four, named …-linux-arm64.… |
| Chrome, Edge, Brave | rand-wallet-chrome-0.8.0.zip — unzip, then Load unpacked at chrome://extensions |
| Firefox 140+ | rand-wallet-firefox-0.8.0.zip — Load Temporary Add-on… at about:debugging |
| Android 8+ | rand-wallet-0.8.0-android.apk |
| to build it yourself | rand-wallet-0.8.0-source.tar.gz — this repository and its submodule |
iOS has no download (Apple installs only from TestFlight or the App Store); build it in Xcode from the source. rand-wallet-0.8.0-android.aab is the bundle submitted to Google Play, attached for the record; a phone installs the .apk.
Check it
shasum -a 256 -c SHA256SUMS --ignore-missing # macOS
sha256sum -c SHA256SUMS --ignore-missing # LinuxGet-FileHash .\rand-wallet-0.8.0-windows-x64.msi -Algorithm SHA256First launch
Nothing here is signed with a paid developer certificate yet.
- macOS: System Settings → Privacy & Security → Open Anyway, or
xattr -dr com.apple.quarantine "/Applications/Rand Wallet.app". - Windows: SmartScreen → More info → Run anyway.
- Linux AppImage:
chmod +xit first. - Android: signed with this project's upload key, certificate SHA-256
75:22:2E:BF:22:D3:95:80:A5:11:2A:AC:B7:EC:2E:03:93:91:07:77:96:E0:45:1D:7B:CF:E3:7E:FA:06:53:52.
A device that can make a proof (the desktop app, about 8 GiB) makes it. One that cannot — a browser, most phones — uses the RandProtocol prover by default (https://prover.randprotocol.org, four machines run by the validators, no fee), after a one-time notice: like any prover it is sent the wallet's viewing key, so its operators can read the wallet's whole history, and it can never spend. Settings → Prover chooses your own prover instead (the desktop app's Prove for my other devices, or your own server), or none (docs/prover.md). Details, and how to build every client from source: the README and https://randprotocol.org/clients.
Since v0.7.3
- Chain 21, fullnode v0.8.0. The core vendors fullnode's
v0.8.0tag (c0878c3): constraint set 9, therandprotocol-msigcrate, and the verified fold in the node's verify cache. The bundle and authorisation guests the wallet proves with are unchanged, so the RandProtocol provers and a paired desktop app keep working.DEFAULT_CHAIN_IDis 21 in every client. - Private multisig signing, in every wallet app. A member of a private multisig account (fullnode v0.8.0's Dilithium2 M-of-N accounts) can sign a proposal from the extension, the desktop app, the web wallet, iOS and Android: Settings → Multisig signers adds a signer profile from its policy and key files (kept in the app's existing secure store — the vault, the Keychain behind user presence, the Keystore behind a per-use key); then open a proposal from a file or by pasting it, enter the intended payments — one row per payee, address and RAND amount —, check it and review its lines verbatim, confirm with the last four characters of the account fingerprint, authenticate again for this one signature (password, Face ID or passcode, fingerprint or screen lock), and share the
i:hexshare as a file. Preparing, proving and submitting the signed proposal stay in therandcommand line. The same refusals hold everywhere and in the core itself: a paying output that is not change must match an entered payee and its pinned amount; a payee without an amount is allowed only when it is paid solely in a non-RAND asset; a malformed proposal, a missing node, a node on another chain or genesis, and a proposal within 16 blocks of its expiry are refused; exactly the text and payments that were checked are signed, and an edit disarms Sign; proposals are never stored, and the seed is decrypted for one signature and zeroed. Twenty languages. - Fullnode v0.8.0's RPC reads. The wallet's RPC method table and reply validators cover the seven reads v0.8.0 added (perps, multisig and the RAND price among them), and tolerate the new
rand_getLimitssections on chain 21 or their absence. - The wallet against the real node. A new end-to-end suite runs the real wasm core and engine, with real
fetch, against arand-nodefrom the fullnode v0.8.0 release on a Test-profile chain it cuts itself: chain identity, the whole client-side RPC contract, faucet → scan → balance → activity → rescan, a proved spend through a realrand-prover, failover and submit rules, and a node restart. It is thereal-nodeCI job on every push. - Coverage: wallet-ffi and wallet-wasm fully covered, the core's refusals, the ui's pure-logic suites (core 93.2 % → 95.7 %).