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
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