Warum haben P2PK-Skripte keine eigene Adresse?

Wenn ich Adressen richtig verstehe, werden verschiedene Arten von Adressen verwendet, um einem bestimmten Sperrskript (scriptPubKey) zuzuordnen.

Basierend auf dem führenden Zeichen einer Adresse entschlüsselt eine Brieftasche die Adresse und bildet dann das entsprechende Sperrskript um sie herum.

Zum Beispiel:

P2PKH = 1 Adresse

13qWKACQWgQDwDRDoRtqUbN59bar6ousQf
OP_DUP OP_HASH160 1f1cafe31d63e061a3f74b541f4ce7a4515b4d0c OP_EQUALVERIFY OP_CHECKSIG

P2SH = 3Adresse

3MmRfLoNzap2Mt8PwHqhVtxHsmdRieuXfk
OP_HASH160 dc37feb38b5a4ad4bf09bc61eea4831f85c58103 OP_EQUAL

P2PK = n/a

n/a
031b0e8c2567c12536aa13357b79a073dc4444acb83c4ec7a0e2f99dd7457516c5 OP_CHECKSIG

Warum haben P2PK- Skripte nie eine eigene Adresse bekommen?

Warum geben Sie dem öffentlichen Schlüssel in einem P2PK nicht eine Prüfsumme und codieren ihn dann base58 mit seinem eigenen führenden Zeichen, damit wir eine Adresse dafür haben können?

Antworten (2)

Eines der Probleme bei der Codierung von P2PK-Ausgaben als Adresse besteht darin, dass sie sehr lang sein können. P2PK kann sowohl komprimierte als auch unkomprimierte Schlüssel haben. Unkomprimierte Schlüssel sind 65 Bytes groß, was bedeutet, dass die resultierende Adresse sehr lang wäre. Tatsächlich ist diese Länge wahrscheinlich der Grund, warum P2PKH überhaupt existiert: als eine Möglichkeit, kurze Zeichenfolgen als Adressen zu haben. P2PK-Adressen könnten also sehr lang und unhandlich sein, also nicht so nützlich.

Aber heutzutage verwendet jeder komprimierte Pubkeys, sodass die Länge kein großes Problem mehr darstellt.

Da Satoshi P2PK keinen Adresstyp gegeben hat, wurde seitdem kein Adresstyp erstellt, weil sich niemand darum kümmert. P2PKH macht bereits alles, was P2PK macht, nur ein bisschen länger. Und mit anderen kommenden Verbesserungen wie Taproot (das ein Pay-to-Pubkey-Schema ist und einen eigenen Adresstyp hat) gibt es keinen zwingenden Grund, sich die Mühe zu machen, einen Standard zu definieren und zu versuchen, Wallets dazu zu bringen, ihn zu implementieren.

Ich denke, es gibt eine Mischung aus Transaktionstyp (p2pk, p2sh, p2pkh ...) und Pubkeys oder Adressen. Die Adressen werden aus dem Hex-Pubkey generiert (ein cooler Spielplatz hier: http://gobittest.appspot.com/Address ). Die Pubkeys werden gehasht, ein Netzwerk-Byte hinzugefügt, einige Prüfsummen und base58check-codiert. Dies gibt mir die Bitcoin-Adresse eines öffentlichen Schlüssels.

Bei einer Transaktion kann ich verschiedene Methoden verwenden, um Geld zu überweisen. Ich hatte auch auf deinen anderen Beitrag geantwortet. Wenn die Ausgabenbedingung also nur die Vorlage Ihres öffentlichen Schlüssels und Ihrer Signatur erfordert, handelt es sich um eine p2pk-Transaktion. Der öffentliche Schlüssel würde von Ihrem Wallet (nach dem oben genannten Codierungsschema) als „Typ 1“-Adresse erkannt werden.

Wenn die Ausgabebedingung so eingestellt ist, dass sie einen Public-Key-Hash präsentiert, dann ist es ein p2pkh-tx, und Sie haben die std Op_Dup, Op_Hash160,...-Struktur.

Beim Blick auf den Stack wird klar, was passiert. Der Ausgaben-TX legt seine Signatur und seinen Pubkey auf den Stack. Dann geht das Pubkey-Skript auf den Stapel. Der erste Befehl ist OP_Dup, also wird der Pubkey dupliziert. Dann folgt OP_Hash160 und hasht den Pubkey. Dieser Hash wird dann mit dem Hash des Pubkey-Skripts verglichen (in Ihrem Beispiel „1f1cafe31d63e061a3f74b541f4ce7a4515b4d0c“), und hoffentlich stimmen diese beiden überein (gemäß folgendem OP_Equal). Dies beweist, dass Sie die rechtmäßige Person sind, um das Geld auszugeben, denn Sie könnten beweisen, dass Sie Ihren Pubkey auf den referenzierten Pubkey-Hash hashen können. Und Hashing ist eine Einwegfunktion ... niemand sonst könnte dies tun. Im letzten Schritt wird die Signatur in der Transaktion verifiziert und mit Ihrem nun bereitgestellten Pubkey würde die Transaktion auf eine gültige Signatur (OP_Checksig) geprüft.

Hoffe, ich konnte etwas Licht in die Verwirrung um Adressen und „Pay to Pubkey“- oder „Pay to Pubkey Hash“-Transaktionen bringen :-)

Abgestimmt. Das ist sehr verwirrend und beantwortet die Frage nicht. P2PK-Ausgaben erfordern nicht die Vorlage eines öffentlichen Schlüssels und einer Signatur; nur eine Unterschrift. P2PKH-Ausgaben erfordern kein Präsentieren eines Public-Key-Hash und einer Signatur; sie erfordern einen öffentlichen Schlüssel und eine Signatur.