← Lernpfad Kapitel 4 von 7

Transaktionen Byte für Byte

Wenn du Bitcoin sendest, erstellst du kein “ich überweise X an Y”. Du konstruierst ein kryptographisch signiertes Datenpaket, das beweist, dass du bestimmte Bitcoin ausgeben darfst, und festlegt, unter welchen Bedingungen der Empfänger sie weitergeben kann. Jede Transaktion ist eine Kette aus Beweisen — und hier zerlegen wir sie Byte für Byte.

Das UTXO-Modell: Bitcoin hat keine Konten

Der fundamentale Unterschied zu Bankkonten: Bitcoin kennt keine Salden. Es gibt kein Konto mit “0,5 BTC”. Stattdessen existieren Unspent Transaction Outputs (UTXOs) — vergleichbar mit Münzen in einem Portemonnaie.

Jeder UTXO hat:

Wenn du “0,5 BTC hast”, bedeutet das: Es gibt einen oder mehrere UTXOs auf der Timechain, die nur du mit deinem privaten Schlüssel entsperren kannst.

graph LR
    I1["UTXO #1\n0.5 BTC"]:::input --> TX{"Transaktion\nSignatur beweist\nBesitzrecht"}:::tx
    I2["UTXO #2\n0.3 BTC"]:::input --> TX
    TX --> O1["Empfänger\n0.7 BTC"]:::output
    TX --> O2["Wechselgeld\n0.0999 BTC"]:::output
    TX -.-> FEE["Gebühr\n0.0001 BTC"]:::fee

    classDef input stroke:#d79921,stroke-width:2px,color:#d79921
    classDef tx stroke:#fe8019,stroke-width:3px,color:#fe8019
    classDef output stroke:#98971a,stroke-width:2px,color:#98971a
    classDef fee stroke:#cc241d,stroke-width:1px,color:#fb4934,stroke-dasharray: 5 5
Inputs → Transaktion → Outputs + Wechselgeld

Warum UTXOs?

Anatomie einer Transaktion

Eine Bitcoin-Transaktion ist eine Folge von Bytes mit fester Struktur:

FeldBytesBeschreibung
Version4Transaktionsformat (1 oder 2)
Marker + Flag20x0001 bei SegWit-TXs (signalisiert Witness-Daten)
Input Count1–9Anzahl der Inputs (VarInt)
InputsvariabelJe Input: TxID (32) + Index (4) + ScriptSig + Sequence (4)
Output Count1–9Anzahl der Outputs (VarInt)
OutputsvariabelJe Output: Betrag (8) + ScriptPubKey
WitnessvariabelSignaturen und Public Keys (nur bei SegWit)
Locktime4Frühester Zeitpunkt der Gültigkeit

Zerlege eine Transaktion selbst

Lern-Werkzeug Dieses Tool arbeitet mit Beispieldaten und dient dem Verständnis. Nutze es nicht mit echten Transaktionen, die auf deine Identität zurückführbar sind.

// Transaktion als Hex

// Aufbau einer Bitcoin-Transaktion

FarbeFeldBeschreibung
VersionTransaktionsformat (1 oder 2)
SegWit-Marker0x0001 wenn Witness-Daten vorhanden
AnzahlInput- und Output-Zähler
InputsReferenzen auf vorherige Outputs (UTXOs)
OutputsNeue UTXOs (Betrag + Locking Script)
WitnessSignaturen (nur bei SegWit)
LocktimeFrühester Gültigkeitszeitpunkt
Probiere es aus

Lade ein SegWit-Beispiel und suche den Witness-Bereich: Er steht separat nach den Outputs. Vergleiche die Größe der Witness-Daten mit dem restlichen Transaktionskörper — bei SegWit werden Signaturen ausgelagert und mit 75 % Rabatt gewichtet.

Inputs: “Diese Münzen gebe ich aus”

Jeder Input referenziert einen bestehenden UTXO und beweist die Ausgabeberechtigung:

Input:
├── Previous TX Hash:  32 Bytes — welche Transaktion?
├── Output Index:       4 Bytes — welcher Output in dieser TX?
├── ScriptSig:         variabel — Beweis (bei Legacy-TXs)
└── Sequence:           4 Bytes — für RBF und Locktime

Die Previous TX Hash + Output Index identifizieren den UTXO eindeutig. Das ScriptSig (bei Legacy) oder die Witness-Daten (bei SegWit) liefern den kryptographischen Beweis, dass der Absender den privaten Schlüssel zum Locking Script des UTXO besitzt.

Outputs: “Diese neuen Münzen entstehen”

