Wie so oft kommt hier eine Kombination von SHA-256 und RIPEMD-160 zum Einsatz. Durch den Opcode HASH160 aus der Bitcoin Script Sprache nennt man diese Kombination normalerweise auch genau so. Dahinter steckt einfach nur:
RIPEMD-160(SHA-256(...))
Damit hier keine Verwirrung entsteht: Im P2PKH Output, also dem locking script, steht neben den Opcodes nur der public key hash (PKH).
Das „scriptSig“ was jetzt mehrmals erwähnt wurde, oder besser unlocking script, beinhaltet dann bspw. den rohen Public Key zusammen mit der Signatur.
Wenn ich die Transaktion jetzt verifizieren möchte überprüfe ich:
scriptSig ist wie gesagt einfach nur eine Fancy Bezeichnung für das unlocking script, also der Input um das locking script zu lösen. Da sind erstmal keine Hashwerte, oder was meinst du damit?
Beispiel P2PKH: Hier links stehen die beiden Input Parameter, also Public Key und Signatur, rechts ein paar Opcodes und der Public Key Hash. Zusammen ist das dann ein (am Ende hoffentlich gültiges) Script in der Bitcoin Script Sprache (doofer Name).
In meiner Transaktion steht das Zeug rechts gar nicht drin, das ist schließlich bereits on-chain!
Die Sprache ist (absichtlich) sehr simpel und Stack basiert und damit auch sehr leicht lesbar. Von links nach rechts landet alles sozusagen auf einem Stapel, und dann wird abgearbeitet. Wenn der Stack am Ende leer ist, dann darf ich den UTXO ausgeben.
-
Als erstes trifft DUP
auf den Public Key. Dieser wird einfach nur duplicated, steht jetzt also zweifach drin.
-
Dann trifft HASH160
auf einen der Public Keys. Jetzt steht also der von uns gehashte Public Key neben dem Public Key Hash aus dem Output.
-
EQUALVERIFY
gibt sich zufrieden wenn die beiden nächsten Elemente, also die beiden PKH’s, identisch sind.
-
Jetzt liegen nur noch der ursprüngliche Public Key zusammen mit der Signatur auf dem Stack. CHECKSIG
gibt jetzt grünes Licht wenn die Signatur gültig ist.
Stack leer → Gültige Transaktion.
Mehr: Bitcoin Script | A Mini Programming Language, P2PKH | Pay To Public Key Hash
Eine Hexadezimalzahl ist erstmal nur das: Eine Zahl. Das hat erstmal gar nichts mit Hashfunktionen zu tun. Hashwerte werden einfach nur üblicherweise in Hex dargestellt, wie sehr viele andere große Zahlen die auf einem Computer so auftauchen.
Die drei Begriffe sind also keine Synonyme! :D