The wallet meets the basic requirements to be considered a secure Ethereum wallet.
2/4 🟡
The wallet provides basic security protections for its users.
2/4 🟡
The wallet must support at least one hardware wallet manufacturer.
Transaction legibility— The wallet must display basic transaction details before the user signs.
The wallet must require a PIN, password, or biometric to unlock.
Unless the wallet implements guardian-based account recovery, it must periodically prompt users to verify they can still access their seed phrase or private key.
Scam prevention— The wallet must warn users about potential scams.
Security best practices— The wallet must follow standard security practices for key storage and platform hardening.
Account recovery— The wallet must implement guardian-based account recovery that lets users recover their account in all likely catastrophic scenarios, and must periodically prompt users to verify that their account recovery methods are still accessible.
The wallet offers a minimal level of privacy to its users.
The wallet has minimized trust assumptions on its own infrastructure while maximizing user privacy and sovereignty.
7/19 ❔
The wallet provides a strong level of security.
1/4 ❔
Chain verification— The wallet must verify the integrity of the Ethereum chain.
The wallet must be part of a funded Bug Bounty program.
Duress resistance— The wallet must protect users against physical coercion and unauthorized access.
The wallet must let users set self-imposed limits to mitigate damage from unauthorized access.
The wallet collects no more information about its users by default than a web browser does.
0/3 ❔
Privacy hygiene— The wallet must collect no more user data than a web browser does by default.
Wallet address privacy— Wallet addresses must not be correlatable with any user information, including IP address.
App isolation— The wallet must offer app-specific accounts by default when connecting to apps.
The wallet must not lock the user in and lets the user remain in full control of their account.
1/4 🟡
Transaction inclusion— The wallet must allow users to withdraw L2 funds to Ethereum L1 without relying on intermediaries.
The wallet must allow the user to use their own node when interacting with any chain.
L1 provider independence— The wallet must not critically depend on external providers to perform basic operations on Ethereum L1, even when the user configures their own self-hosted node.
Permissions management— The wallet must let users inspect and revoke ERC-20, ERC-721, and ERC-1155 token approvals.
The wallet's development process and internal workings are transparent to the user.
3/4 ❔
Funding— The wallet's funding sources and revenue model must be public and transparent.
Release process— The wallet release process must follow safety best practices.
Fee transparency— The fees charged by the wallet must be made transparent to the user at all times.
Orderflow transparency— The wallet must transparently disclose how it monetizes or shares transaction data before it is included onchain.
The wallet is aligned with advanced Ethereum ecosystem best practices for usability.
2/4 🟡
Chain abstraction— The wallet must smooth out the complexities of dealing with multiple chains.
Address resolution— The wallet must support chain-specific human-readable addresses (e.g. ERC-7828, ERC-7831).
Has the wallet's source code been reviewed by security auditors, and does the wallet maintain an active bug bounty program?
Unverifiable FAIL
Rainbow has not undergone any security audits.
Bug bounty program
Rainbow does not implement a bug bounty program and does not provide a clear path for security researchers to report vulnerabilities. The wallet also lacks a documented process for providing security updates to address critical issues.
Why should I care?
Wallets are high-stakes pieces of software that deal with sensitive
user data and funds. To ensure that their code is secure, industry best
practices involve regularly submitting the wallet's source code for audit
by an independent security auditor. These companies specialize in
reviewing source code with an eye for security vulnerabilities. They
report their findings to the wallet's development team for consideration,
pointing out both flaws and potential security improvements.
These security audits matter in order to ensure the wallet's source code
is secure, and remains that way over time. Wallet development teams
typically publish such audits so that wallet users can feel safer knowing
that the wallet's source code was independently audited.
However, even audited software is not free of vulnerabilities. Bug bounty
programs incentivize security researchers to responsibly discover and
disclose vulnerabilities, rather than exploit them.
A well-structured bug bounty program:
Provides clear guidelines for researchers to report vulnerabilities
Offers appropriate rewards based on severity of findings
Demonstrates a commitment to addressing security issues quickly
Communicates transparently about discovered vulnerabilities and their resolution
Additionally, wallets should provide upgrade paths for users when critical
security issues are discovered, so that fixes actually reach existing users.
How are a wallet's security audits and bug bounty program evaluated?
Wallets are evaluated on two closely-related aspects: their track record
of published security audits, and their bug bounty program. The overall
rating is the worse of the two, so a wallet must do well on both aspects
in order to get a passing rating.
Security audits: Walletbeat examines the set of published security
audits of the wallet. To qualify, a security audit must be publicly
available, and must be from a security auditor that has a traceable
corporate entity distinct from the wallet's own development team.
Security audits typically come with one or more security flaws found,
categorized by level of severity. Definitions of severity vary across
auditors, but generally anything "medium" or above is worth paying
attention to.
A wallet does well on this aspect if it has been audited at least once
within the last 365 days, and all medium-or-higher severity flaws
that were found across all audits (including older ones) are addressed.
This applies to all wallet types, including hardware wallets.
Bug bounty program: Wallets do well on this aspect if they implement
a comprehensive bug bounty program with:
An active program accepting vulnerability reports
Full coverage of the wallet's components
Financial rewards based on severity
Legal protections (such as Safe Harbor language) for security researchers
A clear upgrade path for users when security issues are fixed
Programs with limitations (limited coverage, unclear rewards, inactive or
paused programs, no legal protections) are rated as partial. Wallets with
no formal process for reporting vulnerabilities fail this aspect.
What can Rainbow do on the security auditing and bug bounty front?
Rainbow should undergo a security audit by an independent security auditor.
Rainbow should implement a bug bounty program to incentivize security researchers to responsibly disclose vulnerabilities. At minimum, the wallet should provide a clear vulnerability disclosure policy and ensure a process exists for providing security updates to users.
Rainbow does not warn you about who you are sending funds to, even when the request comes from an app it has already flagged as malicious. Asked to send funds to the burn address by such an app, Rainbow showed an ordinary transfer sheet, moments after warning about that same app at the connection screen.
Rainbow does not flag look-alike addresses, the kind used in address poisoning scams. Sending to an address matching the first four and last four characters of an earlier recipient drew no warning. The screen notes a recipient you have not sent to before, but states it plainly rather than cautioning you, and offers to save the address as a contact.
Last retrieved
Rainbow helps you stay safe when doing onchain transactions bychecking the contract or transaction data against a database of known scams. However, in doing so, it leaks your IP, your Ethereum address, and the contract address to an external provider which can correlate them.
Rainbow checks transactions for scams using Blockaid. Every request is compared against a database of known scams and malicious contracts, and Rainbow shows a warning when a request is flagged.
Before you can confirm a transaction, Rainbow sends it to its own servers to be simulated and scanned. That request includes your account address, the contract you are interacting with, the transaction data, and the website that requested it. The servers return a risk verdict and a link to the full scan report.
When a request does come back flagged, Rainbow heads the sheet "Suspicious Transaction" in red and tells you that signing could result in losing access to everything in your wallet.
Last retrieved
Rainbow helps you stay safe when connecting to onchain apps by checking its URL against a set of known scam apps. However, in doing so, it leaks your IP and the domain name of the app to an external provider which can correlate them.
When a website asks to connect, Rainbow checks that site's reputation against its own servers. The check carries the site's address and a short name for it. Your wallet address is not part of it.
Rainbow's own browser reduces a site to its domain before that check is sent, both when a site asks to connect and when it makes any later request. The individual pages you visit on the site are not disclosed.
If that check flags the site as a scam, Rainbow shows the site's address in red with a warning symbol, and adds an alert titled "This app is likely malicious" telling you that signing could cost you your assets. The same connection screen is used for WalletConnect and for sites opened in Rainbow's built-in browser.
Last retrieved
Connecting to an app that Rainbow flags shows this warning in practice. The app's address appears in red beside a warning symbol, above an alert reading "This app is likely malicious".
Rainbow does not warn you when granting unlimited token approvals.
Source
Rainbow shows you that an approval is unlimited, but does not warn you about it. It warns when the request itself is assessed as malicious, such as a permit granting an allowance to a known bad address. An unlimited approval that is not otherwise flagged is presented plainly as "Approve Unlimited USDC", with no cautionary color, icon, or wording. The size of the allowance is never itself the trigger.
This rating differs across versions. Select a specific version for details.
Why should I care?
Transactions in Ethereum are very difficult to reverse, and there is no shortage of scams. Wallets have a role to play in helping users avoid known scams ahead of the user making the transaction. This is especially true for unlimited token approvals: if the approved contract is later exploited, attackers can use that approval to drain the funds a user approved, a class of exploit that has stolen over $362M since 2020.
How is scam prevention evaluated?
Wallets are rated based on whether they alert the user about potential
scams. This is measured along four scenarios:
Does the wallet warn the user when…
Sending funds to an address the user has never previously sent or
received funds from before
Sending funds to an address that closely resembles ("poisons") one
already in the user's history
Interacting with a contract that is known to be a scam
Interacting with a contract that the user has never previously
interacted with before
Interacting with a contract that has only recently been deployed
onchain
Connecting to an app that is known to be a scam
Granting unlimited ERC-20 token approval
For payments-focused wallets that do not support interacting with
arbitrary contracts or external applications, only the payment scenario
applies.
Note that wallets should only warn the user about such scenarios, not
outright prevent the user from making such transactions, as preventing
them entirely would limit the user's ability to have real sovereignty
over their own wallet.
Wallets are also rated based on whether these warnings are implemented
in a privacy-preserving manner. Specifically:
When sending funds, does the lookup for past interactions with that
address unconditionally reveal the sender and recipient addresses to an
external provider other than the wallet's default RPC provider for this
chain?
Wallets can implement this feature in a privacy-preserving manner by
maintaining a local set of known addresses.
When interacting with a contract, does the check whether that contract
is known to be a scam reveal the user's IP address together with the
contract address about to be interacted with?
This is a privacy leak similar to that of leaking the user's
browsing history, as contract addresses are usually closely tied to
the application being visited.
Wallets can implement this feature in a privacy-preserving manner by
maintaining a local, frequently-updated cache of known-scam contract
addresses.
When connecting to an application, does the check whether that
application reveal the domain name or URL of the application being used?
If leaking full URLs, this is a privacy leak similar to that of
leaking the user's browsing history.
If leaking domain names only, they must not be linkable to the
user's IP address or Ethereum address.
Wallets can implement this feature in a privacy-preserving manner by
maintaining a local, frequently-updated cache of known-scam contract
URLs, or by looking up such a list based on a domain hash prefix
like Safe Browsing.
When checking whether a token approval is unlimited, does the lookup
of the spender/contract reveal the spender address together with the
user's IP or Ethereum address to an external provider?
Wallets can implement this feature in a privacy-preserving manner by
maintaining a local set of known spenders, or by detecting unlimited
approvals entirely from the transaction data being signed.
What can Rainbow do about its scam prevention?
No application should ever send your browsing history to an external service, and neither should Rainbow.
Scam URL detection can be implemented in a privacy-preserving manner using a local database or downloading a list of known-bad domains with the same domain name hash prefix.
Does the wallet verify the integrity of the chain(s) it interacts with?
FAIL
Rainbow does not verify the integrity of the Ethereum L1 blockchain when retrieving chain state or simulating transactions.
Users may work around this by setting a custom RPC endpoint for the L1 chain and running their own node or external light client.
Why should I care?
"Trust but verify" is one of the foundational principles of blockchains.
It refers to the ability for participants to verify that the chain data
is valid when they interact with it.
Without such verification, users rely on trusted external providers to tell
them what the state of the blockchain is, similar to the web2 trust model.
This allows such external providers to trick wallet users into signing
transactions that do not end up having the user's intended effect.
To avoid this, Ethereum was designed to be verifiable on commodity
hardware. Using a
light client,
this verification is possible without having to download the entire
blockchain.
How is chain verification evaluated?
Wallets are evaluated based on whether or not they integrate a light
client for verification of Ethereum L1 state.
Note: Walletbeat currently only considers L1 chain state verification
for this criterion, not L2s. This is because L2 state verification is
still in its infancy. As L2 technology matures, Walletbeat will also
start requiring wallets to verify L2 chain state.
When signing a transaction, does the wallet show transaction details clearly?
FAIL
Rainbow implements either zero or very little transaction legibility. The wallet does not adequately display calldata (raw hex, formatted, copyable) or essential transaction details for all benchmark transaction types. Transaction legibility is important for security as it allows users to verify transaction details on their wallet screen before signing.
Calldata Display
✓ Supported: Raw hex display and Copy to clipboard
Transaction legibility is a critical security feature for wallets that allows users to verify
transaction details directly on their wallet's screen/window before signing. This verification
step is crucial for preventing attacks where malicious software might attempt to trick users
into signing transactions with different parameters than what they intended.
Without this, users are at the mercy of the app they are interacting with sending them bad transactions, whether due to a bug, a hack, or malicious intent. Without being able to verify what they are signing, users should not send such transactions.
Full transaction legibility implementations ensure that all relevant transaction details (recipient
address, amount, fees, etc.) are clearly displayed on the wallet screen alongside decoded calldata,
allowing users to make informed decisions before authorizing transactions.
ERC-7730 defines a standard JSON descriptor format for structured calldata,
enabling wallets to display human-readable descriptions of smart contract calls.
Instead of showing raw hex calldata, wallets that implement ERC-7730 can show
the function name and decoded parameters in plain language. For example:
"Approve 100 USDC for Aave" instead of the raw 0x095ea7b3... bytes.
For hardware wallets, on-device ERC-7730 decoding is especially valuable:
even if the companion software is compromised, the device itself can still display the correct
decoded description of the transaction being signed. Wallets are evaluated against a set of
benchmark transactions, from simple token approvals to complex Safe nested multisend batches to
measure how broad their ERC-7730 coverage is.
ERC-8213 introduces two cryptographic digests that give users a
machine-verifiable way to confirm exactly what they are approving:
Calldata digest, keccak256(len(calldata) || calldata): a hash of the raw transaction calldata. Users can compute this independently to verify the calldata hasn't been tampered with.
EIP-712 digest, "\x19\x01" || domainSeparator || hashStruct(message): the final hash that gets signed for typed structured data.
A full ERC-8213 implementation means the wallet shows both digests, enabling users to independently verify every transaction and signature: not just trust what the UI displays.
ERC-4361 standardizes authentication for Ethereum accounts.
Wallets that support this standard must clearly present sign-in requests to users,
including the requesting domain, statement, and expiration details.
This enables consistent sign-in UX for Ethereum users.
How is a wallet evaluated for clearly showing what users are signing?
Wallets are evaluated based on key aspects of transaction legibility, with different criteria for software and hardware wallets:
ERC-7730 Calldata Decoding:
The wallet's ability to decode and display calldata for complex transaction types using ERC-7730, including:
Token approvals
DeFi interactions (e.g. Aave supply)
Safe nested transactions
Complex nested multisend batches (EOA and Safe)
For software wallets, transaction details are evaluated according to the set of information they display:
For transfers (ETH transfers, ERC-20 transfers, ERC-721 transfers, ERC-1155 transfers): gas, nonce, sender, recipient, chain, amount. Some details may be collapsed by default (e.g. 'nonce'), but all of them must be accessible through the UI.
Non-transfer transactions (approvals, DeFi contract interactions, Safe multisig nested transactions): gas, nonce, from, chain. In addition, the wallet must explain the transaction outcome visually or in plain language; for example, for ERC-20 approvals, it should explain what token is being approved, for which contract, and for how many tokens.
If presented with a transaction that will revert if included onchain, the wallet must detect that the transaction would fail and warn the user beforehand.
If presented with a transaction for which the behavior would be nondeterministic based on predictably-changing parameters (e.g. block number), the wallet must detect that the transaction has a nondeterministic outcome and warn the user beforehand.
Software Wallet Specific Requirements:
For software wallets, calldata must be displayed in multiple formats:
Raw hex format: Users can view the raw hexadecimal calldata
Formatted output: Users can view decoded, human-readable calldata
Copy to clipboard: Users can copy the calldata directly for verification
Calldata digest (ERC-8213): Users can verify the calldata hash independently
Software wallets must also support calldata decoding for various transaction types, from basic token transfers to complex nested transactions, and must display the EIP-712 digest for typed message signing (ERC-8213: Wallet signature & calldata digest display).
Hardware Wallet Specific Requirements:
For hardware wallets, the signature/transaction information must be visible on the hardware wallet device itself. Any data shown only in a companion app or browser extension is ignored for hardware wallet ratings.
Hardware wallets are evaluated on their ERC-7730 calldata decoding coverage. Decoding is only counted when it happens on-device: off-device decoding in a companion app cannot be trusted if the companion app is compromised. The benchmark transactions range from simple token approvals to complex Safe nested multisend batches.
Hardware wallets must also provide data extraction methods to allow users to independently verify transaction data:
Visual display: Users can view the data on the hardware wallet screen
QR code: Users can scan a QR code displayed on the device to extract data
Hashes: Users can compare hashes displayed on the device to verify data
The Calldata digest for transactions with calldata
The EIP-712 digest for typed structured data signatures
For hardware wallets, both must be shown on the device screen (not just in companion software).
Rating Criteria:
For software wallets:
A wallet receives a passing rating if it fully supports ERC-7730 calldata decoding, displays calldata in all required formats (raw hex, formatted, copyable, digest), shows all essential transaction details, and implements ERC-8213 along with ERC-4361 (Sign-In with Ethereum).
A wallet receives a partial rating if it has some combination of these features but not all.
A wallet receives a failing rating if it lacks calldata display capabilities or does not display essential transaction details.
For hardware wallets:
A wallet receives a passing rating if it supports on-device ERC-7730 decoding for complex nested transactions, displays all essential transaction details on the device, and provides comprehensive data extraction methods (QR codes and hashes). It must also implement ERC-8213: Wallet signature & calldata digest display (Calldata digest and EIP-712 digest on-device) and support ERC-4361 (Sign-In with Ethereum).
A wallet receives a partial rating if it has some combination of these features but not all at the full level.
A wallet receives a failing rating if it lacks ERC-7730 support, does not display essential transaction details on the device, and provides no effective data extraction methods.
What can Rainbow do to make it easy for users to understand what they are signing?
Rainbow should implement the following improvements:
Calldata Display: Implement Formatted output for calldata
Transaction Information: Add the required fields or calldata decoding for:
Transaction details (missing: nonce)
USDC approval (calldata not decoded)
Aave supply (calldata not decoded)
Transaction Clarity:
Safe nested Aave supply (calldata not decoded)
Safe nested multisend (calldata not decoded)
EOA nested multisend (calldata not decoded)
Nondeterministic transaction simulation (nondeterminism not detected)
Message Signing: Add support for displaying:
Domain hash
Message hash
EIP-712 digest
ERC-8213 Implementation: Implement the following to fully comply with ERC-8213:
Calldata digest: Show keccak256(len(calldata) || calldata) on the signing screen so users can independently verify the calldata.
EIP-712 digest: Show the final "\x19\x01" || domainSeparator || hashStruct(message) hash during typed message signing.
Sign-In with Ethereum (ERC-4361): Implement Sign-In with Ethereum to clearly present sign-in requests.
Hardware wallets are physical devices that store a user's private keys offline,
providing an additional layer of security against online threats. By keeping
private keys isolated from internet-connected devices, hardware wallets protect
users from malware, phishing attacks, and other security vulnerabilities that
could compromise their funds.
When a software wallet supports hardware wallets, users can enjoy the
convenience and features of the software wallet while maintaining the
security benefits of keeping their private keys offline. This combination
offers the best of both worlds: a user-friendly interface with enhanced security.
How is a wallet's hardware wallet support evaluated?
Wallets are evaluated based on whether it is possible to use them in
conjunction with any physically-separate hardware wallet.
This means the software wallet must provide the same level of
functionality as when not using a hardware wallet, and the private key
must never leave the hardware wallet.
Wallets that require the use of a separate software component (e.g.
WalletConnect to an external desktop application that does the actual
interfacing with the hardware device) in order to use the hardware wallet
get a partial rating. The need for this additional software component
means the user has to do more work to get the hardware wallet working,
which decreases the likelihood that users will actually do so in practice.
Does Rainbow follow security best practices for key storage, random number generation, deployment hardening, and passkey verification?
FAIL
Mobile app: Rainbow's mobile app declares high-risk OS permissions not required for wallet functionality, increasing the attack surface. Unnecessary Android permissions: SYSTEM_ALERT_WINDOW and READ_EXTERNAL_STORAGE. Unnecessary iOS permissions: NSBluetoothAlwaysUsageDescription and NSPhotoLibraryUsageDescription.
Browser extension: Rainbow's browser extension requests overbroad permissions and does not restrict its web_accessible_resources, increasing the attack surface for malicious websites.
This rating differs across versions. Select a specific version for details.
The mobile app stores the seed phrase in react-native-keychain, gated by biometrics or device passcode (iOS USER_PRESENCE, Android BIOMETRY_CURRENT_SET_OR_DEVICE_PASSCODE) wrapped by an RSA key held in OS keystore. The secret cannot be extracted by other software.
When creating a new mobile wallet, Rainbow generates a BIP-39 recovery phrase on the user's device using bip39 3.0.2, at the library's default 128-bit entropy (12 words). bip39 draws entropy from randombytes 2.1.0, which the React Native bundler resolves to its browser build under the default react-native, browser, main field precedence; that build calls global.crypto.getRandomValues and refuses to produce bytes if no secure provider is present. Rainbow installs that provider by importing react-native-get-random-values 1.5.0 from the app shim loaded at startup; it returns bytes from Java SecureRandom on Android and SecRandomCopyBytes on iOS, throwing if the iOS call fails.
Poor key storage, weak entropy, lax deployment hardening, or
insecure passkey verification each independently compromise a
wallet's security, no matter how strong the other layers are.
How is a wallet's security best practices evaluated?
Up to four sub-evaluations are scored; the worst determines the overall rating.
Key storage: Secure enclave or no on-device key = Pass; standardized KDF or OS sandbox = Partial; anything else = Fail.
What can Rainbow do to improve its security best practices?
Rainbow should remove the unnecessary permissions from its manifests. Android (AndroidManifest.xml): SYSTEM_ALERT_WINDOW and READ_EXTERNAL_STORAGE. iOS (Info.plist): NSBluetoothAlwaysUsageDescription and NSPhotoLibraryUsageDescription.
How easy does the wallet make it to recover your account?
FAIL
Rainbow implements a Guardian-based account recovery feature which
does not pass any of the tested scenarios.
Rainbow account recovery implementation
Rainbow encrypts the seed phrase with the user wallet password and stores it in iCloud or Google Drive. Recovery requires the backup password and access to either cloud provider.
The recovery process critically depends on The user's wallet password.
The recovery process requires setting up recovery with at least 1 of the following:
The user's iCloud account
The user's Google Drive account
For evaluation purposes, Walletbeat assumes the user will use
the policy requiring the least amount of effort that the
wallet allows, i.e.
a single recovery guardian.
The key is reconstituted client-side.
Account recovery failure scenarios
User forgets their wallet password: Recovery is no longer possible.
User loses access to their iCloud account: Recovery is not possible as not enough recovery shares are left.
User loses access to their Google Drive account: Recovery is not possible as not enough recovery shares are left.
Apple turns evil or is compromised: Not enough honest guardians left to perform account recovery.
Alphabet turns evil or is compromised: Not enough honest guardians left to perform account recovery.
Account recovery drills
Rainbow does not run the following recommended account recovery drills:
The extension's seed phrase quiz records where it was started from, and the only two options are onboarding and the settings menu. Nothing schedules it, so the wallet never asks a user to re-verify a phrase they have already confirmed.
The extension only reminds the user to back up while a wallet has no backup yet, and it asks the user to make one rather than to show they still hold it. Nothing puts the reminder on a schedule, and it stops once the wallet is backed up.
On mobile, the closest thing to a periodic check compares a stored device identifier against the current one and only interrupts the user when it has changed, which happens on a reinstall or a new phone. It verifies that the keychain still holds matching private keys rather than asking the user to produce their recovery phrase.
Last retrieved
Why should I care?
What if you forget your seed phrase?
Self-custody is difficult and complicated for most normal users, relative
to typical web2 accounts which often feature easy account recovery
features. Moreover, losing one's seed phrase can be a devastating
and irrecoverable financial loss. Some users avoid self-custody due to
this concern.
Guardian-based recovery
(also known as "Social recovery") helps make self-custody safe and practical
for everyday users. Properly implemented, this keeps users safer while still
providing the self-sovereignty benefits of self-custody in the day-to-day.
However, recovery methods can themselves silently become inaccessible over time.
For example, a guardian account may get abandoned, or a written-down seed
phrase may be lost or become unreadable. Users rarely notice this until
the day they need to recover their account, at which point it is too late.
Wallets can address this by periodically asking users to verify that their
recovery methods are still accessible, catching such problems while there
is still time to fix them.
How is account recovery evaluated?
Wallets are evaluated based on their implementation of
guardian-based recovery
and on whether they periodically verify that users still have access to their
account recovery methods.
To qualify, wallets must implement at least one form of guardian-based
recovery. They must also ensure that whatever option the user picks (as allowed by the
wallet's onboarding flow), all the following prongs are satisfied:
If the user loses access to their device (which can include
both their wallet's software and their passkeys), can they still recover their
account on a separate device?
If any single external provider goes out of business, can the user still
recover their account?
If any single external provider is compromised or turns evil, can the
user's account be taken over by that provider?
This attribute explicitly does not consider the scenario of the user's
own self-custody key being compromised, as defenses against such scenarios
are covered by a separate attribute in the Self-Sovereignty category.
Separately, wallets are evaluated on whether they periodically prompt
users to demonstrate that their recovery setup still works. Which
check-ups are expected depends on the wallet's features and on how
each account was created, since wallets can only drill users on
recovery material that actually exists:
If the wallet supports EOA accounts and lets the user export their
private key, a private key check-up for accounts imported from a
raw private key, confirming the user still has access to their
private key.
If the wallet supports EOA accounts derived from a seed phrase, a
seed phrase check-up for accounts created from a seed phrase,
confirming the user still has access to their seed phrase.
Wallets without EOA support (such as MPC-based wallets) have no
such user-held key material, so no key material check-ups are
expected for them.
If the wallet implements guardian-based recovery, a guardian
account check-up, confirming the user still has access to each
configured guardian account.
Rainbow protects access behind a lock screen (PIN code and biometric (Face ID / fingerprint)).
This slows down an opportunistic attacker, but does not protect against
a determined coercer who can watch you enter the credential or
physically force you to unlock the wallet.
On an Android phone with no screen lock set, the app asks for a PIN.
Why should I care?
A "wrench attack" is when an adversary physically coerces a user into handing over their funds.
Unlike remote attacks, no amount of cryptographic security can stop an attacker who is standing
next to you with a weapon.
Wallets can mitigate this threat by:
Lock screen (basic): Requiring a PIN, password, or biometric before granting access.
This protects against opportunistic thieves and buys time, but a determined coercer can
watch you unlock it.
Duress mode (stronger): A separate duress PIN or passphrase that, when entered,
either opens a decoy wallet (providing plausible deniability) or wipes the device and
immediately forwards all funds to a preconfigured address not controlled by the user alone.
This attribute is only evaluated for hardware wallets and mobile app wallets, as
desktop and browser extension wallets do not meaningfully face this threat model.
How is duress resistance evaluated?
Wallets are rated based on the strongest duress protection they provide, such as support for a lock screen and duress actions.
What can Rainbow do about its duress resistance?
Rainbow should implement a duress mode triggered by a separate duress PIN or passphrase. When entered, this should either:
Open a decoy wallet with a different set of accounts and balances (provides plausible deniability), or
Wipe the wallet (self-destruct), preventing the attacker from accessing funds, or
Trigger an onchain lockdown, preventing unauthorized transfers of funds, or
Wipe and forward, wiping the wallet and forwarding all funds to a preconfigured safe address.
Is your wallet address linkable to other information about yourself?
UNRATED
Walletbeat's database does not have the necessary information on Rainbow to assess this question. Please help us by contributing your knowledge on our GitHub repository!
Why does this matter?
Your wallet address is unique and permanent, which makes it easy for applications and companies
like Chainalysis to track your activity. In web-privacy terms, it is worse than cookies:
wallet addresses are permanent, publicly visible, and can even be tracked across multiple
devices and websites.
The more personal information is linkable to your wallet address, the more effective such
tracking can be. It is therefore important to use a wallet that protects your information
from being linked to your wallet address.
How is wallet address privacy evaluated?
In order to qualify for a perfect rating on wallet address privacy, a
wallet must not, by default, allow any external entity to link your
wallet address to any personal information.
As Walletbeat only considers the wallet's default behavior, wallets may
still choose to offer features that allow external providers to link wallet
addresses with personal information, so long as this is done with explicit
user opt-in.
To determine this, Walletbeat looks at the network requests made by
wallets in their default configuration, and the contents of such requests.
If a request contains the user's wallet address, we look at whether it
also contains any other personal information, such as the user's name,
pseudonym, email address, phone number, CEX account information, etc.
Additionally, if such a request is not proxied, then it inherently reveals
the user's IP address and ties it with the user's wallet address, which is
also personal information.
Can your multiple wallet addresses be correlated with one another?
UNRATED
Walletbeat's database does not have the necessary information on Rainbow to assess this question. Please help us by contributing your knowledge on our GitHub repository!
Why does this matter?
You probably have more than one wallet address configured in your wallet,
which you use for different purposes and perhaps as different identities.
These wallet addresses all belong to you, but you would rather keep that
fact private. It is therefore important to use a wallet that does not reveal that fact.
How is multi-address privacy evaluated?
Wallets are assessed based on whether an external provider can learn that
two or more of the user's wallet addresses belong to the same user.
An external provider may learn of this correlation either through:
The wallet software explicitly sending this data (e.g. through
analytics)
Requesting data about multiple wallet addresses in bulk, allowing
the receiving endpoint to learn that all of these addresses belong to
the same user. Similar correlations are also possible by IP and/or
time-based correlation of requests that each contain one wallet address.
In order to prevent this information from being revealed, wallets can
use a variety of strategies:
Wallets may offer the user to only have one active wallet address at
a time, and only ever makes requests about the active wallet address.
The user is expected to not change their active address often.
The wallet should also ensure that any account-switching widget does
not cause bulk/simultaneous requests about multiple addresses to the
same endpoint, such as for refreshing balances.
Note that this scheme, while simple to implement, is incompatible with
stealth addresses. This is because stealth addresses inherently require
the user to simultaneously manage a range of addresses.
Wallets may look up information about multiple addresses by splitting
up the requests such that each request only contains one address, then
sending these requests over different proxy circuits in a manner that
staggers the requests over time. This ensures that the receiving
endpoint cannot correlate addressed based on timing or IP address.
Wallets may distribute requests across multiple RPC endpoints owned by
separate entities for each wallet address, preventing each entity from
learning more than one wallet address.
Can you send and receive tokens without revealing your transaction history to others?
FAIL
Rainbow does not support any type of private token transfers.
This means all token transfers made using Rainbow are public
information and are recorded forever. Users should only make token
transfers if they would be comfortable publishing their bank statement
or payment history online—their privacy level would be similar.
As all token transfers will be recorded publicly onchain forever,
Rainbow should only be used for transactions where privacy is not
and will never be needed, such as public DAO treasury operations.
Rainbow should not be used for peer-to-peer transfers, and
users should keep their addresses to themselves to avoid creating
permanent associations between their public transactions and their
personal identity.
Using Rainbow for real-world payments is especially not advisable.
Merchants could look up a customer's balance and initiate a
wrench attack.
This puts users at risk of physical and financial harm.
Why should I care?
Data posted on public blockchains like Ethereum is publicly available to
everyone. This means that anyone can see your transaction history.
You would not voluntarily post your bank statements or private purchase
history online, yet this is what happens by default when transacting
on public blockchains.
Many privacy solutions have emerged to solve this problem. However, to
be actually usable by users, these solutions must be tightly integrated
in wallets and easy to use. Walletbeat looks at whether wallets
let users send, receive, and spend tokens privately by default.
How is token transfer privacy evaluated?
In order to get a passing rating, wallets must ensure that sending Ether
or ERC-20 tokens to other addresses comes with privacy guarantees
by default. In addition, they must ensure that users can receive and
spend such tokens privately.
"Privately" here means that other than the wallet user, no single entity
(including any external provider) can infer or reconstruct the user's
transaction history.
Walletbeat currently recognizes the following privacy-preserving token
transfer solutions:
What can Rainbow do about its token transfer privacy?
Rainbow should support some form of private token transfers,
such as ERC-5564: Stealth Addresses, and should make this the primary
way to perform token transfers. Public token transfers should either be
hidden under a power-user-only menu, come with important user safety
warnings, or deleted from the wallet's feature set.
If you connect to an app, will it be able to learn your past activity
from other apps by default?
FAIL
When connecting to an app, Rainbow does not provide a way
to create a new account unique to the app.
Without per-app accounts, apps can correlate a user's history and
activity across web3. While this has composability benefits, having
this as default behavior creates an irreversible privacy problem and
a regression from the low bar of web2 privacy practices.
The Rainbow mobile connection sheet exposes a single "Wallet" picker (alongside a network picker) with Cancel/Connect actions. Expanding the picker reveals the account list with an "+ Add" button.
The expanded account picker inside the connection sheet does include an "+ Add" button that can create a new wallet. However, creating one leaves the connection flow and returns to the wallet home screen. A fresh address cannot be created and used as part of the app connection flow; the connection can only be completed by selecting an existing account.
Last retrieved
Why should I care?
On the web, website A is not allowed to query your browsing history from
website B by default. This ensures your browsing activity remains private
across websites. This principle is enshrined in the HTTP protocol as the
Same-Origin Policy:
by default, each website has its own isolated data about a user,
and may not obtain any other information without explicit consent.
In web3, address reuse allows app to correlate your usage and browsing
history across other apps. While this can be a useful feature that
enables easy composability, it is also an irreversible privacy problem
and a regression from web2-level privacy.
For web3 to avoid perpetuating this privacy problem, users need to be
able to control the amount of information each new app may learn about
their past onchain history.
Maintaining per-app accounts creates complex fragmentation and UX issues
which are difficult to abstract away from users. Nonetheless, address
reuse creates an indelible data trail for users.
How is app isolation evaluated?
Wallets are assessed based on whether they make it easy for the user to
create a distinct account for each new app they use, and whether this is
the default choice.
When connecting to apps that the user previously connected to, the
wallet must use the address(es) that were last used for this specific
app.
Wallets that do not support connecting to apps are exempt from this
attribute.
What can Rainbow do about its app isolation?
Rainbow should have a way to create an app-specific account
as part of the app connection flow, and have this as the default
option.
Does Rainbow only send sensitive data with your explicit consent?
UNRATED
Walletbeat's database does not have the necessary information on Rainbow to assess this question. Please help us by contributing your knowledge on our GitHub repository!
Why does this matter?
Users expect that data like browsing history is never sent without consent.
Much like users would not expect a web browser to leak browsing history for
analytics, they should not expect wallets to track every site interaction by
default.
Such tracking may be industry-standard in web2, but is very easy to get wrong
in wallets, as they deal with sensitive public and private information that
can easily end up in analytics or crash logs.
For example, the multi-million
Solana Slope wallet
hack was caused by the wallet inadvertently leaking users' seed phrases to
the Sentry crash reporting platform.
Even if a wallet doesn't leak the seed phrase, it is easy to accidentally
leak other information that uniquely identifies users: account addresses,
token balances, lists of wallet assets, transaction intents, etc.
As such, product analytics and crash/error reporting telemetry should
only be enabled if the user has agreed to such tracking.
How is privacy hygiene evaluated?
We evaluate default behavior using network requests and published data collection policies.
The wallet fails if it sends browsing history by default.
The wallet also fails if it uses product analytics without prior consent.
It gets a partial rating when crash/error reporting runs without prior consent.
Can you use the wallet without relying on its default provider for
interacting with the L1 chain?
PARTIAL
Rainbow lets you use a self-hosted Ethereum node,
but you cannot configure this before the wallet contacts its default RPC provider.
Why should I care?
Ethereum's design goes to painstaking lengths to ensure that users can
run an Ethereum L1 node on commodity consumer-grade hardware and
residential Internet connections, and use it for interacting with L1.
Running your own node gives you several important benefits:
Privacy: Because the wallet can work directly on your own hardware
with no outside dependencies, the wallet can query chain data without
revealing private details (wallet address, IP address, etc.) to an
external RPC provider.
Integrity: Relying on an external RPC provider means that this
provider may return incorrect data about the state of the chain,
tricking you into signing a transaction that ends up having a different
effect than intended. Your own L1 node will verify the integrity of the
chain, so such attacks cannot occur when using a self-hosted node.
Censorship resistance: Because an L1 node may broadcast transactions
into a shared mempool directly to other nodes in the network, your
transactions are not censorable by an external RPC provider that would
otherwise act as an intermediary.
No downtime: Because the L1 node is running on your own hardware,
you are not at risk of losing funds or opportunities due to downtime
from an external RPC provider.
However, these advantages only matter if wallet users can actually take
advantage of them. Thus, wallets must allow users to use a self-hosted
node for these benefits to be realized in practice, and must not
critically depend on external services to perform basic L1 interactions
such as balance lookups and sending tokens.
How is L1 provider independence evaluated?
In order to qualify for this attribute, wallets must:
Allow the user to configure the L1 RPC endpoint to a self-hosted node
before any request is made to that endpoint.
Support basic functions (account creation/import, balance lookups,
token transfers) using nothing but the self-hosted node
(no external services, no non-Ethereum-API calls), and whether
What can Rainbow do about its L1 provider independence?
Rainbow should modify the wallet setup flow to allow the user to configure the RPC endpoint for L1 before making any requests,
or should avoid making any such requests until the user can access the RPC endpoint configuration options.
Both clients execute EIP-7702 (type-4) delegation as part of swap/send-calls flows via the @rainbow-me/delegation SDK; willExecuteDelegation decides per (address, chainId) whether the next operation delegates.
Why does this matter?
Question:
What if a wallet's dev team walked away or turned evil one day?
One of Ethereum's core promises as an Internet upgrade is to avoid the
possibility for user lock-in of web2. This is achieved by ensuring
accounts are permissionlessly portable across wallets.
Ensuring that accounts remain portable avoids wallets becoming lock-in
vectors in web3. Permissionless account portability also keeps the wallet
ecosystem healthy through open competition.
How is account portability evaluated?
Wallets are rated based on whether accounts created within can be
exported out of the wallet and imported into another, without requiring
permission from the exporter wallet provider.
For EOA wallets based on private keys, this is relatively straightforward
to determine. However, for more complex situations such as multisig
wallets, Walletbeat considers whether such wallets can be made fully
self-custodial, and whether assets and tokens can be permissionlessly
transferred out of the wallet.
Specifically:
EOA wallets are rated based on the exportability of their private
key material, and on whether such private key material is derived using
the following standards:
BIP-39
for deriving a binary seed from a seed phrase.
BIP-32
for deterministic hierarchical key derivation from the binary seed.
BIP-44
as a standard when deriving hierarchical private keys.
MPC wallets are rated based on whether the user has a sufficient
shares of the underlying key to have full control over the wallet in
a self-custodial manner. Additionally, there must be a way for the user
to generate a transaction (Walletbeat uses a token transfer out of the
wallet as the litmus transaction for this) without reliance on an
external API or proprietary application. The combination of these
factors ensures that the wallet remains self-custodial and that the
account cannot be frozen in-place due to an uncooperative external
provider.
ERC-4337: Account Abstraction for smart contract wallets (smart contract wallets) are rated based on
the level of control the user has over their account according to the
smart contract's control logic that the wallet uses. The user must be
in control of who controls their account by default, and be able to
permissionlessly create asset transfer transactions.
Specifically, the rating considers:
Whether the user has the ability to change the cryptographic keys
used to control the account in general, in a manner that does not
involve relying on an external provider or proprietary software.
Whether the smart contract wallet's default configuration starts
out with the user having self-custody of their account, for example
by having a majority of the key shares in self-custody in a multisig
wallet.
Whether the generation of a token transfer transaction requires
relying on an external provider or proprietary software, even if the
user has self-custody of all requisite cryptographic keys to sign
such a transaction.
If a wallet supports multiple types of accounts, the rating for the account
type it supports that is least portable takes precedence. This makes the
final rating act as an effective "floor" across the account types the
wallet supports.
If a wallet supports multiple types of accounts and all of them have the
same level of portability, the account type that takes precedence is the
one that the wallet offers the user to create by default.
Can the wallet withdraw L2 funds to Ethereum L1 without relying on intermediaries?
FAIL
Rainbow does not support L2 force-inclusion withdrawal transactions on Arbitrum or OP Stack L2s.
This means users rely on intermediaries in order to withdraw their funds from these L2s.
Rainbow supports connecting to a user's self-hosted Ethereum node, which can be used to broadcast L1 transactions without trusting intermediaries.
Why should I care?
One of the core tenets of Ethereum is censorship resistance.
This means that users must be able to reliably get transactions
included onchain, without the ability for intermediaries to prevent
this from happening.
This property is critical to ensure that all Ethereum participants are
provided equal-opportunity, unfettered access to Ethereum, and to ensure
that Ethereum is resilient to attackers that would want to prevent others
from using Ethereum on such footing.
In order to uphold this property on Ethereum L2s, users must be able to
force transactions to be included on L2 chains as well. Most L2s
implement such functionality by allowing L2 transactions to be
submitted on the L1, and enforcing that their sequencing logic must
respect such L1 force-inclusion requests by including them on the L2
chain, typically within some fixed duration.
By verifying that the wallet supports L2 force-withdrawal transactions,
this attribute verifies censorship resistance at both levels: L1 and L2.
How is transaction inclusion evaluated?
Wallets are rated based on whether users need to trust any intermediary
in order to withdraw their funds from L2s.
This fundamentally requires two major features:
A wallet must support the creation of an L1 transaction which forces the
L2 to withdraw user funds back to the L1. This message is typically
posted as an L1 transaction which forces the L2 sequencing process to
take it into account.
Since L2 force-withdrawal transactions require an L1 transaction, the
wallet must also be able to get this transaction included without
relying on an external service to broadcast this transaction for block
inclusion. Therefore, the wallet must also support either participating
in Ethereum's L1 gossip network, or (for environments that do not
support this such as browser extension wallets) support broadcasting
L1 transactions through a user's self-hosted Ethereum node.
With these two features in place, users can withdraw their L2 funds
without trusting intermediaries.
Walletbeat currently only considers OP Stack chains and Arbitrum One for
this evaluation, but more L2 chains may be added as support for
force-withdrawal transaction becomes feasible for them.
What can Rainbow do about its transaction inclusion?
Rainbow should add support for creating force-withdrawal transactions for L2s and broadcasting them on L1.
Rainbow implements a Guardian-based account recovery feature which
passes all of the tested scenarios
when it comes to anti-ruggability.
Rainbow account recovery implementation
Rainbow encrypts the seed phrase with the user wallet password and stores it in iCloud or Google Drive. Recovery requires the backup password and access to either cloud provider.
The recovery process critically depends on The user's wallet password.
The recovery process requires setting up recovery with at least 1 of the following:
The user's iCloud account
The user's Google Drive account
For evaluation purposes, Walletbeat assumes the user will use
the policy requiring the least amount of effort that the
wallet allows, i.e.
a single recovery guardian.
The key is reconstituted client-side.
Sources (3)
The browser extension and the mobile app both generate the recovery phrase on the user's device.
Rainbow encrypts the seed phrase with a user-chosen password and stores the encrypted backup in iCloud (iOS) or Google Drive (Android).
Why does this matter?
The promise of crypto is to make your accounts and your funds truly yours.
This is what is most commonly referred to when discussing
"self-sovereignty".
The underlying property that makes an account truly yours is the inability
for anyone other than yourself to act on your behalf or to take over your
account without prior consent.
How is account unruggability evaluated?
Wallets are evaluated based on whether there is any mechanism by which
any entity other than the user may sign or approve transactions on behalf
of the user's account, or can transfer ownership of the account away from
the user. This includes features like seed phrase backups where the wallet
developer gets to learn the user's seed phrase, or other account recovery
features that let the wallet developer unilaterally recover the user's
account.
Fully-custodial wallets (i.e. wallets where the signing key material
resides entirely on external services) are also not self-sovereign
(aka ruggable) by definition.
Features that allow the user to pre-approve certain types of transactions
ahead of time are treated as maintaining self-sovereignty, so long as
the user controls their limits explicitly:
time-bound, amount-bound, destination/purpose-bound, etc.
Does Rainbow let you inspect and manage the permissions you've granted to other contracts and apps?
FAIL
Rainbow does not provide any functionality for managing token approvals.
Without the ability to inspect and revoke approvals, users are exposed to risks from unlimited or unnecessary token approvals granted to other addresses.
Why should I care?
Token approvals grant other addresses, such as contracts or accounts,
permission to spend tokens on your behalf.
Malicious or compromised contracts with existing approvals can drain your wallet,
and approvals to other accounts carry the same risk.
Over $362M has been stolen since 2020 through such
approval hacks and exploits, where attackers use an existing approval to drain
the funds a user approved without directly compromising their wallet.
Being able to inspect and revoke approvals is an important tool for protecting
your assets from unnecessary or dangerous delegated spending authority.
How is permissions management evaluated?
Wallets are rated based on whether they allow users to inspect existing
token approvals and revoke them directly from within the wallet interface.
ERC-20, ERC-721, and ERC-1155 approvals are each evaluated; the worst
result across all token standards determines the overall rating.
As Account Abstraction becomes more prevalent, this methodology
will also grow to encompass the management of more complex account permissions.
What can Rainbow do about its permissions management?
Rainbow should add the ability to view and revoke token approvals.
Rainbow uses the GPL-3.0 license for its source code
Why does this matter?
Free & Open Source Software (FOSS) licensing
allows a software project's source code to be freely used, modified and distributed.
This allows better collaboration, more transparency into the software development practices
that go into the project, and allows security researchers to more easily identify and report
security vulnerabilities. In short, it turns software projects into public goods.
Rainbow sold RNBW tokens to the public on CoinList (11–18 December 2025): 30 million tokens (3% of supply) at $0.10, followed by an open Uniswap continuous auction at the 5 February 2026 TGE.
Why does this matter?
Wallets are complex, high-stakes pieces of software.
They must be maintained, regularly audited, and follow the continuous
improvements in the ecosystem.
This requires a reliable, transparent source of funding.
How is funding evaluated?
Wallets are assessed based on how sustainable, transparent, and
user-aligned their funding mechanisms are.
Wallets are typically funded by one or more of the following methods:
Self-funding from developers
Seeking donations from users
Seeking grants from foundations
Venture capital funding
Charging fees on convenience functions (e.g. swapping and bridging
tokens)
Governance tokens
Commemorative NFT sales
Walletbeat looks at each funding source of funding and verifies whether
it is done transparently and in a user-aligned manner. In this context,
"user alignment" refers to whether a source of funding grows as a
function of the user's own goals, rather than being uncorrelated or
anti-correlated. For example, funding acquired through hidden swap fees
or governance token sales with undisclosed insider token allocations are
not user-aligned. Funding acquired through transparent swap fees, user
donations, or ecosystem grants are user-aligned.
In order to pass this criterion, wallets must have at least one source of
funding, and all of their sources of funding must be transparent to users.
Additionally, if the wallet is funded from multiple sources and some of
these sources are not user-aligned, the public must be able to determine
the proportion of each such funding source to the wallet's overall
revenue. Depending on the funding mechanism, this can be done through
publication of a revenue breakdown page, public regulatory filings,
or token allocation and vesting disclosures.
By default the ETH L1 send screen shows only a single aggregate "Estimated fee" figure with no itemized breakdown. The fee shown by default is therefore aggregated.
One tap on the gas control opens this sheet itemizing current base fee, max base fee, miner tip, and max transaction fee. No wallet platform fee applies to a plain ETH transfer, so this network-fee breakdown is the complete breakdown. The same sheet is reachable from every transaction type tested.
One tap on the gas control opens this sheet itemizing current base fee, max base fee, miner tip, and max transaction fee. No wallet platform fee applies to a plain ERC-20 transfer, so this network-fee breakdown is the complete breakdown. The same sheet is reachable from every transaction type tested.
By default the Rainbow built-in swap screen shows the exchange rate and a single network-fee estimate (e.g. "$0.07"), but does not itemize the Rainbow service fee.
Tapping "Review" (a single action) reveals an itemized breakdown: network, minimum received, the "Included Rainbow Fee" shown as a token amount (0.00000262 ETH), max slippage, and the estimated network fee.
On mobile, a tap on the "Included Rainbow Fee" line of the swap Review screen (a second tap, after Review) is required to reveal the fee as a percentage: "Included Rainbow Fee 0.85%".
For a USDC-to-ETH swap initiated through the Uniswap frontend (app.uniswap.org), the Rainbow approval popup shows a single aggregate "Estimated fee" by default, alongside the simulated result. The Uniswap protocol fee is reflected in the simulated receive amount, not itemized separately.
One tap on the gas control opens this sheet itemizing current base fee, max base fee, miner tip, and max transaction fee. This is a swap through an external app, so no Rainbow platform fee applies. The same sheet is reachable from every transaction type tested.
Rainbow has a built-in cross-chain bridge/swap feature. On the amount-entry screen only a gas estimate is shown by default, and "Hold to Bridge" is available there. Tapping "Review" (a single action) reveals the itemized breakdown: destination network, minimum received, the "Included Rainbow Fee", and max slippage as separate line items. The UI does not, however, explain the trust assumptions or risks of bridging across chains (no warning about external bridge providers, L2 risk, or possible loss of funds), and the Rainbow support documentation likewise omits these.
The Rainbow browser extension "Review & Bridge" panel, reached by clicking "Review" (one action) on a USDC cross-chain bridge, itemizes the fee breakdown. It lists the minimum received, the bridging provider (Relay), and an "Included Rainbow fee" shown as a token amount (0.000586 USDC), alongside the estimated network fee.
Clicking the info icon on the "Included Rainbow fee" line in the browser extension bridge Review surfaces a "Rainbow Fee" note stating "Rainbow takes a 0.25% fee from bridges."
Last retrieved
Why does this matter?
Fee transparency is crucial for users to understand the full cost of their transactions.
Without clear fee information, users may be surprised by high transaction costs or
hidden fees charged by the wallet.
Transparent fee disclosure helps users make informed decisions about when to transact
and which wallet to use. It also builds trust between users and wallet providers by
ensuring that all costs are clearly communicated upfront.
How is a wallet's fee transparency evaluated?
Wallets are evaluated based on how transparently they display transaction fees and
transaction purposes to users.
A wallet receives a passing rating if it provides comprehensive fee information,
including detailed breakdowns of network fees and clear disclosure of any additional
wallet fees. Fees may be aggregated down to one number. A breakdown must be
available to the user within a single click. For built-in swap and cross-chain
bridging flows, wallet service fees must be shown as a percentage or basis points
when a comprehensive breakdown is available. Wallet service fees are
platform fees charged by the wallet itself.
A wallet receives a partial rating if it provides an aggregate fee but does not
let the user get a detailed breakdown. It also receives a partial rating if it
shows a comprehensive breakdown on built-in swap or bridging flows. In that case,
wallet service fees must be shown as a percentage or basis points. Absolute units
(e.g. flat dollar or token amounts) are not sufficient.
A wallet fails this attribute if it provides minimal or no fee information before
transaction confirmation.
Chain execution fees (gas, priority fees, L1 data costs) and external protocol
fees are not subject to the wallet service fee unit rule.
Various transaction types are tested: Ether and ERC-20 transfers on L1, built-in
swaps or bridging transactions, DeFi transactions, private transactions if
supported. If a wallet displays fees differently depending on the type of
transaction, the transaction type with the least clear display level is
taken into consideration for the purpose of this attribute.
The browser extension build job checks out an external repository (rainbow-me/browser-extension-env) and reruns yarn setup (which runs yarn install and yarn ds:install) during the build. This means build inputs are fetched from the network rather than from a pre-fetched, integrity-verified input set.
The mobile wallet Android release build runs yarn install --immutable && yarn setup and resolves Gradle dependencies while assembling the release, fetching build inputs from the network.
The mobile wallet iOS build runs yarn install --immutable && yarn setup and fastlane match, which fetches signing certificates from a remote git repository during the build, fetching build inputs from the network.
Why should I care?
Users entrust wallets with their funds and rely on them to ship safe updates.
A trustworthy release process means users can verify that what they downloaded
is what the developers built, that dependencies are controlled, and that changes
between versions are documented.
Without these signals, a compromised or tampered release may go undetected.
How is release process evaluated?
Four binary signals are assessed, grouped into two categories:
Basic:
Public changelog: the wallet publishes release notes or a changelog.
Dependency locking: a lockfile or equivalent pins all dependency versions.
Advanced:
3. Artifact signing: release artifacts are cryptographically signed and these signatures are published.
4. Reproducible or hermetic builds: independent parties can verify that build output matches
source, or the build can run fully offline. Verifying this independently requires access to
public source code.
A wallet passes when both basic signals and both advanced signals are present.
Partial coverage earns a partial rating, based on which groups are satisfied.
Basic signals alone score lower than advanced signals alone, reflecting stronger trust from
advanced-group evidence. No signals at all earns a fail.
What can Rainbow do about its release process?
To fully pass, Rainbow should add both advanced signals:
Artifact signing: sign release artifacts so users can verify they have not
been tampered with.
Reproducible or hermetic builds: ensure independent parties can rebuild
the same source to obtain a byte-for-byte identical artifact, or that the
build can run fully offline from a pre-fetched, integrity-verified input set.
Does the wallet transparently disclose how it monetizes your transaction data?
UNRATED
Walletbeat's database does not have the necessary information on Rainbow to assess this question. Please help us by contributing your knowledge on our GitHub repository!
Why does this matter?
Before a transaction is included onchain, wallet software may send transaction
data to external services for broadcast, simulation, or orderflow auctioning
(MEV). Users cannot see this path as clearly as onchain execution unless the
wallet discloses it.
Wallets that auction orderflow by default should tell users so in the transaction
UI, with prominence at least comparable to how they show transaction fees.
They should also publish a practices page explaining who receives data and how
defaults can be changed.
Wallets that share pre-inclusion data without auctioning should route that data
through endpoints that are documented and independently verifiable as
non-extractive, so external parties cannot retain or exploit transaction data.
If the Ethereum protocol later implements a native mempool encryption mechanism,
wallets may also protect their users from orderflow extraction by using this
mechanism to shield transaction data before it is executed onchain.
How is a wallet's orderflow transparency evaluated?
Wallets are exempt from this attribute when they are hardware wallets.
Software wallets that do not send pre-inclusion transaction data to external
parties by default pass on this attribute.
Software wallets that share pre-inclusion data by default but do not auction
orderflow pass when every default recipient uses an endpoint that is
documented and independently verifiable as non-extractive. They receive
partial when at least one default recipient does not. The evaluation names
which recipient entities use extractive endpoints.
Wallets that auction orderflow by default are evaluated on disclosure
prominence in the transaction UI (compared to the least clear basic-operation
fee display), a linked orderflow practices page, and the contents of that page.
The practices page should list recipient entities and what they do, explain that
auctioning is enabled by default, document how users can change defaults (or
state that defaults cannot be changed), and describe how users can verify
onchain outcomes.
They fail when orderflow is not disclosed in the UI, disclosure is less
prominent than fees, no practices page is linked, or the page omits required
content. They receive partial when onchain verification is documented but
not confirmed effective. They pass when all requirements are met.
If the Ethereum protocol later implements a native mempool encryption mechanism,
wallets that use this mechanism to shield transaction data before it is included
onchain would also pass this attribute.
Both clients execute EIP-7702 (type-4) delegation as part of swap/send-calls flows via the @rainbow-me/delegation SDK; willExecuteDelegation decides per (address, chainId) whether the next operation delegates.
Why does this matter?
User experience on Ethereum has historically suffered from the limitations of Externally-Owned Accounts (EOAs), which is the type of account most Ethereum users use today. By contrast, smart wallet accounts offer many UX and security improvements, such as the ability to:
Batch multiple transactions, removing the need for separate "token approval" transactions before every other token operation.
Delegate some operation to trusted provider, such as allowing onchain games to withdraw small amounts of tokens without signing pop-ups for each and every transaction.
Change transaction authorization logic, enabling the use of Passkeys (and cellphone authentication methods) for signing transactions.
Update the set of keys used to control the wallet, enabling the switch to quantum-resistant encryption algorithms in the future.
Define account recovery rules, reducing the risk of losing access to your account when losing a private key or a device.
However, smart wallet accounts have historically been an all-or-nothing, wallet-specific proposition for users. There was no transition path to such wallets.
As part of the Pectra upgrade,
EIP-7702: Account Abstraction via smart contract authority delegation fixes this problem. It create a clean path for
existing EOAs to obtain all the UX benefits of smart wallet accounts
and account abstraction, without the need for users to switch to a
different account address.
This represents a large User Experience upgrade for all Ethereum EOA users.
The user experience benefits of these enhancements are still in-flight
and are expected to develop as these standards mature and are built on
top of. As such, Walletbeat does not currently consider which
improvements wallets provide for their users as a result of these new
capabilities. However, it is expected that a future version of this
attribute would look at such improvements. For example: to verify
that users are able to update the signing authority of their wallets
to a quantum-safe signature scheme.
Rainbow supports sending funds to human-readable ENS addresses such as username.eth, but does not support chain-specific address formats that specify the destination chain.
It does so using onchain data sources using the same code as when interacting with the chain in general, inheriting its privacy and verifiability properties.
Why should I care?
Ethereum addresses are hexadecimal strings (0x...) which are
unreadable to humans. Phishing scams and exploits have used this to
trick users into sending funds to invalid addresses, for example by
generating lookalike-addresses and tricking users into copy/pasting
them without noticing the difference.
Additionally, Ethereum's transition to layer 2 chains has changed user
needs when sending funds. The hexadecimal address isn't sufficient
anymore; the user needs to ensure that they are sending funds to the
correct hexadecimal address on the correct chain, increasing the
potential for mistakenly sending funds to the wrong place or the wrong
chain.
Address naming registries like ENS partially solve this problem by
allowing more human-readable names like username.eth to be
automatically turned into the hexadecimal address. This is easier to
share and to accurately transfer by humans. Additionally, some address
format standards improve upon this further by including the destination
chain information as part of the address itself. Such standards include:
Wallets that support either of these standards are able to automatically
determine the destination address and chain from a human-readable string,
and can bridge funds across chains as appropriate. This improves the user
experience of Ethereum and its layer 2 ecosystem while reducing the
potential for mistakes when sending funds.
How is address resolution evaluated?
Wallets are rated based on the types of addresses they support sending
funds to.
Walletbeat recognizes the following destination address formats:
Plain ENS addresses (username.eth) without destination chain information
For a pass, the mechanism used to perform the resolution must either:
Be done using onchain data and reusing the wallet's common chain
interaction client, inheriting its verifiability (e.g. via light
client) and privacy properties.
OR be done using an offchain external provider in such a way that
the address returned by the external provider is verifiable, and
without revealing the user's IP address to the provider.
This ensures that:
The wallet cannot be tricked into sending funds to an attacker
compromising the offchain provider's responses
The provider may not progressively learn the user's contacts list by
associating its successive resolution queries by IP over time.
For addresses that require an offchain lookup (e.g. ENS names
using offchain resolvers with CCIP-Read),
only the portion of the work necessary to arrive at the conclusion
that an offchain lookup is necessary is considered.
In other words, wallets must verify that the CCIP-Read
OffchainLookup details are as claimed and then perform the CCIP-Read
themselves, rather than trust an offchain provider to do so on their
behalf.
What can Rainbow do about its address resolution?
Rainbow may want to add support for sending funds to chain-specific human-readable addresses, as specified by either:
Web applications that want to integrate with Ethereum should not have to
write code specific to the wallet that the user has installed. For this
reason, the Ethereum community has defined web browser integration
standards, which dictate how wallets and web pages can interact with each
other.
By ensuring that wallets implement this standard interface, applications
automatically support all wallets that implement the interface. This
ensures compatibility across wallets, and ensures that the Ethereum wallet
ecosystem remains competitive thanks to wallet interoperability.
How is browser integration evaluated?
Wallets are rated based on whether they implement the following Ethereum
standards for web browser integration:
Rainbow can display your account's total value across
chains and per-chain token balances. It does not, however, show
your total balance for a given token (e.g. Ether or USDC) summed
up across multiple chains. That makes it hard to see how much
USDC you have.
Cross-chain token balance awareness is one of many features that
wallets need to be multi-chain-aware. This matters for the Ethereum
L2 roadmap, which aims to make L2s seamless for users.
Rainbow displays a single portfolio total summing the account value across all supported chains. It lists per-chain token balances as separate line items (e.g. ETH held on mainnet and on an L2 each appear as their own row with a chain badge). It does not, however, sum a single token across chains into one combined balance: the same asset on multiple chains is shown as multiple rows rather than a single total.
Rainbow mobile app home screen: a single account-value total at the top, with ETH and WETH each appearing as separate per-chain rows (mainnet and an L2, distinguished by chain badges) rather than a single summed-per-token balance.
Rainbow has a built-in cross-chain bridge/swap feature. On the amount-entry screen only a gas estimate is shown by default, and "Hold to Bridge" is available there. Tapping "Review" (a single action) reveals the itemized breakdown: destination network, minimum received, the "Included Rainbow Fee", and max slippage as separate line items. The UI does not, however, explain the trust assumptions or risks of bridging across chains (no warning about external bridge providers, L2 risk, or possible loss of funds), and the Rainbow support documentation likewise omits these.
Rainbow mobile app bridge amount-entry screen: by default only a gas estimate is shown (labeled "Free", roughly 0.0001 ETH), with the "Included Rainbow Fee" and slippage not visible. "Hold to Bridge" is available here, so a user can confirm without ever seeing the itemized fee.
Rainbow mobile app bridge "Review" screen, reached by tapping "Review" (one action). Fees are itemized as separate line items: destination network, minimum received, the "Included Rainbow Fee", and max slippage. The "Included Rainbow Fee" is shown as a token amount (e.g. 0.00125 USDC). There is no warning explaining bridge trust assumptions or cross-chain risk.
On mobile, a tap on the "Included Rainbow Fee" line of the bridge Review screen (a second tap, after Review) is required to reveal the fee as a percentage: "Included Rainbow Fee 0.25%".
Last retrieved
Why should I care?
Ethereum activity is not limited to the main L1 chain; a lot of activity
has moved onto rollups and Layer 2 chains. This has allowed Ethereum to
scale beyond what its L1 chain can handle, but has also introduced
complexity and fragmentation for users and wallets to deal with.
They must now deal with token balances fragmented across multiple chains.
To address the UX impact of this complexity, wallets should provide
features to abstract away these issues, while remaining transparent to
the user when cross-chain bridging risks or fees are involved.
How is chain abstraction evaluated?
Wallets are rated based on how much of the complexity involved in dealing
with multiple chains is abstracted away from users, while keeping risks
and fees transparent.
To get a passing rating, wallets must be cross-chain aware in how they
display account value and individual token balances:
When displaying the user account's total value, this value should sum
up the user's valuations across all chains the wallet supports by
default.
When displaying a specific token's balance, the balance should reflect
the user's total balance for this token across all wallet-supported
chains (and on which the token exists). For rating purposes,
Walletbeat looks specifically at Ether and USDT balances.
In addition, wallets must make it easy for users to move their assets
across chains when needed. To get a passing rating, wallets must provide
a built-in bridging feature.
This bridging feature must explain the risks involved in bridging assets
across chains. Our friends at L2BEAT do a
fantastic job documenting this, but wallet developers also have a duty
to explain these risks to their users.
For bridge operations where the net fee is larger than 1bps, the wallet
must display the fee breakdown by default.
When the user attempts to send tokens to an address on a chain where the
user's balance is insufficient, but for which they have sufficient tokens
on another chain, the wallet should automatically propose to bridge them.
What can Rainbow do about its chain abstraction?
Rainbow should have a way to see token balances summed up
across chains.
Does the wallet support bundling multiple operations as a single transaction?
FAIL
Rainbow does not implement EIP-5792 Wallet Call API.
This means applications cannot request the wallet to bundle multiple
transactions into a single operation.
For example, this means token approval transactions need to be
submitted separately from the transactions that spend these tokens.
This rating differs across versions. Select a specific version for details.
Sources (2)
Asking the wallet to send a bundle of transactions from the Walletbeat test page in the Rainbow in-app browser returns an error saying the method is not supported.
The mobile app has no EIP-5792 Wallet Call API code in its source.
Why should I care?
Transaction batching is one of the longstanding features without which
Ethereum user experience (UX) has suffered. One of the most common pain
points for DeFi, for example, has been the need to perform separate
"token approval" transactions, followed by a separate transaction to
actually execute the user's original intent.
Does the wallet support directly connecting to hardware wallets from a plurality of manufacturers?
FAIL
Rainbow supports the Ledger hardware wallet (directly via Bluetooth).
Other wallets may be used through WalletConnect; however, their use requires WalletConnect as an intermediary and the use of an external application, making it more error-prone and difficult to use over direct hardware wallet integration.
This rating differs across versions. Select a specific version for details.
The support of hardware wallets from a single manufacturer hinders
hardware wallet ecosystem interoperability.
Hardware wallets are physical devices that store a user's private keys offline,
providing an additional layer of security against online threats. By keeping
private keys isolated from internet-connected devices, hardware wallets protect
users from malware, phishing attacks, and other security vulnerabilities that
could compromise their funds.
Supporting multiple hardware wallet manufacturers preserves a healthy,
open, competitive, interoperable market for hardware wallets. It also
increases the total addressable market of users for the software wallet,
as users that already own a specific hardware wallets will want to use a
software wallet that supports it.
How is a wallet's hardware wallet support evaluated?
Wallets are evaluated based on whether they directly integrate with
hardware wallets from a plurality of major hardware wallet manufacturers.
A wallet receives a passing rating if it supports hardware wallets from
at least 3 major hardware wallet
manufacturers:
Ledger
Trezor
Keystone
GridPlus
imKey
Hardware wallets accessible only through WalletConnect are not counted,
as they require relying on WalletConnect and external software beyond the
wallet itself in order to function.
A wallet receives a partial rating if it supports only two such
hardware wallets manufacturers (without relying on WalletConnect or
external software).
A wallet fails this attribute if it only directly supports hardware wallets
from a single manufacturer.
Wallets that do not directly support hardware wallets at all are exempt,
as this check is only about hardware wallet interoperability.
General direct hardware wallet support is also part of Walletbeat's
security criteria as a separate attribute.
What can Rainbow do to improve hardware wallet support?
Rainbow should add direct support for popular hardware wallets to improve security options for users.