Jeder Output erzeugt einen neuen UTXO:

Output:
├── Amount:        8 Bytes — Betrag in Satoshi (Little Endian)
└── ScriptPubKey:  variabel — das Locking Script

Der Amount gibt den Wert in Satoshi an (1 BTC = 100.000.000 Satoshi). Das ScriptPubKey definiert die Bedingung, unter der dieser Output später ausgegeben werden darf — typischerweise “wer den passenden Public Key und eine gültige Signatur vorlegt”.

Die Gebühr: Was übrig bleibt

Die Mining-Gebühr wird nirgends explizit angegeben. Sie ergibt sich aus der Differenz:

Gebühr = Summe aller Input-Beträge − Summe aller Output-Beträge

Alles was übrig bleibt, geht an den Miner. Deshalb ist Wechselgeld essenziell: Wenn du einen 1-BTC-UTXO nutzt, um 0,3 BTC zu senden, musst du dir 0,7 BTC minus Gebühr als Change Output zurücksenden — sonst schenkt du dem Miner 0,7 BTC.

Bitcoin Script: Die Programmiersprache der Transaktionen

Bitcoin hat eine eigene, minimalistische Stack-basierte Programmiersprache: Bitcoin Script. Sie ist absichtlich nicht Turing-vollständig — keine Schleifen, keine unbegrenzten Berechnungen. Das macht sie sicher und vorhersagbar.

Jede Ausgabe eines UTXO ist ein kleines Programm in zwei Teilen:

  1. Locking Script (ScriptPubKey) — im Output: definiert die Bedingung
  2. Unlocking Script (ScriptSig/Witness) — im Input: liefert den Beweis

Beides wird zusammengesetzt und ausgeführt. Wenn der Stack am Ende TRUE ergibt, ist die Transaktion gültig.

Die gängigsten Script-Typen

TypAdresse beginnt mitScript-Muster
P2PKH1...OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG
P2SH3...OP_HASH160 <hash> OP_EQUAL
P2WPKHbc1q...OP_0 <20-byte-hash>
P2TRbc1p...OP_1 <32-byte-key>

Von oben nach unten: älter → neuer, größer → kleiner, teurer → günstiger.

Dekodiere ein Script

Lern-Werkzeug Dieses Tool arbeitet mit Beispieldaten und dient dem Verständnis. Nutze es nicht mit echten Scripts von Transaktionen, die auf deine Identität zurückführbar sind.

// Script-Decoder

// Was ist Bitcoin Script?

Bitcoin Script ist eine einfache, stackbasierte Programmiersprache, die in jeder Transaktion steckt. Sie definiert die Bedingungen, unter denen Bitcoin ausgegeben werden kann. Jeder Output enthält ein Script (locking script), das der Empfänger mit einem passenden Input-Script (unlocking script) „lösen" muss.

Die Sprache ist absichtlich nicht Turing-vollständig — keine Schleifen, keine Rekursion. Das macht sie vorhersagbar und sicher.

Aufgabe

Dekodiere ein P2PKH-Locking-Script: OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG. Verfolge den Ablauf auf dem Stack Schritt für Schritt — was passiert bei jedem Opcode? Warum braucht es sowohl den Hash-Vergleich als auch die Signaturprüfung?

SegWit: Witness-Daten auslagern

Segregated Witness (SegWit, aktiviert 2017) war das wichtigste Upgrade seit Bitcoins Start. Die Kernidee: Signaturen und Public Keys — die Witness-Daten — werden aus dem traditionellen Transaktionskörper herausgelöst.

Warum das wichtig ist:

Legacy vs. SegWit im Vergleich

Legacy-TX:  [Version][Inputs+ScriptSig][Outputs][Locktime]
                      ↑ Signatur hier

SegWit-TX:  [Version][Marker][Flag][Inputs][Outputs][Witness][Locktime]
                                                      ↑ Signatur hier

Bei einer SegWit-Transaktion sind die Inputs “sauber” — sie enthalten nur die Referenz auf den UTXO. Die Signaturen stehen separat im Witness-Bereich.

Locktime: Zeitschlösser

Das letzte Feld jeder Transaktion — 4 Bytes. Es definiert, ab wann die Transaktion gültig ist:

Locktime ermöglicht zeitverzögerte Transaktionen und ist ein Baustein für komplexere Konstrukte wie Payment Channels und Lightning.


Weiterführend

Diskussion via Nostr

Kommentare werden über das dezentrale Nostr-Netzwerk geladen. Du brauchst eine Nostr-Identität und eine Browser-Extension wie nos2x oder Alby.