BlockchainKryptowährung

Wie funktioniert das Senden von Kryptowährungen?

Wie funktioniert das Senden von Kryptowährungen?

In diesem Blog-Post schauen wir uns einmal Schritt für Schritt an, was eigentlich passiert, wenn eine Kryptowährung von einer Person an eine andere gesendet wird. Konkret werden wir uns hierbei die Kryptowährung Bitcoin anschauen, da diese die wohl beste Grundlage bildet, um auch andere Kryptowährungen und Blockchains zu verstehen.

Schauen wir uns zunächst einmal an, was bei dem Absenden bzw. Erstellen einer Transaktion passiert:

Möchte eine Person (Person X) einer anderen Person (Person Y) 10 Bitcoins senden, kann sie entweder selbst eine Transaktion erstellen und diese mit dem Bitcoin-Netzwerk teilen oder sie nutzt einen Wallet Anbieter. Der Vorteil bei der Nutzung eines solchen Anbieters (z. B. Coinbase, Binance oder MetaMask) ist eine deutlich einfachere Handhabung und viel weniger benötigte Vorkenntnisse. Mit wenigen Klicks kann man dort Kryptowährungen versenden und bekommt eine volle Übersicht über die vergangenen Transaktionen und seinen “Kontostand”. Möchte man jedoch auf solch eine dritte Partei verzichten und die Transaktionen direkt mit dem Bitcoin-Netzwerk teilen, muss man selbst ein “Teil” dieses Netzwerks werden (was sonst der Wallet Anbieter für einen übernimmt). Diese “Teile” des Netzwerks nennt man Nodes (übersetzt: Knoten). Die Nodes speichern die Daten der Blockchain und führen sämtliche Funktionen aus (z. B. Transaktionen). Dies ist auch der Grund, warum eine Blockchain dezentral ist, da sie von vielen verschiedenen Nodes erhalten wird und nicht von einem zentralen Server, wie es z. B. bei einer Bank der Fall ist.

Zurück zu Person X, die Person Y 10 Bitcoin senden möchte:

Ob Person X nun selbst eine Bitcoin Node hat und die Transaktion selbst erstellt oder ob sie dazu eine Wallet nutzt, ist für uns eigentlich uninteressant, da die Transaktion letztlich immer gleich aussieht:

Hier sehen wir eine etwas vereinfachte Transaktion von Person X (Adresse: 39YCNRDcX5PGfvmxGCKE8hJW8CAR3wGmKr) an Person Y (Adresse: 3BX2wSy4S4B8bDtk4r3YyWPuzQEwUsQDCp).

Wenn Person X 10 Bitcoin an Person Y senden möchte, muss die Transaktion offensichtlich mindestens 10 BTC umfassen. Wie viele Bitcoins Person X der Transaktion zur Verfügung stellt, sehen wir auf der Grafik zuvor unter dem Punkt Inputs. Die Adresse unter dem Punkt Inputs ist die Adresse von Person X – also die des Senders.

Hier sehen wir außerdem eine Besonderheit der Bitcoin-Blockchain: das UTXO (Unspent Transaction Output, übersetzt: Nicht ausgegebener Transaktionsoutput).

Anders als bei einem Bankkonto, wo es einen Kontostand gibt, von dem Überweisungen abgezogen- bzw. hinzugefügt werden, gibt es solch einen Kontostand auf der Bitcoin-Blockchain nicht. Wenn ich also x Bitcoins an meine Adresse gesendet bekomme, gibt es keinen Kontostand, der um die x Bitcoins erhöht wird.

Aber wie wird denn nun verifiziert, dass ich genug Bitcoins besitze, um Betrag x zu versenden?

Dazu werden alle Transaktionsoutputs an meine Adresse betrachtet. Also die Summe aller Bitcoins, die an meine Adresse gesendet wurden minus der Summe von allen Bitcoins, die ich ausgegeben habe.

Darstellung des Bitcoin UTXOs (Unspent Transaction Output)

Sofern ich keine meiner Bitcoins ausgegeben habe, würde sich mein “Kontostand” nach dieser Grafik also auf 5,1944 Bitcoins belaufen. Wenn ich nun eine Zahlung in Höhe eines Bitcoins ausführen möchte, kann ich jedoch nicht einfach einen Bitcoin von meinem “Konto” abbuchen (denn das gibt es ja nicht), sondern ich muss eine Kombination aus meinen noch nicht ausgegebenen Transaktionsoutput als Input wählen. Da keine dieser Transaktionen auf der Grafik genau einen Bitcoin als Output hat, kann ich entweder die Transaktion 1 (3 BTC), Transaktion 44 (1,18 BTC), oder eine Kombination aus Transaktion 12 (0,9823 BTC) und Transaktion 89 (0,0321 BTC) wählen, da diese zusammen auch mehr als einen Bitcoin ergeben.

Wenn wir uns noch mal die Transaktion aus unserem Beispiel von Person X an Person Y anschauen, sehen wir, dass Person X auch eine Kombination aus zwei Transaktionsoutputs genommen hat – 9 BTC und 2 BTC -, um 10 BTC an Person Y senden zu können. Der Betrag, der mit der Transaktion gesendet werden soll, steht unter dem Punkt Output unter der der Adresse von Person Y – also der Adresse des Empfängers.

Nachdem Person X (oder ihr Wallet-Anbieter) die Inputs und Outputs der Transaktion definiert hat, signed (übersetzt: unterschreibt) Person X die Transaktion mit ihrem Private Key und generiert den Hash aus der gesamten Transaktion (wenn du erfahren möchtest, was ein Hash ist, kannst du dir unseren Artikel zu diesem Thema anschauen), welcher fortan als eine Art Name für diese bestimmte Transaktion genutzt wird und auf der Grafik unseres Beispiels ganz oben zu sehen ist. Diesen Hash kann Person Y dann später nutzen, um die 10 Bitcoins, die sie von Person X bekommen hat, weiter zu versenden. Genauso wie es Person X bei den Inputs auf der Grafik gemacht hat.

Jetzt hat Person X die Transaktion erstellt und ist bereit, diese an das Bitcoin-Netzwerk zu senden.

Wie zuvor erwähnt, besteht dieses “Bitcoin-Netzwerk” nicht aus einem zentralen Server, sondern aus vielen Nodes, die sowohl für das Speichern der Blockchain verantwortlich sind, als auch für das ausführen von Transaktionen und das Erstellen von neuen Blöcken.

Um nun die Transaktion auszuführen, muss Person X die soeben erstellte Transaktion an die Nodes senden. Möchte Person X dies “von Hand” machen – ohne einen Wallet-Anbieter – braucht sie selbst eine Bitcoin-Node, mit der sie die Transaktion an die anderen Nodes versenden kann. Andernfalls macht das der Wallet Anbieter für sie.

Wie wir auf diesem Schaubild erkennen können, wird die Transaktion nicht sofort an alle Nodes versendet, sondern erst an eine bzw. einige wenige. Jede Node ist nämlich nur mit einigen anderen Nodes, ihren sogenannten “Peers” verbunden. Sobald eine Node eine neue Transaktion empfängt, validiert sie diese. Jetzt gibt es zwei Möglichkeiten, die den weiteren Verlauf bestimmen:

Möglichkeit 1 – die Transaktion ist valide:

  • Die Node sendet die Transaktion an ihre Peers, welche die Transaktion ebenfalls validieren und gegebenenfalls weitersenden.
  • Alle Nodes, die die Transaktion als valide erkennen, speichern eine Kopie dieser in ihrem “Zwischenspeicher”, dem sogenannten Mempool (kurz für: “Memory Pool”).

Möglichkeit 2 – die Transaktion ist nicht valide:

  • Die Node löscht ihre Kopie der Transaktion und sendet sie nicht an ihre Peers.

Wann ist eine Transaktion valide?

Wann immer eine Node eine Transaktion zugesendet bekommt, überprüft sie diese auf ihre Richtigkeit – egal wie viele Nodes die Transaktion bereits zuvor überprüft haben. Diese Überprüfung umfasst das Validieren der “Unterschrift” der Transaktion, das kontrollieren, ob die Person auch wirklich im ausreichenden Besitz der zu sendenden Bitcoins ist oder ob sie einen Double-spending attack unternimmt. Bei einem Double-spending attack versucht der Angreifer (also der Ersteller der Transaktion) die gleichen Bitcoins mehrmals auszugeben.

Außerdem überprüfen die Nodes auch, ob der Transaktion genug Transaktionsgebühren beigefügt wurden. (Du fragst dich jetzt vielleicht, ob unsere Beispieltransaktion von Person X an Person Y nicht fehlerhaft wäre, weil sie keine Transaktionsgebühren definiert. Tatsächlich sendet die Transaktion jedoch mehr als genug Gebühren mit und wir sprechen im weiteren Verlauf noch darüber warum das so ist).

Wird auch nur eine dieser Kriterien nicht erfüllt, löscht die Node diese Transaktion von ihrem Speicher und sendet sie an keine weitere Node weiter. Somit sollen sich fehlerhafte Transaktionen erst gar nicht durch das Netzwerk verbreiten können.

Wird eine Transaktion jedoch als valide befunden, wird sie von einer Node zur anderen geschickt und erreicht so in meist wenigen Sekunden das gesamte Netzwerk. Jede Node speichert diese Transaktion außerdem in ihrem Zwischenspeicher mit allen anderen noch nicht ausgeführten Transaktionen, dem sogenannten Mempool.

Denn nur weil die Transaktion dem ganzen Netzwerk zur Verfügung gestellt wurde und die Nodes die Transaktion als valide interpretieren, gilt die Transaktion noch nicht als durchgeführt oder bestätigt. Schauen wir uns dazu noch mal unsere Beispieltransaktion an:

Der Status einer Transaktion gibt Auskunft darüber, ob die Transaktion bereits durchgeführt wurde oder nicht. In unserem Beispiel sehen wir, dass die Transaktion unconfirmed (übersetzt: unbestätigt) ist. Das heißt, dass die Transaktion zwar von den Nodes als valide angesehen wird, sie jedoch noch nicht bestätigt bzw. durchgeführt ist. Wirklich durchgeführt ist sie nämlich erst, wenn die Transaktion in einen neuen Block integriert wurde.

Während es meist nur wenige Sekunden dauert, bis die Transaktion den Status unconfirmed bekommt, dauert es im Durchschnitt 10 Minuten, bis die Transaktion in einen neuen Block integriert wurde.

Wie wird die Transaktion in einen Block integriert?

Mining ist das große Stichwort für das Erstellen von neuen Blöcken auf der Blockchain und das damit einhergehende ausführen von Transaktionen. Da das Mining so ein wichtiges Thema ist und dessen Umfang den Rahmen dieses Artikels übersteigt, haben wir einen eigenständigen Blog-Post zu diesem Thema.

Bis jetzt haben wir die Nodes so betrachtet, als wären alle gleich; tatsächlich gibt es jedoch einige verschiedene Arten von Nodes. Zur Unterscheidung dieser gibt es viele verschiedene Terminologien, weswegen wir zunächst nur einen bestimmten Typ Nodes definieren: Die Mining Nodes.

So wie alle anderen Nodes auch, validieren Mining Nodes neue Transaktionen, teilen diese mit ihren Peers und speichern sie mit dem Status ‘unconfirmed’ in ihrem Mempool (dem Zwischenspeicher). Ihre Besonderheit liegt darin, dass sie neue Blöcke erstellen (was genau eigentlich ein Block ist, kannst du in diesem Artikel nachlesen).

Wenn eine Mining Node (auch Miner genannt) beginnt einen Block zu erstellen, integriert sie in ihm die noch ausgeführten Transaktionen aus ihrem Mempool. Da nicht beliebig viele Transaktionen in einen Block integriert werden können, priorisiert der Miner die Transaktionen, die die meisten Transaktionsgebühren mitsenden. Der Grund dafür ist, dass der Miner die Transaktionsgebühren bekommt, sollte er den Block vor allen anderen Minern fertigstellen können.

Aber wie werden eigentlich die Transaktionsgebühren mitgesendet?

In unserem Beispiel von Person X und Person Y werden in der Transaktion ja lediglich die Inputs und die Outputs definiert und kein Eintrag mit den Gebühren für den Miner.

