<p>I instrumented the Satoshi client to see hwo long a transaction verification takes. This includes the signature verification, but is probably more of an upper bound as it also includes several disk seeks.</p>

<p><img src="https://i.sstatic.net/7IEMX.png" alt="Transaction verification time"></p>

<p>4500 Transactions. With the following percentiles:</p>

<ul>
<li>50 percentile 5.0</li>
<li>75 percentile 10.0</li>
<li>85 percentile 15.0</li>
<li>95 percentile 36.0</li>
<li>99 percentile 207.27</li>
</ul>

<p>While not at all representative it would point towards your estimate being correct.</p>

<p>Note: this was taken on a Lenovo T420 with spinning disks.</p>

CC BY-SA 3.0
2013-01-31T21:21:09.420Z
Just testing the digital signature verification using the OpenSSL code on a single core of a Core 2 Q9550, I get 725 microseconds per verification, a shade under 1 millisecond. This may be a bit unrealistic because all the ECDSA code is hot in the cache and the branch prediction is primed. (Test was doing verifications in a tight loop.)
David Schwartz
CC BY-SA 3.0
2013-01-31T22:23:25.787Z
The 0.8 code (unreleased currently) has a -benchmark function which measures block connection and signature verifications. You are certainly not just measuring signature validation.
Pieter Wuille
CC BY-SA 3.0
2013-02-01T08:56:25.583Z
Yep, I needed the benchmark for something else, where the whole processing time of transactions was more relevant.
cdecker
CC BY-SA 3.0
2013-01-31T16:28:21.663Z
2013-01-31T16:28:21.663Z
cdecker
<p>It depends a lot on the hardware, and on the architecture. OpenSSL use some assembly-optimized routines, which result in a speed factor of +- x2 between 32 bit and 64 bit (the latter is faster). That said, I've seen verifications taking around 0.47 ms on an Intel Xeon E5-1650 @ 3.20GHz, using 64-bit code. </p>

<p>Also, version 0.8 will actually do signature verification in parallel. There is also a patch with an optimized ECDSA verifier for the specific curve we're using, which should give a 20% speedup (discovered by Hal Finney). This patch will probably not make it into v0.8, though.</p>

CC BY-SA 3.0
2013-01-30T23:18:40.797Z
2013-01-30T23:18:40.797Z
Pieter Wuille
<p>Assuming:</p>

<ul>
<li>An average modern computer</li>
<li>Using a single thread, as the current Satoshi client does</li>
<li>Using the OpenSSL library, as the Satoshi Bitcoin client does</li>
<li>The signature is not in the signature cache</li>
</ul>

<p>I speculate that the time may be between 1 and 10 msec.</p>

<bitcoin-core><performance><signature><ecdsa>
How much time it takes to verify a Bitcoin signature in the Satoshi client?
SDL
# How much time it takes to verify a Bitcoin signature in the Satoshi client?

(Asked by: username_0 on 2013-01-30)

Assuming:

* An average modern computer
* Using a single thread, as the current Satoshi client does
* Using the OpenSSL library, as the Satoshi Bitcoin client does
* The signature is not in the signature cache

I speculate that the time may be between 1 and 10 msec.

**Tags:** bitcoin-core, performance, signature, ecdsa


---

## 2 answers

### Answer by username_3 on 2013-01-30. Score: 4 | Accepted answer

It depends a lot on the hardware, and on the architecture. OpenSSL use some assembly-optimized routines, which result in a speed factor of +- x2 between 32 bit and 64 bit (the latter is faster). That said, I've seen verifications taking around 0.47 ms on an Intel Xeon E5-1650 @ 3.20GHz, using 64-bit code.

Also, version 0.8 will actually do signature verification in parallel. There is also a patch with an optimized ECDSA verifier for the specific curve we're using, which should give a 20% speedup (discovered by Hal Finney). This patch will probably not make it into v0.8, though.


---

### Answer by username_1 on 2013-01-31. Score: 4

I instrumented the Satoshi client to see hwo long a transaction verification takes. This includes the signature verification, but is probably more of an upper bound as it also includes several disk seeks.

![Transaction verification time](https://i.sstatic.net/7IEMX.png)

4500 Transactions. With the following percentiles:

* 50 percentile 5.0
* 75 percentile 10.0
* 85 percentile 15.0
* 95 percentile 36.0
* 99 percentile 207.27

While not at all representative it would point towards your estimate being correct.

Note: this was taken on a Lenovo T420 with spinning disks.

> **Comments:**
> **username_2**: Just testing the digital signature verification using the OpenSSL code on a single core of a Core 2 Q9550, I get 725 microseconds per verification, a shade under 1 millisecond. This may be a bit unrealistic because all the ECDSA code is hot in the cache and the branch prediction is primed. (Test was doing verifications in a tight loop.)  
> **username_3**: The 0.8 code (unreleased currently) has a -benchmark function which measures block connection and signature verifications. You are certainly not just measuring signature validation.  
> **username_1**: Yep, I needed the benchmark for something else, where the whole processing time of transactions was more relevant.  

---

