Woher kennt ScriptPubKey den öffentlichen Schlüssel einer Bitcoin-Adresse?

Ich habe gerade einen blonden Moment.

Der ScriptPubKey stellt eine gehashte Version des öffentlichen Schlüssels des Empfängers bereit.

scriptPubKey OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

Wenn ich jedoch jemandem meine Bitcoin-Adresse gebe, um mir Geld zu schicken – wie ruft der Absender meinen öffentlichen Schlüssel ab und hasht ihn dann? Als pubKeyHash != meine Bitcoin-Adresse

Wahrscheinlich vergesse ich etwas sehr Offensichtliches – aber es hat mich heute Morgen verwirrt.

"pubKeyHash != meine Bitcoin-Adresse" Hier liegen Sie falsch. Die Adresse enthält den Hash des öffentlichen Schlüssels zusammen mit einer Versionsnummer und einer Prüfsumme.

Antworten (2)

Adressen sind eigentlich nur Abkürzungen für bestimmte Skripte. Der Standard-Adresstyp (beginnend mit einer '1' im Mainnet) entspricht tatsächlich genau dem Skripttyp, den Sie oben angegeben haben.

Wenn Sie eine solche Adresse base58 decodieren, erhalten Sie am Ende einen Byte-String der Form 0x00 + [20-Byte-Hash] + [4-Byte-Prüfsumme]. Das entsprechende Skript ist OP_DUP OP_HASH160 [20-Byte-Hash] OP_EQUALVERIFY OP_CHECKSIG.

Ihre Adresse enthält also gewissermaßen den Hash des öffentlichen Schlüssels.

Ich habe dies für einen Test verwendet lenschulwitz.com/base58 , falls es jemandem hilft

Der Absender muss nicht Ihren öffentlichen Schlüssel kennen, sondern nur die von Ihnen angegebene Bitcoin-Adresse, die jedes Mal anders sein kann. Sie verwenden den öffentlichen Schlüssel später, um das Geld einzulösen und an eine andere Adresse zu senden.

Die Bitcoin-Adresse ist der öffentliche Schlüssel.
Nein, Sie verwechseln die Bitcoin-Adresse mit dem öffentlichen Schlüssel. Sie können mit Ihrem öffentlichen Schlüssel und Ihrem privaten Schlüssel viele verschiedene Bitcoin-Adressen erstellen. Sie benötigen den öffentlichen Schlüssel, um die Gelder der Transaktion einzulösen.