# An everyday spending wallet

The whole daily spending reference design, plus the pages its screens depend on: backups, handles, coin selection, privacy and key management.

The costly rules come first; the full list follows, grouped by page. Every line carries the address of the sentence it came from.

369 rules: 57 that can cost money, 58 that can cost trust, 254 standard.

## Start here

- **DON'T** _(Costs money)_ Build a product where the user's funds depend on your company continuing to exist. Every wallet should be recoverable without you. See Backups.
  <https://www.bitcoinsv.design/guide/rule/665b6af4ce/>
- **DO** _(Costs money)_ Make the irreversible step unmistakable. A payment cannot be recalled, so the review screen is the last line of defence.
  <https://www.bitcoinsv.design/guide/rule/b502171c81/>
- **DO** _(Costs money)_ Show the total a payment takes from the user, who it goes to, and that it cannot be undone, before they commit.
  <https://www.bitcoinsv.design/guide/rule/72c3ab54e4/>
- **DO** _(Costs money)_ Name the limits. "This backup covers your keys but not your payment records" is the sentence that stops somebody losing money later.
  <https://www.bitcoinsv.design/guide/rule/02cda8cac2/>
- **DON'T** _(Costs money)_ Let the everyday wallet draw from savings on its own, or let an agent raise its own budget. Both turn a bridge into a leak.
  <https://www.bitcoinsv.design/guide/rule/8d5c89ed47/>
- **DO** _(Costs money)_ Show the profile name and avatar the handle resolved to, before the confirm button. Paying "Anna Keller" is checkable; paying anna@examplebank.com is only spellable.
  <https://www.bitcoinsv.design/guide/rule/344afceabd/>
- **DO** _(Costs money)_ Say when the key behind a saved contact has changed since last time, and make the user acknowledge it. A silently rotated key is how a handle gets hijacked.
  <https://www.bitcoinsv.design/guide/rule/f47f34353f/>
- **DON'T** _(Costs money)_ Show long decimal BSV amounts in a consumer interface. "0.00012500 BSV" asks the reader to count zeros, and they will get it wrong.
  <https://www.bitcoinsv.design/guide/rule/5fe9c5b068/>
- **DO** _(Costs money)_ Make the handle the default and the address the fallback. Every payment that uses a handle is a payment that cannot go to the wrong network.
  <https://www.bitcoinsv.design/guide/rule/98fc09f14d/>
- **DO** _(Costs money)_ Put the network name next to the address field, always, not only on error. "BSV address" is three words and it is the whole defence.
  <https://www.bitcoinsv.design/guide/rule/fea05e6af6/>
- **DO** _(Costs money)_ Warn on every pasted address rather than trying to detect a bad one. You cannot detect it, and a warning that only fires sometimes teaches people it means something specific.
  <https://www.bitcoinsv.design/guide/rule/7b6afde89f/>
- **DON'T** _(Costs money)_ Use "bitcoin address" as the field label. That is the word that cannot distinguish the networks, on the screen where the distinction is the whole point.
  <https://www.bitcoinsv.design/guide/rule/e92e4f5284/>
- **DO** _(Costs money)_ Put the network on the confirmation, beside the recipient, in the same weight as the amount.
  <https://www.bitcoinsv.design/guide/rule/e7486b509a/>
- **DO** _(Costs money)_ Say plainly what cannot be undone, before the button: "Sent to the wrong network, this usually cannot be recovered."
  <https://www.bitcoinsv.design/guide/rule/94b4f84162/>
- **DO** _(Costs money)_ Offer a test payment for a first-time address above a threshold you choose, and ask the user to check with the recipient that it arrived. It costs a fraction of a penny and it is the only defence that proves the address is right.
  <https://www.bitcoinsv.design/guide/rule/ea9599e1da/>
- **DO** _(Costs money)_ Make the network selection impossible to leave at a default, and restate the chosen network on the confirmation.
  <https://www.bitcoinsv.design/guide/rule/278b3b2795/>
- **DON'T** _(Costs money)_ Offer "Try again" on a payment until you know the first attempt did not go out.
  <https://www.bitcoinsv.design/guide/rule/24ccdc3485/>
- **DO** _(Costs money)_ Tell the user once when their wallet is retrying for them: "Your wallet will keep trying to send this. You don't need to pay again."
  <https://www.bitcoinsv.design/guide/rule/2a72388be3/>
- **DO** _(Costs money)_ Prompt for the key backup once there is money to protect, at the latest when the balance first crosses an amount the user would mind losing, and let the user do it then and there.
  <https://www.bitcoinsv.design/guide/rule/ef08b4564a/>
- **DON'T** _(Costs money)_ Show recovery words during onboarding. A user with nothing to lose photographs them, and the screenshot outlives the carelessness.
  <https://www.bitcoinsv.design/guide/rule/245fa7fb11/>
- **DO** _(Costs money)_ Say what the backup covers, because it is two things: "Your recovery words restore your keys. Your wallet backup restores your records: which money is yours and how to spend it. Keep both."
  <https://www.bitcoinsv.design/guide/rule/7f7d175823/>
- **DO** _(Costs money)_ Resolve the handle and show the profile name and avatar before the confirm button. Paying "Anna Keller" is checkable; paying anna@example.com is only spellable. See Paying by handle.
  <https://www.bitcoinsv.design/guide/rule/fba6444cf1/>
- **DON'T** _(Costs money)_ Let a typed handle go straight to a confirm screen with no resolution step. The resolution is the check.
  <https://www.bitcoinsv.design/guide/rule/44c3c56764/>
- **DO** _(Costs money)_ Warn on every pasted address that money sent to an address on another network is very hard to recover, and offer the user's contacts or a handle instead.
  <https://www.bitcoinsv.design/guide/rule/2433fe3c54/>
- **DO** _(Costs money)_ Warn before any payment to a contact whose key has changed, and require acknowledgement: "Anna's wallet key has changed since you last paid her. If you weren't expecting this, check with her another way first."
  <https://www.bitcoinsv.design/guide/rule/00ea519fe6/>
- **DON'T** _(Costs money)_ Offer an unlimited allowance. There is no amount of convenience that justifies it, and a product offering it will have users who accepted it without reading.
  <https://www.bitcoinsv.design/guide/rule/7c371b8b5e/>
- **DON'T** _(Costs money)_ Accept a single tap. Require the balance to be acknowledged, and refuse outright if there is a balance and either part of the backup is missing, with a route to making it.
  <https://www.bitcoinsv.design/guide/rule/d2c2445c8a/>
- **DON'T** _(Costs money)_ Make it a manual export the user has to remember. They will not, and the gap will be exactly the payments they most wanted back.
  <https://www.bitcoinsv.design/guide/rule/72eb015230/>
- **DO** _(Costs money)_ Encrypt the backup with a key derived from the recovery words, so the words and the backup restore everything with nothing else to remember.
  <https://www.bitcoinsv.design/guide/rule/3329c28e91/>
- **DO** _(Costs money)_ Say on the setup screen that nobody else can open or reset this backup: "Only your recovery words can open this backup. Nobody can reset them, including us."
  <https://www.bitcoinsv.design/guide/rule/48e07a4783/>
- **DON'T** _(Costs money)_ Derive the encryption key from anything the provider also holds. If they can decrypt it, this is custody and the screen should not say otherwise.
  <https://www.bitcoinsv.design/guide/rule/d13e35fd6e/>
- **DO** _(Costs money)_ Test recovery by wiping a device, not by logging out.
  <https://www.bitcoinsv.design/guide/rule/b4d9b31c84/>
- **DO** _(Costs money)_ Say on this screen that it does not back up the keys. A user who sets this up and sees a tick will reasonably conclude they are finished. "Your wallet backup restores your records. Your recovery words restore your keys, and you still need to write them down."
  <https://www.bitcoinsv.design/guide/rule/360c4bae8b/>
- **DON'T** _(Costs money)_ Tell users "these words are your wallet" unless your wallet can restore everything from the words alone. A user who believes it will one day restore an empty-looking wallet and conclude the money is gone.
  <https://www.bitcoinsv.design/guide/rule/7b87f637ac/>
- **DON'T** _(Costs money)_ Call the whole thing "backup" and show one tick. That is the error this page exists to prevent.
  <https://www.bitcoinsv.design/guide/rule/969c5ee46a/>
- **DO** _(Costs money)_ Walk the recovery path assuming the device is gone, not locked, and remove anything that only exists on it.
  <https://www.bitcoinsv.design/guide/rule/b9cea7af28/>
- **DO** _(Costs money)_ Explain first, in two sentences: what the words do, and that a photograph of them is a copy of the money. Then show them.
  <https://www.bitcoinsv.design/guide/rule/55c4347112/>
- **DO** _(Costs money)_ Disable screenshots on this screen where the platform allows it, and say why rather than failing silently.
  <https://www.bitcoinsv.design/guide/rule/5836d4dc2f/>
- **DON'T** _(Costs money)_ Offer copy to clipboard. The clipboard is readable by other apps and syncs between devices.
  <https://www.bitcoinsv.design/guide/rule/bcf92277dd/>
- **DO** _(Costs money)_ Offer shares as an alternative, not an addition. Words and shares are two encodings of the same secret, so holding both makes two complete copies to protect rather than a safer arrangement.
  <https://www.bitcoinsv.design/guide/rule/805502c7da/>
- **DO** _(Costs money)_ When the keys are restored but no wallet backup is found, say so: "Your keys are restored. We could not find your wallet backup, so some payments may be missing. Anything you receive from now on will appear normally."
  <https://www.bitcoinsv.design/guide/rule/8b17310f57/>
- **DON'T** _(Costs money)_ Report a balance of zero as though it were a fact. It is the balance of what the wallet currently knows about.
  <https://www.bitcoinsv.design/guide/rule/8d9414d260/>
- **DO** _(Costs money)_ Re-establish the backup on the new device, and say so. A recovered wallet with no backup is one failure away from the same situation.
  <https://www.bitcoinsv.design/guide/rule/c35ab608d2/>
- **DO** _(Costs money)_ Run a full drill before the product holds real money: fund it, make payments across several counterparties, export, delete the installation, remove your own service from the path, and restore on a clean device with a different compatible wallet. See Backups.
  <https://www.bitcoinsv.design/guide/rule/c2ecdfda32/>
- **DON'T** _(Costs money)_ Ship a recovery flow that has only been tested with the original app still installed. That is the one situation it will not be used in.
  <https://www.bitcoinsv.design/guide/rule/8825d2c974/>
- **DON'T** _(Costs money)_ Protect a backup with a password manager or account that lived only on the lost phone. That is not a backup. See Cloud backup › The circular-dependency trap.
  <https://www.bitcoinsv.design/guide/rule/1dcc7454f0/>
- **DO** _(Costs money)_ Never tell users "these words are your wallet" unless that is true for your wallet. Say plainly what the backup covers and what it doesn't.
  <https://www.bitcoinsv.design/guide/rule/79072d4e71/>
- **DO** _(Costs money)_ Make the recipient and the amount unmistakable on the review screen. Once accepted, a payment cannot be cancelled.
  <https://www.bitcoinsv.design/guide/rule/d44d6f8652/>
- **DO** _(Costs money)_ Warn when a user pastes an address rather than choosing a handle or contact, and offer handles and contacts first everywhere you can. See Wrong-network payments.
  <https://www.bitcoinsv.design/guide/rule/435cfa246c/>
- **DON'T** _(Costs money)_ Let the master identity key sign payments or messages directly, and never expose a child private key derived against anyone.
  <https://www.bitcoinsv.design/guide/rule/bd0e68876f/>
- **DO** _(Costs money)_ Encrypt on the device, before anything is sent. The service should only ever hold a blob it cannot read.
  <https://www.bitcoinsv.design/guide/rule/78bc2950f3/>
- **DON'T** _(Costs money)_ Store the root private key on a remote service in a form the service can decrypt. That is custody, and it should be described as custody.
  <https://www.bitcoinsv.design/guide/rule/f728c8f93c/>
- **DO** _(Costs money)_ Walk the recovery path assuming the device is gone, not locked, and remove every step that needs something only that device had.
  <https://www.bitcoinsv.design/guide/rule/c22b55aa20/>
- **DON'T** _(Costs money)_ Derive the encryption key from something the provider also holds. If the provider can decrypt it, the user is not self-custodying and the screen should not say they are.
  <https://www.bitcoinsv.design/guide/rule/fa511c9f66/>
- **DO** _(Costs money)_ Show when the last backup ran, on a screen the user sees often. A backup that silently stopped three months ago fails exactly when it is needed.
  <https://www.bitcoinsv.design/guide/rule/0994527ea9/>
- **DON'T** _(Costs money)_ Imply that recovery words move between wallet families. "Compatible with any bitcoin wallet" is false here, and a user who believes it will conclude their money is gone.
  <https://www.bitcoinsv.design/guide/rule/2377e802d8/>
- **DON'T** _(Costs money)_ Let the words reach a screenshot, a cloud note, a password manager on the same device, or a chat message. Disable screenshots on that screen where the platform allows it, and say why.
  <https://www.bitcoinsv.design/guide/rule/fd2bd65519/>
