Setup
Pay an Invoice
@arkade-os/swap/nostr subpath and requires nostr-tools. The deployed
solver serves the current wire (directed RFQ on kind 24859) — this exact flow
settled a live mainnet payment on 2026-08-12.
The call requests a quote, derives the contract locally (including the covenant
co-signer, which the SDK supplies), refuses on any address mismatch, and checks
expiry and refund headroom before returning. After funding you can go offline.
The solver fills by observing the funding on chain, pays the invoice, and
claims with the preimage.
Fund payment.fundAmount, which is the quote’s from_amount. Do not fund the
invoice amount.
Invoices outside the card’s bounds are refused rather than partially executed,
so the card’s max is the most a single swap can cost. The solver charges
fee_bps: 0.
Receive a Payment
Not available during the beta. The preview solver sets
max_base_amount: "0", which disables this direction. The code above is
the released API, ready when a solver serves lightning:BTC → arkade:BTC.Exchange BTC for an Asset
offer.offerHex and the funding txid. Those two
values are all that cancelOffer and restoreAssetSwaps require.
An unfilled offer never expires. No timeout returns it, and cancelOffer needs
no solver signature. An integration with no route to cancel leaves the deposit
stranded.
Preview Scope
A pinned solver and a ranked list of solvers differ only in where the terms
come from. Everything after that point is already final, so build that part now
and skip the solver selection UI.
Runnable versions live in arkade-os/demos,
one self-contained folder per task with a pinned SDK version.
Integrate Lightning
The full send and receive surface.
Arkade Assets
The full asset-exchange surface.
Implementation Status
What is available per route, and where.
Trust and Limitations
What each component guarantees, and what it does not.