bitcoin++
§ Project file

KaleidoPay

The permanent record for this hackathon project: write-up, links, team, tags, and prizes.
Submitted money in movement
One reusable Bitcoin payment QR, with receiver preferences and payer choice. Built into Rate mobile using Bark, BOLT12, Nostr Wallet Connect, LDK and Electrum submarine swaps.
The write-up

Pay with what you have. Receive what you want.

KaleidoPay is one reusable BOLT12 QR that says which layers the receiver accepts, in order: Bark, Arkade, Lightning, on-chain. The payer‘s wallet reads it and quotes every route it can pay, every fee included. It pays directly (Bark to their Bark address, the offer over Lightning, Bark’s on-chain send), or through an Electrum swap provider found on Nostr. Any other BOLT12 wallet still sees a normal offer.

  • Receiver: in Rate, connect your LDK node over Nostr Wallet Connect, choose your accounts and set their order. Your node issues the offer with an ssps_rails record (SSPS §5.3). We patched rust-lightning, ldk-node and ldk-server so the node can issue it.
  • Payer: scan, see “They accept, in order”, compare routes marked Their choice and Best price, confirm.

Beyond Bark. Any wallet that pays Lightning can use it. Nostr Lightning Swap Providers announce on Nostr which rails they deliver to and lock the receiver‘s asset for the same payment hash. Electrum’s providers (on-chain bitcoin) work today; next, a receiver who wants USDT on Liquid gets it from a provider while the payer just pays sats.

Built in Berlin: Bark in wallet-engine and Rate, the LDK forks, NWC offer methods, the rails codec, the Electrum-over-Nostr swap client, and KaleidoPay‘s receiver and payer screens in Rate. Rate, wallet-engine and the SSPS drafts existed before.

Proven: live mainnet quotes in the app; the receiver’s QR issued from the app by a real LDK node over NWC on signet, with the rails inside; Electrum swaps paid and claimed on Mutinynet.