Tatsächlich “überweist” sich der Miner einfach die Differenz zwischen Input und Output. In unserem Beispiel nimmt Person X 9 BTC und 2 BTC als Inputs und definiert den Output als 10 BTC mit der Adresse von Person Y. Das heißt, der Miner würde sich in diesem Fall 1 BTC  (11 BTC – 10 BTC) als Gebühr nehmen. Da eine Gebühr von einem ganzen Bitcoin viel mehr ist als notwendig wäre und Person X somit unnötig viel Bitcoin “verschenken” würde, kann sie einfach einen weiteren Output in der Transaktion definieren, mit dem sie sich z. B. 0.8 BTC selbst sendet und somit nur noch 0.2 BTC für den Miner als Gebühr bleiben:

Inputs, Outputs und Gebühren bei einer Bitcoin Transaktion

Sobald ein valider Block mit der Transaktion von Person X erstellt wurde, sehen wir, dass der Status der Transaktion sich ebenfalls verändert hat:

Jetzt sehen wir, dass sich der Status auf Confirmed (übersetzt: bestätigt) geändert hat und wir sehen ein neues Feld Confirmations (übersetzt: Bestätigungen) mit dem Eintrag ‘1’.

Die Zahl der Confirmations steigt mit jedem weiteren Block, der auf den der Transaktion folgt.

Der Status und die Confirmations sind für Händler, die Kryptowährungen als Zahlungsmittel akzeptieren von besonderer Relevanz; denn sie geben Aufschluss darüber, wie sicher es ist, dass eine Transaktion wirklich durchgeführt wurde und ob sie sicher ihre verkaufte Ware aushändigen können. Teils werden Transaktionen mit dem Status ‘Unconfirmed’ bereits als ausreichend empfunden, um einen Verkauf abzuwickeln und teils erst wenn es 6 Confirmations auf eine Transaktion gibt.

Neben der Frage der Sicherheit – je mehr Confirmations eine Transaktion hat, desto wahrscheinlicher ist es, dass die Transaktion fehlerfrei und dauerhaft ausgeführt wurde – ist die Frage, wie lange es dauern soll, bis dem Kunden die Ware ausgehändigt werden kann, von besonderer Bedeutung. Denn während es nur einige Sekunden dauert, bis eine Transaktion als ‘Unconfirmed’ verfügbar ist, dauert es bei einer durchschnittlich Block Time (hier kannst du mehr über die Block Time erfahren) und 6 verlangten Confirmations eine Stunde.

Im Supermarkt würde man wahrscheinlich keine 10 Minuten an der Kasse warten wollen, bis die Bitcoin Transaktion bestätigt wird und eine Confirmation hat.

Damit haben wir jetzt den gesamten Lebenszyklus einer Bitcoin Transaktion kennengelernt.

Hier zum Abschluss noch mal der gesamte Ablauf in Stichpunkten:

  • Eine Transaktion wird erstellt und mit einigen Nodes (den sogenannten “Peers”) geteilt.
  • Jede dieser Nodes überprüft die Transaktion und sendet sie gegebenenfalls an weitere Nodes weiter. Außerdem speichert sie die Transaktion mit den anderen Transaktionen, die noch nicht ausgeführt wurden in ihrem Mempool.
  • Die Transaktion hat jetzt den Status ‘Unconfirmed’.
  • Einige der Nodes – die Mining Nodes – erstellen einen Block, in welchen sie die Transaktionen aus ihrem Mempool integrieren.
  • Der Miner, der seinen Block als Erster fertigstellt, teilt diesen mit seinen Peers, welche den Block validieren und gegebenenfalls an weitere Nodes senden.
  • Wird der Block von den Nodes als valide anerkannt, hat die Transaktion jetzt den Status ‘Confirmed’ und eine Confirmation.
  • Mit jedem weiteren Block der erstellt wird, erhöht sich die Anzahl der Confirmation der Transaktion und somit die Gewährleistung, dass diese unwiderruflich durchgeführt wurde.

Ein Gedanke zu „Wie funktioniert das Senden von Kryptowährungen?

  • Thanks for your blog, nice to read. Do not stop.

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert