BitcoinVonInnen

Addresses

Adressformate und Encodings.

Block 958.055Live

Was ist eine Bitcoin-Adresse?

Eine Bitcoin-Adresse ist eine menschenlesbare Darstellung eines möglichen Ziels für einen Transaktionsoutput.

Sie enthält nicht direkt Bitcoin und ist auch kein Konto. Stattdessen codiert sie bestimmte Daten, aus denen eine Wallet das passende scriptPubKey für einen neuen Output erzeugen kann.

Je nach Adressformat handelt es sich dabei beispielsweise um:

  • den Hash eines öffentlichen Schlüssels,
  • den Hash eines Skripts,
  • ein SegWit-Witness-Programm,
  • oder einen Taproot Output Key.

Bitcoin-Adresse

12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

Wallet decodiert die Adresse

scriptPubKey

76a91412ab8dc588ca9d5787dde7eb29569da63c3a238c88ac
  • Opcodes
  • HASH160

Transaktionsoutput

Sendet eine Wallet Bitcoin an eine Adresse, werden die Bitcoin daher nicht „in der Adresse“ gespeichert. Die Transaktion erzeugt vielmehr einen neuen UTXO, dessen scriptPubKey festlegt, unter welchen Bedingungen er später ausgegeben werden darf.

Die Adresse dient hauptsächlich dazu, diese technischen Daten zuverlässig zwischen Menschen und Wallets auszutauschen. Dafür verwendet sie ein festgelegtes Encoding und eine Prüfsumme, durch die viele Eingabefehler erkannt werden können.

Je nach Ausgabetyp beginnen Mainnet-Adressen typischerweise mit 1, 3, bc1q oder bc1p. Diese Präfixe stehen für unterschiedliche Adress- und Scriptformate, die im weiteren Verlauf dieser Seite gezeigt werden.

2009

P2PKH

Pay-to-Public-Key-Hash

Base58Check

1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

2012

P2SH

Pay-to-Script-Hash

Base58Check

3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC

2017

SegWit

Native P2WPKH

Bech32

bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080

2021

Taproot

Pay-to-Taproot

Bech32m

bc1p0xlxvl45qa459ygzgd9x9b2kfl6cpf6026zc38l7cn907sw2hk2q62d
  • P2PKH1
  • P2SH3
  • SegWitbc1q
  • Taprootbc1p

Warum gibt es Bitcoin-Adressen?

Die Daten, die einen Bitcoin-Output beschreiben, bestehen aus Bytes und Script-Befehlen. Für Menschen wären sie schwer zu lesen, fehleranfällig abzutippen und kaum sicher weiterzugeben.

Bitcoin-Adressen lösen dieses Problem, indem sie diese technischen Daten in ein kompaktes, menschenlesbares Format codieren.

Technische Daten

HASH160, Witness-Programm oder Output Key

12ab8dc588ca9d5787dde7eb29569da63c3a238c

Bitcoin-Adresse

12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

Weitergeben, Kopieren, QR-Code scannen

Dadurch können Wallets Bitcoin empfangen, ohne dass Benutzer den zugrunde liegenden scriptPubKey kennen oder selbst erstellen müssen.

Zusätzlich enthalten Bitcoin-Adressen eine Prüfsumme. Sie ermöglicht es Wallets, viele Tipp- oder Kopierfehler bereits vor dem Versenden einer Transaktion zu erkennen.

Bitcoin-Adressen dienen daher ausschließlich als benutzerfreundliche Darstellung der Daten, aus denen eine Wallet den passenden scriptPubKey erzeugt.

Klassische P2PKH-Adressen (1…)

Klassische Bitcoin-Adressen, die im Mainnet mit 1 beginnen, gehören zum Ausgabetyp Pay to Public Key Hash (P2PKH).

Bei P2PKH wird ein neuer Output nicht direkt an einen öffentlichen Schlüssel gebunden. Stattdessen enthält der scriptPubKey den 20 Byte langen Hash dieses öffentlichen Schlüssels.

Öffentlicher Schlüssel

044d05240cfbd8a2786eda9dadd520c1609b8593ff8641018d57703d02ba687cf2f187f0cee2221c3afb1b5ff7888caced2423916b61444666ca1216f26181398c
HASH160

20-Byte-Public-Key-Hash

12ab8dc588ca9d5787dde7eb29569da63c3a238c

P2PKH-scriptPubKey

76a91412ab8dc588ca9d5787dde7eb29569da63c3a238c88ac

Die Adresse ist die menschenlesbare Base58Check-Codierung dieses Public-Key-Hashs. Sie wird nicht direkt in der Transaktion gespeichert, sondern von der Wallet wieder in den passenden scriptPubKey übersetzt.

P2PKH

Pay-to-Public-Key-Hash

Base58Check

12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

HASH160 bei P2PKH-Adressen

Der Public-Key-Hash einer P2PKH-Ausgabe wird mit HASH160 aus dem öffentlichen Schlüssel berechnet.

Öffentlicher Schlüssel

65 Byte

044d05240cfbd8a2786eda9dadd520c1609b8593ff8641018d57703d02ba687cf2f187f0cee2221c3afb1b5ff7888caced2423916b61444666ca1216f26181398c
SHA-256

32-Byte-Hash

32 Byte

9937c25f9764321edf4f0dece8546b165ae42f896ba82b8ccb5271bdfe88a90d
RIPEMD-160

20-Byte-Public-Key-Hash

20 Byte

12ab8dc588ca9d5787dde7eb29569da63c3a238c

Wie dieser Hash im Detail entsteht und warum dabei zuerst SHA-256 und anschließend RIPEMD-160 verwendet werden, erklärt die Seite über HASH160.

Für P2PKH ist lediglich wichtig, dass das Ergebnis immer ein 20 Byte (160 Bit) langer Hash ist.

Dieser Public-Key-Hash wird sowohl im scriptPubKey gespeichert als auch später zur Erzeugung der Bitcoin-Adresse verwendet.

Das Versionsbyte

Vor dem HASH160 wird für die Adresscodierung ein Versionsbyte eingefügt.

Bei einer Mainnet-P2PKH-Adresse lautet dieses Byte 0x00.

Versionsbyte · Mainnet P2PKH

1 Byte

0x00
vor HASH160 einfügen

20-Byte-Public-Key-Hash

20 Byte

12ab8dc588ca9d5787dde7eb29569da63c3a238c
Zusammensetzen

Version + HASH160

21 Byte

0012ab8dc588ca9d5787dde7eb29569da63c3a238c

Das Versionsbyte beschreibt, wie die folgenden Daten interpretiert werden sollen. Es ist nicht Bestandteil des Public-Key-Hashs.

Für klassische Base58Check-Adressen sind insbesondere diese Versionsbytes relevant:

HexDezimalNetzwerkTypTypischer Beginn
0x000MainnetP2PKH1
0x055MainnetP2SH3
0x6f111Testnet/SignetP2PKHm… / n…
0xc4196Testnet/SignetP2SH2

Dass Mainnet-P2PKH-Adressen typischerweise mit 1 beginnen, ergibt sich aus der Base58Check-Codierung des führenden Versionsbytes 0x00.

Die Prüfsumme

An Versionsbyte und HASH160 wird eine 4 Byte lange Prüfsumme angehängt.

Sie wird aus dem vollständigen Payload vor der Prüfsumme berechnet:

Version + HASH160

21 Byte

0012ab8dc588ca9d5787dde7eb29569da63c3a238c
SHA-256

32-Byte-Hash

32 Byte

e158c4be10913422dadcf1c36843020ebb3ffe9d0cb13fb9e8c0a564a53c7832
SHA-256

32-Byte-Hash

32 Byte

96bf1d277213bbcd91145138e4c7ad8dcd6e1de1c39884fcbc1f5a6d4d7aee93

Erste 4 Byte werden zur Prüfsumme

Erste 4 Byte

Prüfsumme

4 Byte

96bf1d27

Die Prüfsumme wird somit nicht aus dem HASH160 allein berechnet, sondern aus Versionsbyte und HASH160 zusammen.

Der vollständige binäre Inhalt einer P2PKH-Adresse besteht anschließend aus 25 Byte:

