Lichtgewicht Bitcoin: Neutrino
Privacy staat in de bitcoinwereld hoog in het vaandel. Het is lastig om met de huidige beschikbare lichte wallets, light clients, een goede privacy te waarborgen. Light clients zijn wallets die niet de hele blockchain hoeven te downloaden, te verifiëren en op te slaan. Neutrino tracht de privacy van light clients te verbeteren.
De Simplified Payment Verification (SPV) node
Op dit moment maken de meeste light clients gebruik van Simplified Payment Verification (SPV). Een SPV node downloadt alleen de headers van alle blocks tijdens het synchroniseren. Een block header is de unieke identificatie van een block en wordt gebruik om opvolgende blocks aan elkaar te linken; het nieuwere block verwijst naar de block header van het oudere block.
Wanneer de SPV node alle block headers heeft gedownload vraagt deze vervolgens transactie-informatie op van externe full nodes. De SPV node vraagt informatie over transacties die voor de node zelf van belang zijn; de transacties die bij de wallet van de SPV node horen.
De SPV node kan niet controleren of de opgenomen transacties geldig zijn, maar alleen een schatting maken over de hoeveelheid proof-of-work die nodig is om een double-spend uit te voeren. SPV nodes worden veelal gebruikt voor lichte wallets, zoals mobiele wallets, waar er niet genoeg middelen zijn om het draaien van een zwaardere node te ondersteunen.
De SPV node is door de lichte eisen voor het systeem zeer geschikt voor allerlei applicaties, maar niet voor toepassingen waar met grotere bedragen gewerkt wordt. De SPV node kan namelijk voor de gek gehouden worden door de full node waar informatie opgevraagd wordt, zonder dat de SPV node vervolgens zelf in staat is om te verifiëren of de informatie helemaal klopt.
Neutrino
Neutrino is een protocol dat het anders aanpakt. Een groot verschil is hoeveel werk de light client uit handen geeft. Waar SPV wallets de veelal kant-en-klare informatie opvragen bij een externe wallet, vraagt Neutrino slechts het minimale. Het is slechts geïnteresseerd in alle transacties uit een bepaald block. Deze transacties worden samengeperst door de externe node, en naar de light client toegestuurd. Het is nu aan de light client om te kijken of er transacties bijzitten die relevant zijn.
Wanneer er relevante transacties bij zitten, dan vraagt de light client het volledige block op bij de node. De node die de data verschaft weet nu dus niet om welke transactie het precies gaat. Er is alleen bekend dat er iets in het block staat wat blijkbaar waardevol is voor de light client om te weten.
Aangezien het doel van de light client het zo min mogelijk belasten van de capaciteiten is, is het niet wenselijk om ruwe data van een block binnen te hengelen. De blocks worden in Neutrino ook gecomprimeerd. Waar een block gemiddeld boven de 1 MB schommelt, is een block met Neutrino na wat toverkunst nog maar 20 KB. Dit komt neer op een verkleining van zo'n 98 procent.
Er wordt wel meer van de rekencapaciteiten van de light client gevraagd. Doordat — zoals bij SPV meer het geval is — de informatie niet voorgeschoteld wordt, dient er zelf meer verificatie toegepast te worden om te bevestigen of de ontvangen data correct is. Hierdoor is een wallet die gebruik maakt van Neutrino wel lastiger voor de gek te houden door kwaadwillende nodes.
Privacy
Het binnen halen van blocks, en niet specifieke transacties, bevordert dus de privacy. Echter blijft bij het verzenden van transacties nog wel het risico bestaan dat er partijen meekijken met wat je doet. Hiervoor zouden Tor en Dandelion eventueel een oplossing kunnen bieden.
Naast de verbeterde privacy, is Neutrino ook een stap in de richting van light clients voor Lightning. Waar men nu nog volledige nodes dient te draaien, is dat door de komst van Neutrino wellicht op korte termijn niet meer altijd nodig.