¿Cuánto tiempo lleva verificar una firma de Bitcoin en el cliente Satoshi?

Asumiendo:

  • Una computadora moderna promedio
  • Usando un solo hilo, como lo hace el cliente Satoshi actual
  • Usando la biblioteca OpenSSL, como lo hace el cliente Satoshi Bitcoin
  • La firma no está en la caché de firmas.

Especulo que el tiempo puede estar entre 1 y 10 mseg.

Respuestas (2)

Depende mucho del hardware y de la arquitectura. OpenSSL utiliza algunas rutinas optimizadas para ensamblaje, lo que da como resultado un factor de velocidad de +- x2 entre 32 bits y 64 bits (este último es más rápido). Dicho esto, he visto verificaciones que tardan alrededor de 0,47 ms en un Intel Xeon E5-1650 @ 3,20 GHz, usando un código de 64 bits.

Además, la versión 0.8 realmente verificará la firma en paralelo. También hay un parche con un verificador ECDSA optimizado para la curva específica que estamos usando, que debería dar un 20% de aceleración (descubierto por Hal Finney). Sin embargo, este parche probablemente no llegará a la v0.8.

Instrumenté al cliente Satoshi para ver cuánto tiempo toma la verificación de una transacción. Esto incluye la verificación de la firma, pero probablemente sea más un límite superior, ya que también incluye varias búsquedas de disco.

Hora de verificación de la transacción

4500 Transacciones. Con los siguientes percentiles:

  • percentil 50 5.0
  • percentil 75 10,0
  • percentil 85 15,0
  • percentil 95 36,0
  • percentil 99 207,27

Si bien no es del todo representativo, indicaría que su estimación es correcta.

Nota: esto fue tomado en un Lenovo T420 con discos giratorios.

Solo probando la verificación de la firma digital usando el código OpenSSL en un solo núcleo de un Core 2 Q9550, obtengo 725 microsegundos por verificación, una sombra por debajo de 1 milisegundo. Esto puede ser un poco poco realista porque todo el código ECDSA está activo en el caché y la predicción de bifurcación está preparada. (La prueba estaba haciendo verificaciones en un ciclo cerrado).
El código 0.8 (inédito actualmente) tiene una función de referencia que mide la conexión de bloques y las verificaciones de firmas. Ciertamente, no solo está midiendo la validación de firmas.
Sí, necesitaba el punto de referencia para otra cosa, donde todo el tiempo de procesamiento de las transacciones fuera más relevante.