Merk op: deze pagina is sterk verouderd en grotendeels onbeheerd; als gevolg van eerdere incidenten van ‘edit-warring’ heeft deze pagina niet veel collegiale toetsing ondergaan.

Een volledig Bitcoin-knooppunt kan worden aangepast om te schalen naar veel hogere transactiesnelheden dan nu het geval is, ervan uitgaande dat het knooppunt op een high-end server draait in plaats van op een desktop. Bitcoin is ontworpen om lichtgewicht clients te ondersteunen die slechts kleine delen van de blokketen verwerken (zie vereenvoudigde betalingsverificatie hieronder voor meer details hierover).

Let op: deze pagina bestaat om berekeningen te geven over de schaalbaarheid van een Bitcoin-knooppunt en transacties op de blokketen, zonder te kijken naar netwerkbeveiliging en decentralisatie. Het is niet bedoeld om de schaalbaarheid van alternatieve protocollen te bespreken of om filosofische debatten samen te vatten. Maak alternatieve pagina’s als u dat wilt doen.

Note aan lezers

Wanneer techneuten horen hoe bitcoin werkt, stoppen ze vaak bij het woord “overstroming” en zeggen “Oh-mijn-god! Dat kan niet schalen!”. Het doel van dit artikel is om een extreem voorbeeld te nemen, de piek-transactiesnelheid van Visa, en te laten zien dat bitcoin technisch gezien zo’n snelheid zou kunnen bereiken zonder enige vorm van twijfelachtige redenering, veranderingen in het kernontwerp, of niet-bestaande overlays. Als zodanig is het slechts een extreem voorbeeld – geen plan voor hoe bitcoin zal groeien om bredere behoeften aan te pakken (als een gedecentraliseerd systeem is het het bitcoin gebruikende publiek dat zal beslissen hoe bitcoin groeit)- het is gewoon een argument dat laat zien dat bitcoin’s kernontwerp veel beter kan schalen dan een intelligent persoon in eerste instantie zou kunnen raden.

Dan bekritiseert terecht de hier gepresenteerde analyse- hij wijst erop dat het werken op deze schaal het decentrale karakter van bitcoin aanzienlijk zou verminderen: als je vele terabytes aan schijfruimte moet hebben om een “full validating” node te draaien, dan zullen minder mensen het doen, en iedereen die het niet doet zal moeten vertrouwen op de eerlijkheid van degenen die het wel doen. Dan lijkt (uit zijn dia’s) te ver te zijn gegaan met dat argument: hij lijkt te suggereren dat dit betekent dat bitcoins zullen worden gecontroleerd door het soort centrale banken dat nu gebruikelijk is. Zijn analyse faalt om twee redenen (en de tweede is de schuld van het feit dat deze pagina een beetje misleidend is):

Ten eerste, zelfs op de astronomische schaal die hier wordt gepresenteerd ligt de vereiste capaciteit ruim binnen het bereik van (rijke) particulieren, en zou dat zeker zijn op enig toekomstig moment wanneer dat soort capaciteit vereist is. Een systeem dat particulieren, of op zijn minst kleine groepen particulieren, op gelijke voet plaatst met centrale banken kan nauwelijks een gecentraliseerd systeem worden genoemd, hoewel het minder gedecentraliseerd zou zijn dan de bitcoin die we nu hebben. Het systeem zou ook niet tot dit soort schaalgrootte kunnen komen zonder dat bitcoingebruikers collectief instemmen met het vergroten van de maximale blokgrootte, dus het is geen uitkomst die kan gebeuren zonder de instemming van bitcoingebruikers.

Tweede, en het belangrijkste, de veronderstelde schaalgrootte die hier wordt beschreven gaat over Bitcoin die visa vervangt. Dit is een slechte vergelijking omdat bitcoin alleen geen perfecte vervanging is voor visa om redenen die niets te maken hebben met schaalvergroting: Bitcoin biedt bijvoorbeeld geen onmiddellijke transacties, krediet of verschillende fraudebestrijdingsmechanismen (die sommige mensen willen, ook al geldt dat niet voor iedereen). Bitcoin is een completere vervanging voor cheques, telegrafische overschrijvingen, postwissels, gouden munten, cd’s, spaarrekeningen, enzovoort, en vervangt, als het op grote schaal wordt ingevoerd, waarschijnlijk het gebruik van creditcards dat beter zou worden bediend door deze andere dingen als ze online beter zouden werken.

Bitcoin-gebruikers verdoezelen dit feit soms te snel omdat mensen te snel zijn om het een fout te noemen, maar dit is oneerlijk. Geen enkel systeem is ideaal voor alle gebruik en Bitcoin heeft een breder spectrum aan kwaliteiten dan de meeste monetaire instrumenten. Als de bitcoin-gemeenschap niet bereid is om erop te wijzen dat sommige dingen beter door andere systemen gedaan kunnen worden, wordt het makkelijk om stroman-argumenten te maken:

Het is triviaal om betalingsverwerkings- en kredietsystemen _bovenop_ bitcoin te bouwen, zowel klassieke (zoals Visa zelf!) als “gedecentraliseerde” systemen zoals Lightning. Deze systemen zouden grotere transactievolumes kunnen verwerken met lagere kosten, en regelmatig afrekenen met de bitcoin die hen ondersteunt. Deze systemen kunnen andere technieken gebruiken met andere nadelen dan bitcoin, maar worden nog steeds gedekt door bitcoin en genieten dus nog steeds van het gebrek aan centrale controle. We zien het begin hiervan vandaag met Bitcoin-uitwisselings- en portemonneediensten die directe betalingen tussen leden mogelijk maken.

Deze diensten zouden het voordeel hebben van de stabiele inflatiebestendige Bitcoin-munt, gebruikers zouden de voordelen hebben van directe transacties, krediet en fraudebestrijding, bitcoin in het algemeen zou genieten van verbeterde schaalvergroting door gecompenseerd transactievolume zonder afbreuk te doen aan zijn gedecentraliseerde aard. In een wereld waar bitcoin veel gebruikt wordt zouden betalingsverwerkingssystemen waarschijnlijk lagere prijzen hebben omdat ze moeten concurreren met ruwe-bitcoin transacties, maar ze zouden zich ook een lagere prijs kunnen veroorloven omdat frequente bitcoin verrekening (en zero trust bitcoin escrow transacties) hun risico zou verminderen. Dit is dubbel waar omdat bitcoin denkbaar zou kunnen schalen om hen volledig te vervangen, zelfs als dat niet het beste idee zou zijn vanwege de resulterende vermindering van decentralisatie.

Schaalbaarheidsdoelen

VISA verwerkt gemiddeld ongeveer 2.000 transacties per seconde (tps), dus noem het een dagelijkse pieksnelheid van 4.000 tps. Het heeft een piekcapaciteit van ongeveer 56.000 transacties per seconde, maar ze gebruiken in feite nooit meer dan ongeveer een derde hiervan, zelfs niet tijdens drukke winkelperioden.

PayPal, daarentegen, verwerkte ongeveer 10 miljoen transacties per dag voor een gemiddelde van 115 tps eind 2014.

Laten we 4.000 tps als startdoel nemen. Het is duidelijk dat als we Bitcoin willen schalen naar alle economische transacties wereldwijd, inclusief contant geld, het een stuk hoger zou moeten zijn dan dat, misschien meer in de buurt van een paar honderdduizend tps. En de noodzaak om DoS-aanvallen te kunnen weerstaan (waar VISA niet mee te maken heeft) impliceert dat we veel verder zouden willen schalen dan de standaard pieksnelheden. Toch kunnen we door een doel te kiezen wat basisberekeningen doen, ook al is het een beetje arbitrair.

Het Bitcoin-netwerk is tegenwoordig beperkt tot een aanhoudende snelheid van 7 tps doordat het Bitcoin-protocol de blokgrootte beperkt tot 1MB.

CPU

Het protocol bestaat uit twee delen. Knooppunten sturen “inv”-berichten naar andere knooppunten om te melden dat ze een nieuwe transactie hebben. Als het ontvangende knooppunt die transactie niet heeft, vraagt het die aan met een getdata.

