¿Qué tan grande es la entrada de una transacción P2PKH?

¿Cuántos bytes tiene una entrada P2PKH? Estoy encontrando algunos números diferentes:

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

    pulsar + sig + pulsar + tecla = 1 + 72 + 1 + 61 = 139

  • Princeton Bitcoin Book afirma [p.123]:

    El tamaño aproximado de una transacción es de 148 bytes por cada entrada[…]

  • Un desarrollador experto de Bitcoin calculó desde lo más alto de mi mente mientras tomaba un café:

    PREVOUT + SCRIPTSIG = 36 + (1 + 1 + 33 + 1 + (71 o 72)) = 143 o 144

No pude encontrar más información en la Guía para desarrolladores de Bitcoin o en la wiki.

Pregunta adicional: ¿Cómo es que hay números diferentes? ¿Cambió el tamaño con el tiempo?

Respuestas (1)

El primer número no incluye la salida anterior, el número de secuencia ni el byte de longitud para scriptSig. También usa 65 bytes para la clave pública (lo cual es correcto si no está comprimida, pero ahora son más comunes las claves comprimidas de 33 bytes). Corregir da 139 + 36 + 4 + 1 + (33 - 65) = 148.

El desarrollador en el tercer caso olvidó incluir el número de secuencia, por lo que el resultado fue 147 o 148.

Los muchachos de Princeton claramente saben más.

Así que para resumir:

PREVOUT: hash (32 bytes)
         index (4 bytes)
SCRIPTSIG: length (1 byte)
           CONTENTS: push opcode (1 byte)
                     signature (71 or 72 bytes)
                     push opcode (1 byte)
                     pubkey (33 bytes for compressed, 65 for uncompressed)
sequence (4 bytes)