Ich stecke fest, um die Transaktionen von Bitcoin zu verstehen. Der Eigentümer muss also die Transaktion mit seinem privaten Schlüssel signieren, dann können Miner überprüfen, ob diese Signatur mit seinem öffentlichen Schlüssel übereinstimmt. Der öffentliche Schlüssel wird jedoch mit drei Funktionen (RIPEMD160, SHA256 und Base58) gehasht, und es ist unmöglich, den ursprünglichen öffentlichen ECDSA-Schlüssel von der Adresse zu erhalten. Wie funktioniert die Transaktionsverifizierung eigentlich?
Der öffentliche ECDSA-Schlüssel ist in der neuen Transaktion "enthalten" (Teil der scriptSig
).
Dies ist eine Beispielausgabe einer Transaktion (nur der Hash des Pubkeys ist verfügbar) :
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 059be22aadc3bef6b673cb7a16247a0b7403d943 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914059be22aadc3bef6b673cb7a16247a0b7403d94388ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"mg2cQz9Y3ugyjfq8b2wTcW4veemgTBKxkX"
]
}
Der Pubkey von der obigen Adresse ist 03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf
(aber er ist in der Blockchain nicht sichtbar, bis die Ausgabe ausgegeben wird. Nur der Empfänger der obigen Ausgabe kennt ihn.)
Die Verwendung dieser Ausgabe als Eingabe in einer späteren Transaktion führt zu:
"scriptSig": {
"asm": "304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d[ALL]03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf",
"hex": "47304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d012103788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf"
},
3044
... ist die DER-codierte ECDSA-Signatur)03788
... ist der Pubkey)
Christopher Gurnee