Tot 80% besparen op bitcoin-transactiekosten door betalingen te batchen

19 nov

Wat als ik je vertelde dat er een manier is om meer dan 80% op transactiekosten te besparen door Bitcoin-transacties te batchen? Je zou waarschijnlijk denken dat ik gek was of een radicale wijziging in het Bitcoin-systeem voorstelde.

Sinds de allereerste versie van Bitcoin is het mogelijk om meerdere Bitcoin-betalingen te combineren in één transactie, waardoor de overhead aanzienlijk wordt beperkt. In dit artikel beschrijven we waarom betalingen batchen werkt, hoeveel het je kan besparen, hoe het te gebruiken en hoeveel blockchain-ruimte zou worden bespaard als het vaker zou worden gebruikt. Het artikel is vooral interessant voor bedrijven en organisaties zoals brokers en exchanges.

Inputs, change outputs en payment outputs

Stel je voor dat je een lunch koopt in een lokale brasserie. Eerst betalen we met fysiek contant geld om te kijken hoe het werkt en dan gaan we over op “elektronisch” contant geld – dat wil zeggen bitcoin – om de overeenkomsten te zien.

Alice de klant heeft een aangename lunch in Bob’s brasserie en krijgt een rekening van haar ober Charlie voor € 10,00. Alice betaalt Bob met een biljet van twintig euro en krijgt € 10,00 wisselgeld.

Bitcoin-transacties werken in principe op dezelfde manier. Om de voorbeelden eenvoudig te houden, stellen we ons voor dat één bitcoin gelijk is aan één euro. Alice ontvangt de factuur voor 10 BTC en start een transactie door een 20 BTC-invoer uit haar portefeuille toe te voegen. Vervolgens voegt ze twee uitgangen toe: een 10 BTC-uitvoer die naar Bob gaat en nog eens 10 BTC-uitvoer die de wijziging in haar eigen portemonnee retourneert.

Zo ziet de Bitcoin-transactie van Alice eruit ziet, met de verschillende delen gekleurd op basis van hoe ze worden gebruikt: wit voor de standaard onderdelen van de transactie, roze voor de invoer van Alice, groen voor de verandering van Alice en blauw voor de betaling aan Bob.

En hier zijn de grote van elk onderdeel van de transactie:

  • Container (wit): 10 bytes
  • Input (roze): 148 bytes
  • Change output back naar Alice (groen): 34 bytes
  • Payment output naar Bob (blauw): 34 bytes
  • Totaal: 226 bytes

Maar wacht even, Alice was bijna vergeten Charlie een fooi te geven voor zijn uitstekende service. Voor fysieke contanten doet Alice een tweede transactie door de € 10 die ze als wisselgeld heeft ontvangen, te ruilen voor een kleiner bedrag en een fooi van 15% van € 1,50 op tafel te leggen, waarbij de andere € 8,50 in wisselgeld voor haar blijft.

In Bitcoin maakt Alice ook een tweede transactie om Charlie een fooi te geven. Omdat elke normale transactie voor een enkele betaling in Bitcoin is toegewezen voor een totaal van 452 bytes.

Een efficiëntere manier

Alice zou haar efficiëntie kunnen vergroten door deze twee afzonderlijke betalingen te combineren in één transactie. Voor fysieke contanten lijkt dit op het betalen van haar originele rekening door Alice € 20 in fysiek contant geld aan Charlie te overhandigen en hem te vertellen dat hij zowel Bob als zichzelf moet betalen door € 8,50 in wisselgeld terug te brengen – de rest (€ 1,50, of 15%) is fooi voor Charlie.

In Bitcoin voegt Alice een extra uitvoer toe aan haar transactie (hieronder weergegeven in geel) die Bob zijn 1,5 BTC-fooi betaalt:

En hier zijn de grote van elk onderdeel van de transactie:

  • Container (wit): 10 bytes
  • Input (roze): 148 bytes
  • Change output (groen): 34 bytes
  • Payment output naar Bob (blauw): 34 bytes
  • Payment output naar Charlie (geel): 34 bytes
  • Totaal: 260 bytes

Dit totaal van 260 bytes is aanzienlijk minder dan de 452 bytes die we nodig hadden om twee afzonderlijke transacties in de vorige sectie te maken.

Als we goed kijken, kunnen we zien dat het enige verschil in bytegrootten tussen een enkele betaling en een betaling in een batch het aantal niet-wijzigingsresultaten is. Al het andere in de transactie blijft hetzelfde. Hiermee kunnen we een snelle functie maken voor het berekenen van het aantal bytes dat per betaling wordt gebruikt, aangezien het aantal betalingen (uitgangen) in een enkele transactie toeneemt.

We tellen de bytes op die worden gebruikt door de container, invoer en uitvoer wijzigen (10 + 148 + 34). Vervolgens voegen we voor elke extra betaling 34 bytes toe aan de transactie (x * 34). Tenslotte delen we de totale bytes door het aantal betalingen (x) om het aantal bytes te gebruiken dat per betaling wordt gebruikt. Dit is het resultaat van het uitzetten van onze functie:

We zien dat het combineren van 10 betalingen samen ongeveer 25% is, de bytegrootte van 10 betalingen afzonderlijk, wat ongeveer 75% bespaart. Er kan iets meer worden bespaard naarmate het aantal betalingen per transactie toeneemt.

Mogelijke problemen

Een paar maanden geleden verhoogde de Bitcoin-exchange Kraken zijn opnamekosten (withdrawal fees) tot 0,0025 BTC (op dat moment ongeveer $ 7 USD); na een aantal klachten van klanten hebben ze betalingsbatching ingevoerd en hun tarief verlaagd naar 0,001 BTC (op dat moment ongeveer $ 2,80).

Dit heeft een opmerkelijk nadeel. Wanneer je jouw opname van Kraken ontvangt, kun je jouw transactie opzoeken in een blockchain-explorer en de adressen zien van alle anderen die een betaling in dezelfde transactie hebben ontvangen. Je weet niet wie die ontvangers zijn, maar je weet wel dat ze bitcoins van Kraken hebben ontvangen zoals jij.

Dat is niet goed voor privacy, maar het is misschien ook niet het ergste. Als Kraken elk van deze betalingen apart zou doen, zouden ze mogelijk nog steeds verbonden kunnen zijn via de veranderuitkomsten en misschien ook met bepaalde andere identificerende kenmerken die blockchainanalysebedrijven en particulieren gebruiken om fingerprints van bepaalde spenders te maken.

Het is echter iets om in gedachten te houden als je overweegt om betalingen te betalen waarbij privacy bijzonder belangrijk of al enigszins zwak kan zijn, zoals het maken van payroll in een klein bedrijf waar je niet wilt dat elke werknemer de salarissen van de andere werknemers kent.

 

Bovenstaande tekst is een vertaling van het artikel “Saving up to 80% on Bitcoin transaction fees by batching payments” geschreven door David A. Harding.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *