Skip to content

Anti-Abuse Bond Support #591

@Catrya

Description

@Catrya

Mostrod is adding an optional, node-level anti-abuse bond: a Lightning hold invoice locked by the taker and/or maker when they enter a trade. It's released on completion or cancellation, and forfeited only on lost dispute or elapsed timeout. Opt-in per node, rolled out in 8 phases — Phases 0–1 shipped (taker lock + always release, no slashing yet). See spec and MostroP2P/mostro#711.

Once any production node enables bonds, mobile clients without support can't take or create orders on that node.

Scope

• Read the node's bond policy from the Mostro info event and show it before trading.
• Confirm bond amount (sats + fiat) and slash conditions with the user before every take/create on a bonded node.
• Display the bond hold invoice (QR + copy) when Mostro sends it — the daemon generates it, the app just presents it.
• Handle new statuses (WaitingTakerBond, WaitingMakerBond) and actions (AddBondInvoice, BondLocked, BondSlashed).
• Track bond state per trade in Sembast (Requested → Locked → Released | PendingPayout → Slashed | Failed, with slash reason) and surface it in the trade detail.
• Handle outcomes: release toast, slash modal with reason, and winner-payout add-invoice in parallel to trade settlement.
• Timeout flows: countdown in waiting states, pre-timeout nudge, clear messaging that cancels before timeout always release the bond.
• Range orders: display bond against max_amount, partial-slash UI, handle maker refund add-invoice at range close.
• Non-bonded nodes: zero UI change (regression path).
• Localization (en, es, it) and tests.

Suggested mobile milestones aligned with daemon phases:

  1. MM1 — taker bond (daemon 0–3): policy + confirmation + invoice display + dispute slash + winner payout.
  2. MM2 — taker timeout (daemon 4).
  3. MM3 — maker bond non-range (daemon 5).
  4. MM4 — maker range orders (daemon 6).
  5. MM5 — maker timeout (daemon 7).
  6. MM6 — node policy UI polish (daemon 8).

Each milestone ships behind a feature flag and is validated against a staging Mostro node before any production node enables the matching phase.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions