¿Por qué la implementación predeterminada del minero usa pay-to-pubkey?

Mirando la fuente v0.9.3 en miner.cpp:

CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey)
{
    CPubKey pubkey;
    if (!reservekey.GetReservedKey(pubkey))
        return NULL;

    CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG;
    return CreateNewBlock(scriptPubKey);
}

¿ El valor predeterminado scriptPubKeyes pay-to-pubkey? ¿Es necesario conservarlo para la compatibilidad? Estoy sorprendido de que no esté usando pay-to-pubkey-hash.

Al leer el código, estoy de acuerdo con su evaluación. Probablemente no necesite permanecer así por compatibilidad, pero no tengo idea de por qué lo hicieron de esa manera.
Creo que P2PK fue todo lo que se usó al principio, así que veo por qué comenzó de esa manera, solo me pregunto por qué nunca se cambió...
No es posible construir un P2PK a partir de solo una dirección de bitcoin; por lo tanto, P2PKH debe haber existido al principio.
No digo que no se pudiera haber hecho, solo que nadie usó P2PKH hasta más tarde.
@NickODell recuerda que originalmente Bitcoin usaba transacciones IP , no direcciones. Tendría que comprobarlo para estar absolutamente seguro, pero no creo que Bitcoin 0.1 incluyera P2PKH.

Respuestas (1)

Pay-to-PubKey (P2PK) y pay-to-PubKey-Hash (P2PKH) se introdujeron en la versión original de Bitcoin 0.1. P2PK se utilizó de forma predeterminada para la minería y los pagos recibidos mediante el protocolo de pago interactivo de IP a IP ; P2PKH fue diseñado para usarse en pagos no interactivos, pero las transacciones P2PKH ocupan más espacio en la cadena de bloques que P2PK.

¿Es por este ahorro de espacio por lo que Nakamoto eligió usar P2PK para minería y pagos interactivos incluso cuando tenía P2PKH disponible, o tenía alguna otra razón para usar diferentes tipos de transacciones? Creo que solo él lo sabe.

En una situación en la que no necesite las direcciones P2PKH más cortas, como la minería, los pagos interactivos o el pago de su propia clave pública para cambio, usar un P2PK puede ser la mejor opción, aunque P2PKH tiene una ventaja de seguridad si no lo hace. No reutilice las direcciones y si ECDSA algún día se rompe de cierta manera que hace que los ataques sean posibles pero lentos de ejecutar.

Type   Output                Input             Total Bytes
       ScriptPubKey          ScriptSig

       push ....... 1        push  ... 1
       <key> ...... 33       <sig> ... ~72
P2PK   checksig ... 1
       --------------        -------------
       Total ...... 35       Total ... ~73     ~108

       dup ........ 1        push .... 1
       hash160 .... 1        <sig> ... ~72
       push ....... 1        push .... 1
P2PKH  <hash> ..... 20       <key> ... 33
       equal ...... 1
       checksig ... 1
       --------------        --------------
       Total ...... 25       Total ... ~107   ~132

Los números anteriores asumen que está utilizando una clave pública comprimida , que se usa ampliamente en la actualidad pero no se implementó hasta Bitcoin Core 0.6.0 . Si desea considerar las claves públicas "sin comprimir" más antiguas, agregue 32 bytes a los <key>tamaños de bytes. Además, ignoramos todos los factores constantes al crear una salida o entrada y solo consideramos la cantidad de bytes en el script.

No estoy al tanto de ningún problema de compatibilidad: muchos mineros y grupos de minería usan su propio software para pagar a las direcciones P2PKH, como puede ver en las bases de monedas en bloques recientes.

¿Es posible que esta sea información desactualizada? Tomé un café la semana pasada con Pieter y calculó PREVOUT + SCRIPTSIG = 36 + (1 + 1 + 33 + 1 + (71 or 72)) = 143 or 144la entrada P2PKH.
Los números aquí 1) no incluyen la salida anterior y 2) asumen una clave pública sin comprimir.
@Murch Actualicé la respuesta para usar claves de publicación comprimidas, para mencionar claves de publicación sin comprimir y para mencionar lo que no se cuenta. Creo que todos los cálculos fueron (y son) correctos; sin embargo, parte de la información histórica era incorrecta (como aprendí desde que escribí esta respuesta por primera vez), así que lo corregí. Además, me alegro de que tú y Pieter hayan podido tomar un café juntos. :-)