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
12higDjoCCNXSA95xZMWUdPvXNmkAduhWvWallet 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
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa2012
P2SH
Pay-to-Script-Hash
Base58Check
3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC2017
SegWit
Native P2WPKH
Bech32
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt0802021
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
12ab8dc588ca9d5787dde7eb29569da63c3a238cBitcoin-Adresse
12higDjoCCNXSA95xZMWUdPvXNmkAduhWvWeitergeben, 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
044d05240cfbd8a2786eda9dadd520c1609b8593ff8641018d57703d02ba687cf2f187f0cee2221c3afb1b5ff7888caced2423916b61444666ca1216f26181398c20-Byte-Public-Key-Hash
12ab8dc588ca9d5787dde7eb29569da63c3a238cP2PKH-scriptPubKey
76a91412ab8dc588ca9d5787dde7eb29569da63c3a238c88acDie 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
12higDjoCCNXSA95xZMWUdPvXNmkAduhWvHASH160 bei P2PKH-Adressen
Der Public-Key-Hash einer P2PKH-Ausgabe wird mit HASH160 aus dem öffentlichen Schlüssel berechnet.
Öffentlicher Schlüssel
65 Byte
044d05240cfbd8a2786eda9dadd520c1609b8593ff8641018d57703d02ba687cf2f187f0cee2221c3afb1b5ff7888caced2423916b61444666ca1216f26181398c32-Byte-Hash
32 Byte
9937c25f9764321edf4f0dece8546b165ae42f896ba82b8ccb5271bdfe88a90d20-Byte-Public-Key-Hash
20 Byte
12ab8dc588ca9d5787dde7eb29569da63c3a238cWie 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
0x0020-Byte-Public-Key-Hash
20 Byte
12ab8dc588ca9d5787dde7eb29569da63c3a238cVersion + HASH160
21 Byte
0012ab8dc588ca9d5787dde7eb29569da63c3a238cDas 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:
| Hex | Dezimal | Netzwerk | Typ | Typischer Beginn |
|---|---|---|---|---|
| 0x00 | 0 | Mainnet | P2PKH | 1… |
| 0x05 | 5 | Mainnet | P2SH | 3… |
| 0x6f | 111 | Testnet/Signet | P2PKH | m… / n… |
| 0xc4 | 196 | Testnet/Signet | P2SH | 2… |
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
0012ab8dc588ca9d5787dde7eb29569da63c3a238c32-Byte-Hash
32 Byte
e158c4be10913422dadcf1c36843020ebb3ffe9d0cb13fb9e8c0a564a53c783232-Byte-Hash
32 Byte
96bf1d277213bbcd91145138e4c7ad8dcd6e1de1c39884fcbc1f5a6d4d7aee93Erste 4 Byte werden zur Prüfsumme
Prüfsumme
4 Byte
96bf1d27Die 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
0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27Versionsbyte
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
0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27P2PKH
Pay-to-Public-Key-Hash
Base58Check
12higDjoCCNXSA95xZMWUdPvXNmkAduhWvVersionsbyte 0x00 führt typischerweise zu 1…
Der Begriff Base58Check bezeichnet die Kombination aus:
Base58Check
Versionsbyte + Nutzdaten + Prüfsumme + Base58-CodierungPayload (binär)
25 Byte
0012ab8dc588ca9d5787dde7eb29569da63c3a238c96bf1d27Versionsbyte
1 Byte
0x00HASH160(Public Key)
20 Byte
12ab8dc588ca9d5787dde7eb29569da63c3a238cChecksum
4 Byte
96bf1d27P2SH-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
5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae20-Byte-Script-Hash
748284390f9e263a4b766a75d0633c50426eb875P2SH-scriptPubKey
a914748284390f9e263a4b766a75d0633c50426eb87587Die 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
3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3VDadurch 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
5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052aeHASH160 des Redeem Scripts
Der Script-Hash einer P2SH-Ausgabe wird mit HASH160 aus dem Redeem Script berechnet.
Redeem Script
71 Byte
5121022afc20bf379bc96a2f4e9e63ffceb8652b2b6a097f63fbee6ecec2a49a48010e2103a767c7221e9f15f870f1ad9311f5ab937d79fcaeee15bb2c722bca515581b4c052ae32-Byte-Hash
32 Byte
22b3812b3c73635ee44b7011950f88a01a00ddb16ded59856fbecbf9b15978fd20-Byte-Script-Hash
20 Byte
748284390f9e263a4b766a75d0633c50426eb875Wie 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
0x0520-Byte-Script-Hash
20 Byte
748284390f9e263a4b766a75d0633c50426eb875Version + HASH160
21 Byte
05748284390f9e263a4b766a75d0633c50426eb875Das 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:
| Hex | Dezimal | Netzwerk | Typ | Typischer Beginn |
|---|---|---|---|---|
| 0x00 | 0 | Mainnet | P2PKH | 1… |
| 0x05 | 5 | Mainnet | P2SH | 3… |
| 0x6f | 111 | Testnet/Signet | P2PKH | m… / n… |
| 0xc4 | 196 | Testnet/Signet | P2SH | 2… |
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
05748284390f9e263a4b766a75d0633c50426eb87532-Byte-Hash
32 Byte
387acf91a0a2ec4ed94356accb972359c6cf35a26af20c45b06d35c3c559f07432-Byte-Hash
32 Byte
4dc9a3745c7e1bfbab470fba2aaa4655116eb60fbf3a4d61b447fb9bb1108f62Erste 4 Byte werden zur Prüfsumme
Prüfsumme
4 Byte
4dc9a374Die 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
05748284390f9e263a4b766a75d0633c50426eb8754dc9a374Versionsbyte
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
05748284390f9e263a4b766a75d0633c50426eb8754dc9a374P2SH
Pay-to-Script-Hash
Base58Check
3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3VVersionsbyte 0x05 führt typischerweise zu 3…
Der Begriff Base58Check bezeichnet die Kombination aus:
Base58Check
Versionsbyte + Nutzdaten + Prüfsumme + Base58-CodierungPayload (binär)
25 Byte
05748284390f9e263a4b766a75d0633c50426eb8754dc9a374Versionsbyte
1 Byte
0x05HASH160(Redeem Script)
20 Byte
748284390f9e263a4b766a75d0633c50426eb875Checksum
4 Byte
4dc9a374Native 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
03f465315805ed271eb972e43d84d2a9e19494d10151d9f6adb32b8534bfd764ab20-Byte-Public-Key-Hash
841b80d2cc75f5345c482af96294d04fdd66b2b7Witness-Programm · Version 0
841b80d2cc75f5345c482af96294d04fdd66b2b7P2WPKH-scriptPubKey
0014841b80d2cc75f5345c482af96294d04fdd66b2b7Die 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
bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58qMit 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
bcNetzwerk · Mainnet
Witness-Version
qVersion 0 wird in Bech32 als q codiert
Witness-Programm
841b80d2cc75f5345c482af96294d04fdd66b2b720 Byte HASH160(Public Key)
Bech32-Adresse · P2WPKH
bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58qTrennzeichen 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
03f465315805ed271eb972e43d84d2a9e19494d10151d9f6adb32b8534bfd764ab32-Byte-Hash
32 Byte
b78841e847d838d69d4a99c3dfbb5b269638a28501cfb47e18b8327cf62ca07420-Byte-Public-Key-Hash
20 Byte
841b80d2cc75f5345c482af96294d04fdd66b2b7Wie 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.
| HRP | Netzwerk |
|---|---|
| bc | Bitcoin Mainnet |
| tb | Testnet |
| bcrt | Regtest |
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.
P2WPKH-scriptPubKey
0014841b80d2cc75f5345c482af96294d04fdd66b2b700 = 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)
841b80d2cc75f5345c482af96294d04fdd66b2b7scriptPubKey beginnt mit 0014
Adresspräfix bc1q
bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58qP2WSH
32 Byte
SHA256(Witness Script)
65f91a53cb7120057db3d378bd0f7d944167d43a7dcbff15d6afc4823f1d3ed3scriptPubKey beginnt mit 0020
Adresspräfix bc1q
bc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65Die 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 + 841b80d2cc75f5345c482af96294d04fdd66b2b7Bech32
bc + 1 + Daten
bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58qPrü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
0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667Witness-Programm · Version 1
0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667P2TR-scriptPubKey
51200f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667Die 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
bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytdufIm 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
bcNetzwerk · Mainnet
Witness-Version
pVersion 1 wird in Bech32m als p codiert
Witness-Programm
0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a66732 Byte Taproot Output Key
Bech32m-Adresse · P2TR
bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytdufTrennzeichen 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.
P2TR-scriptPubKey
51200f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a66751 = 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
924c163b385af7093440184af6fd6244936d1288cbb41cc3812286d3f83a3329Optionale Script-Wurzel
Merkle-Wurzel des Taproot-Scriptbaums, falls Script-Pfad-Ausgaben vorgesehen sind
Taproot Output Key
0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a66732-Byte-Witness-Programm
0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667Der 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 + 0f0c8db753acbd17343a39c2f3f4e35e4be6da749f9e35137ab220e7b238a667Bech32m
bc + 1 + Daten
bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytdufPrü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.
| Format | Präfix | Encoding | Codierte Daten | Beispiel · Mainnet |
|---|---|---|---|---|
| P2PKH | 1… | Base58Check | HASH160(Public Key) | 12higDjoCCNXSA95xZMWUdPvXNmkAduhWv |
| P2SH | 3… | Base58Check | HASH160(Redeem Script) | 3CK4fEwbMP7heJarmU4eqA3sMbVJyEnU3V |
| P2WPKH | bc1q… | Bech32 | Witness v0 + HASH160(Public Key) | bc1qssdcp5kvwh6nghzg9tuk99xsflwkdv4hgvq58q |
| P2WSH | bc1q… | Bech32 | Witness v0 + SHA256(Script) | bc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65 |
| P2TR | bc1p… | Bech32m | Witness v1 + Taproot Output Key | bc1ppuxgmd6n4j73wdp688p08a8rte97dkn5n70r2ym6kgsw0v3c5ensrytduf |
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.
Bitcoin-Adresse
12higDjoCCNXSA95xZMWUdPvXNmkAduhWvWallet decodiert die Adresse
Beim Empfangen: Adresse → `scriptPubKey` · Beim Anzeigen: `scriptPubKey` → Adresse
scriptPubKey
76a91412ab8dc588ca9d5787dde7eb29569da63c3a238c88acTransaktionsoutput
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.