Estoy atascado en la comprensión de las transacciones de Bitcoin. Entonces, el propietario debe firmar la transacción con su clave privada, luego los mineros pueden verificar si esta firma coincide con su clave pública. Sin embargo, la clave pública tiene tres funciones (RIPEMD160, SHA256 y Base58) y es imposible obtener la clave pública ECDSA original de la dirección. Entonces, ¿cómo funciona realmente la verificación de transacciones?
La clave pública ECDSA está "incluida" en la nueva transacción (parte del scriptSig
).
Este es un ejemplo de salida de una transacción (solo está disponible el hash de la clave pública):
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 059be22aadc3bef6b673cb7a16247a0b7403d943 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914059be22aadc3bef6b673cb7a16247a0b7403d94388ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"mg2cQz9Y3ugyjfq8b2wTcW4veemgTBKxkX"
]
}
La clave pública de la dirección anterior es 03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf
(pero no es visible en la cadena de bloques hasta que se gasta la salida. Solo el destinatario de la salida anterior lo sabe).
El uso de esa salida como entrada en una transacción posterior dará como resultado:
"scriptSig": {
"asm": "304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d[ALL]03788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf",
"hex": "47304402203b47249bfe6528dcf297c5888ad608a5c7227ea9f878df09a265c3318c1482e202204e8a8f17da505a6d20ceb4eb63fba2d8e2c5d0a792a0e280dcb18adeec68a05d012103788e5414ebec4a38032be706ae0c13870e320d916bb087ab7258fcf8c0111cbf"
},
3044
... es la firma ECDSA codificada por DER)03788
... es el pubkey)
Christopher Gurnee