Segregated Witness

Wanneer een blockchain en cryptomunt groeit, wordt het na verloop van tijd ook duidelijk dat er gebreken zijn. Dat is bijvoorbeeld bij Bitcoin het geval, omdat we er op dit moment achter komen dat het eigenlijk helemaal niet zo schaalbaar is. Maar ook in het verleden liep men tegen problemen aan, die ondertussen al zijn opgelost. Zo’n oplossing kan worden toegepast door middel van een soft fork. Dat is ook bij Bitcoin gebeurd, toen de upgrade genaamd SegWit (Segregated Witness) werd uitgevoerd op de blockchain. In dit artikel leggen we je alles uit over Segregated Witness.

Wat is SegWit?

Segregated Witness (ook wel bekend als SegWit) is een upgrade van het Bitcoin-protocol (een soft fork) die de structuur van transacties wijzigt door de handtekeninggegevens (zoals de private key) naar een aparte database te verplaatsen. Het belangrijkste doel is om hiermee de transactiecapaciteit van Bitcoin te vergroten. Daarbij zorgt het er ook voor dat de transacties minder makkelijk te manipuleren zijn.

Qua leeftijd is SegWit geen nieuw idee meer: de update werd voor het eerst voorgesteld in 2015, voordat het in december 2015 officieel door Pieter Wuille en andere Bitcoin Core-ontwikkelaars naar buiten werd gebracht. Het werd echter pas veel later ingevoerd vanwege het controversiële karakter en de afwijzing door de miners. Pas in 2017, als onderdeel van het SegWit2X compromis, werd het voorstel dat SegWit toestond (BIP-91) goedgekeurd. De activering van SegWit op het Bitcoin-netwerk vond uiteindelijk plaats op 24 augustus 2017 bij blok 481.824.

De belangrijkste verbetering die SegWit brengt is het feit dat transacties niet meer gemanipuleerd kunnen worden. Het zorgt er dus ook voor dat transacties ineens minder groot zijn, waardoor er veel meer transacties in een blok passen.

Hoe werkt een SegWit?

Zoals je waarschijnlijk al weet, heeft elke transactie in Bitcoin een identificatiecode (txid) die wordt weergegeven als een reeks tekens. Bijvoorbeeld, de identificatiecode van de eerste transactie tussen Satoshi Nakamoto en Hal Finney is:

f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

Deze identificatiecode is een vingerafdruk van de transactie, wat je ook wel het resultaat van de toepassing van een hashfunctie op deze transactie kunt noemen. Het hangt af van de in de transactie aanwezige elementen: als een van deze elementen wordt gewijzigd, wordt de identificatiecode volledig gewijzigd.

In Bitcoin zijn klassieke transacties ‘kneedbaar’. Dat betekent dat het mogelijk is om hun identificatiecode te veranderen zonder ze ongeldig te maken. Hoe is dit dan mogelijk? Dit is mogelijk omdat de handtekeningen die de transactie geldig maken, niet alle gegevens dekken. De transactie wordt immers eerst opgebouwd zonder handtekeningen, vervolgens wordt het ondertekend en ten slotte worden de handtekeningen eraan toegevoegd.

Transactiecapaciteit verhogen door SegWit

Naast het corrigeren van de manipuleerbaarheid van transacties, heeft de SegWit update nog een ander belangrijk effect: het verhoogt de transactiecapaciteit van het netwerk terwijl een hard fork wordt vermeden. Deze toename wordt mogelijk gemaakt door de handtekeningscripts buiten de traditionele blokken te plaatsen.

Bij SegWit wordt een nieuwe techniek gebruikt om de impact van transacties en blokken op het netwerk te meten: het gewicht. In plaats van te vertrouwen op de grootte van een transactie, die wordt uitgedrukt in bytes welke de hoeveelheid gegevens weergeeft die op de blockchain zijn opgeslagen, gebruikt SegWit een virtueel attribuut dat het ‘gewicht’ wordt genoemd. Dit wordt uitgedrukt in gewichtseenheid (WU) en gedefinieerd als:

Gewicht = 4 × basisgrootte + grootte van getuige

Deze update verandert de limiet van 1 MB op de blokgrootte naar een limiet van 4 MWU. Dit is geen verviervoudiging van de netwerkcapaciteit, al staat het blok wel toe dat er tot maximaal 4 MB aan blokgrootte wordt toegestaan. Dit is dus een trucje dat wordt uitgevoerd door SegWit.

Uitgaande van een volledige invoering van SegWit, zou men een toename van de transactiecapaciteit van het netwerk verwachten met 70-100%. Dat wil zeggen dat dit SegWit-blokken zijn met een totale grootte van 1,7-2 MB, die in het beste geval 5-15 transacties per seconde mogelijk zouden maken.

Andere voordelen van SegWit

In overeenstemming met BIP-143 is het handtekeningalgoritme verbeterd voor SegWit-transacties. Enerzijds vermijdt het overbodige hashes bij het verifiëren van een handtekening. Anderzijds biedt het algoritme, door rekening te houden met de invoerbedragen van de transactie, een betere beveiliging dan de offline handtekening die wordt gebruikt door hardware wallets zoals de Ledger Nano S.

SegWit zorgt ook voor versiebeheer van de scripts, waardoor deze update een hulpmiddel wordt om het protocol te verbeteren.

Doordat er meer transacties verwerkt kunnen worden, zijn de transactiekosten ook een stuk lager. En dat is natuurlijk een groot voordeel voor bijvoorbeeld de gebruikers van Bitcoin. Zij kunnen door SegWit meer transacties uitvoeren, voor een lagere prijs.

Nadelen

In tegenstelling tot wat je misschien zou denken, is SegWit helemaal geen kleine verandering voor Bitcoin gewest: het was een ingrijpende herstructurering van transacties die zo weer zijn eigen reeks complicaties met zich meebrengt. Ook al werd de upgrade uitgevoerd via een soft fork, betekent dat niet dat het een vlot proces was. Zodra SegWit werd geactiveerd, werden de blokken van alle miners die zich niet aan de nieuwe regels hielden, door het netwerk geweigerd: de upgrade was dus verplicht voor alle miners.

Daarbij werd SegWit niet unaniem gesteund door de Bitcoin-gemeenschap. De voorstanders van schaalbaarheid op de blockchain, de miners en de grote marktspelers waren er over het algemeen op tegen. En sommige leden van de gemeenschap drongen erop aan om het te activeren op 1 augustus 2017 via een "User Activated Soft Fork". De SegWit update kwam er enkel in de context van het compromis dat tot stand kwam door SegWit2X, een overeenkomst die SegWit wou toelaten en tegelijk de limiet op de basis blokgrootte wou verhogen tot 2MB maar uiteindelijk niet standhield.

SegWit maakt de basis van de code zeer complex door bijvoorbeeld een nieuwe interpretatie van de scripts in verband te brengen met de nieuwe adressen. Dit is problematisch omdat Bitcoin een economisch systeem is waarbij de veiligheid afhangt van de controle van een groot aantal mensen (nodes) en dat eenvoudig van opzet moet zijn.

SegWit veroorzaakt ook ‘validatieverslapping’ voor de nodes die de oude regels volgen: zij zien de handtekeningen niet en valideren ze niet, wat de kwaliteit van het netwerk aantast en nodes dwingt te upgraden naar de nieuwe software.

Het laatste grote nadeel van SegWit is dat de invoering ervan traag en beperkt is. Aangezien het een soft fork is, hebben mensen de keuze om SegWit te gebruiken of niet. Echter heeft heeft directe gevolgen voor de beloften die deze update doet. Momenteel stagneert de adoptie van SegWit rond 50% (april 2021), wat betekent dat maar 50% van de nodes zijn overgestapt naar SegWit.

Conclusie

SegWit is dus een upgrade van het Bitcoin-protocol dat een aantal verbeteringen met zich meebrengt. Het verhelpt met name de kneedbaarheid van transacties die de implementatie van het Lightning-netwerk bemoeilijkte en verhoogt de capaciteit van het netwerk. Een van de grootste voordelen is dat er meer transacties in een blok passen, waardoor ook de transactiekosten omlaaggaan. Dat is natuurlijk erg voordelig voor crypto traders, maar ook voor nodes van de Bitcoin blockchain. Het feit dat het een soft fork is, maakt SegWit compatibel met oudere versies van Bitcoin, maar SegWit is verre van perfect. Het is daarom nog allesbehalve duidelijk hoe dit uit gaat pakken.