- **DON'T** _(Costs trust)_ Require an identity document, an email address or a phone number to hold money. Where a regulation requires it for a particular feature, gate that feature, not the wallet.
  <https://www.bitcoinsv.design/guide/rule/2a1abdf36f/>
- **DO** _(Costs trust)_ Give every wallet an export the user holds themselves, and a send to a plain address that works without your servers. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/0d8433711c/>
- **DO** _(Costs trust)_ Before revealing key linkage for a counterparty, tell the user it exposes every payment between them and that counterparty, past and future. See Wallet privacy.
  <https://www.bitcoinsv.design/guide/rule/6db3fdafda/>
- **DON'T** _(Costs trust)_ Put a savings total and a quick-pay action on the same screen. The total makes the payment feel smaller than it is.
  <https://www.bitcoinsv.design/guide/rule/11140daf0a/>
- **DO** _(Costs trust)_ Let the weight of a confirmation follow its consequence: whether it can be undone, how large the amount is against what the wallet holds, whether the recipient is new, and whether it grants something that keeps working after today.
  <https://www.bitcoinsv.design/guide/rule/ca4deb21a3/>
- **DON'T** _(Costs trust)_ Use one confirmation style for everything. People learn the shape of "confirm" within a week and stop reading what is inside it.
  <https://www.bitcoinsv.design/guide/rule/cf6fbcfa5c/>
- **DO** _(Costs trust)_ Give every failure on the send and connect flows a message that says whether money moved: "Nothing left your wallet" or "The payment went through".
  <https://www.bitcoinsv.design/guide/rule/9653a8c175/>
- **DO** _(Costs trust)_ Make a wallet's permission prompt readable in full by a screen reader: who is asking, what for, and for how long. A grant the person could not hear is not consent.
  <https://www.bitcoinsv.design/guide/rule/783df4309f/>
- **DO** _(Costs trust)_ Warn plainly when a handle does not resolve, naming what failed: no such handle, domain unreachable, certificate invalid. "Couldn't find that" sends people to try again rather than to look harder at what they typed.
  <https://www.bitcoinsv.design/guide/rule/3087625834/>
- **DON'T** _(Costs trust)_ Fall back silently to a plain-address payment when a handle resolves but does not support the peer-to-peer flow. Say so, because the confirmation the user gets is weaker. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/b1f4906d93/>
- **DO** _(Costs trust)_ Use Bitcoin SV or BSV on screen: "Send BSV", "Your BSV balance", "Bitcoin SV address". Use one of the two consistently within a screen.
  <https://www.bitcoinsv.design/guide/rule/4e724b402c/>
- **DON'T** _(Costs trust)_ Write "bitcoin" alone on a screen where somebody is about to move money. Used precisely it is an umbrella covering several chains, so it is the one word that cannot tell a user which network they are on. See Bitcoin.
  <https://www.bitcoinsv.design/guide/rule/ff7e7b18ab/>
- **DO** _(Costs trust)_ Say when a converted figure is an estimate, and roughly how fresh the rate is. A price that silently drifts is worse than one labelled approximate.
  <https://www.bitcoinsv.design/guide/rule/ab0796fbfa/>
- **DO** _(Costs trust)_ Keep one bitcoin unit per screen. Mixing "0.0001 BSV" and "10,000 sats" in one view asks the user to do arithmetic to compare two things you wrote.
  <https://www.bitcoinsv.design/guide/rule/19ba942704/>
- **DON'T** _(Costs trust)_ Abbreviate amounts in a financial context. "12.5k sats" saves four characters and introduces a rounding question.
  <https://www.bitcoinsv.design/guide/rule/e8d6661969/>
- **DON'T** _(Costs trust)_ Shorten a number with an ellipsis, ever. Reformat it or let it wrap.
  <https://www.bitcoinsv.design/guide/rule/28ab6b7ed7/>
- **DO** _(Costs trust)_ Say what happened in plain words: which network it went to, that the money is not lost from the chain but is out of reach from here, and what recovery would require.
  <https://www.bitcoinsv.design/guide/rule/6221629f1c/>
- **DON'T** _(Costs trust)_ Promise recovery you cannot deliver. If it needs the other party's cooperation, say that is what it needs.
  <https://www.bitcoinsv.design/guide/rule/d3b1447e05/>
- **DO** _(Costs trust)_ Say whether money moved in every message that follows a payment attempt, including when the answer is that nothing left the wallet.
  <https://www.bitcoinsv.design/guide/rule/10b3023998/>
- **DON'T** _(Costs trust)_ Ask for an email address, a phone number or an identity document to create a wallet. None is needed, and requiring one discards the main advantage the product has.
  <https://www.bitcoinsv.design/guide/rule/83d92b4597/>
- **DON'T** _(Costs trust)_ Offer a choice of key scheme during onboarding. Somebody setting up their first wallet has no basis to answer. See Private key management.
  <https://www.bitcoinsv.design/guide/rule/d2302d96da/>
- **DO** _(Costs trust)_ Offer automatic encrypted backup of the wallet's records during onboarding, with one line saying where it goes, and turn it on only if the user says yes. Never switch remote storage on silently. Records are the part that must be continuous anyway. See Backups.
  <https://www.bitcoinsv.design/guide/rule/2b88a5095b/>
- **DON'T** _(Costs trust)_ Put anything personal in a note by default. It is shared with the payer and may end up in their records. See Wallet privacy.
  <https://www.bitcoinsv.design/guide/rule/2a1e3fc5a2/>
- **DO** _(Costs trust)_ A public donation handle is permanently linked to everything paid to it. Suggest a separate handle for it. A tag such as @maya+donations@example.com sorts the payments but still resolves to Maya. See Paying by handle.
  <https://www.bitcoinsv.design/guide/rule/651a6d824e/>
- **DO** _(Costs trust)_ Show the running total against the allowance somewhere the user passes regularly, and make every agent or app payment visible in activity, marked as such. See Permissions and allowances.
  <https://www.bitcoinsv.design/guide/rule/faf9dcb5ed/>
- **DO** _(Costs trust)_ Require the device's authentication to confirm, above whatever threshold the user set.
  <https://www.bitcoinsv.design/guide/rule/5a60232bfd/>
- **DO** _(Costs trust)_ Say first whether money left the wallet.
  <https://www.bitcoinsv.design/guide/rule/0b8d2226b1/>
- **DO** _(Costs trust)_ Make sure this works without your servers, any Pass, or any vendor service. It is the user's guaranteed way out if everything else in the stack fails. See Backups.
  <https://www.bitcoinsv.design/guide/rule/575c867a4e/>
- **DON'T** _(Costs trust)_ Keep a fee picker because the design system already has one. It asks the user a question with no wrong answer, which teaches them that your questions are decorative.
  <https://www.bitcoinsv.design/guide/rule/5d31c5cfd7/>
- **DO** _(Costs trust)_ Leave the fee off the review screen entirely for ordinary payments, and put it in the transaction details afterwards for anyone who looks.
  <https://www.bitcoinsv.design/guide/rule/8223d8056e/>
- **DON'T** _(Costs trust)_ Make an explorer the answer to "where is my money". If a wallet cannot explain the state of its own payment, that is a gap in the wallet. See Nodes and verification.
  <https://www.bitcoinsv.design/guide/rule/250ffdfe50/>
- **DO** _(Costs trust)_ Name what is lost in the confirmation: the saved key, and therefore the warning if it changes. Payment history stays.
  <https://www.bitcoinsv.design/guide/rule/1f7685c1df/>
- **DO** _(Costs trust)_ Let the user set a threshold above which authentication is required per payment, and default it to something sensible rather than to every payment or to none. We suggest an amount around the price of a coffee.
  <https://www.bitcoinsv.design/guide/rule/776e679024/>
- **DO** _(Costs trust)_ Make revoking immediate and obvious, and say what it will break: the app stops working until it asks again.
  <https://www.bitcoinsv.design/guide/rule/52648865d0/>
- **DO** _(Costs trust)_ Expire spending and sensitive permissions by default, and tell the user when one is about to lapse rather than renewing it silently.
  <https://www.bitcoinsv.design/guide/rule/1e8193cabc/>
- **DON'T** _(Costs trust)_ Bury this in settings. It is the control panel for everything that can spend the user's money without asking each time.
  <https://www.bitcoinsv.design/guide/rule/088505e3f8/>
- **DO** _(Costs trust)_ Set allowances per app, with a per-payment cap as well as a total. A thousand payments of a satoshi and one payment of a thousand satoshis are different risks.
  <https://www.bitcoinsv.design/guide/rule/af64165675/>
- **DO** _(Costs trust)_ Give it its own confirmation, outside any bundle, naming who is asking and what they will be able to see.
  <https://www.bitcoinsv.design/guide/rule/e19e79e1b4/>
- **DON'T** _(Costs trust)_ Include it in a connect-time grant. Nothing legitimate needs it at connect time.
  <https://www.bitcoinsv.design/guide/rule/369bdbaf52/>
- **DON'T** _(Costs trust)_ Reveal the user's identity key or profile to an app for a routine payment unless the user chose to. It permanently links a name to spending. See Identity.
  <https://www.bitcoinsv.design/guide/rule/938b1989c3/>
- **DO** _(Costs trust)_ Name what is lost and what is not. The money stays where it is; the recovery words and the wallet backup together restore it on another device. If either is missing, say that deleting may make the money unrecoverable, in those words.
  <https://www.bitcoinsv.design/guide/rule/50b37269b0/>
- **DO** _(Costs trust)_ Explain it in one line that says where the backup goes and what opens it: "Back up your wallet to your cloud storage? It is encrypted on this phone, and only your recovery words can open it."
  <https://www.bitcoinsv.design/guide/rule/eaac762adf/>
- **DON'T** _(Costs trust)_ Enable remote storage without saying so. It changes who can be compelled to hand over data, and that is the user's decision.
  <https://www.bitcoinsv.design/guide/rule/6efda86df6/>
- **DON'T** _(Costs trust)_ Protect the backup with a separate PIN or password. A short PIN can be guessed by anyone holding the file, and a password is one more secret to forget at the worst moment.
  <https://www.bitcoinsv.design/guide/rule/010eaed1f0/>
- **DO** _(Costs trust)_ Say on the words screen which wallets can restore them: "These words restore your wallet in apps that support BSV recovery words. Other wallets may show an empty balance."
  <https://www.bitcoinsv.design/guide/rule/68b56c1f7c/>
- **DO** _(Costs trust)_ End the flow by saying what it did not do, and show the state of the other part: "Your recovery words restore your keys. Your wallet backup restores your records: which money is yours and how to spend it. Keep both." See Backup and recovery.
  <https://www.bitcoinsv.design/guide/rule/38ddb4b53c/>
- **DO** _(Costs trust)_ Recover what can be recovered without records, and be explicit that it may be partial.
  <https://www.bitcoinsv.design/guide/rule/a3cc43f610/>
- **DO** _(Costs trust)_ Name anything that did not, and say what it means. A token type the wallet does not support, records older than the backup, a Pass that needs reissuing.
  <https://www.bitcoinsv.design/guide/rule/4478343928/>
- **DON'T** _(Costs trust)_ Show a success screen with no numbers on it. The user's question is "is my money there", and a tick does not answer it.
  <https://www.bitcoinsv.design/guide/rule/6d3c1b95b2/>
- **DO** _(Costs trust)_ Prompt the user to check whether the old device should be considered compromised, if it was stolen rather than lost. Moving to fresh keys is a real option and nobody will think of it unaided.
  <https://www.bitcoinsv.design/guide/rule/7216e8df19/>
- **DO** _(Costs trust)_ Treat confirmation as a risk setting, not a blanket rule. For coffee, articles, tips and most in-person sales, treat a payment as complete once the recipient's wallet has accepted it. For large amounts, show the payment as Settling until it is mined, and let businesses set their own threshold.
  <https://www.bitcoinsv.design/guide/rule/338e7363b6/>
- **DO** _(Costs trust)_ Show one spendable balance, and show separately anything that is not spendable because it is reserved, in a token, or in another basket. "2,400 sats, plus 1 token" is honest; a single number that silently excludes things is not.
  <https://www.bitcoinsv.design/guide/rule/655ff9cb9b/>
- **DO** _(Costs trust)_ Always show the user what they're paying for, and the running total against their allowance. Small, frequent payments add up, and users should never be surprised by them.
  <https://www.bitcoinsv.design/guide/rule/2cc79b8eeb/>
- **DON'T** _(Costs trust)_ Attach a user's identity key to routine payments because it makes your activity list prettier. It permanently links their name to their spending.
  <https://www.bitcoinsv.design/guide/rule/d919803bc1/>
- **DON'T** _(Costs trust)_ Call payments "anonymous" or "private". Both are false.
  <https://www.bitcoinsv.design/guide/rule/9098861073/>
- **DON'T** _(Costs trust)_ Describe a shared or custodial key as self-custody.
  <https://www.bitcoinsv.design/guide/rule/3154963c4f/>
- **DON'T** _(Costs trust)_ Offer a choice of key scheme during onboarding. A person setting up their first wallet has no basis to answer, and the question is a good way to lose them before they hold anything.
  <https://www.bitcoinsv.design/guide/rule/9c4d3387b5/>