De grote kosten zijn de crypto- en block chain-zoekopdrachten die gemoeid zijn met het verifiëren van de transactie. Het verifiëren van een transactie betekent hashing en ECDSA handtekening verificaties. RIPEMD-160 draait op 106 megabytes/sec (noem het 100 voor de eenvoud) en SHA256 is ongeveer hetzelfde. Dus het hashen van 1 megabyte zou ongeveer 10 milliseconden moeten duren en het hashen van 1 kilobyte zou 0,01 milliseconden duren – snel genoeg dat we het kunnen negeren.

Bitcoin is momenteel in staat (met een paar eenvoudige optimalisaties die prototypen zijn, maar nog niet zijn samengevoegd) om ongeveer 8000 handtekeningverificaties per seconde uit te voeren op een quad core Intel Core i7-2670QM 2,2Ghz processor. Het gemiddelde aantal inputs per transactie is ongeveer 2, dus moeten we de snelheid halveren. Dit betekent dat 4000 tps gemakkelijk haalbaar is met een enkele mainstream CPU.

Zoals we kunnen zien, betekent dit dat zolang Bitcoin-knooppunten ten minste 4 cores van de machines waarop ze draaien mogen maximaliseren, we niet zonder CPU-capaciteit voor handtekeningcontrole zullen komen te zitten, tenzij Bitcoin 100 keer zoveel verkeer verwerkt als PayPal. Sinds eind 2015 verwerkt het netwerk 1,5 transacties per seconde, dus zelfs als we uitgaan van een enorme groei in populariteit zullen we dit niveau nog lang niet bereiken.

Natuurlijk doet Bitcoin andere dingen dan handtekeningencontrole, het meest voor de hand liggend is het beheren van de database. Wij gebruiken LevelDB, die het meeste zware werk in een aparte thread doet, en in staat is tot zeer hoge lees/schrijf-belastingen. Over het geheel genomen wordt het CPU-gebruik van Bitcoin gedomineerd door ECDSA.

Network

Laten we uitgaan van een gemiddelde snelheid van 2000tps, dus alleen VISA. Transacties variëren in grootte van ongeveer 0,2 kilobyte tot meer dan 1 kilobyte, maar het gemiddelde is vandaag een halve kilobyte.

Dat betekent dat je ongeveer 8 megabits/seconde aan transactiegegevens moet bijhouden (2000tps * 512 bytes) / 1024 bytes in een kilobyte / 1024 kilobytes in een megabyte = 0,97 megabytes per seconde * 8 = 7,8 megabits/seconde.

Dit soort bandbreedte is tegenwoordig al gebruikelijk voor zelfs residentiële verbindingen, en is zeker aan de lage kant van wat colocatie-aanbieders zouden verwachten om u te voorzien.

Wanneer blokken worden opgelost, zal het huidige protocol de transacties opnieuw verzenden, zelfs als een peer het al heeft gezien op het moment van uitzending. Door van blokken alleen lijsten met hashes te maken, wordt het probleem opgelost en wordt de bandbreedte die nodig is voor het uitzenden van blokken verwaarloosbaar klein. Dus hoewel deze optimalisatie vandaag de dag nog niet volledig is geïmplementeerd, houden we hier geen rekening met de bandbreedte die nodig is voor het uitzenden van blokken.

Opslag

Bij zeer hoge transactiesnelheden kan elk blok meer dan een halve gigabyte groot zijn.

Het is voor de meeste volledig validerende nodes niet nodig om de hele keten op te slaan. In Satoshi’s paper beschrijft hij “pruning”, een manier om onnodige gegevens te verwijderen over transacties die volledig zijn uitgegeven. Dit vermindert de hoeveelheid gegevens die nodig is voor een volledig validerend knooppunt tot slechts de grootte van de huidige niet-uitgegeven outputgrootte, plus wat extra gegevens die nodig zijn om re-orgs af te handelen. Vanaf oktober 2012 (blok 203258) zijn er 7.979.231 transacties geweest, maar de grootte van de ongebruikte uitvoerverzameling is minder dan 100MiB, wat klein genoeg is om gemakkelijk in RAM te passen voor zelfs vrij oude computers.

Een klein aantal archiefknooppunten hoeft de volledige keten op te slaan die teruggaat tot het genesis-blok. Deze nodes kunnen worden gebruikt om nieuwe, volledig validerende nodes vanaf nul op te starten, maar zijn verder overbodig.

