BitcoinVonInnen

Inputs & Outputs

Inputs referenzieren UTXOs, Outputs definieren Ausgabebedingungen.

Block 952.153Live

Input

Ein Input beschreibt, welcher bestehende UTXO ausgegeben werden soll, und liefert die Daten, die zur Erfüllung der zugehörigen Ausgabebedingungen erforderlich sind.

INPUTTXIDa1b2c3d4…vout0Nachweis:SignaturWitness

Ein Input besteht aus mehreren Feldern:

Input
├─ Previous TXID
├─ vout
├─ ScriptSig
├─ Sequence
└─ Witness (optional)

Previous TXID

Die TXID identifiziert die Transaktion, in der sich der zu spendende Output befindet.

Previous TXID

  • Previous TXID

Feld anklicken für Detailansicht.

Dieses Feld ist immer 32 Byte lang.

Der Wert wird intern im Little-Endian-Format serialisiert. Erst zusammen mit vout entsteht die eindeutige Referenz auf einen bestimmten früheren Output.

Mehr zur TXID-Darstellung: Transaktionen · Wie entsteht eine TXID?.

vout

Der Output-Index bestimmt, welcher Output innerhalb dieser Transaktion referenziert wird.

Erst die Kombination aus TXID und vout verweist eindeutig auf einen bestimmten Output der Blockchain.

Output Index (vout)

  • Vout

Feld anklicken für Detailansicht.

vout ist ein 4 Byte Integer im Little-Endian-Format.

Beispiele:

  • 00000000 = Output 0
  • 01000000 = Output 1
  • 02000000 = Output 2

ScriptSig

Das ScriptSig enthält zusätzliche Daten, die zur Erfüllung der Ausgabebedingungen des referenzierten Outputs benötigt werden können.

Der konkrete Inhalt des ScriptSig hängt vom verwendeten Script-Typ ab.

Es kann Signaturen, Public Keys, Redeem Scripts oder auch keine Daten enthalten.

Legacy P2PKH

  • Signatur-Länge
  • Signatur
  • Public-Key-Länge
  • Public Key

Feld anklicken für Detailansicht.

Bei klassischen Legacy-Transaktionen befinden sich die Nachweise direkt im ScriptSig.

Das ScriptSig enthält typischerweise:

Native SegWit (P2WPKH)

  • Leeres ScriptSig

Feld anklicken für Detailansicht.

Bei nativen SegWit-Transaktionen enthält das ScriptSig keine Nachweisdaten.

00 steht hier für ein leeres ScriptSig.

Signatur und Public Key befinden sich stattdessen im Witness-Bereich.

P2SH-P2WPKH

  • Redeem-Script-Länge
  • Redeem Script

Feld anklicken für Detailansicht.

Das ScriptSig enthält hier lediglich ein Redeem Script.

Die eigentlichen Nachweisdaten befinden sich weiterhin im Witness.

Das Redeem Script verweist auf das Witness Program.

Sequence

Das Sequence-Feld wird unter anderem für Relative Timelocks und Replace-by-Fee (RBF) verwendet.

Ursprünglich war es für die Aktualisierung unbestätigter Transaktionen vorgesehen.

Sequence

  • Sequence ffffffff
  • Sequence fdffffff

Feld anklicken für Detailansicht.

Das Feld ist immer 4 Byte lang.

Typische Werte:

  • ffffffff: Standardwert
  • fdffffff: kann Opt-in RBF signalisieren

Witness (optional)

Bei SegWit- und Taproot-Transaktionen befinden sich viele Nachweisdaten nicht mehr im ScriptSig, sondern im separaten Witness-Bereich der Transaktion.

Dort liegen je nach Script-Typ beispielsweise:

  • Signaturen
  • Public Keys
  • Witness Scripts
  • weitere skriptspezifische Daten

Siehe auch: SegWit.

Witness · SegWit (P2WPKH)

  • P2WPKH Stack Count
  • P2WPKH Signatur-Länge
  • P2WPKH Signatur
  • P2WPKH PubKey-Länge
  • P2WPKH Public Key

Feld anklicken für Detailansicht.

Für SegWit sind Signaturen und Public Keys typischerweise im Witness-Bereich gespeichert.

Witness · Taproot Key Path

  • Taproot Stack Count
  • Taproot Signatur-Länge
  • Taproot Schnorr-Signatur

Feld anklicken für Detailansicht.

Bei Taproot Key Path Spends besteht der Witness oft nur aus einer kompakten 64 Byte Schnorr-Signatur.

Coinbase-Input

Auch eine Coinbase-Transaktion besitzt technisch genau einen Input.

Dieser verweist jedoch nicht auf einen früheren UTXO:

  • Prev TXID ist der Null-Hash
  • vout ist 0xffffffff

Statt ScriptSig oder Witness enthält der Input sogenannte Coinbase-Daten.

COINBASE INPUTPrev TXID0000000000000000…vout0xffffffffCoinbase Data:Block HeightExtraNonceMiner Data

Coinbase · Previous TXID

  • Prev TXID

Feld anklicken für Detailansicht.

Previous TXID ist beim Coinbase-Input immer der Null-Hash.

Coinbase · vout

  • vout

Feld anklicken für Detailansicht.

vout ist immer ffffffff und markiert den Coinbase-Sonderfall.

Coinbase · Data Length + Data

  • Coinbase Data Length
  • Coinbase Data

Feld anklicken für Detailansicht.

Nach vout folgt die Varint-Länge der Coinbase-Daten und danach die eigentlichen minerdefinierten Daten.

Die Blockhöhe steht in der Praxis am Anfang dieser Coinbase-Daten (BIP34), als erstes gepushtes Script-Element.

In diesem vereinfachten Beispiel liegt die Blockhöhen-Information damit im grünen Coinbase-Data-Bereich.

Coinbase · Sequence

  • Sequence

Feld anklicken für Detailansicht.

Am Ende steht wie bei jedem Input das 4 Byte Sequence-Feld.

Output

Ein Output definiert einen möglichen zukünftigen UTXO.

Er legt fest:

  • welcher Betrag verfügbar ist,
  • und unter welchen Bedingungen dieser Betrag später ausgegeben werden darf.
OUTPUT30.000.000 satsAusgabebedingung (ScriptPubKey)OP_CHECKSIG

Ein Output besteht vereinfacht aus:

Output
├─ Betrag
└─ ScriptPubKey
  • Betrag: Anzahl der enthaltenen Satoshis.
  • ScriptPubKey: Die Ausgabebedingung für eine spätere Ausgabe.

Value

Das Value-Feld enthält den Betrag in Satoshis.

Value

  • Value 1,3 BTC

Feld anklicken für Detailansicht.

Value ist immer ein 8 Byte Integer im Little-Endian-Format.

Das bedeutet: Der Betrag wird nicht als lesbare Dezimalzahl gespeichert, sondern als Bytefolge. Das niedrigstwertige Byte steht dabei zuerst.

Beispiel: 1,3 BTC

Im Output steht:

80a4bf0700000000

Als einzelne Bytes (Little Endian, von links nach rechts gelesen):

80 · a4 · bf · 07 · 00 · 00 · 00 · 00

Für die Umrechnung dreht man die Reihenfolge um und liest die Bytes wie eine normale Zahl von links nach rechts:

07 · bf · a4 · 80

Daraus ergibt sich die Dezimalzahl 130.000.000.

Bitcoin zählt Beträge intern in Satoshis. 1 BTC entspricht 100.000.000 Satoshis.

130.000.000 sats ÷ 100.000.000 = 1,3 BTC

Kurz zusammengefasst:

80a4bf0700000000 → Bytefolge umdrehen → 130.000.000 sats1,3 BTC

ScriptPubKey

Der ScriptPubKey serialisiert die Ausgabebedingung eines Outputs.

Je nach verwendetem Script-Typ wird die Ausgabebedingung unterschiedlich serialisiert.

ScriptPubKey · Legacy P2PKH

  • P2PKH Opcodes
  • P2PKH Hash160
  • P2PKH Abschluss

Feld anklicken für Detailansicht.

Legacy P2PKH serialisiert die Bedingungen als 76a914...88ac.

ScriptPubKey · P2WPKH

  • P2WPKH Version
  • P2WPKH Program

Feld anklicken für Detailansicht.

P2WPKH serialisiert ein Witness Program Version 0 als 0014....

ScriptPubKey · Taproot

  • Taproot Version
  • Taproot Key

Feld anklicken für Detailansicht.

Taproot serialisiert ein Witness Program Version 1 als 5120....

Der ScriptPubKey enthält keine Coins und keine Signaturen.

Er beschreibt lediglich die Bedingungen, die ein zukünftiger Input erfüllen muss, damit Nodes den Spend als gültig akzeptieren.

Je nach verwendetem Script-Typ können diese Bedingungen beispielsweise verlangen:

  • eine gültige Signatur,
  • mehrere Signaturen (Multisig),
  • einen bestimmten Zeitpunkt (Timelock),
  • oder Taproot-spezifische Bedingungen.

Wird ein Output noch nicht ausgegeben, befindet er sich als UTXO im UTXO-Set.

Erst wenn ein zukünftiger Input auf diesen Output verweist und die erforderlichen Nachweise liefert, kann der UTXO ausgegeben werden.

Siehe auch: Transaktionen, UTXO, Scripts, Block · Zustandsübergang, Validierung.