Konvertieren Sie die bech32-Bitcoin-Adresse in eine Legacy-Adresse

Ich weiß, dass es ähnliche Tools für BCH gibt (z. B. https://cashaddr.bitcoincash.org/ ). Gibt es eine Möglichkeit, eine native Segwit-Bech32- Bitcoin- Adresse in ein Legacy-Format zu konvertieren?

Antworten (3)

Wie Anonymous sagt, können Sie einfach nicht.

Ich werde versuchen, den wichtigen Teil der Antwort von MCCCS hervorzuheben:

  • In Bitcoin Cash sind cashaddr ("bitcoincash:...", ähnlich, aber nicht ganz bech32) und Legacy-Adressen ("1..." und "3...", base58) zwei verschiedene Möglichkeiten, dasselbe darzustellen onchain-Ausgabe in einer für Menschen lesbaren Weise. Eine kann in die andere umgewandelt werden, da die resultierende Transaktion identisch ist und der Empfänger nicht erkennen kann, welche Adresse Sie verwendet haben.

  • In Bitcoin sind native Segwit-Adressen ("bc1...", bech32) und Legacy-Adressen ("1..." und "3...", base58) Adressen für unterschiedliche On-Chain-Ausgaben . Die ersten werden für Segwit-Ausgänge des BIP141 verwendet, die zweiten nicht. Dass das eine technisch in das andere umsetzbar ist, spielt dabei keine Rolle. Wenn der Empfänger Ihnen eine native Segwit-Adresse gegeben hat, bedeutet dies, dass er eine Transaktion erwartet, die an eine solche Ausgabe zahlt, und eine Transaktion, die etwas anderes bewirkt, möglicherweise nicht erkennt. In bestimmten Fällen kann er buchstäblich nicht auf Coins zugreifen, die an anderer Stelle gesendet werden (z. B. weil er ein HSM verwendet, das nur bestimmte Transaktionen signieren kann).

Kurze Antwort: Wenn Sie eine native Segwit-Adresse erhalten und nicht an diese senden können, gibt es nur eine Vorgehensweise: Fragen Sie den Empfänger stattdessen nach der Legacy-Adresse.

Es gibt keine Konvertierung von Adressformaten in Bitcoin und der Versuch, dies zu tun, führt zu Geldverlusten.

In dieser Antwort geht es um die Unterschiede zwischen Adressformaten und was Inkompatibilitäten verursacht. Wenn Sie Ihre Brieftasche nicht codieren, vertrauen Sie Ihrer Brieftasche nicht, wenn es darum geht, verschiedene Adressen zu erkennen, die aus demselben öffentlichen Schlüssel stammen! Experimentieren Sie mit nichts, was ich gesagt habe, mit echtem Geld!

In Bitcoin Cash sind CashAddr und 1-Adressen verschiedene Möglichkeiten, den Public-Key-Hash für Pay-2-Public-Key-Hash zu codieren. Um P2PKH-Ausgaben auszugeben, wird der öffentliche Schlüssel offengelegt, für den eine Signatur signiert wird. Wie der Hash des öffentlichen Schlüssels serialisiert wird, ändert nichts daran, wie die Ausgabe ausgegeben oder erstellt wird . Somit sind diese Adressen konvertierbar.

Hier sind die Informationen Bech32 (P2WPKH), SegWit in P2SH (P2SH-P2WPKH) und 1 Adressen zu halten:

  • P2PKH enthält die<20-byte-key-hash>
  • P2WPKH enthält die<20-byte-key-hash>
  • P2SH-P2WPKH enthält den Hash des Skripts0 <20-byte-key-hash>

Bedeutet das, dass P2PKH und P2WPKH gleich sind? Nein, das Senden von Geld an P2PKH und Bech32 mit demselben öffentlichen Schlüssel führt zu unterschiedlichen Transaktionen. Und wie die Brieftasche des Zahlungsempfängers es mit dem entsprechenden privaten Schlüssel ausgibt, wird auch anders sein. Aber es ist derselbe Private Key, das Wallet sollte beides ausgeben können! Wenn eine Brieftasche beispielsweise eine Bech32-Adresse generiert, muss die Brieftasche nicht nach Transaktionen suchen, die für diesen öffentlichen Schlüssel als P2PKH oder P2SH-P2WPKH ausgegeben werden . Dies hängt von der Implementierung ab. (Übrigens, in P2PKH kann ein komprimierter oder unkomprimierter öffentlicher Schlüssel verwendet werden. P2WPKH oder P2SH-P2WPKH können nicht mit einem unkomprimierten öffentlichen Schlüssel verwendet werden.)

Für P2WPKH und P2SH-P2WPKH können Sie, ähnlich wie im vorherigen Fall, von P2WPKH ein P2SH-P2WPKH erstellen und es verwenden, wenn die Brieftasche des Zahlungsempfängers kompatibel ist (ich weiß nichts über Bitcoin Core, aber es gibt keinen Grund, eine leichte Brieftasche zu sein). damit kompatibel). Wenn Sie andererseits das eigene P2SH-P2WPKH sehen, können Sie das P2WPKH oder P2PKH nicht ableiten, es sei denn, diese Adresse wurde ausgegeben. Dies hängt mit dem einmaligen Hashing, dem Anhängen einer Null und dem erneuten Hashing zusammen. Bei der Ausgabe werden der öffentliche Schlüssel (und sein Hash) offengelegt.

Zusammenfassung: Es ist theoretisch möglich, aber keine Implementierung wird kompatibel sein.

Dies ist ein schlechter Ratschlag, um auch nur vorzuschlagen, dass Wallets in der Lage sind, Gelder an Adressen auszugeben, die sie nicht generiert haben. Die Leute haben dies getan und Geld verloren.
Ich stimme zu, erfahrene Entwickler, von denen ich dachte, dass meine Antwort hilfreich sein könnte, brauchen meine Antwort nicht, und Benutzer können fehlgeleitet werden. Ich werde Warnungen hinzufügen.
Hast du das schon mal im Testnet probiert?
Die Antwort ist immer noch nützlich für Entwickler, die ein schnelles Verständnis von P2WPKH-Adressen wünschen