Falta la clave pública en la entrada de la transacción

Estoy en el proceso de comprender scriptSigs de entradas de transacciones y encontré algunas transacciones con entradas a las que parece que les falta una clave pública.

Esto es lo que espero ver como scriptSig. Una firma y una clave pública.

ScriptSig: PUSHDATA(71)[3044022017e2af6e1308d431365deeb5739d41a909cf0d61a9c0e48f3ae5b0bd6544bfc5022066e73dd26d71d824552b034b322603cce8b936912b99f4f3df512e502bd7c11e01] 
PUSHDATA(33)[03d7b3bc2d0b4b72a845c469c9fee3c8cf475a2f237e379d7f75a4f463f7bd6ebd]

https://blockchain.info/tx/10857ad56f1695559562af8076aea4ccba625ba79a82f75e5658c0c2fa4336c0

Sin embargo, también me he encontrado con este tipo de scriptSigs. Parece que no hay clave pública. ¿Qué está pasando exactamente aquí?

ScriptSig: PUSHDATA(71)[304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901]

https://blockchain.info/tx/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

Respuestas (1)

Esa entrada gasta una salida de pay-to-pubkey. La salida de la que gasta contiene la clave pública, por lo que no está en la entrada.

¿Hay alguna forma de obtener la clave pública o la dirección asociada únicamente a partir de dicha entrada sin volver a mirar la salida coincidente? Lo pregunto porque eso aumentaría en gran medida el rendimiento de un análisis de toda la cadena de bloques que estoy tratando de hacer.
No. Tienes que mirar la salida de la que gasta. Debería hacer lo mismo para todas las transacciones de todos modos.
¿Alguna sugerencia sobre cómo puedo consultar rápidamente la salida coincidente de una entrada para obtener la dirección y el valor? Al recorrer toda la cadena de bloques, ciertamente no es factible mantener una lista de todas las salidas no gastadas hasta el momento en la memoria.
Cree una base de datos que se vacíe periódicamente en el disco que almacene todos los resultados no utilizados. Esta base de datos tendría todo el conjunto UTXO; simplemente agrega y elimina cosas a medida que se realizan y gastan nuevas salidas. BItcoin Core hace esto y, de hecho, puede almacenar todo en la memoria, solo requiere 6-7 GB de memoria para hacerlo. De lo contrario, conviértalo en una base de datos que se vacíe en el disco periódicamente.