- **DON'T** _(Costs trust)_ Turn remote storage on without saying so. It is a meaningful change in who can be compelled to hand over data, and it belongs to the user to decide.
  <https://www.bitcoinsv.design/guide/rule/b2e765791f/>

## Every rule, by page

### Design principles

https://www.bitcoinsv.design/guide/getting-started/principles/

- **DO** Let the user hold their own keys, and make the path to doing so the default rather than an advanced option.
  <https://www.bitcoinsv.design/guide/rule/0e25385677/>
- **DO** Say plainly when something is custodial. A service holding keys on a user's behalf is a legitimate product; describing it as self-custody is not.
  <https://www.bitcoinsv.design/guide/rule/3726e3cf93/>
- **DON'T** _(Costs money)_ Build a product where the user's funds depend on your company continuing to exist. Every wallet should be recoverable without you. See Backups.
  <https://www.bitcoinsv.design/guide/rule/665b6af4ce/>
- **DO** Match the protection to the amount. A wallet holding coffee money and a wallet holding savings are different products, and pretending otherwise produces one that is wrong for both. See Wallet setups.
  <https://www.bitcoinsv.design/guide/rule/88ed0414ab/>
- **DO** _(Costs money)_ Make the irreversible step unmistakable. A payment cannot be recalled, so the review screen is the last line of defence.
  <https://www.bitcoinsv.design/guide/rule/b502171c81/>
- **DO** Ask for as little as the product needs. The independent risk assessment of the wallet interface (BRC-151) warns how much a wallet can be asked for; the answer is to need less of it. See Connecting a wallet.
  <https://www.bitcoinsv.design/guide/rule/0341c279d1/>
- **DON'T** Train people to tap approve. A prompt that appears constantly, is pre-ticked, or reappears until accepted teaches exactly the habit that gets someone robbed.
  <https://www.bitcoinsv.design/guide/rule/b405f2b096/>
- **DO** Write for someone who has never heard of a UTXO and never needs to. Internal vocabulary belongs in advanced views and documentation.
  <https://www.bitcoinsv.design/guide/rule/da45913bb9/>
- **DO** Meet WCAG 2.2 AA: contrast, touch targets, screen reader labels, and amounts that read aloud sensibly. See Accessibility.
  <https://www.bitcoinsv.design/guide/rule/bb3271f0dc/>
- **DON'T** _(Costs trust)_ Require an identity document, an email address or a phone number to hold money. Where a regulation requires it for a particular feature, gate that feature, not the wallet.
  <https://www.bitcoinsv.design/guide/rule/2a1abdf36f/>
- **DO** Support the standards rather than a bespoke integration. Design your connect flow around "your wallet", not a brand.
  <https://www.bitcoinsv.design/guide/rule/381f5ac09f/>
- **DO** _(Costs trust)_ Give every wallet an export the user holds themselves, and a send to a plain address that works without your servers. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/0d8433711c/>
- **DON'T** Invent a proprietary format for something a BRC already covers. A format only your product reads is a lock-in whether or not you meant it as one.
  <https://www.bitcoinsv.design/guide/rule/f6ae896c38/>
- **DO** _(Costs money)_ Show the total a payment takes from the user, who it goes to, and that it cannot be undone, before they commit.
  <https://www.bitcoinsv.design/guide/rule/72c3ab54e4/>
- **DO** Say what your product can see and what it stores. A wallet that phones a service on every balance check should say which service and what it learns.
  <https://www.bitcoinsv.design/guide/rule/ca1aefc429/>
- **DO** _(Costs money)_ Name the limits. "This backup covers your keys but not your payment records" is the sentence that stops somebody losing money later.
  <https://www.bitcoinsv.design/guide/rule/02cda8cac2/>
- **DON'T** Describe a product as private, anonymous or instant without the qualifier that makes it true.
  <https://www.bitcoinsv.design/guide/rule/630f05adcd/>
- **DO** Keep outputs from unrelated counterparties apart when selecting what to spend. Spending them together is the main remaining on-chain leak. See Coin selection.
  <https://www.bitcoinsv.design/guide/rule/8e1c2b6c46/>
- **DO** _(Costs trust)_ Before revealing key linkage for a counterparty, tell the user it exposes every payment between them and that counterparty, past and future. See Wallet privacy.
  <https://www.bitcoinsv.design/guide/rule/6db3fdafda/>
- **DON'T** Collect what you do not need, and never attach a user's identity to routine payments for convenience.
  <https://www.bitcoinsv.design/guide/rule/532e6d6e67/>
- **DON'T** Write personal data on chain in the clear. There is no delete.
  <https://www.bitcoinsv.design/guide/rule/9cf7b80b0a/>
- **DO** Let users choose or self-host the services your wallet depends on, and support more than one. See Nodes and verification.
  <https://www.bitcoinsv.design/guide/rule/a310b591f1/>
- **DON'T** Weld a product to one provider's endpoint. That is your product's lifespan as well as theirs.
  <https://www.bitcoinsv.design/guide/rule/90f2e1b5df/>

### Visual language

https://www.bitcoinsv.design/guide/getting-started/visual-language/

- **DO** Use the BSV mark, the upright B on gold, wherever a BSV product needs the symbol as a mark.
  <https://www.bitcoinsv.design/guide/rule/fe64509ecb/>
- **DON'T** Use the orange disc or a tilted B to stand for BSV. Both say a different network to anyone who knows the difference.
  <https://www.bitcoinsv.design/guide/rule/349de561b7/>
- **DO** Use the Unicode character ₿, not the logo, when you need the bitcoin symbol in text. It scales, reflows and can be read by a screen reader. For amounts and labels, use sats and BSV; see Amounts and units.
  <https://www.bitcoinsv.design/guide/rule/3da32ce0ba/>
- **DON'T** Use the golden disc logo inside a sentence. It is a mark, not a letterform, and at text size it is a smudge.
  <https://www.bitcoinsv.design/guide/rule/2e80a24df0/>
- **DON'T** Put memes in a product. They read as a private joke to people inside and as unseriousness to people outside, and the second group is who you are trying to reach.
  <https://www.bitcoinsv.design/guide/rule/48418fbe04/>
- **DO** Draw the thing that is happening. A payment is a person handing something to a person.
  <https://www.bitcoinsv.design/guide/rule/6200916e40/>
- **DO** Pick a point on the scale deliberately and hold it across the product. Drifting between the two is what produces an app that is baffling to newcomers and patronising to everyone else.
  <https://www.bitcoinsv.design/guide/rule/d3b7b38cd3/>
- **DON'T** Use a lightning bolt to mean speed in a BSV product. Show the thing itself: a payment confirmed while the customer is still at the till.
  <https://www.bitcoinsv.design/guide/rule/8aabfb2d4b/>
- **DON'T** Put advocacy in a product. Say what yours does and let it be judged on that.
  <https://www.bitcoinsv.design/guide/rule/69599bcb85/>
- **DO** Reach for the gold metaphor on a savings surface and leave it off an everyday one. A payment app that looks like a vault tells people their coffee money is an investment.
  <https://www.bitcoinsv.design/guide/rule/4f51bc1620/>

### Spending, saving and delegating

https://www.bitcoinsv.design/guide/designing-products/spending-saving-delegating/

- **DO** Decide which state of mind each screen is for, and design that screen for it alone.
  <https://www.bitcoinsv.design/guide/rule/7f98a99062/>
- **DON'T** _(Costs trust)_ Put a savings total and a quick-pay action on the same screen. The total makes the payment feel smaller than it is.
  <https://www.bitcoinsv.design/guide/rule/11140daf0a/>
- **DO** Build each state of mind on its own wallet, so the separation holds even when the interface does not. A layout can be redesigned; a key the everyday wallet never had cannot leak from it.
  <https://www.bitcoinsv.design/guide/rule/ad2b23851e/>
- **DO** Make every move between states of mind a visible step the person takes, with its own confirmation.
  <https://www.bitcoinsv.design/guide/rule/10f19e8865/>
- **DON'T** _(Costs money)_ Let the everyday wallet draw from savings on its own, or let an agent raise its own budget. Both turn a bridge into a leak.
  <https://www.bitcoinsv.design/guide/rule/8d5c89ed47/>
- **DO** Pick the primary state of mind for the product, and say so. A payments app is for spending, with saving as an optional layer reached by a bridge. A savings product is for saving, with a quick top-up as its one shortcut. A product that will not choose ends up with the savings total next to the pay button.
  <https://www.bitcoinsv.design/guide/rule/e557c3aab8/>

### Getting to know your users

https://www.bitcoinsv.design/guide/designing-products/getting-to-know-your-users/

- **DO** Lead with the concrete benefit for the person in front of you. "Keep the 45p the card company takes on a £5 sale" beats any sentence containing the word sovereignty.
  <https://www.bitcoinsv.design/guide/rule/4d5e8b87d4/>
- **DO** Count the ideas a person has to hold to finish their first task, not just the steps. Each new idea is a place they can stop.
  <https://www.bitcoinsv.design/guide/rule/6633d7fd30/>
- **DON'T** Treat speed as comprehension. Removing friction removes the reason to stop; it does not answer "what did I just do?"
  <https://www.bitcoinsv.design/guide/rule/5d79ca507e/>
- **DO** _(Costs trust)_ Let the weight of a confirmation follow its consequence: whether it can be undone, how large the amount is against what the wallet holds, whether the recipient is new, and whether it grants something that keeps working after today.
  <https://www.bitcoinsv.design/guide/rule/ca4deb21a3/>
- **DON'T** _(Costs trust)_ Use one confirmation style for everything. People learn the shape of "confirm" within a week and stop reading what is inside it.
  <https://www.bitcoinsv.design/guide/rule/cf6fbcfa5c/>
- **DO** Decide which of the three you are for, and say so. A product aimed at all three serves none well.
  <https://www.bitcoinsv.design/guide/rule/6102c7a17c/>
- **DON'T** Assume somebody who has used another chain understands this one. They will look for a fee picker, wait for confirmations, and assume their recovery words work here. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/dd776c8dbe/>
- **DO** Test recovery before you polish onboarding: confirm a new user can restore their wallet on a second device before refining the first-run screens.
  <https://www.bitcoinsv.design/guide/rule/c011785af6/>

### Common user flows

https://www.bitcoinsv.design/guide/designing-products/common-user-flows/

- **DON'T** Lead a store listing with self-custody or decentralisation. They are reasons to stay, not reasons to install.
  <https://www.bitcoinsv.design/guide/rule/5e4df29166/>
- **DO** Use the device's own biometric with a passcode fallback, and require authentication for payments above a threshold the user can see.
  <https://www.bitcoinsv.design/guide/rule/6f716b945f/>
- **DO** Make the wallet's own activity the place to find out whether something worked. See Activity.
  <https://www.bitcoinsv.design/guide/rule/40259c712c/>
- **DO** Offer a view-only mode for people who should see a balance but not spend it.
  <https://www.bitcoinsv.design/guide/rule/6d0c87d856/>
- **DO** _(Costs trust)_ Give every failure on the send and connect flows a message that says whether money moved: "Nothing left your wallet" or "The payment went through".
  <https://www.bitcoinsv.design/guide/rule/9653a8c175/>

### Usage life cycle

https://www.bitcoinsv.design/guide/designing-products/usage-life-cycle/

- **DON'T** Keep showing onboarding hints to somebody on their hundredth payment.
  <https://www.bitcoinsv.design/guide/rule/69e63ba024/>
- **DO** Teach each of the four at the moment it first applies: ownership when money first arrives, irreversibility on the first review screen, the backup when the balance is worth protecting, the network name wherever somebody pastes an address.
  <https://www.bitcoinsv.design/guide/rule/86f56f942f/>
- **DON'T** Teach what the product can take care of for them, such as fees or key schemes. Every concept taught before it is needed is a reason to stop.
  <https://www.bitcoinsv.design/guide/rule/1f6a29ac0d/>
- **DO** Make the first thing a new user does end with them holding real money: received from a person, or spent on something they wanted anyway.
  <https://www.bitcoinsv.design/guide/rule/2a864d4717/>
- **DON'T** Build a practice wallet or a simulated payment in place of a real first receive. It teaches the user that the real thing is somewhere else.
  <https://www.bitcoinsv.design/guide/rule/584baf8aaf/>
- **DO** Design for the person doing the introducing: a handle they can share, a payment request they can send, and a first payment that says who it came from. See Contacts.
  <https://www.bitcoinsv.design/guide/rule/86c37f9174/>
- **DO** Get a new user from opening the app to holding money in one sitting, without leaving the app except to ask somebody to pay them.
  <https://www.bitcoinsv.design/guide/rule/38199c11b4/>
- **DO** Give every setup step a way back. A mistake during setup should cost a tap, not the wallet.
  <https://www.bitcoinsv.design/guide/rule/1e89fe909b/>
- **DO** Ask the person, after a test, to explain to a friend what they just did. What they cannot explain did not land.
  <https://www.bitcoinsv.design/guide/rule/9f4988651b/>
- **DO** Measure where people stop, step by step, and work on the worst step first. A whole-funnel number tells you there is a problem and not where it is.
  <https://www.bitcoinsv.design/guide/rule/44e7d6568e/>
- **DO** Design the "frightening moment" explicitly. A payment that looks stuck, an unexpected balance, an app asking for something alarming. One clear explanation at that moment can keep somebody who would otherwise leave.
  <https://www.bitcoinsv.design/guide/rule/09a0b91ad8/>
- **DO** We suggest two causes to check first: being asked to choose a key scheme, and having nowhere to get any BSV. The first is yours to fix. See First use.
  <https://www.bitcoinsv.design/guide/rule/daa04676a4/>

### Accessibility

https://www.bitcoinsv.design/guide/designing-products/accessibility/

- **DON'T** Ship a control labelled "button". A QR code built as an unlabelled image is not selectable at all, so it does not exist for a screen reader user.
  <https://www.bitcoinsv.design/guide/rule/975540d1d7/>
- **DO** Name the thing and its effect: "QR code, double tap to copy the payment handle".
  <https://www.bitcoinsv.design/guide/rule/c4b54d03e8/>
- **DO** _(Costs trust)_ Make a wallet's permission prompt readable in full by a screen reader: who is asking, what for, and for how long. A grant the person could not hear is not consent.
  <https://www.bitcoinsv.design/guide/rule/783df4309f/>
- **DO** Put the recipient before the amount in the reading order of a review screen. It is the field most worth hearing first.
  <https://www.bitcoinsv.design/guide/rule/b61d8d3e8a/>
- **DO** Give every scan a typed or pasted equivalent. A user who cannot aim a camera still needs to pay.
  <https://www.bitcoinsv.design/guide/rule/e62777c1c9/>
- **DO** Pair colour with a word or a symbol, always. Sent and received, plus and minus, not just red and green.
  <https://www.bitcoinsv.design/guide/rule/dd06a6092e/>
- **DON'T** Put a countdown on a confirmation. Nothing here expires, so a timer is a difficulty you added. If a rate quote goes stale, refresh it rather than timing the person out.
  <https://www.bitcoinsv.design/guide/rule/58d003b536/>
- **DO** Make sure an amount reads aloud correctly. "12,500 sats" should be spoken as a number and a unit, which means it has to be text with a real unit beside it.
  <https://www.bitcoinsv.design/guide/rule/8d7230c7d8/>
- **DO** Use fixed-width digits (tabular-nums), so a changing balance does not shift the layout under a magnified viewport.
  <https://www.bitcoinsv.design/guide/rule/c4dae24589/>
- **DO** Offer at least one route that does not need handwriting: an encrypted file the user stores themselves, split shares held by people they trust, or a signing device.
  <https://www.bitcoinsv.design/guide/rule/e6ffe7da39/>
- **DO** Let the words be read aloud in private, and let the confirmation step be completed with a screen reader. A test that only works by sight makes recovery impossible later.
  <https://www.bitcoinsv.design/guide/rule/0ceff10f13/>
- **DO** Write at a reading age of about twelve. Short sentences, common words, one idea each.
  <https://www.bitcoinsv.design/guide/rule/e93cc9b805/>
- **DO** Say what happened and what it means for the money. "The payment did not go through. Nothing left your wallet." beats an error code every time.
  <https://www.bitcoinsv.design/guide/rule/89b13e7a98/>
- **DO** Run the send and recovery flows with the screen reader on and the screen off. It takes an afternoon and finds problems an automated audit misses.
  <https://www.bitcoinsv.design/guide/rule/2fb80808d8/>
- **DO** Include people with disabilities in research, paid, rather than simulating them.
  <https://www.bitcoinsv.design/guide/rule/a4d68925d0/>

### Paying by handle

https://www.bitcoinsv.design/guide/patterns/paying-by-handle/

- **DO** Accept both forms in any field that takes a handle. A user pasting anna@example.com into a wallet using the newer scheme should simply work.
  <https://www.bitcoinsv.design/guide/rule/f8fdfce7d2/>
- **DO** _(Costs money)_ Show the profile name and avatar the handle resolved to, before the confirm button. Paying "Anna Keller" is checkable; paying anna@examplebank.com is only spellable.
  <https://www.bitcoinsv.design/guide/rule/344afceabd/>
- **DO** _(Costs money)_ Say when the key behind a saved contact has changed since last time, and make the user acknowledge it. A silently rotated key is how a handle gets hijacked.
  <https://www.bitcoinsv.design/guide/rule/f47f34353f/>
- **DO** Make saving a resolved handle as a contact the obvious next step. The second payment to someone should never involve typing.
  <https://www.bitcoinsv.design/guide/rule/e308418a77/>
- **DON'T** Show the derived address anywhere in the main flow. It is a one-time internal value and putting it on screen invites comparison nobody can perform.
  <https://www.bitcoinsv.design/guide/rule/8d56db7003/>
- **DO** Offer matches from saved contacts as the user types a handle, before accepting free text.
  <https://www.bitcoinsv.design/guide/rule/61c7489fc9/>
- **DON'T** Show a handle on the review screen without the profile name it resolved to. On its own, a one-character difference is invisible.
  <https://www.bitcoinsv.design/guide/rule/6e2c0b3343/>
- **DO** _(Costs trust)_ Warn plainly when a handle does not resolve, naming what failed: no such handle, domain unreachable, certificate invalid. "Couldn't find that" sends people to try again rather than to look harder at what they typed.
  <https://www.bitcoinsv.design/guide/rule/3087625834/>
- **DON'T** _(Costs trust)_ Fall back silently to a plain-address payment when a handle resolves but does not support the peer-to-peer flow. Say so, because the confirmation the user gets is weaker. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/b1f4906d93/>

### Amounts and units

https://www.bitcoinsv.design/guide/patterns/amounts-and-units/

- **DO** Default to satoshis, not BSV, for the bitcoin figure. Everyday amounts are hundreds or thousands of satoshis, and the decimal form is unreadable at that scale.
  <https://www.bitcoinsv.design/guide/rule/7109c0692f/>
- **DO** Write "sats" or "satoshis" in words, and group digits in threes: 12,500 sats.
  <https://www.bitcoinsv.design/guide/rule/cb0ea7723f/>
- **DON'T** _(Costs money)_ Show long decimal BSV amounts in a consumer interface. "0.00012500 BSV" asks the reader to count zeros, and they will get it wrong.
  <https://www.bitcoinsv.design/guide/rule/5fe9c5b068/>
- **DON'T** Adopt a satoshi glyph. None renders reliably, none is in common fonts, and your users have not seen any of them.
  <https://www.bitcoinsv.design/guide/rule/0259e17026/>
- **DO** _(Costs trust)_ Use Bitcoin SV or BSV on screen: "Send BSV", "Your BSV balance", "Bitcoin SV address". Use one of the two consistently within a screen.
  <https://www.bitcoinsv.design/guide/rule/4e724b402c/>
- **DO** Prefer "Bitcoin SV" where there is room and the reader may be new to it, "BSV" where space is tight or the term repeats in a list.
  <https://www.bitcoinsv.design/guide/rule/3c14de2099/>
- **DON'T** _(Costs trust)_ Write "bitcoin" alone on a screen where somebody is about to move money. Used precisely it is an umbrella covering several chains, so it is the one word that cannot tell a user which network they are on. See Bitcoin.
  <https://www.bitcoinsv.design/guide/rule/ff7e7b18ab/>
- **DO** Lead with local currency for anything a person chooses to buy, with the satoshi amount beside it: "£12.00 (24,000 sats)".
  <https://www.bitcoinsv.design/guide/rule/3efb93cfc2/>
- **DO** Lead with satoshis for figures software decides or enforces, such as allowance limits, what is left of an allowance and agent budgets, with local currency beside them.
  <https://www.bitcoinsv.design/guide/rule/4db298dc64/>
- **DO** Let the two be swapped in one tap, and remember the choice.
  <https://www.bitcoinsv.design/guide/rule/ee876b1dbf/>
- **DO** _(Costs trust)_ Say when a converted figure is an estimate, and roughly how fresh the rate is. A price that silently drifts is worse than one labelled approximate.
  <https://www.bitcoinsv.design/guide/rule/ab0796fbfa/>
- **DO** Use tabular figures (tabular-nums in CSS) everywhere a figure appears, so digits line up in a column and a changing balance does not shift the layout.
  <https://www.bitcoinsv.design/guide/rule/052b376429/>
- **DO** Format for the reader's locale. 1,200 and 1.200 and 1 200 are the same number to three different people and three different numbers to one of them.
  <https://www.bitcoinsv.design/guide/rule/a50eb4bb1f/>
- **DO** _(Costs trust)_ Keep one bitcoin unit per screen. Mixing "0.0001 BSV" and "10,000 sats" in one view asks the user to do arithmetic to compare two things you wrote.
  <https://www.bitcoinsv.design/guide/rule/19ba942704/>
- **DON'T** _(Costs trust)_ Abbreviate amounts in a financial context. "12.5k sats" saves four characters and introduces a rounding question.
  <https://www.bitcoinsv.design/guide/rule/e8d6661969/>
- **DON'T** _(Costs trust)_ Shorten a number with an ellipsis, ever. Reformat it or let it wrap.
  <https://www.bitcoinsv.design/guide/rule/28ab6b7ed7/>
- **DO** Leave the fee off the review screen and put it in the transaction details. If it is shown, show it in local currency: "Fee: less than 1p".
  <https://www.bitcoinsv.design/guide/rule/848ac6bb53/>
- **DO** Show the individual amount where it happens and the aggregate where the user is deciding something. "About 1p (20 sats)" on the article, "940 sats (about 47p) today" in the allowance summary.
  <https://www.bitcoinsv.design/guide/rule/fb1efa5b2d/>
- **DO** Round aggregates to a sensible precision in local currency. "About 24p today" is more useful than "£0.2384".
  <https://www.bitcoinsv.design/guide/rule/62d7f58727/>
- **DO** Make sure an amount reads correctly aloud. A screen reader should say "twelve thousand five hundred satoshis", which means the unit needs to be text rather than an image or an unlabelled glyph.
  <https://www.bitcoinsv.design/guide/rule/3873d5026d/>
- **DO** Never rely on colour alone to show direction. Pair the colour with a sign or a word.
  <https://www.bitcoinsv.design/guide/rule/8d1e3f0487/>

### Wrong-network payments

https://www.bitcoinsv.design/guide/patterns/wrong-network-payments/

- **DO** _(Costs money)_ Make the handle the default and the address the fallback. Every payment that uses a handle is a payment that cannot go to the wrong network.
  <https://www.bitcoinsv.design/guide/rule/98fc09f14d/>
- **DO** _(Costs money)_ Put the network name next to the address field, always, not only on error. "BSV address" is three words and it is the whole defence.
  <https://www.bitcoinsv.design/guide/rule/fea05e6af6/>
- **DO** _(Costs money)_ Warn on every pasted address rather than trying to detect a bad one. You cannot detect it, and a warning that only fires sometimes teaches people it means something specific.
  <https://www.bitcoinsv.design/guide/rule/7b6afde89f/>
- **DON'T** _(Costs money)_ Use "bitcoin address" as the field label. That is the word that cannot distinguish the networks, on the screen where the distinction is the whole point.
  <https://www.bitcoinsv.design/guide/rule/e92e4f5284/>
- **DO** _(Costs money)_ Put the network on the confirmation, beside the recipient, in the same weight as the amount.
  <https://www.bitcoinsv.design/guide/rule/e7486b509a/>
- **DO** _(Costs money)_ Say plainly what cannot be undone, before the button: "Sent to the wrong network, this usually cannot be recovered."
  <https://www.bitcoinsv.design/guide/rule/94b4f84162/>
- **DO** _(Costs money)_ Offer a test payment for a first-time address above a threshold you choose, and ask the user to check with the recipient that it arrived. It costs a fraction of a penny and it is the only defence that proves the address is right.
  <https://www.bitcoinsv.design/guide/rule/ea9599e1da/>
- **DO** _(Costs trust)_ Say what happened in plain words: which network it went to, that the money is not lost from the chain but is out of reach from here, and what recovery would require.
  <https://www.bitcoinsv.design/guide/rule/6221629f1c/>
- **DO** Give them the transaction reference and the output, so somebody technical can help.
  <https://www.bitcoinsv.design/guide/rule/dc1f50e8b3/>
- **DON'T** Say "transaction failed". It did not fail. It succeeded somewhere else, and telling somebody it failed sends them looking for a refund that is not coming.
  <https://www.bitcoinsv.design/guide/rule/c1d8c3eddf/>
- **DON'T** _(Costs trust)_ Promise recovery you cannot deliver. If it needs the other party's cooperation, say that is what it needs.
  <https://www.bitcoinsv.design/guide/rule/d3b1447e05/>
- **DO** _(Costs money)_ Make the network selection impossible to leave at a default, and restate the chosen network on the confirmation.
  <https://www.bitcoinsv.design/guide/rule/278b3b2795/>
- **DO** Treat a first withdrawal to a new address as a different flow from a repeat one.
  <https://www.bitcoinsv.design/guide/rule/6e0e8f799c/>

### Errors and failed payments

https://www.bitcoinsv.design/guide/patterns/errors-and-failed-payments/

- **DO** _(Costs trust)_ Say whether money moved in every message that follows a payment attempt, including when the answer is that nothing left the wallet.
  <https://www.bitcoinsv.design/guide/rule/10b3023998/>
