GrazendeKoe schreef op zaterdag 8 juli 2017 @ 10:00:
Nu vraag ik me het volgende af. Een block is 1 Mb. De digitale handtekening gaat met segwit dus uit de block gehaald worden. Hoe groot is de digitale handtekening in de zin van aantal Kb's? Hoe groot is een gangbare transactie in Kb's? Passen er hierdoor een stuk meer transacties in één block waardoor het netwerk sneller wordt? Met andere woorden: uit welke onderdelen is een block opgebouwd en hoeveel Kb vertegenwoordigd elk onderdeel?
Het verhaal is wat ingewikkelder dan in mijn blogpost (uiteraard, wanneer is het ooit simpel?).
SegWit is een soft fork, dat wil zeggen dat deze backwards compatible is. Oude versies van de software moeten dus blijven werken. Met reguliere transacties kun je de handtekening niet weglaten, want dan is de transactie niet te controleren. Daarom gebruikt SegWit een ander transactie-type, wat door oude clients ook als geldig wordt beschouwd zonder de handtekening.
SegWit clients ontvangen de hele transactie (en het hele block), terwijl oude clients slechts het gedeelte zonder de handtekening ontvangen. Ook ontvangen oude clients een versie van een block waar voor SegWit-transacties de handtekening is weggelaten. SegWit clients krijgen het volledige block binnen, dat dus groter kan zijn dan 1 MB zonder dat de oude clients het block weigeren. Op deze manier passen er dus meer transacties in een block, mits er gebruikt wordt gemaakt van SegWit transacties. Een block dat enkel niet-SegWit transacties bevat zal nog steeds net zo veel transacties kunnen bevatten als het nu kan.
Wat de grootte van een transactie betreft: Hier spelen veel variabelen in mee. Iedere transactie heeft 1 of meer inputs en 1 of meer outputs. Iedere input moet voorzien zijn van een eigen digitale handtekening (voorlopig in ieder geval, een toekomstige uitbreiding op SegWit, de zogenaamde Schorr handtekeningen, maakt het mogelijk om de handtekening van meerdere inputs te combineren). Sommige inputs hebben meerdere handtekeningen nodig, bijvoorbeeld inputs die bij multi-sig adressen horen.
De gemiddelde omvang van een standaard (niet-multi-sig) input is 180 bytes. Daar komt nog 34 bytes per output bij en 10 bytes onafhankelijk van het aantal inputs en outputs. De minimale transactie-grootte is 223 bytes (179 + 34 + 10), maar transacties met slechts 1 output zijn zeer uitzonderlijk (want die vereisen dat je exact de waarde van de input besteedt), er zijn er vrijwel altijd 2 of meer. Waardoor de gemiddelde grootte van zo'n standaard 1 input, 2 output transactie 258 bytes is.
Maar de grootte kan snel oplopen. Sommige exchanges versturen withdrawal transacties met 10 inputs en outputs (of zelfs meer) en dan zit je al op >2 kB per transactie.
Een block is vrij efficient met de ruimte. Er is slechts 80 bytes aan overhead (de block header) en de rest van de beschikbare ruimte kan worden gevuld met transacties.
En die UASF client die gedraaid moet worden om segwit er door heen te drukken, over welke client hebben we het dan? Bepaalde wallets waar je btc kunt opslaan? Of zijn dat clients die gebruikt worden door grotere partijen zoals exchanges?
De UASF client is een "full node" client die voortkomt uit een fork van Bitcoin Core. Een full node client slaat de volledige blockchain op en is daarom belangrijk in het bewaken van het netwerk. Daarnaast bevat de client wallet-functionaliteit. De meeste gewone gebruikers hebben geen full node client, die gebruiken een "light" of "SPV" (Simple Payment Verification) wallet, die niet de volledige blockchain bijhoudt.
Full nodes worden vooral gedraaid door bedrijven die veel transacties verwerken, bijvoorbeeld exchanges, maar ook door mining pools en er is een redelijke groep supporters die een full node draaien om het netwerk te steunen.
Je kunt Bitcoin Core of de UASF fork hiervan prima gebruiken als wallet-software, maar de interface is enigzins spartaans en je hebt een redelijke hoeveelheid bandbreedte en opslagruimte nodig.