Rand Protocol
Browser extension

Rand Wallet for Firefox

The same extension as the Chrome build, from the same code, packaged for Firefox. Nothing in it is minified or bundled, so the code Mozilla reviews is the code you run.

Firefox Add-ons listing pending. Until it clears review, install version 0.8.0 from the download below, or build it from source.

Rand Wallet icon
Built with
JavaScript · Manifest V3
Distributed through
addons.mozilla.org
Requires
Firefox 140 or later
Sending
Sends through the RandProtocol prover, or your own
Download

Version 0.8.0

The files are attached to the v0.8.0 release on GitHub; the buttons here are links to them, and nothing is served from this site.

  1. Open about:debugging, choose This Firefox → Load Temporary Add-on… and pick the zip.
  2. A temporary add-on is removed when Firefox restarts. Release Firefox installs permanently only what addons.mozilla.org has signed, so that is how it works until the listing is live.
  3. Firefox grants an extension's site permissions at install. If you declined randbridge.org there, grant it later in the extension's permissions panel.
Firefox add-on (.zip)
Firefox 140 or later · 2.7 MB
Download
rand-wallet-firefox-0.8.0.zip
SHA-256 2982e605ba06dfac9de02e67652e3afc6d8b4d4ce20cb17225fe5c8335a503c6
Check what you downloaded
SHA256SUMS
# with SHA256SUMS downloaded into the same folder as the file
shasum -a 256 -c SHA256SUMS --ignore-missing     # macOS
sha256sum -c SHA256SUMS --ignore-missing         # Linux

# or print the sum of one file and compare it with the one above
shasum -a 256 rand-wallet-firefox-0.8.0.zip

A matching sum says the file is the one that was published. It does not say the file was built from the source: the builds are not reproducible bit for bit yet, so if that is what you need to know, build it yourself.

Sending

Sends through the RandProtocol prover, or your own

A bundle proof peaks at about 6.2 GB of memory and a browser gives WebAssembly 4 GiB, so the extension never proves for itself. It builds the transfer, has a prover make the proof (the RandProtocol prover by default, or one you pair), checks the proof locally and submits it.

Out of the box it uses the RandProtocol prover, after a one-time notice. To keep your history from it, pair the Rand Wallet desktop app on the same computer (its Settings → Prove for my other devices, then paste the link into the extension's Settings → Prover) or your own rand-prover on a server.

A device that cannot make a proof uses the RandProtocol provers by default: a few machines run by the validators (four today, under https://prover.randprotocol.org), no fee. From 0.6.9 each has its own key, which the wallet pins, and the wallet says so before the first send. The machine that proves a send receives the wallet's viewing key and a one-time salt: its operator can read the wallet's whole history, every payment received and sent, and cannot spend. The spend key never leaves your device, which makes the small authorisation proof itself. For more privacy choose your own prover in Settings → Prover, which is then always preferred; the wallet checks every proof before it submits it.

Pairing a prover, step by step: docs/prover.md.

Your keys

Where the key lives

The spend key is the wallet's one secret. There is no account and no server holding a copy: lose the key and nobody can restore it, so save it when the wallet shows it to you.

Spend key
Generated inside the wallet core from the operating system's randomness and stored only as an AES-256-GCM vault under PBKDF2-SHA256. While unlocked it lives in the browser's session storage, which empties when the browser closes and which web pages cannot read.
Keys on screen
The viewing key and the spend-key export are behind a fresh password check that costs as much as unlocking. No key is ever put in a URL, the console or persistent extension storage.
Auto-lock
A browser alarm, not a page timer, so the wallet locks on time even after the popup has closed and the background worker has been put to sleep.
Network
Only the RPC URL in Settings. Pointing it somewhere new asks for permission to reach that one host. No analytics and no remote code: the extension runs only the scripts it was installed with.
Also

Swap, and window.rand for Rand sites

The wallet's own Swap screen trades RAND and tokens through the durian.market pools: it quotes the exact amount from the pool on the chain, then proves and sends the swap itself, and durian.market can ask for the same swap through window.rand.invoke.

randbridge.org finds the extension as window.rand and can ask to connect. Connecting needs an unlocked wallet and your approval for that site, and a connected site learns your address and its bridge recipient hash, nothing more.

Build from source

Or build it yourself

  1. Build and pack the extension from the clients repository, below.
  2. Open about:debugging, choose This Firefox → Load Temporary Add-on… and pick dist/firefox/manifest.json.

Toolchain: Rust 1.98.1, pinned in the repository, which rustup installs. The build guide covers every client from a clean machine. Source directories: firefox/, extension/, ui/, core/.

Rand Wallet for Firefox
bash
git clone --recurse-submodules https://github.com/randprotocol/clients.git && cd clients
git checkout v0.8.0 && git submodule update --init   # the release; core/vendor/fullnode @ v0.8.0 (c0878c3)
core/scripts/build-wasm.sh   # → extension/shared/core/ (installs wasm-bindgen-cli)
firefox/pack.sh   # → dist/firefox/ and dist/rand-wallet-firefox-<version>.zip
npx web-ext lint --source-dir dist/firefox
Every client

What it does, on every platform

Create a wallet
A spend key generated on the device, shown once for you to save, and the rand1… address derived from it. Import an existing key, or a wallet.key.json from the rand CLI; every client exports the same file.
Receive and send
Your balance is the set of notes only your key can open; the wallet scans the commitment tree to find them. A transfer of RAND or of any listed RPL token is one 4-in-4-out bundle authorised by a proof. Nobody learns the sender, the receiver, the amount or which asset moved.
Faucet
On a testnet with an open faucet, one tap mints 100 RAND into a note only you can open.
Disclose only what you choose
Copy your viewing key and open My history on RandScan to see every note you sent or received, or copy one payment's transaction key to disclose exactly that payment and nothing else. The explorer decrypts in your browser and never sends the key anywhere.

Viewing keys and transaction keys open on randscan.org.

Testnet notes

Before you send anything

Chain
The public endpoint serves chain 21, live since 12 Oct 2026 10:31 UTC (cut on fullnode v0.8.0). The wallet core vendors fullnode v0.8.0 (c0878c3) and refuses any other chain: chain 21 runs constraint set 9, so a 0.7.x wallet cannot send on it, and this release cannot send on chain 20. Keys and addresses carry over; a wallet that scanned chain 20 shows a different-chain banner once and rescans from chain 21's genesis. Bridge deposits and withdrawals keep a 0.1% fee in zUSD, which the wallet shows before you withdraw.
RPC endpoint
Settings → Network. Defaults to https://rpc.randprotocol.org; any rand-node RPC you can reach works, and a saved URL is checked before it is kept
Proving
A bundle proof peaks at about 6.2 GB of memory and takes about a minute on a laptop CPU
Status
Experimental testnet software. Not audited. RAND on the testnet carries no real value
Licence
GPL-3.0-only, like the full node crates every client links
Other clients

One wallet, every platform

The same key file, address format and rules everywhere: a wallet created here imports into any other client and into the rand CLI.