Wat is een Bitcoin unspent transaction output (UTXO)?
De beginnersgids voor het UTXO-model van Bitcoin 📕
Unspent transaction output (UTXO) is de techniek die het Bitcoin-protocol gebruikt om saldi te volgen wanneer deze tussen cryptowallets worden verplaatst.
Voor het volgen en beheren van individuele cryptosaldi gebruiken op blockchain gebaseerde protocollen doorgaans een van de twee verschillende boekhoudmodellen.
Het ene wordt het Account/Balance-model genoemd. Projecten zoals Ethereum, Tezos en EOS gebruiken dit model om saldi te volgen wanneer blockchaingebruikers transacties uitvoeren. Het andere wordt het Unspent Transaction Output (UTXO)-model genoemd.
Bitcoin en vele andere cryptovaluta's zoals Litecoin, Cardano en Dogecoin gebruiken het UTXO-model.
Maar wat is het precies, hoe werkt het en wat zijn de voordelen van UTXO in vergelijking met het Account/Balance-model?
Het UTXO-model begrijpen 💻
Geschiedenis
Adam Back en wijlen Hal Finney waren twee leden van de Cypherpunk cryptografiegroep waar Satoshi Nakamoto, de auteur van de bitcoin whitepaper, vaak kwam. Aan hen wordt de onafhankelijke ontwikkeling van het UTXO-model toegeschreven, respectievelijk tussen 1997 en 2004.
Toen de maker van Bitcoin, Satoshi Nakamoto, het protocol in 2009 lanceerde, werd het het eerste operationele digitale valutasysteem dat het UTXO-model implementeerde.
Zowel Hal Finney als Adam Back worden er al lang van verdacht Satoshi Nakamoto te zijn, hoewel dit nooit met zekerheid is bewezen.
UTXO in het kort
Wanneer u bitcoin naar iemand verstuurt, vinden er programmatisch een aantal stappen plaats. Een van de eerste stappen in het transactieproces is dat uw cryptocurrency-wallet de blockchain scant om te zien hoeveel geld u heeft. Dit geld staat bekend als unspent transaction outputs (UTXO's).
U kunt UTXO's zien als wisselgeld dat is overgebleven van eerdere bitcoin-transacties.
Het geld wordt als 'unspent' (niet-uitgegeven) beschouwd omdat het vrij beschikbaar is om naar iemand te versturen of naar een andere wallet te verplaatsen. Ze worden 'transaction outputs' (transactie-outputs) genoemd omdat ze zijn gecreëerd uit eerdere transacties.
Als u € 12 uitgeeft aan een lunch en met een biljet van € 20 betaalt, houdt u € 8 over. In dit voorbeeld zouden de overgebleven € 8 een unspent transaction output zijn. Dit bedrag gaat terug in uw portemonnee, klaar om gebruikt te worden om iets anders te kopen.
Dit is precies hoe bitcoin-UTXO's werken. Wanneer u een transactie doet, worden outputs van eerdere bitcoin-transacties, d.w.z. uw bitcoin-wisselgeld, gebruikt als inputs voor nieuwe transacties.
Een andere belangrijke vergelijking tussen transacties met contant geld en UTXO's is dat beide volledig moeten worden uitgegeven en niet kunnen worden opgedeeld. Als u een UTXO van 5 bitcoin heeft en 1 BTC naar iemand wilt sturen, moet u de volledige UTXO ter waarde van 5 bitcoin versturen en ontvangt u een nieuwe UTXO terug ter waarde van 4 BTC minus eventuele kosten.
Net als in het voorbeeld hierboven, waarbij u een heel biljet van € 20 overhandigt om een lunch van € 10 te betalen.
Wanneer een UTXO wordt uitgegeven, wordt deze als 'verbruikt' beschouwd en technisch uit de circulatie gehaald.
Al het wisselgeld dat overblijft, wordt gegenereerd als een volledig nieuwe UTXO. Dit onderdeel van het UTXO-systeem is hoe Bitcoin het double-spend-probleem oplost.
Net zoals u een winkelier niet fysiek een biljet van € 5 kunt geven en vervolgens hetzelfde biljet van € 5 aan iemand anders, kan een bitcoin-gebruiker niet met succes dezelfde unspent transaction output gebruiken in twee afzonderlijke digitale transacties.
Wanneer iemand probeert dezelfde UTXO twee keer uit te geven, komen de twee transacties in een mempool terecht — een soort wachtkamer voor transacties die in behandeling zijn. Ze blijven hier totdat succesvolle miners die de proof-of-work-competitie winnen ze bundelen in nieuwe blokken.
U kunt meer te weten komen over dit proces in ons Kraken Learn Center-artikel Wat is bitcoin mining?
Zelfs als beide transacties in twee afzonderlijke blokken worden gebundeld en tegelijkertijd worden verwerkt, wordt vanwege de timestamping een van de transacties eerder geverifieerd dan de andere. Nadat een aantal confirmaties zijn verstreken (nieuwe blokken die aan de blockchain zijn toegevoegd), zouden andere nodes de tweede, ongeldige transactie markeren en afwijzen.
Coinbase-transacties
De enige keer dat een bitcoin-transactie geen inputs heeft, is wanneer er nieuw gecreëerde BTC wordt aangemaakt via mining.
Dit staat bekend als een coinbase-transactie en is de eerste transactie in elk nieuw blok.
Elke satoshi (de sub-eenheden van bitcoin) in omloop kan via het transparante blockchain-grootboek worden herleid naar de respectievelijke coinbase-transactie.
Waarom gebruikt Bitcoin het UTXO-model?
Accountsaldo
Om het saldo van een gebruiker te bepalen, ook wel een UTXO-set genoemd, scant crypto wallet-software de blockchain om alle UTXO's te vinden die zijn gekoppeld aan het bijbehorende openbare walletadres.
De totale som van alle UTXO's geeft een nauwkeurige weergave van hoeveel crypto een walleteigenaar beheert.
Wanneer een UTXO wordt uitgegeven, wordt het openbare walletadres van de ontvanger toegewezen aan het bedrag en wordt er een nieuwe UTXO op de blockchain vastgelegd zodra deze is uitgevoerd.
Opslag
Bitcoin UTXO's worden vastgelegd in verschillende transacties die worden opgeslagen in blokken op de Bitcoin-blockchain. Deze informatie is echter niet duidelijk geïndexeerd, waardoor het moeilijk kan zijn om metadata snel te doorzoeken en te verzamelen.
Bij gebruik van walletsoftware zoals de Bitcoin Core-client, worden UTXO-metadata opgeslagen en geïndexeerd met behulp van een LevelDB-database. LevelDB is een open-source opslagsysteem dat in 2011 door Google is gemaakt en het lokaliseren van UTXO's veel sneller maakt.
De Bitcoin Core-client is populaire software die wordt gebruikt om verbinding te maken met het Bitcoin-blockchainnetwerk. Bitcoin Core is oorspronkelijk gemaakt door Satoshi Nakamoto en wordt nu onderhouden door een community van vrijwillige ontwikkelaars.
UTXO's onder de motorkap 🚗
Technisch gezien bestaat een transactie uit vier hoofdonderdelen:
- Versie: Dit informeert netwerkknooppunten over welke versie van de clientsoftware wordt gebruikt. Verschillende versies volgen verschillende regels voor het verifiëren van transactiegegevens.
- Locktime: Dit is de tijd die bepaalt hoe snel een transactie aan de blockchain wordt toegevoegd. Deze invoer bepaalt wat het vroegst mogelijke tijdstip is waarop de transactie door mining nodes kan worden verwerkt.
- Invoer: Informatie die verwijst naar de bron van de fondsen of de vorige transactie waar de UTXO werd aangemaakt. De invoer bevat ook iets dat het 'unlocking script' wordt genoemd.
- Uitvoer: Informatie over de waarde die wordt overgedragen, de wallet waaraan het eigendom van de fondsen wordt toegewezen en de nieuwe UTXO's die worden gevormd. De uitvoer bevat ook een 'locking script'.
Hoe UTXO's verschillen van fysiek contant geld
De belangrijkste verschillen tussen de analogie met fysieke bankbiljetten en het UTXO-model is dat bitcoin en andere op UTXO gebaseerde crypto-assets niet gebonden zijn aan vaste bedragen, d.w.z. $ 5, $ 10, $ 15, enz. Elk bedrag aan bitcoin (tot acht decimalen) kan een unspent transaction output zijn.
U kunt bijvoorbeeld 0,0003847 BTC overhouden na een transactie.
Dit bedrag wordt een nieuwe UTXO die, als deze wordt gebruikt, volledig moet worden uitgegeven en niet kan worden opgedeeld in kleinere bedragen.
Stel dat John een crypto wallet-saldo van 1 bitcoin heeft. Zijn saldo en de samenstelling van dat saldo zijn twee verschillende dingen, net zoals u $ 100 in uw portemonnee kunt hebben die kan bestaan uit vier biljetten van $ 20, twee van $ 5 en één van $ 10.
Stel dat de samenstelling van Johns saldo van 1 BTC bestaat uit 5 verschillende unspent transaction outputs.
- 0,138 BTC
- 0,1 BTC
- 0,004 BTC
- 0,73 BTC
- 0,028 BTC
John wil 0,6 BTC naar Jane sturen. Om dit te doen, zal de walletsoftware van John automatisch een aantal UTXO's die hij beheert groeperen om deze transactie te dekken, plus eventuele miner fees die nodig zijn om deze te verwerken.
Stel dat in dit voorbeeld zijn walletsoftware automatisch de bitcoin UTXO van John ter waarde van 0,73 BTC naar Jane stuurt en het resterende bedrag minus transactiekosten als een nieuwe UTXO aan John retourneert.
Dit bedrag wordt automatisch naar een change address gestuurd; een apart adres dat is gekoppeld aan uw crypto wallet.
Vergrendelings- en ontgrendelingsscripts 🔒
Wanneer UTXO's worden aangemaakt, worden ze vergrendeld met het openbare walletadres van de ontvanger. Om die UTXO als invoer in een nieuwe transactie te gebruiken, moet deze eerst worden ontgrendeld met de digitale handtekening van de afzender.
Dit is nog iets belangrijks om te begrijpen over bitcointransacties. Wanneer een transactie wordt uitgevoerd, wordt bitcoin niet digitaal van de ene naar de andere rekening verplaatst. In plaats daarvan worden ze ontgrendeld, opnieuw toegewezen aan een nieuwe eigenaar en vervolgens weer vergrendeld.
Dit betekent dat alleen de nieuwe eigenaar het geld kan ontgrendelen met zijn digitale handtekening en het ergens anders naartoe kan overmaken; naar een andere persoon of naar een andere wallet die hij beheert.
Script is een programmeertaal die door Bitcoin wordt gebruikt om transacties te verwerken, inclusief het vergrendelen en ontgrendelen van UTXO's.
- Vergrendelingsscript (ScriptPubKey): Wanneer een UTXO wordt vergrendeld, stelt het vergrendelingsscript (bekend als de ScriptPubKey) de voorwaarden vast waaraan moet worden voldaan voordat de UTXO als invoer kan worden gebruikt. Dit houdt meestal in dat u moet bewijzen dat u de private key bezit die overeenkomt met het openbare walletadres dat is gebruikt om de UTXO te vergrendelen, door een digitale handtekening te verstrekken.
- Ontgrendelingsscript (ScriptSig): Om een UTXO te ontgrendelen, moet u voldoen aan de voorwaarden die door het vergrendelingsscript zijn ingesteld, d.w.z. een digitale handtekening verstrekken die bewijst dat u de private keys beheert die overeenkomen met de public key die is gebruikt om de UTXO te vergrendelen.
Dit voorkomt dat iemand anders toegang krijgt tot dat geld en het kan uitgeven.
Wat is Bitcoin dust?
Met Bitcoin dust worden UTXO's bedoeld die zeer kleine hoeveelheden satoshi's bevatten die zijn overgebleven van eerdere transacties.
De transactiekosten om deze minuscule bedragen aan BTC te verwerken, zouden op zichzelf hoger zijn dan de waarde ervan. Daarom blijven ze vaak op change addresses staan, wachtend om te worden gebundeld met andere UTXO's en uitgegeven.
Wat is een dusting attack?
Bij dusting-aanvallen sturen oplichters 'dust' naar honderdduizenden verschillende walletadressen. Het idee hierachter is om potentiële doelwitten voor social engineering-aanvallen te identificeren.
Een oplichter houdt de adressen met de door hem verstuurde dust in de gaten en wacht tot de eigenaar een transactie uitvoert waarbij UTXO's van verschillende adressen die aan zijn wallet zijn gekoppeld, worden gebundeld. Omdat dust-UTXO's zo klein zijn, is de kans groot dat ze met andere worden gegroepeerd en als input worden gebruikt.
Zodra dit gebeurt, kan de oplichter een idee krijgen van het vermogen dat iemand heeft. Vervolgens kunnen ze ervoor kiezen om phishingberichten in transacties op te nemen die de eigenaar uitnodigen om op een link te klikken die malware downloadt, of om nepwebsites te bezoeken die legitieme landingspagina's imiteren en om persoonlijke informatie vragen.
Hoe gevaarlijk zijn bitcoin dusting attacks?
Dusting attacks geven oplichters geen toegang tot uw tegoeden.
Ze dienen er alleen voor om te achterhalen welke adressen door een specifieke cryptowallet worden beheerd.
Om uw risico op dusting attacks te minimaliseren, kunt u het beste nooit op links klikken of websites bezoeken die aan dust-transacties zijn gekoppeld.
Start met Bitcoin kopen
Nu je alles hebt geleerd over het 'unspent transaction output'-model, ben je er klaar voor om je crypto-reis voort te zetten en bitcoin te kopen?
Bekijk onze gids in het Kraken Learn Center voor meer informatie over hoe je Bitcoin (BTC) koopt en maak vandaag nog een account aan bij Kraken.