Skip to content

Dust Attack Protection: Spend Restrictions & UTXO Management UI #6972

Description

@Parsh

Context

Part of #6965 — Dust Attack Protection and Donate Dust.

This issue covers excluding Do Not Spend UTXOs from coin selection, enforcing balance restrictions in the send flow, displaying Do Not Spend state in UTXO management screens, and the manual coin selection warning. See also:


Goal

Ensure Do Not Spend UTXOs are never used automatically during normal sends, the available balance shown to users reflects only spendable coins, and users get an explicit warning before manually selecting a Do Not Spend coin.


Send Flow

Automatic coin selection

  • Normal send excludes all Do Not Spend UTXOs from coin selection
  • Available / spendable balance shown to the user excludes Do Not Spend UTXOs
  • Total wallet balance may include all wallet-owned UTXOs

Insufficient spendable balance

If total wallet balance is enough to cover the send amount but spendable balance is not enough:

  • Show helper copy: Some coins are marked Do Not Spend and are not available for this payment.
  • Show button: View Coins → opens Manage Coins
  • Use existing insufficient balance error alongside this helper copy

Manual UTXO selection — Do Not Spend coin warning

When the user manually selects a Do Not Spend coin in the manual coin selection flow, show a warning modal/bottom sheet:

Title: Use Do Not Spend Coin?

Body: This coin was marked Do Not Spend to help protect wallet privacy. Spending it with other coins may reduce privacy.

Buttons:

  • Use Coin — include the selected coin in manual selection
  • Cancel — return to manual coin selection

Do not show this warning during automatic coin selection (Do Not Spend coins are excluded automatically).


Manage Coins Screen

  • All wallet-owned UTXOs remain visible, including Do Not Spend coins
  • Show Do Not Spend label clearly on affected coins using warning-style label treatment
  • Existing labels (Change, Self) continue to work alongside Do Not Spend
  • Do Not Spend coins are excluded from normal send selection
  • User can tap a coin to open UTXO Details
  • Select to Send existing manual flow continues to work
  • If eligible Do Not Spend coins exist, show Donate Dust CTA (see Dust Donation issue)

UTXO Details (spend restriction aspect)

  • System-marked Do Not Spend cannot be overridden by tapping a label like a normal tag
  • User must explicitly press Mark Spendable to override

Acceptance Criteria

  • Normal send excludes Do Not Spend UTXOs from automatic coin selection
  • Available balance in send flow excludes Do Not Spend UTXOs
  • If total balance is enough but spendable balance is not enough, helper copy is shown
  • Helper copy reads: Some coins are marked Do Not Spend and are not available for this payment.
  • View Coins button opens Manage Coins from the send flow
  • Manual selection of a Do Not Spend coin triggers warning modal
  • Warning modal title: Use Do Not Spend Coin?
  • Warning modal body: This coin was marked Do Not Spend to help protect wallet privacy. Spending it with other coins may reduce privacy.
  • Use Coin includes the coin in the manual selection
  • Cancel returns to manual coin selection without including the coin
  • Do Not Spend coins remain visible in Manage Coins
  • Do Not Spend label shown with warning-style treatment in Manage Coins
  • Existing Change and Self labels continue to work alongside Do Not Spend label

Copy Requirements

Use these exact labels:

  • Do Not Spend
  • Some coins are marked Do Not Spend and are not available for this payment.
  • View Coins
  • Use Do Not Spend Coin?
  • This coin was marked Do Not Spend to help protect wallet privacy. Spending it with other coins may reduce privacy.
  • Use Coin

Design Requirements

  • Reuse existing send flow screens
  • Reuse existing manual coin selection flow
  • Reuse existing confirmation modal / bottom sheet component
  • Reuse existing UTXO label/chip component
  • Use warning-style treatment for Do Not Spend label
  • Do not create new standalone screens

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions