BOLT 12 je protokol vyjednání Lightning platby přes nabídku offer, požadavek invoice_request a fakturu invoice. Nabídku lze použít opakovaně, ale každá platba má vlastní podmínky a ověřený výsledek.
Příjemce zveřejní offer; plátce odešle invoice_request a obdrží čerstvou invoice. Teprve potom může zaplatit. Nabídka tak může sloužit více lidem či opakovaným platbám. Získání faktury, například přes fetchinvoice, není její zaplacení a zveřejněný QR není trvalé oprávnění k inkasu. [BOLT 12 — Negotiation protocol] [Core Lightning — Fetching an invoice] [BOLT 12 — Project overview]
BOLT 12 ukládá pole jako TLV. Textová nabídka má prefix lno, požadavek lnr; znaková sada připomíná Bech32, ale nemá jeho koncový kontrolní součet. Samotná offer není podepsaná. Podpisy BIP340 Schnorr v požadavku a faktuře ověřují Merkle kořen příslušných polí, nikoli totožnost obchodníka. [BOLT 12 — Negotiation protocol]
Peněženka porovná převzatá pole invoice_request s invoice, částku, síť a podpis. Klíč invoice_node_id musí odpovídat offer_issuer_id, nebo příslušnému koncovému blinded_node_id. Platný cizí podpis nestačí. Merkle struktura umožňuje selektivní důkazy polí, ne libovolnou změnu podepsaných podmínek. [BOLT 12 — Negotiation protocol]
Bitcoinová invoice_amount je v msat; 1000 msat je jeden satoshi. Offer může uvádět jinou měnu přes offer_currency podle ISO 4217; například USD používá centy. Do ceny vstupuje množství a případný přepočet při vystavení faktury. Je-li určeno invreq_amount, faktura se musí shodovat; jinak se kontroluje autorizovaný rozsah. [BOLT 12 — Negotiation protocol] [Core Lightning — Fetching an invoice]
offer_paths vede zprávu s žádostí; invoice_paths vede platbu. Současná invoice musí obsahovat blinded paths a odpovídající invoice_blindedpay, i když cesta vede jen přímo k příjemci. Skrytí trasy omezuje zveřejnění topologie, ale neslibuje úplnou anonymitu, dostupnost ani likviditu. Vyžádání faktury nepotřebuje běžný HTTPS platební server. [BOLT 12 — Negotiation protocol] [BOLT 4 — Route blinding]
offer_absolute_expiry omezuje používání nabídky. invoice_created_at spolu s invoice_relative_expiry omezuje konkrétní fakturu; bez druhého pole platí 7200 sekund. Opakovaná nabídka tedy neznamená nekonečnou platnost faktury. Neznámé sudé bity povinných funkcí se odmítají, neznámé liché se ignorují. [BOLT 12 — Negotiation protocol]
U refundace může ten, kdo chce peníze poslat, zveřejnit invoice_request bez offer. Příjemce peněz odpoví vlastní invoice; plátce musí ověřit zamýšleného příjemce, případně mimo protokol. Jde o novou platbu, ne zrušení původní. Pouhé naskenování žádosti nepředstavuje důkaz nároku ani schválení platby. [BOLT 12 — Negotiation protocol]
Uchovejte invoice, stav platby a odpovídající preimage. Preimage dokládá vypořádání faktury, sám neurčuje, který člověk platil. Po ztrátě odpovědi ověřte stav před dalším placením. Podpora nabídek neznamená podporu každého rozšíření či automatických opakovaných plateb; zvlášť ověřte příjem, odesílání a oprávnění aplikace. [BOLT 12 — Negotiation protocol] [Core Lightning — Fetching an invoice]
Pro nejúplnější obraz čtěte toto heslo společně s BOLT 11, Lightning Network, Lightning Routing, Soukromí v Bitcoinu, Satoshi, LNURL. Opačným směrem na něj odkazují také BOLT 11, LNURL, Rusty Russell.