Lightning

Uit BTCWiki.nl

Met Lightning kan je razendsnel goedkope microbetalingen in bitcoin doen. Aflevering 14-18 van de Beginnen met Bitcoin-podcast leggen de basis uit.

Zie #Lightning gebruiken als je meteen wilt beginnen.

Bitcoin transacties zijn relatief kostbaar. Dat komt omdat er maar een beperkte ruimte is op de blockchain: zo'n 1500 transacties per blok (per 10 minuten). Oftewel zo'n 9000 transacties per uur. (Credit card firmart Visa kan 10-duizenden transacties per seconde aan.) Kortom, Bitcoin is geen snelheidsmonster. Alle mensen die een Bitcoin-transactie aanbieden, concurreren om een plaatsje in een blok op de blockchain. Dit drijft de prijs voor een 'toegangskaartje' ('fee') naar de blockchain op. (Tot wel enige tientallen euro's per transactie in hectische perioden). Om toch meer transacties mogelijk te maken, is een systeem ontwikkeld dat de transacties (tijdelijk) niet via Bitcoin's blockchain laat lopen. Een analogie ter verduidelijking:

Iemand zit aan de bar en bestelt een biertje. De barman (m/v) turft dit af op een kaart. De avond verstrijkt, en er worden nog wat drankjes verorbert. Halverwege de avond blijkt 1 biertje bedorven: de barman streept de bijbehorende 'turf' door op de kaart. Als de klant naar huis gaat, vraagt de barman de klant de rekening te betalen. Er zijn misschien wel 10 drankjes besteld, en er was 1 restitutie, maar er vindt maar 1 geld-transactie plaats. We kunnen de kaart van de barman met een Lightning 'kanaal' vergelijken en de bank-transactie met een on-chain Bitcoin transactie. Ziehier een analogie ter verduidelijking van het Lightning Netwerk.

Wat als onze bierdrinkende klant weggaat zonder te betalen? Een remedie zou kunnen zijn dat klanten die op de pof bestellen eerst een borg betalen, bijv 50 euro op de bar leggen. Maar wat als de barman zich niet netjes gedraagt en de 50 euro pakt en de zaak sluit voordat ie ook maar één biertje heeft geschonken? Met al dat soort grens-gevallen moet het Lightning Protocol rekening houden en oplossen, wil het een serieus betalingsnetwerk worden.

Er is een grote community van Nederlanders met een Lightning node. Je vindt de groep op Telegram.

Concepten

Aflevering 14-18 van de Beginnen met Bitcoin-podcast leggen de basis uit.

Peers (nodes)
De deelnemers aan het Lightning-netwerk. Als je zelf een node hebt dan ben je ook een peer. Als je verbindt met een andere node, dan heb je een peer-to-peer-connectie gemaakt. Als je enkel een wallet hebt dan wordt dat meestal niet als peer/node gezien; jouw telefoon is niet 24x7 online en helpt niet met het routeren van betalingen.
Kanalen
De basis van Lightning zijn kanalen. Simpel gezegd zijn dit afspraken tussen twee peers, bijvoorbeeld Alies en Bob. Alies heeft 0.1 bitcoin (10 miljoen sats) op haar node gezet, en gaat een kanaal openen van deze 10 miljoen sat. Ze geeft aan een kanaal met Bob te willen openen, en de nodes maken een on-chain Opentransactie transactie met een capaciteit van 10 miljoen sat. Hiermee zetten ze 10 miljoen "vast".
Balans
De capaciteit van het kanaal is altijd verdeeld tussen de peers. In het voorbeeld staat na openen 10 miljoen sats aan de kant van Alies, en 0 sats aan de kant van Bob. Dit kanaal is overigens "uit balans", en door transacties te doen van Alies naar Bob, zullen de balansen veranderen.
Capaciteit
Het aantal satoshi dat wordt vastgezet voor een kanaal is de capaciteit. De capaciteit kan niet veranderen. In het begin staat de capaciteit in principe aan de "kant" van de opener: als het kanaal gesloten wordt dan komen die sats terug naar de opener.
Commit Fee
Bij het openen van een kanaal zal niet de volledige capaciteit te gebruiken zijn voor transacties. Een deel van de satoshi is gereserveerd voor wanneer er een éénzijdige sluittransactie (force close) voordoet. De hoogte van de reservering is dynamisch en afhankelijk van de actuele hoogte van de kosten om de sluittransactie te publiceren.
Force close
Als het niet lukt om gezamelijk tot een sluitingstransactie te komen, dan is een force close nodig. Dat kan bijvoorbeeld zijn als een node fraudeert, of als één van de nodes offline is. Bij een force close worden de belansen verdeeld volgens de laatste staat van het kanaal. Als Alies dus 100k sat had, en Bob 200k sat, toen ze de laatste transactie deden, dan zal de force close 100k sat aan Alies, en 200k sat aan Bob terugbetalen. Na de force close heeft de tegenpartij even de tijd om te "protesteren" tegen de force close. Als hij een verkeerde force close ziet (valsspeler met een oude state), dan mag hij een binnen een bepaalde tijd een overschijf-transactie publiceren en alle sats claimen.
Inkomende liquiditeit
Toen Alies haar kanaal van 10 miljoen sats opende, stonden al die sats "aan haar kant" (zie Balans). Ze kon 10 miljoen sats overmaken. Ze had hier uitgaande liquiditeit. Het voorbeeldkanaal gaf haar echter geen inkomende liquiditeit. Er stonden geen sats aan de andere kant van dit kanaal, om te kunnen ontvangen. Dat is de basis van inkomende liquiditeit: dat je (als node) kanalen hebt met sats aan de andere kant van het kanaal. Als mensen kanalen naar jou openen krijg je inkomende liquiditeit. En als je betalingen doet, verschuiven sats naar de andere kant van het kanaal, en dat wordt dan ook inkomende liquiditeit.
Invoice
Een betaalverzoek. Zowel nodes als wallets kunnen deze betaalverzoeken maken. Het is een lang stuk tekst dat begint met lnbc1, en meestal wordt het ook een QR-code. De betaler scant de invoice, zijn wallet of node berekent een route en betaalt.
Lightningtransacties
Zodra het kanaal open is (3 bevestigingen van de Opentransactie), kunnen er betalingen worden gedaan. Alies kan met dit open kanaal een betaling doen naar Bob, omdat zij sats aan haar kant van het kanaal heeft staan. Bob kan (in dit kanaal) geen betalingen doen naar Alies, er staan namelijk geen sats aan zijn kant om naar Alies te verschuiven. Als Alies een betaling doet, van bijvoorbeeld 100 000 sat, dan zullen de balansen verschuiven. Waar Alies eerst 10 miljoen, en Bob 0 sats had, zijn de balansen na de betaling van 100 000 sat anders: Alies heeft nu nog 9 900 000 sat en Bob heeft nu 100 000 sat. Deze nieuwe kanaalstatus wordt tussen de peers afgesproken. Ook maken Alies en Bob een sluit-transactie. De sluittransactie zegt: "Van de vastgezette 10 miljoen sats uit de Openingstransactie, krijgt Alies 9 900 000 sats en Bob 100 000 sats". De sluit-transactie wordt door beiden getekend. Deze sluit-transactie publiceren ze NIET op de blockchain. Ze bewaren hem voor als er wat misgaat.
Netwerk
Alle nodes samen maken het netwerk. Het mooie van Lightning is dat Alies in bovenstaand scenario ook naar Charles kan sturen, als Bob een kanaal met Charles heeft. De betaling neemt dan de route Alies -> Bob -> Charles.
Opentransactie
Bij het openen van een kanaal spreken de twee nodes een transactie af. In de basis staat in deze transactie: "Alies krijgt 10 miljoen sats terug bij het sluiten van dit kanaal, Bob krijgt niks". Alies heeft namelijk recht op haar 10 miljoen sats, het waren per slot van rekening haar sats (bitcoin) die ze gebruikte voor het openen. We noemen dit de kanaalstatus.
Roddelen
Nodes geven elkaar continu kanaalinformatie door met een proces dat Gossipping (roddelen) heet. Elke node moet alle kanalen (gaan) kennen. Zeker als je net een node bent begonnen, zal je merken dat het 1 of 2 dagen kan duren na het openen van je kanaal, voordat jouw node hoogte krijgt van het hele netwerk. Hoe meer kanalen (peers) je hebt, hoe meer/sneller je kan roddelen, en hoe sneller je kanaalinfo doorkrijgt.
Routes
Betalingen over het Lightningnetwerk nemen routes. In het voorbeeld hierboven hebben Alies en Bob een kanaal, net als Bob en Charles. Alies kan Charles betalen met de route Alies -> Bob -> Charles. Het is hierbij nodig dat: (1) Alle kanalen voldoende capaciteit hebben, (2) De routes niet te duur zijn, en (3) Alle kanalen actief zijn (geen offline peers).
Als aan deze voorwaarden is voldaan, kan de betaling gebeuren. Als één van deze dingen mist, of Alies weet bijvoorbeeld niet van het kanaal van Bob naar Charles (zie roddelen), dan zal ze een NO ROUTE-fout krijgen: er is geen route waar de betaling overheen kan.
Routing Fee en Hops
Wanneer Alies Charles betaalt via Bob, zoals in het voorbeeld hierboven (Alies -> Bob -> Charles), is er sprake van een Hop (sprongetje) via Bob. Bob kan voor deze Hop een provisie rekenen, de Routing Fee. Door zijn node beschikbaar te stellen als tussenstap en daar een vergoeding tegenover te zetten, kan hij verdienen aan het routeren van transacties. Deze fees kunnen algemeen ingesteld worden voor de gehele node of per kanaal verschillen. Zo kan er aangemoedigd dan wel ontmoedigd worden om een specifiek kanaal te gebruiken, bijvoorbeeld op basis van de balans van het kanaal.
Sluittransactie
Als de peers klaar zijn met het kanaal, kunnen ze de sluittransactie publiceren en zo onchain hun "echte bitcoin" terugkrijgen. Ze krijgen de bitcoin terug volgens de laatste status. Als de twee nodes het eens zijn over de status (en (dus) allebei online zijn), dan zal dit een cooperatieve close zijn. Als er één van de twee offline is, zal het een force close zijn, waar de meest recente status wordt gepubliceerd. Deze force closes zijn duurder dan cooperative closes.
Valsspelen
Peers kunnen proberen vals te spelen. Alies zou bijvoorbeeld kunnen proberen 10 miljoen sats (in plaats van haar werkelijke 9 900 000 sats) te claimen door de oude kanaalstatus te publiceren (de transactie van haar schijf op de blockchain publiceren). Gelukkig houdt de node van Bob houdt continu de transacties bij. Als hij ziet dat Alies een oneerlijke claim doet, kan hij dit bewijzen aan het netwerk door de nieuwere status te laten zien, Bob heeft namelijk een sluittransactie met nieuwere status, en die transactie is zelfs getekend door Alies (toen ze de vorige Lightningtransactie deden)! Bob mag nu de gehele capaciteit claimen. Zo blijft Lightning eerlijk.
Echter, wanneer de node van Bob offline is kan deze niet de laatste, meest actuele status verzenden. Dit is een risico waardoor Alies alsnog de oneerlijke claim kan doen. Eén van de oplossingen voor dit probleem zijn Watchtowers (uitkijktorens). Dit zijn nodes beheerd door een derde partij die voor jou de laatste status van de kanalen bijhoudt en een bericht stuurt wanneer er een 'breach'/ongeldige publicatie wordt gedaan.

Lightning gebruiken

Er zijn grofweg twee manieren om Lightning te gebruiken.

  • Een wallet is het makkelijkst. Je zet er bitcoin op, zet die bitcoin om naar Lightning-bitcoin en kan Lightning gebruiken. Zie BlueWallet voor een simpel beginnetje.
  • Geavanceerde gebruikers kunnen zelf een node opzetten. Een node is altijd online, routeert betalingen en heeft wat werk nodig om op te zetten. Umbrel is een makkelijker manier om een node op te zetten.

Wallet

Het makkelijkst is om BlueWallet op je telefoon te installeren, als je Lightning wil gebruiken. Er zijn ook wallets met extra functies als chat en podcast-speler en er zijn games. Zie voor een overzicht > Lighting Apps.

Node

Nodes in Nederland (archiefplaatje)

Zelf een node draaien is leuk om te doen en je draagt bij aan het Bitcoinnetwerk. Met een Raspberry Pi computer, opslag voor de Blockchain en Node-software (zoals Umbrel lightning node, MyNode, RaspiBlitz) kan je zelf een node draaien. Er is ook een Nederlandstalige instructie op theroadtonode.com, voor zelfbouwers.

Vrij veel Nederlanders draaien zelf een node, zie deze graaf. Als je in het Telegramkanaal LightningNL komt kijken kan je jouw node toevoegen.

Vrijwel alle node-pakketten gebruiken Tor voor anonieme verbindingen.

Hardware

Langzaam

(~€150)

Snel

(~€250)

Snel en betrouwbaar

(~€330) ****

Computer Raspberry Pi 4B (4GB) (€60) Raspberry Pi 4B (8GB) (€90) Intel NUC NUC7CJYH (€150)
SD-kaart 64GB SD-kaart (€12) -
Voeding 15W USB-C voeding (€10) * -
Memory - 4GB DDR3 1333MHz SO-DIMM (€44)
Blockchain opslag Harde Schijf (€50) ** SSD (€110) *** SSD (€110) ***
Heatsink Alu heatsink of deze (€15) -
Netwerk (Optioneel) 1.5m UTP cable (€1)
HDMI (Optioneel) HDMI cable (€5)
(Kanalen) Reserveer ook wat geld voor lightning kanalen, dat raak je niet kwijt, maar is nodig om betalingen mee te doen. Bijvoorbeeld 100 euro.

* Koop specifiek deze voeding, andere geven vaak problemen. Mocht je toch een andere willen gebruiken, zorg dat hij in ieder geval 3 ampère kan leveren op 5 volt.

** Initiële synchronisatie van de blockchain duurt zo'n 3 tot 4 weken

*** Initiële synchronisatie van de blockchain duurt zo'n 2 dagen

**** Voor sommigen werkt een RPi betrouwbaar, maar er zijn een significant aantal gebruikers met stabiliteitsproblemen.

Node-software

Umbrel

Umbrel is één van de gemakkelijkste en gebruiksvriendelijkste manieren om een node te draaien op een Raspberry Pi. Hiermee kan je binnen een aantal stappen zowel een bitcoin node als een lightning network node opzetten.

Alternatieven

Momenteel is Umbrel één van de meest gebruikte node softwares in Nederland. Er zijn echter meer aanbieders van dit soort installatiepakketten, bijvoorbeeld: MyNode en RaspiBlitz. Wil jij jouw node geheel zelfstandig installeren, dan zou je kunnen kijken naar de gebruikshandleiding van The Road to Node.

Applicaties/Interfaces

Middels CLI kan je commando's geven om kanalen te openen, fees aan te passen of betalingen te doen. Voor iemand die niet thuis is in de command line zijn er alternatieven die het makkelijker maken om eerdergenoemde acties uit te voeren. Ride The Lightning (RTL) en ThunderHub (TH) zijn interfaces die eenvoudig te installeren zijn in bijvoorbeeld Umbrel of MyNode. Elke interface heeft zijn eigen voordelen maar de meeste, en sowieso de belangrijkste, functionaliteiten kunnen uitgevoerd worden.

Lightning gebruiken

Je node is geïnstalleerd, de Initial Block Download is afgerond en je hebt de seed van de wallet van je Lightning Node veilig opgeslagen. Wat nu? Een logische vervolgstap zou zijn om een kanaal te openen naar een goed verbonden node/peer. Hiermee wordt jouw node ook onderdeel van het netwerk en kan je routeren of betalingen uitvoeren.

Peer uitzoeken

Het is aan te raden om een kanaal te maken met een goed verbonden peer. In de Nederlandstalige community is er de SuperHub, dit zijn een aantal grote nodes die onderling hebben afgesproken om de routing fees onderling laag te houden. Door met één of meer van deze nodes te verbinden ben je direct al goed verbonden met de rest van de wereld. Methoden om een geschikte peer uit te zoeken zijn:

  • Een node uit de SuperHub kiezen of vragen in de Telegram groep @LightningNL.
  • Een hoog gekwalificeerde node uitzoeken op 1ML.
  • Een node uit de BOS-lijst kiezen. Deze lijst staat in ThunderHub maar is ook hier te vinden.
  • De tool van Moneni te gebruiken. (Hier heb je al wel een bestaand kanaal voor nodig.)

Foutmeldingen

No Route-probleem

Er zit een aantal voorwaarden voor betalingen:

  1. Kent je node alle routes van het netwerk? Je node krijgt via gossip (roddelen) binnen een paar uur/dagen na het openen van je eerste kanaal de netwerkinformatie door. Als je node de netwerkinformatie nog niet heeft, kan hij nog geen route berekenen. Op Umbrel kan je op deze manier controleren hoeveel kanalen je node kent.
  2. Heb je uitgaande liquiditeit?
    • Je hebt kanalen nodig met lokale balans. Als jij een kanaal hebt geopend staat het balans aan jouw kant (goed).
    • Kanaalreserve: Er moet altijd ongeveer 1% van de balans aan iedere kant van het kanaal blijven. Ook wordt er een reservering gemaakt voor het geval het kanaal gesloten wordt. Dit betekent dat er altijd een percentage <5% niet-verzendbaar is. Het zorgt dat mensen beide partijen "iets te verliezen" hebben als ze valsspelen. Behalve on-chain fees ben je nog WEL eigenaar van deze sats en krijg je ze gewoon terug bij sluiten.
    • De uitgaande route is mogelijk te duur. Als degenen met wie je kanalen hebt te hoge uitgaande fees hebben, zal jouw wallet niet willen betalen.
    • Zijn je peers online?

Als/zodra je 2 dagen een publiek kanaal hebt, dan moeten de meeste problemen verdwijnen. Als je meerdere kanalen hebt krijg je sneller netwerkingormatie door en gaat dat sneller.



Reageren
BTCWiki.nl verwelkomt alle reacties. Als je niet anoniem wilt zijn, Registreer je dan of meld je aan.