Compact Size (VarInt)

CompactSize (también llamado VarInt en algunos contextos) es el formato de codificación de enteros variables que Bitcoin usa en la serialización de transacciones y bloques para indicar longitudes y conteos: número de inputs, número de outputs, longitud de scripts, etc. No usa un número fijo de bytes; usa 1, 3, 5 o 9 bytes según el valor a representar, lo que ahorra espacio para los valores más comunes (menores de 253). Esta herramienta codifica cualquier número entero en formato CompactSize y decodifica cualquier CompactSize a su valor numérico. Imprescindible para quienes trabajan con transacciones Bitcoin a nivel de bytes.

📥 Integer → Compact Size
📤 Compact Size → Integer

Reglas de codificación

Rango Prefijo Tamaño total Formato
0 – 252 1 byte Valor directo
253 – 65.535 fd 3 bytes fd + 2 bytes LE
65.536 – 4.294.967.295 fe 5 bytes fe + 4 bytes LE
> 4.294.967.295 ff 9 bytes ff + 8 bytes LE
ℹ️

LE = Little-Endian: el byte menos significativo va primero. Por ejemplo, 253 (0x00FD) se codifica como fd fd00.

Ejemplos

¿Dónde se usa

Compact Size se usa en muchos lugares dentro de las transacciones Bitcoin:

  • Input count — número de inputs en la transacción
  • Output count — número de outputs
  • Script length — longitud del scriptSig o scriptPubKey
  • Witness item count — número de elementos en el witness
  • Witness item length — longitud de cada elemento witness