Transaktion

Aus Bitcoin Wiki
Version vom 28. Mai 2011, 12:53 Uhr von 0xlemming (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Eine Transaktion ist ein unterschriebener Abschnitt von Daten, welche in das Netzwerk ausgestrahlt und in Blocks gesammelt werden. Sie referenzier…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Eine Transaktion ist ein unterschriebener Abschnitt von Daten, welche in das Netzwerk ausgestrahlt und in Blocks gesammelt werden. Sie referenzieren eine zu vorgehende Transaktion und reservieren eine bestimmte Nummer von Bitcoins auf einem neuen öffentlichen Schlüssel/Adresse.

Block Explorer ist eine Seite auf der man jede Transaktion innerhalb eines Blocks begutachten kann. Nützlich um den technischen Ablauf zu beobachten.

Beispiel Transaktion

Data

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

Erklärung

Der Input dieser Transaktion importiert von #0 (der vorherigen Transaktion f5d8e...) 50 BTC und an eine Bitcoin Adresse 40437... in hexadezimal (ansonsten in Base58). Sendet der aktuelle Empfänger nun die 50 BTC weiter, wird der aktuelle Output in der zukünftigen Transaktion auch als Input referenziert.

Input

Der Input ist die Referenzierung eines Output einer anderen Transaktion. Mehrere Inputs sind möglich, deren Werte werden dann zusammengezählt und als Output gesetzt.

Previous tx ist der Hash der vorangegangenen Transaktion.

Index ist der spezifizierte Output der vorangegangenen Transaktion.

ScriptSig ist die erste Hälfte des Scripts (später mehr).

Output

Ein Output enthält Informationen über das Versenden von Bitcoins. Value/Amount ist der Wert, also wie viele BTC, verschickt werden.

ScriptPubKey ist die zweite Hälfte eines Skriptes (später mehr).

Es kann mehrere Outputs geben, welche dann den gesamten Wert der Inputs untereinander teilen. Da ein Output immer nur mit einem einzigen Input referenziert werden kann, muss der Gesamtwert des Inputs in einem Output erfolgen, sonst geht es verloren. Wenn der Input 50 BTC wert ist und du nur 25 BTC weitersenden willst, wird Bitcoin es in zwei Outputs trennen: einen an den Empfänger und einen an dich selber (auch "Change"/"Wechselgeld" genannt, da es ja wieder an dich zurück geht). Jeder Input Bitcoin, welcher nicht als Output verwendet wird, wird als Transaktionsgebühr betrachtet, welcher jener bekommt, der den Block generiert.

Verifizierung

Um zu bestätigen das die Inputs den Wert der referenzierten Outputs verwenden darf, benutzt Bitcoin ein selbst erstelltes Forth-ähnliches Skriptingsystem. Das scriptSig des Inputs und der scriptPubKey des referenzierten Outputs werten ausgewertet. Die ScriptSig des Inputs und die referenzierte ScriptSig des Outputs werden ausgewertet (in dieser Reihenfolge), mit dem ScriptPubKey welcher die Werte benutzt die noch auf dem SricptSig stack verbleiben. Der Input ist authorisiert, wenn scriptPubKey "wahr" zurückgibt. Durch das Skriptingsystem ist es möglich sehr komplexe Bedingungen zu erstellen, die derjenige zu erfüllen hat, der den Wert für sich beansprucht. Zum Beispiel ist es möglich einen Output zu erstellen, den jeder für sich beanspruchen kann, ohne Befugt zu sein. Es ist auch möglich, dass einen Input von zehn verschiedenen Schlüssel unterschrieben wird oder ein Passwort benutzt wird, anstatt eines Schlüssels.

Transaktions-Typen

Derzeit erstellt Bitcoin drei Typen an scriptSig/scriptPubKey-Paaren. Es ist möglich neue zu entwerfen und kryptografisch zu verfassen. Diese werden als Vertrag bezeichnet.

An IP transferieren

scriptPubKey: <pubKey> OP_CHECKSIG
scriptSig: <sig>

Der Sender erhält den öffentlichen Schlüssel durch eine Verbindung zum Empfänger durch dessen IP. Wenn Coins angefordert werden, die an eine IP gesendet wurden, liefert der Empfänger nur eine Signatur. Die Signatur wird auf den öffentlichen Schlüssel in scriptPubKey geprüft.

Prüfungsprozess:

Stack Script Erklärung
Leer <sig> <pubKey> OP_CHECKSIG scriptSig und scriptPubKey werden zusammengefasst
<sig> <pubKey> OP_CHECKSIG Werte wird Stack hinzugefügt
wahr leer Zwei oberste Elemente des Stacks geprüft

An Bitcoinadresse transferieren

scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>

Die Bitcoinadresse ist nur ein Hash, deswegen kann der Sender keinen ganzen öffentlichen Schlüssel in scriptPubKey liefern. Wenn der Empfänger die Coins verarbeitet, besitzt dieser die Signatur und den öffentlichen Schlüssel. Das Scrikpt überprüft, ob der öffentliche Schlüssel den Hash aus scriptPubKey erstellt und dann ob die Signatur mit dem öffentlichen übereinstimmt.

Prüfungsprozess:

Stack Script Beschreibung
Leer <sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG scriptSig und scriptPubKey werden zusammengefasst
<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG Werte wird Stack hinzugefügt
<sig> <pubKey> <pubKey> OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG Oberstes Element wird dupliziert
<sig> <pubKey> <pubHashA> <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG Oberstes Element wird gehasht
<sig> <pubKey> <pubHashA> <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG Wert wird Stack hinzugefügt
<sig> <pubKey> OP_CHECKSIG Übereinstimmung der obersten zwei Elemente wird geprüft
wahr leer Zwei oberste Elemente des Stacks geprüft

Erzeugung

Erzeugungen haben nur einen einzigen Input, und dieser hat nur eine "coinbase" anstelle der scriptSig. Die Daten der coinbase kann alles sein, sie wird nicht benutzt. Bitcoin schreibt das aktuelle Ziel in einem kompakten Format und eine beliebige "extraNonce"-Nummer, welche immer wächst, wenn das Nonce-Feld des Block headers überläuft, dort hinein. Output kann alles sein, aber Bitcoin erstellt eins wie die der IP-Transaktion.