Glossar / Adressen und Schlüssel
Bech32m
- Was ist Bech32m?
- Bech32m behebt einen Fehler in bech32, indem eine Konstante in der Prüfsumme geändert wird, und jede Taproot-Adresse, die mit bc1p beginnt, verwendet es statt der ursprünglichen Kodierung.
Spezifiziert im BIP-350.
Der Fehler ist eng begrenzt, aber real. Immer wenn eine bech32-Zeichenkette mit dem Zeichen "p" endet, bleibt die Prüfsumme gültig, wenn unmittelbar vor diesem letzten Buchstaben beliebig viele "q"-Zeichen eingefügt oder entfernt werden, sodass eine verfälschte Adresse die Prüfung bestehen kann. Das BIP-350 schließt die Lücke, indem 0x2bc830a3 in die Prüfsumme einbezogen wird, wo bech32 den Wert 1 einbezog.
Wie es funktioniert
Bech32m ist bech32 mit einer geänderten Zahl. Der Encoder erweitert das für Menschen lesbare Präfix, hängt die Daten an, wendet dasselbe BCH-Polynom auf das Ergebnis an und unterscheidet sich nur im letzten Schritt, wo die Ausgabe mit 0x2bc830a3 statt mit 1 kombiniert wird. Alles, was ein Leser sehen kann, bleibt gleich: dasselbe Alphabet aus 32 Zeichen, dasselbe Trennzeichen "1", dieselben sechs Prüfsummenzeichen, dieselbe Obergrenze von 90 Zeichen.
Die Konstante zu ändern ist kein Nebeneffekt. Es ist der Mechanismus. Weil die beiden Verfahren nicht übereinstimmen, besteht eine bech32m-Zeichenkette eine bech32-Prüfsummenprüfung nicht und eine bech32-Zeichenkette eine bech32m-Prüfung nicht, sodass alte Software neue Adressen rundheraus ablehnt, statt sie halb zu verstehen. Das BIP-350 beschreibt dies als bewussten Bruch der Kompatibilität, gewählt gegenüber der stillen nachträglichen Änderung von bech32 an Ort und Stelle.
Die Trennlinie ist die Witness-Version. Witness-Version 0, also die bc1q-Adressen für einzelne Schlüssel und Skripte, behält bech32. Witness-Versionen 1 bis 16 verwenden bech32m. Heute ist nur Version 1 definiert, als Taproot, sodass bech32m in der Praxis bc1p bedeutet. Die Regel wurde geschrieben, um Versionen abzudecken, die noch nicht existieren, weshalb eine korrekte Wallet die Versionsnummer prüft und nicht das Adresspräfix.
Wo Sie es sehen
Eine bc1p-Empfangsadresse ist bech32m, 62 Zeichen lang und kodiert einen 32 Byte großen Schlüssel. In Testnetzwerken erscheinen dieselben Outputs als tb1p. Taproot-Outputs wurden ab Block 709.632 am 14. November 2021 ausgebbar, und ab diesem Punkt trugen bech32m-Adressen im Mainnet echten Wert.
Bitcoin Core implementierte BIP-350 in Version 22.0, und ab dieser Veröffentlichung verlangt jeder Remote Procedure Call, der eine Adresse entgegennimmt, bech32m für Witness-Version 1 und höher. Version 23.0 ging weiter: neu erstellte Deskriptor-Wallets erhalten automatisch einen tr()-Deskriptor, sodass sie bc1p-Adressen ausgeben, ohne dass man sie darum bittet.
Praktische Reibung zeigt sich auf dem Auszahlungsbildschirm. Manche Plattformen lehnen bc1p-Ziele weiterhin ab, weil ihr Adressvalidator bech32 versteht, aber nicht die neuere Konstante. In diesem Fall ist mit Ihrer Wallet nichts falsch, und eine bc1q-Adresse aus demselben Seed bringt die Bitcoin in dieselbe Wallet.
Bech32m vs. P2TR
Bech32m ist eine Kodierung und P2TR ist ein Output-Typ, und sie stimmen heute nur wegen eines zeitlichen Zufalls überein. Bech32m sagt, wie ein beliebiges Witness-Programm der Version 1 oder höher als Text geschrieben wird. P2TR sagt, was ein Programm der Version 1 bedeutet: einen 32 Byte großen getweakten öffentlichen Schlüssel, der durch eine Schnorr-Signatur oder durch Offenlegung eines Skripts ausgegeben werden kann. Jede im Umlauf befindliche bech32m-Adresse kodiert einen P2TR-Output, aber das stimmt nicht mehr, sobald Witness-Version 2 irgendetwas zugewiesen wird, da diese Adressen ebenfalls bech32m wären und nicht Taproot wären.