- **DO** End every error with one thing the user can do, as a button where there is one.
  <https://www.bitcoinsv.design/guide/rule/0e448050b8/>
- **DO** Put the error code and technical detail in an expandable details area with a copy button, so support can ask for it.
  <https://www.bitcoinsv.design/guide/rule/fd58b25cc9/>
- **DO** Keep what the user entered. Return them to where they were with the amount, recipient and note still filled in.
  <https://www.bitcoinsv.design/guide/rule/987ac15fa3/>
- **DON'T** Write "Something went wrong" on its own. If you truly do not know what happened, say what you do know and whether money moved.
  <https://www.bitcoinsv.design/guide/rule/29c4f5d4cc/>
- **DO** Explain a failure in the app when it is about the app's task, such as an article not unlocking, and in the wallet when it is about the user's money or permissions.
  <https://www.bitcoinsv.design/guide/rule/cf11c641f7/>
- **DON'T** _(Costs money)_ Offer "Try again" on a payment until you know the first attempt did not go out.
  <https://www.bitcoinsv.design/guide/rule/24ccdc3485/>
- **DO** _(Costs money)_ Tell the user once when their wallet is retrying for them: "Your wallet will keep trying to send this. You don't need to pay again."
  <https://www.bitcoinsv.design/guide/rule/2a72388be3/>
- **DON'T** Show a refusal or an unanswered wallet prompt in an error style. Both are the user's choice, and red tells them they did something wrong.
  <https://www.bitcoinsv.design/guide/rule/0199a519d1/>

### Daily spending wallet

https://www.bitcoinsv.design/guide/daily-spending-wallet/

- **DO** Read the reasoning and adapt. A reference design that is copied screen for screen produces a product that is identical to everyone else's and fits nobody's users in particular.
  <https://www.bitcoinsv.design/guide/rule/20b02271ab/>
- **DO** Start from Connecting a wallet and Payments if you are building the real thing. Nearly every surprise traces back to one of those two.
  <https://www.bitcoinsv.design/guide/rule/27f66f4202/>
- **DON'T** Treat this as a specification. It is one defensible set of answers, and several of the questions are genuinely open. Most flow pages list their open questions.
  <https://www.bitcoinsv.design/guide/rule/8c3fc74dbf/>
- **DO** After the first money arrives, suggest a maximum balance by asking the question that answers it: "How much would you be comfortable losing if this phone were stolen?" See Wallet setups.
  <https://www.bitcoinsv.design/guide/rule/50abe868e0/>

### First use

https://www.bitcoinsv.design/guide/daily-spending-wallet/first-use/

- **DO** Say what it does in the first line, in the words of someone who does not know what BSV is. "Pay anyone in seconds, for less than a penny" works. "Non-custodial BSV wallet with a standard app interface" does not.
  <https://www.bitcoinsv.design/guide/rule/ab9764be8d/>
- **DON'T** Lead with self-custody, sovereignty or decentralisation. They are reasons to stay, not reasons to install.
  <https://www.bitcoinsv.design/guide/rule/7e36fd9141/>
- **DO** Create the wallet and show it. The user can have a working, empty wallet within seconds of opening the app.
  <https://www.bitcoinsv.design/guide/rule/bdf9c24167/>
- **DON'T** _(Costs trust)_ Ask for an email address, a phone number or an identity document to create a wallet. None is needed, and requiring one discards the main advantage the product has.
  <https://www.bitcoinsv.design/guide/rule/83d92b4597/>
- **DON'T** _(Costs trust)_ Offer a choice of key scheme during onboarding. Somebody setting up their first wallet has no basis to answer. See Private key management.
  <https://www.bitcoinsv.design/guide/rule/d2302d96da/>
- **DO** Say it once, in one sentence, when money first arrives rather than when the app opens, alongside the key-backup prompt: "This money is yours. There is no password reset, so back up your recovery words now."
  <https://www.bitcoinsv.design/guide/rule/ef3c6c6d7b/>
- **DON'T** Put a scrolling legal text and a checkbox between a person and an empty wallet. It protects nobody and teaches them that your warnings are furniture.
  <https://www.bitcoinsv.design/guide/rule/22af7b9cad/>
- **DO** _(Costs trust)_ Offer automatic encrypted backup of the wallet's records during onboarding, with one line saying where it goes, and turn it on only if the user says yes. Never switch remote storage on silently. Records are the part that must be continuous anyway. See Backups.
  <https://www.bitcoinsv.design/guide/rule/2b88a5095b/>
- **DO** _(Costs money)_ Prompt for the key backup once there is money to protect, at the latest when the balance first crosses an amount the user would mind losing, and let the user do it then and there.
  <https://www.bitcoinsv.design/guide/rule/ef08b4564a/>
- **DON'T** _(Costs money)_ Show recovery words during onboarding. A user with nothing to lose photographs them, and the screenshot outlives the carelessness.
  <https://www.bitcoinsv.design/guide/rule/245fa7fb11/>
- **DO** Say what each route will ask for before the user goes there. Being surprised by a passport request is where people stop.
  <https://www.bitcoinsv.design/guide/rule/885dcdf1bf/>
- **DO** Make "ask someone to pay you" a first-class option. It is free, instant and needs no account, and it is easy to bury under the buy button.
  <https://www.bitcoinsv.design/guide/rule/7e7e907d0f/>
- **DO** Show the handle as the primary thing to share, with the QR code as the in-person version of the same thing.
  <https://www.bitcoinsv.design/guide/rule/c51b8a3805/>
- **DON'T** Show a derived address. It is a one-time internal value and putting it on screen invites comparison nobody can usefully perform.
  <https://www.bitcoinsv.design/guide/rule/7f2c6aa1bd/>
- **DON'T** Show a fee breakdown on a first receive. See Send fees.
  <https://www.bitcoinsv.design/guide/rule/9a36745df2/>
- **DO** Make the reminder persistent but quiet: a banner on the home screen that does not block anything and does not reappear as a modal.
  <https://www.bitcoinsv.design/guide/rule/58c28cacfd/>
- **DO** Say what is at risk in terms of the balance, not in the abstract. "Back up your wallet to protect the 4,200 sats you're holding" is a reason; "secure your wallet" is wallpaper.
  <https://www.bitcoinsv.design/guide/rule/bcfce24862/>
- **DON'T** Nag on a schedule. One persistent, dismissible reminder beats a modal every third launch, which people learn to dismiss without reading.
  <https://www.bitcoinsv.design/guide/rule/6679777b2c/>
- **DO** _(Costs money)_ Say what the backup covers, because it is two things: "Your recovery words restore your keys. Your wallet backup restores your records: which money is yours and how to spend it. Keep both."
  <https://www.bitcoinsv.design/guide/rule/7f7d175823/>

### Requesting

https://www.bitcoinsv.design/guide/daily-spending-wallet/requesting/

- **DO** Make the handle the primary thing on the receive screen, and the amount optional. Most of the time the payer knows what they owe.
  <https://www.bitcoinsv.design/guide/rule/7a42bd0615/>
- **DON'T** Generate a new address for each request and show it. On BSV a fresh key is derived per payment automatically, so the privacy reason for showing a new address has already been handled. See Payments.
  <https://www.bitcoinsv.design/guide/rule/b047195dc2/>
- **DON'T** Add an expiry to a request. Nothing in a handle and an amount goes stale, so an expiry is a deadline with nothing behind it.
  <https://www.bitcoinsv.design/guide/rule/8b8d9838a1/>
- **DO** Let the amount be entered in local currency and converted, which is how people think about being owed money.
  <https://www.bitcoinsv.design/guide/rule/cf3f778dba/>
- **DO** Allow an empty amount. "Pay me what you like" is a real case: tips, donations, splitting a bill the payer can see.
  <https://www.bitcoinsv.design/guide/rule/f4dbdc826a/>
- **DO** Prefill it where you can. A request made from a shared bill can say what the bill was.
  <https://www.bitcoinsv.design/guide/rule/275c3dcb7f/>
- **DON'T** _(Costs trust)_ Put anything personal in a note by default. It is shared with the payer and may end up in their records. See Wallet privacy.
  <https://www.bitcoinsv.design/guide/rule/2a1e3fc5a2/>
- **DO** Offer copy and share as distinct actions, and confirm in place rather than with a toast the user is not looking at.
  <https://www.bitcoinsv.design/guide/rule/9f96c8a20f/>
- **DO** Show it immediately and clearly: who paid, how much, and the note. A received payment is a good moment and the interface can say so.
  <https://www.bitcoinsv.design/guide/rule/71daac948d/>
- **DO** _(Costs trust)_ A public donation handle is permanently linked to everything paid to it. Suggest a separate handle for it. A tag such as @maya+donations@example.com sorts the payments but still resolves to Maya. See Paying by handle.
  <https://www.bitcoinsv.design/guide/rule/651a6d824e/>

### Receiving

https://www.bitcoinsv.design/guide/daily-spending-wallet/requesting/receiving/

- **DO** Show who paid, how much, and the note. When the payer's wallet shares a profile name and avatar, an entry can read "Anna Keller, for lunch"; otherwise show their handle.
  <https://www.bitcoinsv.design/guide/rule/1c01595db1/>
- **DO** Make it noticeable. A received payment is one of the few genuinely good moments in a finance app, and a silent list entry wastes it.
  <https://www.bitcoinsv.design/guide/rule/885d7cb83f/>
- **DON'T** Show a confirmation counter. It was verified on arrival, and counting blocks afterwards tells the user that your "Received" was provisional. See Transactions.
  <https://www.bitcoinsv.design/guide/rule/61405a5d46/>
- **DO** Collect anything waiting on launch, verify it, and show what arrived while the user was away as a group rather than a burst of separate notifications.
  <https://www.bitcoinsv.design/guide/rule/558676b58c/>
- **DO** Say on the receive screen's help, or in Settings › Services, that payments wait in a message box when the wallet is closed. It is the one real cost of the peer-to-peer model. See Payments.
  <https://www.bitcoinsv.design/guide/rule/211458699f/>
- **DO** Reject it, and tell the user in plain words that a payment arrived and could not be verified, so it was not accepted. Do not add it to the balance.
  <https://www.bitcoinsv.design/guide/rule/b3cb42f772/>
- **DON'T** Show a cryptographic error. "Merkle proof invalid" tells the user nothing they can act on.
  <https://www.bitcoinsv.design/guide/rule/437025ee4f/>
- **DO** Use a different state for these: "Incoming" until it is mined, then "Received". It is genuinely less certain than a peer-to-peer payment and the interface should not pretend otherwise. See Legacy compatibility.
  <https://www.bitcoinsv.design/guide/rule/de0ddb24e3/>
- **DO** Show it with whatever the sender provided, and let the user add their own note. An unexplained entry is the one they will be puzzling over in six months.
  <https://www.bitcoinsv.design/guide/rule/b6a67378a2/>
- **DON'T** Build a returns flow into a consumer wallet. Sending it back is just a payment, and the sender's handle is already there to pay.
  <https://www.bitcoinsv.design/guide/rule/8953c080ff/>
- **DO** Because step 4 happens, the payer can be shown "Paid" at the same moment the recipient is shown "Received". Design both ends of that: the two people are often standing next to each other.
  <https://www.bitcoinsv.design/guide/rule/67b4d0f5d2/>

### Sending

https://www.bitcoinsv.design/guide/daily-spending-wallet/sending/

- **DO** Autocomplete from contacts before accepting free text, and make saving a new recipient the obvious next step after a first payment. The second payment to someone should never involve typing.
  <https://www.bitcoinsv.design/guide/rule/5d73135962/>
- **DO** _(Costs money)_ Resolve the handle and show the profile name and avatar before the confirm button. Paying "Anna Keller" is checkable; paying anna@example.com is only spellable. See Paying by handle.
  <https://www.bitcoinsv.design/guide/rule/fba6444cf1/>
- **DON'T** _(Costs money)_ Let a typed handle go straight to a confirm screen with no resolution step. The resolution is the check.
  <https://www.bitcoinsv.design/guide/rule/44c3c56764/>
- **DO** Default to the unit the user set, and let them switch between it and their local currency in one tap. See Amounts and units.
  <https://www.bitcoinsv.design/guide/rule/62549b7884/>
- **DO** Allow very small amounts without complaint. A payment of 50 satoshis is ordinary, and a minimum blocks it for no reason.
  <https://www.bitcoinsv.design/guide/rule/de88c18a7f/>
- **DON'T** Show a "max" button that empties the wallet without saying so. Label it with the resulting amount.
  <https://www.bitcoinsv.design/guide/rule/a830c06ea1/>
- **DO** _(Costs trust)_ Show the running total against the allowance somewhere the user passes regularly, and make every agent or app payment visible in activity, marked as such. See Permissions and allowances.
  <https://www.bitcoinsv.design/guide/rule/faf9dcb5ed/>
- **DON'T** Prompt for every per-use payment. An article that costs 20 satoshis cannot carry a confirmation dialog, and a wallet that insists makes the whole category unusable.
  <https://www.bitcoinsv.design/guide/rule/e178ad1ce4/>
- **DO** Make the recipient the largest thing on the screen. The amount is usually right; the recipient is what gets checked too quickly.
  <https://www.bitcoinsv.design/guide/rule/e51521a9a8/>