Payload

25 Byte

0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27
Version · HASH160 · Prüfsumme

Versionsbyte

1 Byte

HASH160

20 Byte

Prüfsumme

4 Byte

Insgesamt

25 Byte

Base58Check

Im letzten Schritt werden Versionsbyte, HASH160 und Prüfsumme gemeinsam mit Base58 codiert.

Payload · Version + HASH160 + Prüfsumme

25 Byte

0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27
Base58-Codierung

P2PKH

Pay-to-Public-Key-Hash

Base58Check

12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

Versionsbyte 0x00 führt typischerweise zu 1

Der Begriff Base58Check bezeichnet die Kombination aus:

Base58Check

Versionsbyte + Nutzdaten + Prüfsumme + Base58-Codierung
bei P2PKH

Payload (binär)

25 Byte

0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27
als Formel

Versionsbyte

1 Byte

0x00

HASH160(Public Key)

20 Byte

12ab8dc588ca9d5787dde7eb29569da63c3a238c

Checksum

4 Byte

96bf1d27

P2SH-Adressen (3…)

P2SH steht für Pay to Script Hash (P2SH).

Im Gegensatz zu P2PKH wird hier nicht der Hash eines öffentlichen Schlüssels codiert, sondern der HASH160 eines kompletten Skripts.

Bei P2SH wird ein neuer Output nicht direkt an ein Skript gebunden. Stattdessen enthält der scriptPubKey den 20 Byte langen HASH160 eines Redeem Scripts.

Redeem Script

5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae
HASH160

20-Byte-Script-Hash

748284390f9e263a4b766a75d0633c50426eb875

P2SH-scriptPubKey

a914748284390f9e263a4b766a75d0633c50426eb87587

Die Adresse ist die menschenlesbare Base58Check-Codierung dieses Script-Hashs. Sie wird nicht direkt in der Transaktion gespeichert, sondern von der Wallet wieder in den passenden scriptPubKey übersetzt.

P2SH

Pay-to-Script-Hash

Base58Check

3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3V

Dadurch können auch komplexere Ausgabebedingungen hinter einer kurzen Bitcoin-Adresse verborgen werden. Beim Ausgeben der Bitcoin muss später das ursprüngliche Redeem Script zusammen mit den erforderlichen Daten bereitgestellt werden.

Das Redeem Script

Ein Redeem Script beschreibt die Bedingungen, unter denen ein UTXO später ausgegeben werden darf.

Dabei kann es sich beispielsweise um eine Multisignatur-Ausgabe oder ein verschachteltes SegWit-Skript handeln.

Der scriptPubKey enthält dieses Skript jedoch nicht direkt, sondern lediglich dessen HASH160.

Redeem Script · 1-von-2-Multisig

Block 183729

OP_1

1 Signatur erforderlich

Public Key A

022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e

Public Key B

03a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c0

OP_2

2 Public Keys im Script

OP_CHECKMULTISIG

Multisig-Prüfung

5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae

HASH160 des Redeem Scripts

Der Script-Hash einer P2SH-Ausgabe wird mit HASH160 aus dem Redeem Script berechnet.

Redeem Script

71 Byte

5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae
SHA-256

32-Byte-Hash

32 Byte

22b3812b3c73635ee44b7011950f88a01a00ddb16ded59856fbecbf9b15978fd
RIPEMD-160

20-Byte-Script-Hash

20 Byte

748284390f9e263a4b766a75d0633c50426eb875

Wie dieser Hash im Detail entsteht und warum dabei zuerst SHA-256 und anschließend RIPEMD-160 verwendet werden, erklärt die Seite über HASH160.

Für P2SH ist lediglich wichtig, dass das Ergebnis immer ein 20 Byte (160 Bit) langer Hash ist.

Dieser Script-Hash wird sowohl im scriptPubKey gespeichert als auch später zur Erzeugung der Bitcoin-Adresse verwendet.

Das Versionsbyte

Vor dem HASH160 wird für die Adresscodierung ein Versionsbyte eingefügt.

Bei einer Mainnet-P2SH-Adresse lautet dieses Byte 0x05.

Versionsbyte · Mainnet P2SH

1 Byte

0x05
vor HASH160 einfügen

20-Byte-Script-Hash

20 Byte

748284390f9e263a4b766a75d0633c50426eb875
Zusammensetzen

Version + HASH160

21 Byte

05748284390f9e263a4b766a75d0633c50426eb875

Das Versionsbyte beschreibt, wie die folgenden Daten interpretiert werden sollen. Es ist nicht Bestandteil des Script-Hashs.

Für klassische Base58Check-Adressen sind insbesondere diese Versionsbytes relevant:

HexDezimalNetzwerkTypTypischer Beginn
0x000MainnetP2PKH1
0x055MainnetP2SH3
0x6f111Testnet/SignetP2PKHm… / n…
0xc4196Testnet/SignetP2SH2

Dass Mainnet-P2SH-Adressen typischerweise mit 3 beginnen, ergibt sich aus der Base58Check-Codierung des führenden Versionsbytes 0x05.

Die Prüfsumme

An Versionsbyte und HASH160 wird eine 4 Byte lange Prüfsumme angehängt.

Sie wird aus dem vollständigen Payload vor der Prüfsumme berechnet:

Version + HASH160

21 Byte

05748284390f9e263a4b766a75d0633c50426eb875
SHA-256

32-Byte-Hash

32 Byte

387acf91a0a2ec4ed94356accb972359c6cf35a26af20c45b06d35c3c559f074
SHA-256

32-Byte-Hash

32 Byte

4dc9a3745c7e1bfbab470fba2aaa4655116eb60fbf3a4d61b447fb9bb1108f62

Erste 4 Byte werden zur Prüfsumme

Erste 4 Byte

Prüfsumme

4 Byte

4dc9a374

Die Prüfsumme wird somit nicht aus dem HASH160 allein berechnet, sondern aus Versionsbyte und HASH160 zusammen.

Der vollständige binäre Inhalt einer P2SH-Adresse besteht anschließend aus 25 Byte:

Payload

25 Byte

05748284390f9e263a4b766a75d0633c50426eb8754dc9a374
Version · HASH160 · Prüfsumme

Versionsbyte

1 Byte

HASH160

20 Byte

Prüfsumme

4 Byte

Insgesamt

25 Byte

Base58Check

Im letzten Schritt werden Versionsbyte, HASH160 und Prüfsumme gemeinsam mit Base58 codiert.

Payload · Version + HASH160 + Prüfsumme

25 Byte

05748284390f9e263a4b766a75d0633c50426eb8754dc9a374
Base58-Codierung

P2SH

Pay-to-Script-Hash

Base58Check

3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3V

Versionsbyte 0x05 führt typischerweise zu 3

Der Begriff Base58Check bezeichnet die Kombination aus:

Base58Check

Versionsbyte + Nutzdaten + Prüfsumme + Base58-Codierung
bei P2SH

Payload (binär)

25 Byte

05748284390f9e263a4b766a75d0633c50426eb8754dc9a374
als Formel

Versionsbyte

1 Byte

0x05

HASH160(Redeem Script)

20 Byte

748284390f9e263a4b766a75d0633c50426eb875

Checksum

4 Byte

4dc9a374

Native SegWit-Adressen (bc1q…)

Native SegWit-Adressen gehören zum Ausgabetyp P2WPKH (Pay to Witness Public Key Hash) oder P2WSH (Pay to Witness Script Hash).

Bei P2WPKH wird ein neuer Output nicht direkt an einen öffentlichen Schlüssel gebunden. Stattdessen enthält das Witness-Programm den 20 Byte langen Hash dieses öffentlichen Schlüssels.

Öffentlicher Schlüssel

03f465315805ed271eb972e43d84d2a9e19494d10151d9f6adb32b8534bfd764ab
HASH160

20-Byte-Public-Key-Hash

841b80d2cc75f5345c482af96294d04fdd66b2b7
Witness-Programm

Witness-Programm · Version 0

841b80d2cc75f5345c482af96294d04fdd66b2b7

P2WPKH-scriptPubKey

0014841b80d2cc75f5345c482af96294d04fdd66b2b7

Die Adresse ist die menschenlesbare Bech32-Codierung dieses Witness-Programms. Sie wird nicht direkt in der Transaktion gespeichert, sondern von der Wallet wieder in den passenden scriptPubKey übersetzt.

SegWit

Native P2WPKH

Bech32

bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q

Mit SegWit wurden neue Adressformate eingeführt, die nicht mehr Base58Check verwenden.

Stattdessen kommen Bech32 und bei neueren Witness-Versionen Bech32m zum Einsatz.

Eine SegWit-Adresse enthält folgende Bestandteile:

  • den Human-Readable Part (HRP),
  • das Trennzeichen 1,
  • die codierte Witness-Version,
  • das codierte Witness-Programm,
  • und eine Prüfsumme.

Human-Readable Part

bc

Netzwerk · Mainnet

Witness-Version

q

Version 0 wird in Bech32 als q codiert

Witness-Programm

841b80d2cc75f5345c482af96294d04fdd66b2b7

20 Byte HASH160(Public Key)

Bech32-Adresse · P2WPKH

bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q

Trennzeichen 1, codierte Witness-Version q, Witness-Programm und 6 Zeichen Prüfsumme

Die genaue Funktionsweise von Bech32, der Prüfsumme und der Codierung wird auf der Seite Bech32 & Bech32m erklärt.

HASH160 bei P2WPKH-Adressen

Der Public-Key-Hash einer P2WPKH-Ausgabe wird mit HASH160 aus dem öffentlichen Schlüssel berechnet.

Öffentlicher Schlüssel

33 Byte

03f465315805ed271eb972e43d84d2a9e19494d10151d9f6adb32b8534bfd764ab
SHA-256

32-Byte-Hash

32 Byte

b78841e847d838d69d4a99c3dfbb5b269638a28501cfb47e18b8327cf62ca074
RIPEMD-160

20-Byte-Public-Key-Hash

20 Byte

841b80d2cc75f5345c482af96294d04fdd66b2b7

Wie dieser Hash im Detail entsteht und warum dabei zuerst SHA-256 und anschließend RIPEMD-160 verwendet werden, erklärt die Seite über HASH160.

Für P2WPKH ist lediglich wichtig, dass das Ergebnis immer ein 20 Byte (160 Bit) langer Hash ist.

Dieser Public-Key-Hash wird sowohl im Witness-Programm als auch später in der Bech32-Adresse codiert.

Der Human-Readable Part (HRP)

Der Human-Readable Part kennzeichnet das vorgesehene Netzwerk.

HRPNetzwerk
bcBitcoin Mainnet
tbTestnet
bcrtRegtest

Der HRP trennt Mainnet-, Testnet- und Regtest-Adressen bereits am lesbaren Präfix. Er ist nicht Teil des Witness-Programms.

Die Witness-Version

Die Witness-Version legt fest, wie das nachfolgende Witness-Programm interpretiert werden soll.

Native SegWit-Adressen (bc1q…) verwenden die Witness-Version 0.

Witness-Version 0

Native SegWit-Adressen codieren Version 0 in Bech32 als q. Im `scriptPubKey` entspricht das dem Opcode OP_0.

im scriptPubKey

P2WPKH-scriptPubKey

0014841b80d2cc75f5345c482af96294d04fdd66b2b7

00 = Witness-Version 0 · 14 = Push 20 Bytes

Die Witness-Version ist nicht identisch mit dem sichtbaren Adressbuchstaben q, sondern wird in Bech32 nur so codiert. Im scriptPubKey erscheint sie als Opcode OP_0.

Das Witness-Programm

Das Witness-Programm enthält die eigentlichen Daten, aus denen der scriptPubKey erzeugt wird.

Bei P2WPKH besteht es aus dem 20 Byte langen HASH160 eines öffentlichen Schlüssels.

Bei P2WSH besteht es aus dem 32 Byte langen SHA-256-Hash eines Skripts.

P2WPKH

20 Byte

HASH160(Public Key)

841b80d2cc75f5345c482af96294d04fdd66b2b7

scriptPubKey beginnt mit 0014

Adresspräfix bc1q

bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q

P2WSH

32 Byte

SHA256(Witness Script)

65f91a53cb7120057db3d378bd0f7d944167d43a7dcbff15d6afc4823f1d3ed3

scriptPubKey beginnt mit 0020

Adresspräfix bc1q

bc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65

Die Wallet decodiert diese Informationen beim Empfangen und erzeugt daraus den passenden scriptPubKey.

Bech32-Codierung

Im letzten Schritt werden Witness-Version, Witness-Programm und Bech32-Prüfsumme gemeinsam codiert.

Payload vor Bech32

Witness-Version 0 + 841b80d2cc75f5345c482af96294d04fdd66b2b7
5-Bit-Gruppen + BCH-Prüfsumme

Bech32

bc + 1 + Daten

bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q

Prüfsumme: gvq58q

Taproot-Adressen (bc1p…)

Taproot-Adressen beginnen im Bitcoin-Mainnet typischerweise mit bc1p und gehören zum Ausgabetyp Pay to Taproot (P2TR).

Bei P2TR wird ein neuer Output nicht über einen HASH160 gebunden. Stattdessen enthält das Witness-Programm direkt den 32 Byte langen Taproot Output Key.

Taproot Output Key

0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667
Witness-Programm

Witness-Programm · Version 1

0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667

P2TR-scriptPubKey

51200f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667

Die Adresse ist die menschenlesbare Bech32m-Codierung dieses Witness-Programms. Sie wird nicht direkt in der Transaktion gespeichert, sondern von der Wallet wieder in den passenden scriptPubKey übersetzt.

Taproot

Pay-to-Taproot

Bech32m

bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytduf

Im Gegensatz zu P2WPKH-Adressen enthält das Witness-Programm keinen HASH160. Es besteht aus dem 32 Byte langen x-only Taproot Output Key. Dieser getweakte öffentliche Schlüssel wird aus einem internen Schlüssel und optional der Wurzel eines Taproot-Scriptbaums abgeleitet.

Taproot-Adressen verwenden Bech32m und die Witness-Version 1.

Eine SegWit-Adresse enthält folgende Bestandteile:

  • den Human-Readable Part (HRP),
  • das Trennzeichen 1,
  • die codierte Witness-Version,
  • das codierte Witness-Programm,
  • und eine Prüfsumme.

Human-Readable Part

bc

Netzwerk · Mainnet

Witness-Version

p

Version 1 wird in Bech32m als p codiert

Witness-Programm

0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667

32 Byte Taproot Output Key

Bech32m-Adresse · P2TR

bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytduf

Trennzeichen 1, codierte Witness-Version p, Witness-Programm und 6 Zeichen Prüfsumme

Die genaue Funktionsweise von Bech32m, der Prüfsumme und der Codierung wird auf der Seite Bech32 & Bech32m erklärt.

Bech32m

Taproot-Adressen werden mit Bech32m codiert.

Bech32m ist eine angepasste Variante von Bech32 mit einer veränderten Prüfsumme. Bech32 bleibt für Witness-Version 0 vorgesehen, während Witness-Versionen 1 bis 16 Bech32m verwenden.

Bech32

Witness-Version 0

Native SegWit · `bc1q…`

Bech32m

Witness-Version 1 bis 16

Taproot und künftige Versionen · `bc1p…`

Witness-Version 1

Die Witness-Version legt fest, wie das nachfolgende Witness-Programm interpretiert werden muss.

Bei Taproot besitzt sie den Wert 1. Im Bech32m-Datenteil wird dieser Wert durch das Zeichen p dargestellt.

Witness-Version 1

Taproot-Adressen codieren Version 1 in Bech32m als p. Im `scriptPubKey` entspricht das dem Opcode OP_1.

im scriptPubKey

P2TR-scriptPubKey

51200f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667

51 = Witness-Version 1 · 20 = Push 32 Bytes

Adresspräfix `bc1p`

bc1p

bc = Mainnet · 1 = Trennzeichen · p = Witness-Version 1

Der Taproot Output Key

Das Witness-Programm einer P2TR-Ausgabe besteht aus einem 32 Byte langen Taproot Output Key.

Dieser Output Key wird aus einem internen öffentlichen Schlüssel und optional der Wurzel eines Taproot-Scriptbaums abgeleitet.

Interner Public Key

924c163b385af7093440184af6fd6244936d1288cbb41cc3812286d3f83a3329

Optionale Script-Wurzel

Merkle-Wurzel des Taproot-Scriptbaums, falls Script-Pfad-Ausgaben vorgesehen sind

Taproot-Tweak

Taproot Output Key

0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667
Witness-Programm

32-Byte-Witness-Programm

0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667

Der scriptPubKey einer Taproot-Ausgabe besteht aus der Witness-Version 1 und diesem 32 Byte langen Output Key.

Die genaue Herleitung des Output Keys und die beiden Ausgabepfade von Taproot werden auf der Seite Taproot erklärt.

Bech32m-Codierung

Im letzten Schritt werden Witness-Version, Witness-Programm und Bech32m-Prüfsumme gemeinsam codiert.

Payload vor Bech32m

Witness-Version 1 + 0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667
5-Bit-Gruppen + BCH-Prüfsumme (Bech32m)

Bech32m

bc + 1 + Daten

bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytduf

Prüfsumme: rytduf

Vergleich der Adressformate

Im Laufe der Entwicklung von Bitcoin wurden verschiedene Adressformate eingeführt. Sie unterscheiden sich vor allem darin, welche Daten sie codieren und welches Encoding (Base58Check oder Bech32) verwendet wird.

FormatPräfixEncodingCodierte DatenBeispiel · Mainnet
P2PKH1Base58CheckHASH160(Public Key)12higDjoCCNXSA95xZMWUdPvXNmkAduhWv
P2SH3Base58CheckHASH160(Redeem Script)3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3V
P2WPKHbc1qBech32Witness v0 + HASH160(Public Key)bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q
P2WSHbc1qBech32Witness v0 + SHA256(Script)bc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65
P2TRbc1pBech32mWitness v1 + Taproot Output Keybc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytduf

Moderne Wallets erzeugen meist Native-SegWit-Adressen (bc1q…). Viele Wallets unterstützen inzwischen zusätzlich Taproot-Adressen (bc1p…). Ältere Formate wie P2PKH (1…) und P2SH (3…) werden aus Kompatibilitätsgründen weiterhin unterstützt.

Adressen existieren nicht auf der Blockchain

Bitcoin-Adressen sind menschenlesbare Codierungen bestimmter standardisierter Ausgabebedingungen. Wallets verwenden sie, um die Daten für einen neuen Transaktionsoutput zuverlässig auszutauschen.

In einer Transaktion oder einem Block wird die Adresse selbst jedoch nicht gespeichert.

Stattdessen enthält jeder Output einen scriptPubKey. Dieser legt fest, unter welchen Bedingungen der zugehörige UTXO später ausgegeben werden darf.

Nicht on-chain

Bitcoin-Adresse

12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

Wallet decodiert die Adresse

Beim Empfangen: Adresse → `scriptPubKey` · Beim Anzeigen: `scriptPubKey` → Adresse

beim Empfangen
On-chain

scriptPubKey

76a91412ab8dc588ca9d5787dde7eb29569da63c3a238c88ac

Transaktionsoutput

Enthält Betrag und `scriptPubKey`, nicht die Adresse

Blockchain

Blöcke speichern Transaktionen und damit Outputs mit `scriptPubKey` im UTXO-Set

Beim Erstellen einer Transaktion decodiert die Wallet die Empfängeradresse und erzeugt daraus den passenden scriptPubKey.

Bei bekannten Standardmustern können Wallets und Block-Explorer den umgekehrten Weg gehen und aus einem scriptPubKey eine entsprechende Adresse zur Anzeige ableiten. Nicht jeder beliebige scriptPubKey besitzt jedoch eine standardisierte Adressdarstellung.

Die Konsensprüfung benötigt daher keine Zeichenfolge wie 1…, 3…, bc1q… oder bc1p…. Entscheidend sind der tatsächlich im Output gespeicherte scriptPubKey beziehungsweise die Witness-Daten.