De primaire beperkende factor in de prestaties van Bitcoin is het zoeken naar schijven zodra de ongebruikte transactie-uitvoerset niet meer in het geheugen past. Zodra harde schijven worden uitgefaseerd ten gunste van SSD’s, is het heel goed mogelijk dat toegang tot de UTXO-set nooit een serieus knelpunt wordt.

Optimalisaties

De beschrijving hierboven is van toepassing op de huidige software met slechts kleine optimalisaties verondersteld (het type dat kan en is gedaan door één man in een paar weken).

Het is echter mogelijk om in de toekomst nog grotere optimalisaties door te voeren, ten koste van enige extra complexiteit.

CPU

Er bestaan algoritmen om batch-verificatie over elliptische curve handtekeningen te versnellen. Het is mogelijk om hun handtekeningen gelijktijdig te controleren voor een 2x speedup. Dit is een wat complexere implementatie.

Simplified payment verification

Het is mogelijk om een Bitcoin-implementatie te bouwen die niet alles verifieert, maar in plaats daarvan vertrouwt op ofwel verbinding maken met een vertrouwd knooppunt, of zijn vertrouwen stelt in hoge moeilijkheidsgraad als een proxy voor bewijs van geldigheid. bitcoinj is een implementatie van deze modus.

In de SPV-modus (Simplified Payment Verification), genoemd naar het gedeelte van Satoshi’s paper dat het beschrijft, maken clients verbinding met een willekeurig volledig knooppunt en downloaden ze alleen de block headers. Ze verifiëren of de chain headers correct op elkaar aansluiten en of de moeilijkheidsgraad hoog genoeg is. Vervolgens vragen ze de node op afstand om transacties die overeenkomen met bepaalde patronen (zoals betalingen naar uw adressen), die kopieën van die transacties levert samen met een Merkle-tak die hen linkt aan het blok waarin ze verschenen. Dit maakt gebruik van de Merkle-boomstructuur om bewijs van insluiting mogelijk te maken zonder de volledige inhoud van het blok nodig te hebben.

Als een verdere optimalisatie kunnen blokheaders die voldoende diep zijn begraven na enige tijd worden weggegooid (bijv. je hoeft echt maar zo laag als 2016 headers op te slaan).

De moeilijkheidsgraad die nodig is om vertrouwen te krijgen dat het externe knooppunt je geen fictieve transacties geeft, hangt af van je dreigingsmodel. Als u verbinding maakt met een knooppunt waarvan bekend is dat het betrouwbaar is, doet de moeilijkheidsgraad er niet toe. Als je een willekeurig knooppunt wilt kiezen, moeten de kosten voor een aanvaller om een blokreeks met een valse transactie te ontginnen hoger zijn dan de waarde die wordt verkregen door jou op te lichten. Door te veranderen hoe diep het blok begraven moet zijn, kun je de bevestigingstijd afwegen tegen de kosten van een aanval.

Programma’s die deze aanpak implementeren kunnen een vaste opslag/netwerk overhead hebben in het nulgeval van geen gebruik, en resource gebruik evenredig met ontvangen/verzonden transacties.

Zie ook: Thin Client Security.

Gerelateerd werk

Er zijn een paar voorstellen om de schaalbaarheid van Bitcoin te optimaliseren. Sommige hiervan vereisen een alt-chain / hard fork.

  • Ultieme blockchaincompressie – het idee dat de blockchain kan worden gecomprimeerd om “trust-free lite nodes “te bereiken
  • Het Finite Blockchain-paper dat beschrijft het opsplitsen van de blockchain in drie gegevensstructuren, elk beter geschikt voor zijn doel. De drie datastructuren zijn een eindige blockchain (N blokken in het verleden bewaren), een “account tree” die voor elk adres met een niet-nul saldo het rekeningsaldo bijhoudt, en een “proof chain” die een (steeds groter wordende) afgeslankte versie van de blockchain is.
  • Lightning Network, een alternatief protocol voor transactieverrekening waarbij nodes onderling microbetaalkanalen opzetten en af en toe afrekenen op de blockchain. Gewone gebruikers interacteren voornamelijk of alleen met betalingskanalen en gebruiken de blockchain alleen voor grote overschrijvingen en koude opslag.

admin

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

lg