- **DO** _(Costs trust)_ Require the device's authentication to confirm, above whatever threshold the user set.
  <https://www.bitcoinsv.design/guide/rule/5a60232bfd/>
- **DON'T** Put an "advanced" disclosure on the review screen. If something matters enough to show, show it; if it does not, it belongs in the transaction's details afterwards.
  <https://www.bitcoinsv.design/guide/rule/209f596f5d/>
- **DO** Label every wait with the step and, where there is one, the person. "Handing payment to Anna's wallet…" tells the user what is happening and to whom.
  <https://www.bitcoinsv.design/guide/rule/eff0757699/>
- **DON'T** Show a spinner with no words, or a full-screen loader for a step that takes a second. Both make an ordinary pause look like a fault.
  <https://www.bitcoinsv.design/guide/rule/0ae64e9f7c/>
- **DO** _(Costs trust)_ Say first whether money left the wallet.
  <https://www.bitcoinsv.design/guide/rule/0b8d2226b1/>
- **DON'T** Show an error code as the headline. Put it in the details for support, with plain words on top.
  <https://www.bitcoinsv.design/guide/rule/76e25ae879/>
- **DO** _(Costs money)_ Warn on every pasted address that money sent to an address on another network is very hard to recover, and offer the user's contacts or a handle instead.
  <https://www.bitcoinsv.design/guide/rule/2433fe3c54/>
- **DO** _(Costs trust)_ Make sure this works without your servers, any Pass, or any vendor service. It is the user's guaranteed way out if everything else in the stack fails. See Backups.
  <https://www.bitcoinsv.design/guide/rule/575c867a4e/>
- **DO** Show "Paid" on acceptance and stop there for everyday amounts. A spinner that waits for a block makes the user wait for nothing. See Transactions.
  <https://www.bitcoinsv.design/guide/rule/56bb292103/>

### Send fees

https://www.bitcoinsv.design/guide/daily-spending-wallet/sending/send-fees/

- **DON'T** _(Costs trust)_ Keep a fee picker because the design system already has one. It asks the user a question with no wrong answer, which teaches them that your questions are decorative.
  <https://www.bitcoinsv.design/guide/rule/5d31c5cfd7/>
- **DO** _(Costs trust)_ Leave the fee off the review screen entirely for ordinary payments, and put it in the transaction details afterwards for anyone who looks.
  <https://www.bitcoinsv.design/guide/rule/8223d8056e/>
- **DO** In the payment's details, show the fee in local currency as one small line: "Fee: less than 1p". A figure in satoshis invites arithmetic nobody wanted to do.
  <https://www.bitcoinsv.design/guide/rule/38e0a0da8b/>
- **DON'T** Explain the fee model. A user who wanted to know about satoshis per byte will find it in the transaction details.
  <https://www.bitcoinsv.design/guide/rule/022b63ad54/>
- **DO** Pay the fee on the user's behalf where the product can, and do not mention it. We suggest a shop absorb it as a cost of sale and an app fold it into its price. It is a real option because the fee is smaller than any price the user will see.
  <https://www.bitcoinsv.design/guide/rule/67836d2509/>

### Activity

https://www.bitcoinsv.design/guide/daily-spending-wallet/activity/

- **DO** Lead with the person or the app. A user scanning for "that payment to the café" is looking for the café, not for an amount.
  <https://www.bitcoinsv.design/guide/rule/4029686f48/>
- **DON'T** Show a transaction id in the list. It identifies nothing a person recognises. Keep it in the details, for support, as in the example below.
  <https://www.bitcoinsv.design/guide/rule/64290699ff/>
- **DON'T** Show change returned to the wallet as a separate entry. One payment is one row.
  <https://www.bitcoinsv.design/guide/rule/55606940cb/>
- **DO** Group by source and period: "The Satoshi Vision, 47 articles, 940 sats today" as one row that expands.
  <https://www.bitcoinsv.design/guide/rule/c0d3b2d827/>
- **DO** Make the expanded view genuinely useful: what each payment bought, not just a list of identical amounts.
  <https://www.bitcoinsv.design/guide/rule/5cd10fefb2/>
- **DON'T** Hide small payments behind a filter that is off by default. The user agreed an allowance and is entitled to see where it went without hunting. See Permissions and allowances.
  <https://www.bitcoinsv.design/guide/rule/ba8797f501/>
- **DON'T** Group payments from different apps together. The grouping is per relationship; merging them loses the only thing that made it readable.
  <https://www.bitcoinsv.design/guide/rule/2ef405333c/>
- **DO** Show them, visibly distinct from payments: an app connected, a permission granted or revoked, a Pass presented, an allowance exhausted.
  <https://www.bitcoinsv.design/guide/rule/5d246c0d1b/>
- **DO** Make a permission grant findable later. "When did I let that app spend?" is a question users ask after something goes wrong, and it needs an answer.
  <https://www.bitcoinsv.design/guide/rule/72b7049356/>
- **DO** Search across names, handles, notes and amounts. People remember the café or the word "lunch", never a date range.
  <https://www.bitcoinsv.design/guide/rule/b0f8c7f663/>
- **DO** Offer filters for direction, source and period, and show which are active. A filtered list that looks like an empty wallet is alarming.
  <https://www.bitcoinsv.design/guide/rule/50026dfdb8/>
- **DO** When a search finds nothing, name the term and offer to clear the filters.
  <https://www.bitcoinsv.design/guide/rule/6d7b53f723/>
- **DO** Provide a CSV or JSON export with the fields an accountant needs: date, counterparty, amount, local-currency value at the time, note, and the transaction id. Small payments should export individually even where they are grouped in the interface.
  <https://www.bitcoinsv.design/guide/rule/1cc5b29c77/>
- **DO** Put the technical facts one tap down: transaction id, the state, the fee, and a link to an explorer. Someone chasing a problem needs them and nobody else does.
  <https://www.bitcoinsv.design/guide/rule/ff342fc34f/>
- **DON'T** _(Costs trust)_ Make an explorer the answer to "where is my money". If a wallet cannot explain the state of its own payment, that is a gap in the wallet. See Nodes and verification.
  <https://www.bitcoinsv.design/guide/rule/250ffdfe50/>

### Contacts

https://www.bitcoinsv.design/guide/daily-spending-wallet/contacts/

- **DO** Let the user rename a contact to whatever they call that person. "Mum" beats the profile name the handle returned, and it is what they will search for.
  <https://www.bitcoinsv.design/guide/rule/b2cb3f1325/>
- **DO** Offer "save as contact" in the success state of a first payment. One tap at the moment the information is in front of the user beats a form they have to go and find.
  <https://www.bitcoinsv.design/guide/rule/ca9c316d14/>
- **DON'T** Ask for a name before resolving the handle. The resolution usually supplies one, and asking first makes the user invent a label for someone the wallet is about to identify.
  <https://www.bitcoinsv.design/guide/rule/0481aea407/>
- **DO** _(Costs money)_ Warn before any payment to a contact whose key has changed, and require acknowledgement: "Anna's wallet key has changed since you last paid her. If you weren't expecting this, check with her another way first."
  <https://www.bitcoinsv.design/guide/rule/00ea519fe6/>
- **DO** Record when the key last changed on the contact, so a user who is unsure can see whether this is the third change this month.
  <https://www.bitcoinsv.design/guide/rule/7fc52e7840/>
- **DO** Show a Pass as what it proves and who vouched for it, not as a generic tick. "Business name verified by Example Registry" is checkable; a blue badge is not.
  <https://www.bitcoinsv.design/guide/rule/0a4277400c/>
- **DON'T** Imply a Pass means the person is trustworthy. It means an issuer attested to one attribute, which is a much smaller claim.
  <https://www.bitcoinsv.design/guide/rule/8dbefecf1c/>
- **DO** Search across the name, the handle and the note. Users search for how they think of someone, which is rarely the exact stored name.
  <https://www.bitcoinsv.design/guide/rule/0859248932/>
- **DO** Order by recently paid rather than alphabetically. A wallet's contact list is short and heavily weighted to a handful of people.
  <https://www.bitcoinsv.design/guide/rule/33c5d40912/>
- **DON'T** Import the phone's address book by default. It is a large privacy ask for a feature most users do not need on day one, and it takes names out of the wallet's control.
  <https://www.bitcoinsv.design/guide/rule/de9eb761c1/>
- **DO** _(Costs trust)_ Name what is lost in the confirmation: the saved key, and therefore the warning if it changes. Payment history stays.
  <https://www.bitcoinsv.design/guide/rule/1f7685c1df/>
- **DON'T** Remove payment history when a contact is deleted. The money moved; that is a fact about the user's finances, not about the contact.
  <https://www.bitcoinsv.design/guide/rule/f9a7cab9cd/>
- **DO** Keep them in separate lists but make them feel related. What a user does with a person is pay them; what they do with an app is review and revoke what it may do. Those are different enough that one combined list serves neither. See Security.
  <https://www.bitcoinsv.design/guide/rule/88e7256ce9/>

### Security

https://www.bitcoinsv.design/guide/daily-spending-wallet/security/

- **DO** Use the platform's authentication rather than inventing a second one. It is what people already use, already trust, and already have recovery for.
  <https://www.bitcoinsv.design/guide/rule/e0bba9e06b/>
- **DO** _(Costs trust)_ Let the user set a threshold above which authentication is required per payment, and default it to something sensible rather than to every payment or to none. We suggest an amount around the price of a coffee.
  <https://www.bitcoinsv.design/guide/rule/776e679024/>
- **DON'T** Require authentication to open the app and again for every payment under a pound. People turn off what gets in their way, including the parts that were protecting them.
  <https://www.bitcoinsv.design/guide/rule/87e60befc0/>
- **DO** Show spending against the allowance as a number and a proportion, per app. "The Satoshi Vision: 1,240 of 5,000 sats this month" is what a user needs to judge whether to keep it.
  <https://www.bitcoinsv.design/guide/rule/20e72605ea/>
- **DO** _(Costs trust)_ Make revoking immediate and obvious, and say what it will break: the app stops working until it asks again.
  <https://www.bitcoinsv.design/guide/rule/52648865d0/>
- **DO** _(Costs trust)_ Expire spending and sensitive permissions by default, and tell the user when one is about to lapse rather than renewing it silently.
  <https://www.bitcoinsv.design/guide/rule/1e8193cabc/>
- **DON'T** _(Costs trust)_ Bury this in settings. It is the control panel for everything that can spend the user's money without asking each time.
  <https://www.bitcoinsv.design/guide/rule/088505e3f8/>
- **DO** _(Costs trust)_ Set allowances per app, with a per-payment cap as well as a total. A thousand payments of a satoshi and one payment of a thousand satoshis are different risks.
  <https://www.bitcoinsv.design/guide/rule/af64165675/>
- **DON'T** _(Costs money)_ Offer an unlimited allowance. There is no amount of convenience that justifies it, and a product offering it will have users who accepted it without reading.
  <https://www.bitcoinsv.design/guide/rule/7c371b8b5e/>
- **DO** _(Costs trust)_ Give it its own confirmation, outside any bundle, naming who is asking and what they will be able to see.
  <https://www.bitcoinsv.design/guide/rule/e19e79e1b4/>
- **DON'T** _(Costs trust)_ Include it in a connect-time grant. Nothing legitimate needs it at connect time.
  <https://www.bitcoinsv.design/guide/rule/369bdbaf52/>
- **DON'T** Show a modal on launch. It is the most ignored component in software, and it trains people to dismiss your warnings as a reflex.
  <https://www.bitcoinsv.design/guide/rule/bb9e1ed5ee/>

### Privacy

https://www.bitcoinsv.design/guide/daily-spending-wallet/privacy/

- **DON'T** Build an address-reuse warning or a "generate fresh address" control. Both solve a problem BSV already solved, and their presence implies the default is unsafe.
  <https://www.bitcoinsv.design/guide/rule/df76937f30/>
- **DO** Prefer selections that keep outputs from unrelated counterparties apart. The saving from combining them is a fraction of a penny; the cost is linking two relationships.
  <https://www.bitcoinsv.design/guide/rule/7af41ed2ab/>
- **DON'T** Expose coin control to ordinary users as the answer. On BSV the fee argument for it is gone, and the privacy argument is better served by selecting well than by asking somebody to.
  <https://www.bitcoinsv.design/guide/rule/339beb8c47/>
- **DO** Make hiding reachable in one gesture from the home screen, and make it stick until deliberately reversed.
  <https://www.bitcoinsv.design/guide/rule/8c1d24f223/>
- **DO** Hide amounts in activity too, not just the headline balance. A hidden total above a visible list of payments is not hiding anything.
  <https://www.bitcoinsv.design/guide/rule/9f4da51699/>
- **DO** Let users change them, or run their own. See Nodes and verification.
  <https://www.bitcoinsv.design/guide/rule/44d0d74d97/>
- **DO** Show, per app, what it has been granted. See Security.
  <https://www.bitcoinsv.design/guide/rule/e83c059a3a/>
- **DON'T** _(Costs trust)_ Reveal the user's identity key or profile to an app for a routine payment unless the user chose to. It permanently links a name to spending. See Identity.
  <https://www.bitcoinsv.design/guide/rule/938b1989c3/>
