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:
- MM1 — taker bond (daemon 0–3): policy + confirmation + invoice display + dispute slash + winner payout.
- MM2 — taker timeout (daemon 4).
- MM3 — maker bond non-range (daemon 5).
- MM4 — maker range orders (daemon 6).
- MM5 — maker timeout (daemon 7).
- 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.
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:
Each milestone ships behind a feature flag and is validated against a staging Mostro node before any production node enables the matching phase.