Lightning Netwerk: Splicing
Wanneer we kijken naar de werking van het Lightning Netwerk in de praktijk, komen er allerlei interessante vraagstukken naar boven. Hoe zit het bijvoorbeeld met het toevoegen van bitcoins aan een Lightning channel wanneer een channel bijna leeg is?
Even opfrissen
We hebben in het verleden in een serie artikelen de basisprincipes van het Lightning Netwerk doorgenomen. Deze kun je hier lezen: deel 1 en deel 2. Het is verstandig in ieder geval even het eerste artikel te lezen, voordat je verder gaat met dit artikel.
Herinner je uit het artikel over de basisprincipes van payment channels dat het opzetten van een payment channel op het Lightning Netwerk gebeurt door het uitvoeren van een aantal speciale transacties. Deze transacties zorgen ervoor dat Alice en Bob elkaar kunnen gaan betalen, zonder transacties via de blockchain te laten gaan één zonder het risico op verlies van bitcoins door een kwaadwillende tegenpartij.
Via deze constructie kunnen Alice en Bob elkaar over en weer betalen, maar niet voor meer dan het initieel ingezette bedrag (in dit voorbeeld 1 BTC) en in eerste instantie alleen van Alice naar Bob. Alle transacties die vanuit het multi-signature adres tussen Alice en Bob gedaan worden zijn off-chain en worden dus pas definitief na het sluiten van het payment channel.
Herinner je ook dat het payment channel tussen Alice en Bob slechts een onderdeel is van het gehele Lightning Netwerk: dit bestaat uit een netwerk van payment channels. Alice kan dus gebruik maken van haar channel met Bob om betalingen naar Carol of Dave uit te voeren.
Het kan voorkomen dat Alice onvoldoende bitcoins in haar payment channel met Bob heeft om succesvol betalingen naar andere partijen uit te voeren via hetzelfde channel. Dit kan gebeuren doordat Alice haar volledige 1 BTC heeft verstuurd naar andere partijen.
Beeld je een rekenrek in; alle bitcoins in het channel zitten dan aan de "rechter"-kant. Alice zou dus een nieuw payment channel op moeten zetten (direct naar Carol of Dave) of eerst betalingen moeten ontvangen om verdere betalingen uit te kunnen voeren. Het opzetten van een nieuw payment channel doen we echter liever niet, want hiervoor zijn dure transacties en kostbare blockchain-ruimte nodig. Het liefst "laden" we het payment channel tussen Alice en Bob met nieuwe bitcoins zonder het channel te sluiten of een nieuw channel te openen.
Splice in, splice out
Door slim gebruik te maken van de mogelijkheden die de scripting functionaliteit van bitcoin ons biedt is gelukkig ook hier een oplossing voor: splicing. Bij splicing wordt gebruik gemaakt van het reeds bestaande multi-signature adres tussen Alice en Bob. Met het "splicen" van deze transactie worden er van buiten het payment channel nieuwe bitcoins toegevoegd aan het payment channel, zonder dat het payment channel gesloten wordt en er dus onnodig veel on-chain transacties gedaan worden.
De nieuwe bitcoins worden in dit voorbeeld alleen toegevoegd door Alice, maar dit kan ook door Bob of door beide partijen gedaan worden. Dit doet Alice door een transactie aan te maken vanuit het oude multi-signature adres voor het volledige aantal bitcoins, waaraan zij een nieuwe input toevoegt vanuit haar eigen bitcoin-voorraad, naar een nieuw multi-signature adres.
Dit nieuwe multi-signature adres dient vervolgens als de nieuwe basis van het payment channel; Alice en Bob sturen vanaf nu vanuit dit nieuwe multi-signature adres transacties naar elkaar. Alice tekent haar deel van de transactie: haar nieuwe input en haar deel van de multi-signature output, en laat de transactie vervolgens ondertekenen door Bob. Deze transactie wordt vervolgens wél gepubliceerd en bevestigd op de blockchain, maar door deze constructie is het aanvullen van een payment channel mogelijk met één enkele on-chain transactie in plaats van meerdere.
Tijdens het wachten op een bevestiging van de transactie naar het nieuwe multi-signature adres kan de oude versie van het payment channel gewoon bijgehouden worden. Op het moment dat de nieuwe transactie bevestigd is kan overgeschakeld worden naar het nieuwe multi-signature adres met een hoger saldo.
Het is op deze manier ook mogelijk om bitcoins uit het payment channel te versturen naar een regulier Bitcoinadres, zoals te zien in de afbeelding hierboven. In plaats van het toevoegen van een input met nieuwe bitcoins voegt Alice een output naar een adres van zichzelf toe aan de splicing-transactie. Op deze manier kan een deel van de bitcoins opgenomen worden uit het payment channel door Alice of Bob, of naar een derde partij verstuurd worden.
Zo wordt het mogelijk om willekeurig transacties van 'gewone' Bitcoinadressen naar Lightning channels te versturen, en andersom. Dit zorgt ervoor dat er naadloos overgeschakeld kan worden tussen het doen van een snelle Lightningtransactie vanuit een Lightningwallet voor dagelijks gebruik en het 'opnemen' van bitcoins vanuit een normale Bitcoinwallet die dient als spaarrekening. Zie het als het heen en weer schuiven van geld tussen je bankrekening voor alledaagse zaken en je spaarrekening.
Dit artikel verscheen op 10 juli 2018 eerder op bitcoin.nl