- **DON'T** Write personal data on chain in the clear. There is no delete. See Wallet privacy.
  <https://www.bitcoinsv.design/guide/rule/04fe1355c6/>
- **DO** Put that explanation where a user looking for privacy settings would find it, rather than in a help article. The honest answer is more reassuring than a toggle that does nothing.
  <https://www.bitcoinsv.design/guide/rule/dd5f4738af/>

### Settings

https://www.bitcoinsv.design/guide/daily-spending-wallet/settings/

- **DO** Put appearance and motion preferences here and nowhere else. A theme toggle in the top bar costs width on every screen for something almost nobody touches.
  <https://www.bitcoinsv.design/guide/rule/427a9fb9aa/>
- **DO** Set the BSV unit to satoshis by default. "0.00001250 BSV" is unreadable. See Amounts and units.
  <https://www.bitcoinsv.design/guide/rule/83b455e583/>
- **DO** Let the local currency be the primary display, with the satoshi amount secondary. Most people think in pounds.
  <https://www.bitcoinsv.design/guide/rule/e8cf9f77e8/>
- **DON'T** Offer a choice of satoshi symbol. None is standardised, and the words "sats" work everywhere.
  <https://www.bitcoinsv.design/guide/rule/a114516cad/>
- **DO** Put the connected apps dashboard one tap from the settings root. It governs everything that can spend without asking, and it is the most consequential screen in here. See Security.
  <https://www.bitcoinsv.design/guide/rule/3ab8476390/>
- **DO** Show both halves of the backup with their own state: when the records were last backed up, and whether the recovery words have been written down. See Backup and recovery.
  <https://www.bitcoinsv.design/guide/rule/0d10414c5f/>
- **DO** Offer the recovery check here. It is where a worried user will look.
  <https://www.bitcoinsv.design/guide/rule/f13995f734/>
- **DO** Offer an encrypted export the user keeps themselves, so recovery never depends on your company existing.
  <https://www.bitcoinsv.design/guide/rule/cb6e7f9a81/>
- **DO** _(Costs trust)_ Name what is lost and what is not. The money stays where it is; the recovery words and the wallet backup together restore it on another device. If either is missing, say that deleting may make the money unrecoverable, in those words.
  <https://www.bitcoinsv.design/guide/rule/50b37269b0/>
- **DON'T** _(Costs money)_ Accept a single tap. Require the balance to be acknowledged, and refuse outright if there is a balance and either part of the backup is missing, with a route to making it.
  <https://www.bitcoinsv.design/guide/rule/d2c2445c8a/>
- **DO** List the services the wallet uses, each with one line on what it does and what it learns, and let them be changed. See Privacy.
  <https://www.bitcoinsv.design/guide/rule/ca7ab79fe0/>
- **DO** Put the app version and a copyable diagnostic summary here. It is the first thing support will ask for.
  <https://www.bitcoinsv.design/guide/rule/c41432d37a/>
- **DON'T** Add a settings section only because wallets usually have one. Each of these asks the user a question with no useful answer.
  <https://www.bitcoinsv.design/guide/rule/422b8bc810/>

### Automatic cloud backup

https://www.bitcoinsv.design/guide/daily-spending-wallet/backup-and-recovery/cloud-backup/

- **DO** Run it continuously in the background, and show when it last succeeded somewhere the user passes regularly.
  <https://www.bitcoinsv.design/guide/rule/4aa08e24f3/>
- **DON'T** _(Costs money)_ Make it a manual export the user has to remember. They will not, and the gap will be exactly the payments they most wanted back.
  <https://www.bitcoinsv.design/guide/rule/72eb015230/>
- **DO** _(Costs trust)_ Explain it in one line that says where the backup goes and what opens it: "Back up your wallet to your cloud storage? It is encrypted on this phone, and only your recovery words can open it."
  <https://www.bitcoinsv.design/guide/rule/eaac762adf/>
- **DO** Let the user decline, and say what declining means in a sentence rather than a warning dialog.
  <https://www.bitcoinsv.design/guide/rule/7bbbb3d91f/>
- **DON'T** _(Costs trust)_ Enable remote storage without saying so. It changes who can be compelled to hand over data, and that is the user's decision.
  <https://www.bitcoinsv.design/guide/rule/6efda86df6/>
- **DO** _(Costs money)_ Encrypt the backup with a key derived from the recovery words, so the words and the backup restore everything with nothing else to remember.
  <https://www.bitcoinsv.design/guide/rule/3329c28e91/>
- **DON'T** _(Costs trust)_ Protect the backup with a separate PIN or password. A short PIN can be guessed by anyone holding the file, and a password is one more secret to forget at the worst moment.
  <https://www.bitcoinsv.design/guide/rule/010eaed1f0/>
- **DO** _(Costs money)_ Say on the setup screen that nobody else can open or reset this backup: "Only your recovery words can open this backup. Nobody can reset them, including us."
  <https://www.bitcoinsv.design/guide/rule/48e07a4783/>
- **DON'T** _(Costs money)_ Derive the encryption key from anything the provider also holds. If they can decrypt it, this is custody and the screen should not say otherwise.
  <https://www.bitcoinsv.design/guide/rule/d13e35fd6e/>
- **DO** _(Costs money)_ Test recovery by wiping a device, not by logging out.
  <https://www.bitcoinsv.design/guide/rule/b4d9b31c84/>
- **DO** Let the user choose a provider, or run their own. A backup tied to one company has that company's lifespan.
  <https://www.bitcoinsv.design/guide/rule/070ec8c365/>
- **DO** Support more than one destination at once. Two independent copies is the point of the exercise.
  <https://www.bitcoinsv.design/guide/rule/5d6888cf98/>
- **DO** Show the last successful backup as a time, not a tick. "Backed up 2 minutes ago" is information; a green check is decoration.
  <https://www.bitcoinsv.design/guide/rule/6f6ccf0656/>
- **DO** Say something when it has not run for a while, and say why where you can: no network, the service rejected it, or the user needs to sign in to the service again.
  <https://www.bitcoinsv.design/guide/rule/48beb0f300/>
- **DO** _(Costs money)_ Say on this screen that it does not back up the keys. A user who sets this up and sees a tick will reasonably conclude they are finished. "Your wallet backup restores your records. Your recovery words restore your keys, and you still need to write them down."
  <https://www.bitcoinsv.design/guide/rule/360c4bae8b/>

### Backup and recovery

https://www.bitcoinsv.design/guide/daily-spending-wallet/backup-and-recovery/landing-page/

- **DON'T** _(Costs money)_ Tell users "these words are your wallet" unless your wallet can restore everything from the words alone. A user who believes it will one day restore an empty-looking wallet and conclude the money is gone.
  <https://www.bitcoinsv.design/guide/rule/7b87f637ac/>
- **DO** Put both items on one screen, each with its own state, so the user can see at a glance that one is done and the other is not.
  <https://www.bitcoinsv.design/guide/rule/ef829f99e9/>
- **DON'T** _(Costs money)_ Call the whole thing "backup" and show one tick. That is the error this page exists to prevent.
  <https://www.bitcoinsv.design/guide/rule/969c5ee46a/>
- **DO** _(Costs money)_ Walk the recovery path assuming the device is gone, not locked, and remove anything that only exists on it.
  <https://www.bitcoinsv.design/guide/rule/b9cea7af28/>

### Manual backup

https://www.bitcoinsv.design/guide/daily-spending-wallet/backup-and-recovery/manual-backup/

- **DO** _(Costs money)_ Explain first, in two sentences: what the words do, and that a photograph of them is a copy of the money. Then show them.
  <https://www.bitcoinsv.design/guide/rule/55c4347112/>
- **DON'T** Lead with a warning screen full of prohibitions. "Never screenshot, never email, never store in the cloud" is three nos before a person knows what the thing is.
  <https://www.bitcoinsv.design/guide/rule/a332028d19/>
- **DO** Number every word and show them in a fixed grid. Order matters and a reflowing list makes it ambiguous.
  <https://www.bitcoinsv.design/guide/rule/0499178954/>
- **DO** _(Costs money)_ Disable screenshots on this screen where the platform allows it, and say why rather than failing silently.
  <https://www.bitcoinsv.design/guide/rule/5836d4dc2f/>
- **DON'T** _(Costs money)_ Offer copy to clipboard. The clipboard is readable by other apps and syncs between devices.
  <https://www.bitcoinsv.design/guide/rule/bcf92277dd/>
- **DO** _(Costs trust)_ Say on the words screen which wallets can restore them: "These words restore your wallet in apps that support BSV recovery words. Other wallets may show an empty balance."
  <https://www.bitcoinsv.design/guide/rule/68b56c1f7c/>
- **DO** Confirm a few words at positions the user must read, then follow it with the question that matters: where is this going to live?
  <https://www.bitcoinsv.design/guide/rule/67bef33541/>
- **DON'T** Require every word back. People copy and paste to get past it, usually from the clipboard you just told them not to use.
  <https://www.bitcoinsv.design/guide/rule/7cced96089/>
- **DO** Ask, concretely, and offer sensible answers to pick from: a drawer at home, a safe, with a family member, a bank box. A choice is easier to make than a blank.
  <https://www.bitcoinsv.design/guide/rule/fd0cd00eb7/>
- **DO** Suggest two locations in different buildings, in plain words: "one at home, one somewhere else you can reach".
  <https://www.bitcoinsv.design/guide/rule/02d29e29bf/>
- **DO** Record what the user chose, so the recovery screen can remind them where they said they put it. A year later that is genuinely useful. Keep it inside the encrypted wallet backup, never in plain text with a provider.
  <https://www.bitcoinsv.design/guide/rule/111cd45f3d/>
- **DO** _(Costs money)_ Offer shares as an alternative, not an addition. Words and shares are two encodings of the same secret, so holding both makes two complete copies to protect rather than a safer arrangement.
  <https://www.bitcoinsv.design/guide/rule/805502c7da/>
- **DON'T** Offer shares to someone who will keep all five in the same drawer. Ask where they would go before offering the option.
  <https://www.bitcoinsv.design/guide/rule/7daa3d56b3/>
- **DO** Offer a recovery check at any time, which asks for the words and confirms they match without moving money. Put it where a worried user would look, which is settings and the backup screen, not a help article.
  <https://www.bitcoinsv.design/guide/rule/d13aff32cc/>
- **DO** _(Costs trust)_ End the flow by saying what it did not do, and show the state of the other part: "Your recovery words restore your keys. Your wallet backup restores your records: which money is yours and how to spend it. Keep both." See Backup and recovery.
  <https://www.bitcoinsv.design/guide/rule/38ddb4b53c/>

### Recovery

https://www.bitcoinsv.design/guide/daily-spending-wallet/backup-and-recovery/recovery/

- **DO** Design for the unplanned case and let the planned one benefit. A flow that assumes the old device is available fails exactly when it is needed.
  <https://www.bitcoinsv.design/guide/rule/06c9f5ef70/>
- **DO** Restore keys first, then records. The keys prove the wallet is the user's and open the wallet backup; the records tell it where the money is. Do not ask for any other password at the records step.
  <https://www.bitcoinsv.design/guide/rule/00121f71a8/>
- **DO** Put "I already have a wallet" on the first screen of the app, as prominent as "create one". Somebody recovering should never have to go through onboarding to find it.
  <https://www.bitcoinsv.design/guide/rule/ca0bab7028/>
- **DON'T** Call it "import". The user is not importing anything, they are getting their own wallet back, and the word matters when they are panicking.
  <https://www.bitcoinsv.design/guide/rule/7de98cb120/>
- **DO** Autocomplete from the wordlist as they type, and accept a word as soon as it is unambiguous. It is the single biggest reduction in effort available here.
  <https://www.bitcoinsv.design/guide/rule/1962dd9851/>
- **DO** Validate the whole phrase and say what is wrong: a word not in the list, a word in the wrong position, or a checksum failure meaning one word is wrong somewhere.
  <https://www.bitcoinsv.design/guide/rule/37387ca5db/>
- **DO** Offer the alternative if the user has shares rather than words, on the same screen rather than behind a separate menu.
  <https://www.bitcoinsv.design/guide/rule/9d22338e94/>
- **DON'T** Clear the field on an error. Retyping twenty-four words because of one mistake is how people give up.
  <https://www.bitcoinsv.design/guide/rule/ce17d99763/>
- **DO** Find it automatically where you can, and fall back to letting the user point at a file they kept themselves.
  <https://www.bitcoinsv.design/guide/rule/95530a1dcf/>
- **DO** Say what the backup contains before restoring it: when it was made, and roughly what is in it.
  <https://www.bitcoinsv.design/guide/rule/7ffa83aea3/>
- **DO** _(Costs money)_ When the keys are restored but no wallet backup is found, say so: "Your keys are restored. We could not find your wallet backup, so some payments may be missing. Anything you receive from now on will appear normally."
  <https://www.bitcoinsv.design/guide/rule/8b17310f57/>
- **DO** _(Costs trust)_ Recover what can be recovered without records, and be explicit that it may be partial.
  <https://www.bitcoinsv.design/guide/rule/a3cc43f610/>
- **DON'T** _(Costs money)_ Report a balance of zero as though it were a fact. It is the balance of what the wallet currently knows about.
  <https://www.bitcoinsv.design/guide/rule/8d9414d260/>
