How Nostr events become actions and side effects.
- Source:
src/app.rs:run - Steps: POW check → signature verify → recency guard → NIP-59 unwrap → parse
mostro_core::Message→ inner verify →check_trade_index→ dispatch.
- Router:
src/app.rs:handle_message_action - Maps
Action→ module function undersrc/app/*. - On
MostroError,manage_errorspushes user-facing “can’t do” messages or logs warnings.
- Function:
src/app.rs:check_trade_index - Ensures monotonic
trade_indexfor trading actions; verifies signature binding; auto-creates user on first valid trade.
- Take Buy:
src/app/take_buy.rs - Add Invoice:
src/app/add_invoice.rs - Release:
src/app/release.rs - Cancel:
src/app/cancel.rs - Dispute:
src/app/dispute.rs
sequenceDiagram
participant Relay as Nostr Relay
participant Loop as app.rs (run)
participant Router as handle_message_action
participant Mod as app/*
participant DB as DB
participant LND as LND
Relay-->>Loop: GiftWrap Event
Loop->>Loop: POW + verify + freshness
Loop->>Loop: unwrap + parse Message
Loop->>DB: check_trade_index
Loop->>Router: dispatch(Action)
Router->>Mod: handler(...)
par side-effects
Mod->>DB: read/write
Mod->>LND: hold/settle/cancel/pay
end