Wie lange dauert es, eine Bitcoin-Signatur im Satoshi-Client zu verifizieren?

Angenommen:

  • Ein durchschnittlicher moderner Computer
  • Verwenden eines einzelnen Threads, wie es der aktuelle Satoshi-Client tut
  • Verwenden der OpenSSL-Bibliothek, wie es der Satoshi-Bitcoin-Client tut
  • Die Signatur befindet sich nicht im Signatur-Cache

Ich spekuliere, dass die Zeit zwischen 1 und 10 ms liegen kann.

Antworten (2)

Es hängt viel von der Hardware und der Architektur ab. OpenSSL verwendet einige Assembly-optimierte Routinen, die zu einem Geschwindigkeitsfaktor von +- x2 zwischen 32 Bit und 64 Bit führen (letzteres ist schneller). Allerdings habe ich gesehen, dass Überprüfungen auf einem Intel Xeon E5-1650 bei 3,20 GHz mit 64-Bit-Code etwa 0,47 ms dauerten.

Außerdem wird die Version 0.8 tatsächlich parallel die Signaturprüfung durchführen. Es gibt auch einen Patch mit einem optimierten ECDSA-Verifizierer für die spezifische Kurve, die wir verwenden, was eine Beschleunigung von 20 % bewirken sollte (entdeckt von Hal Finney). Dieser Patch wird es aber wahrscheinlich nicht in v0.8 schaffen.

Ich habe den Satoshi-Client instrumentiert, um zu sehen, wie lange eine Transaktionsverifizierung dauert. Dies schließt die Signaturprüfung ein, ist aber wahrscheinlich eher eine Obergrenze, da es auch mehrere Festplattensuchen umfasst.

Transaktionsüberprüfungszeit

4500 Transaktionen. Mit folgenden Perzentilen:

  • 50. Perzentil 5,0
  • 75. Perzentil 10,0
  • 85. Perzentil 15,0
  • 95. Perzentil 36,0
  • 99. Perzentil 207,27

Auch wenn dies keineswegs repräsentativ ist, würde dies darauf hindeuten, dass Ihre Schätzung korrekt ist.

Hinweis: Dies wurde auf einem Lenovo T420 mit sich drehenden Festplatten aufgenommen.

Wenn ich nur die Überprüfung der digitalen Signatur mit dem OpenSSL-Code auf einem einzelnen Kern eines Core 2 Q9550 teste, erhalte ich 725 Mikrosekunden pro Überprüfung, eine Nuance unter 1 Millisekunde. Dies kann etwas unrealistisch sein, da der gesamte ECDSA-Code heiß im Cache ist und die Verzweigungsvorhersage vorbereitet ist. (Test führte Überprüfungen in einer engen Schleife durch.)
Der 0.8-Code (derzeit unveröffentlicht) hat eine -Benchmark-Funktion, die Blockverbindungs- und Signaturüberprüfungen misst. Sie messen sicherlich nicht nur die Signaturvalidierung.
Ja, ich brauchte den Benchmark für etwas anderes, wo die gesamte Verarbeitungszeit von Transaktionen relevanter war.