- **DO** Say what is happening in words rather than a bare progress bar: restoring keys, finding your backup, checking payments.
  <https://www.bitcoinsv.design/guide/rule/976472b72d/>
- **DO** Make it interruptible and resumable. Recovery happens on unfamiliar networks and a dropped connection should not mean starting over.
  <https://www.bitcoinsv.design/guide/rule/7e5bf7da40/>
- **DO** Show what came back: the balance, recent activity, contacts, and any tokens.
  <https://www.bitcoinsv.design/guide/rule/acf945665b/>
- **DO** _(Costs trust)_ Name anything that did not, and say what it means. A token type the wallet does not support, records older than the backup, a Pass that needs reissuing.
  <https://www.bitcoinsv.design/guide/rule/4478343928/>
- **DON'T** _(Costs trust)_ Show a success screen with no numbers on it. The user's question is "is my money there", and a tick does not answer it.
  <https://www.bitcoinsv.design/guide/rule/6d3c1b95b2/>
- **DO** _(Costs money)_ Re-establish the backup on the new device, and say so. A recovered wallet with no backup is one failure away from the same situation.
  <https://www.bitcoinsv.design/guide/rule/c35ab608d2/>
- **DO** _(Costs trust)_ Prompt the user to check whether the old device should be considered compromised, if it was stolen rather than lost. Moving to fresh keys is a real option and nobody will think of it unaided.
  <https://www.bitcoinsv.design/guide/rule/7216e8df19/>
- **DO** _(Costs money)_ Run a full drill before the product holds real money: fund it, make payments across several counterparties, export, delete the installation, remove your own service from the path, and restore on a clean device with a different compatible wallet. See Backups.
  <https://www.bitcoinsv.design/guide/rule/c2ecdfda32/>
- **DON'T** _(Costs money)_ Ship a recovery flow that has only been tested with the original app still installed. That is the one situation it will not be used in.
  <https://www.bitcoinsv.design/guide/rule/8825d2c974/>

### Backups

https://www.bitcoinsv.design/guide/how-it-works/backups/

- **DON'T** _(Costs money)_ Protect a backup with a password manager or account that lived only on the lost phone. That is not a backup. See Cloud backup › The circular-dependency trap.
  <https://www.bitcoinsv.design/guide/rule/1dcc7454f0/>
- **DO** Keep wallet records on the device by default, and make remote storage a separate, explained opt-in.
  <https://www.bitcoinsv.design/guide/rule/c9bd01e85a/>
- **DO** Encrypt records on the device before they are sent anywhere.
  <https://www.bitcoinsv.design/guide/rule/2f53032efb/>
- **DO** Back up records automatically and show when the last backup ran.
  <https://www.bitcoinsv.design/guide/rule/f8a0f3fbe9/>
- **DO** _(Costs money)_ Never tell users "these words are your wallet" unless that is true for your wallet. Say plainly what the backup covers and what it doesn't.
  <https://www.bitcoinsv.design/guide/rule/79072d4e71/>

### Transactions

https://www.bitcoinsv.design/guide/how-it-works/transactions/

- **DO** Absorb the fee into your price where you can. If you show the network fee, put it in the payment's details as "less than 1p", not on the review screen.
  <https://www.bitcoinsv.design/guide/rule/c8bbcdfe72/>
- **DO** _(Costs money)_ Make the recipient and the amount unmistakable on the review screen. Once accepted, a payment cannot be cancelled.
  <https://www.bitcoinsv.design/guide/rule/d44d6f8652/>
- **DO** _(Costs money)_ Warn when a user pastes an address rather than choosing a handle or contact, and offer handles and contacts first everywhere you can. See Wrong-network payments.
  <https://www.bitcoinsv.design/guide/rule/435cfa246c/>
- **DO** _(Costs trust)_ Treat confirmation as a risk setting, not a blanket rule. For coffee, articles, tips and most in-person sales, treat a payment as complete once the recipient's wallet has accepted it. For large amounts, show the payment as Settling until it is mined, and let businesses set their own threshold.
  <https://www.bitcoinsv.design/guide/rule/338e7363b6/>

### Coin selection

https://www.bitcoinsv.design/guide/how-it-works/coin-selection/

- **DO** Select within a basket, and treat an output reserved by an app or a token as unavailable rather than as a cheap input.
  <https://www.bitcoinsv.design/guide/rule/d009fba46d/>
- **DON'T** Merge outputs from unrelated counterparties just because it makes a neater transaction. The saving is less than 1p, and the cost is linking two relationships that were separate.
  <https://www.bitcoinsv.design/guide/rule/d753615bad/>
- **DO** _(Costs trust)_ Show one spendable balance, and show separately anything that is not spendable because it is reserved, in a token, or in another basket. "2,400 sats, plus 1 token" is honest; a single number that silently excludes things is not.
  <https://www.bitcoinsv.design/guide/rule/655ff9cb9b/>
- **DON'T** Build a manual coin-choice screen into a consumer wallet. Choosing well automatically protects privacy better than asking the user to.
  <https://www.bitcoinsv.design/guide/rule/a330506cc7/>
- **DON'T** Use the words "dust", "UTXO" or "coin selection" anywhere a normal user can see them.
  <https://www.bitcoinsv.design/guide/rule/237dfd7079/>
- **DO** Never show change in activity. Paying 500 sats from a 2,000-sat output is one payment of 500 sats, not a payment of 2,000 sats and a receipt of 1,500.
  <https://www.bitcoinsv.design/guide/rule/fc599ef58d/>

### Payments

https://www.bitcoinsv.design/guide/how-it-works/payments/

- **DO** Show "Paid" or "Received" as soon as the recipient's wallet replies "accepted". Do not wait for the payment to be mined.
  <https://www.bitcoinsv.design/guide/rule/e3a51dbe82/>
- **DO** Don't show derived payment addresses in the main interface. Show the person, handle or app the payment relates to. Keep raw transaction details in an advanced view.
  <https://www.bitcoinsv.design/guide/rule/b81a18d899/>
- **DO** _(Costs trust)_ Always show the user what they're paying for, and the running total against their allowance. Small, frequent payments add up, and users should never be surprised by them.
  <https://www.bitcoinsv.design/guide/rule/2cc79b8eeb/>

### Wallet privacy

https://www.bitcoinsv.design/guide/how-it-works/wallet-privacy/

- **DO** Prefer selections that keep outputs from unrelated counterparties apart, even though combining them would be marginally cheaper.
  <https://www.bitcoinsv.design/guide/rule/8dec0ccd6a/>
- **DO** Let users choose or self-host their services, and say in one line what each one learns. See Nodes and verification.
  <https://www.bitcoinsv.design/guide/rule/87c12f47ff/>
- **DON'T** Query a service once per output or once per balance refresh in a way that maps the user's whole wallet to that provider. Batch, and prefer services that do not need to know which outputs are yours.
  <https://www.bitcoinsv.design/guide/rule/83e6f3646c/>
- **DO** Name what is being revealed, to whom, and for how long it keeps working. "This lets Example Audit see every payment between you and Example Shop, including future ones" is the honest version.
  <https://www.bitcoinsv.design/guide/rule/c9da233290/>
- **DON'T** Offer counterparty-wide revelation where a specific one would answer the question. Never bundle either into a general permission grant at connect time.
  <https://www.bitcoinsv.design/guide/rule/b68b5c94be/>
- **DON'T** Let an agent wallet reveal key linkage at all. See Wallet setups.
  <https://www.bitcoinsv.design/guide/rule/124abbc973/>
- **DON'T** _(Costs trust)_ Attach a user's identity key to routine payments because it makes your activity list prettier. It permanently links their name to their spending.
  <https://www.bitcoinsv.design/guide/rule/d919803bc1/>
- **DO** Encrypt anything personal before it is written, and say plainly that what goes on chain cannot be deleted.
  <https://www.bitcoinsv.design/guide/rule/34c45e46fd/>
- **DON'T** Write personal data on chain in the clear, even where it looks harmless. There is no delete, and context changes over decades.
  <https://www.bitcoinsv.design/guide/rule/9e7df22507/>
- **DON'T** _(Costs trust)_ Call payments "anonymous" or "private". Both are false.
  <https://www.bitcoinsv.design/guide/rule/9098861073/>

### Overview

https://www.bitcoinsv.design/guide/how-it-works/private-key-management/overview/

- **DO** Have apps sign through the Wallet Application Interface, which uses a key derived for that purpose and never hands the app a private key.
  <https://www.bitcoinsv.design/guide/rule/b10c1953ad/>
- **DON'T** _(Costs money)_ Let the master identity key sign payments or messages directly, and never expose a child private key derived against anyone.
  <https://www.bitcoinsv.design/guide/rule/bd0e68876f/>
- **DON'T** _(Costs trust)_ Describe a shared or custodial key as self-custody.
  <https://www.bitcoinsv.design/guide/rule/3154963c4f/>
- **DO** Start people on the simplest scheme that suits the amount they hold, and offer a clear upgrade when the balance grows past it. See Wallet setups.
  <https://www.bitcoinsv.design/guide/rule/d8ba56d867/>
- **DO** Name what each scheme protects against, in the user's terms: a lost phone, a stolen phone, a dishonest person, a forgotten password.
  <https://www.bitcoinsv.design/guide/rule/4268e213cf/>
- **DON'T** _(Costs trust)_ Offer a choice of key scheme during onboarding. A person setting up their first wallet has no basis to answer, and the question is a good way to lose them before they hold anything.
  <https://www.bitcoinsv.design/guide/rule/9c4d3387b5/>
- **DON'T** Describe a scheme as "secure" without saying against what. Every scheme here is secure against something and useless against something else.
  <https://www.bitcoinsv.design/guide/rule/353e154e6e/>

### Automatic cloud backup

https://www.bitcoinsv.design/guide/how-it-works/private-key-management/cloud-backup/

- **DO** _(Costs money)_ Encrypt on the device, before anything is sent. The service should only ever hold a blob it cannot read.
  <https://www.bitcoinsv.design/guide/rule/78bc2950f3/>
- **DON'T** _(Costs money)_ Store the root private key on a remote service in a form the service can decrypt. That is custody, and it should be described as custody.
  <https://www.bitcoinsv.design/guide/rule/f728c8f93c/>
- **DO** _(Costs money)_ Walk the recovery path assuming the device is gone, not locked, and remove every step that needs something only that device had.
  <https://www.bitcoinsv.design/guide/rule/c22b55aa20/>
- **DON'T** _(Costs money)_ Derive the encryption key from something the provider also holds. If the provider can decrypt it, the user is not self-custodying and the screen should not say they are.
  <https://www.bitcoinsv.design/guide/rule/fa511c9f66/>
- **DO** Let users choose their provider, or run their own. A backup tied to one company is a backup with that company's lifespan.
  <https://www.bitcoinsv.design/guide/rule/589ffaa0a0/>
- **DO** Support more than one location at once. Two independent copies is the point.
  <https://www.bitcoinsv.design/guide/rule/d9fc409813/>
- **DO** _(Costs money)_ Show when the last backup ran, on a screen the user sees often. A backup that silently stopped three months ago fails exactly when it is needed.
  <https://www.bitcoinsv.design/guide/rule/0994527ea9/>
- **DON'T** _(Costs trust)_ Turn remote storage on without saying so. It is a meaningful change in who can be compelled to hand over data, and it belongs to the user to decide.
  <https://www.bitcoinsv.design/guide/rule/b2e765791f/>

### Manual backup

https://www.bitcoinsv.design/guide/how-it-works/private-key-management/manual-backup/

- **DON'T** _(Costs money)_ Imply that recovery words move between wallet families. "Compatible with any bitcoin wallet" is false here, and a user who believes it will conclude their money is gone.
  <https://www.bitcoinsv.design/guide/rule/2377e802d8/>
- **DO** Say which kind of words these are on the screen that shows them, and again on the screen that asks for them.
  <https://www.bitcoinsv.design/guide/rule/15efe0ff89/>
- **DO** Offer one method at setup, and let the user change it later.
  <https://www.bitcoinsv.design/guide/rule/505afb0055/>
- **DO** Explain what the words are and where to keep them before showing them.
  <https://www.bitcoinsv.design/guide/rule/60535151ec/>
- **DO** Confirm a few words at a position the user must read, and follow it with a plain prompt about where the paper will live.
  <https://www.bitcoinsv.design/guide/rule/5783e7ffbd/>
- **DON'T** Block the wallet behind a full twenty-four-word re-entry. People copy and paste to get past it, usually from the clipboard, which is the least safe place for them.
  <https://www.bitcoinsv.design/guide/rule/f260f13de8/>
- **DO** Offer a recovery check the user can run at any time, which confirms the words match without moving money.
  <https://www.bitcoinsv.design/guide/rule/085357cf4e/>
- **DO** Suggest two locations in different buildings, in plain terms: "one at home, one somewhere else you can reach".
  <https://www.bitcoinsv.design/guide/rule/e418176567/>
- **DON'T** _(Costs money)_ Let the words reach a screenshot, a cloud note, a password manager on the same device, or a chat message. Disable screenshots on that screen where the platform allows it, and say why.
  <https://www.bitcoinsv.design/guide/rule/fd2bd65519/>
