4

I read this post on Bitcoin Scalability. As far as I understand sequence of steps in Bitcoin, simplified version of performing transaction should be following:

On Sender's side:

  1. Create transaction
  2. Generate signature and sign
  3. Broadcast the transaction to peers

On Peer's side:

  1. Get the transaction
  2. Verify signature
  3. Verify transaction
  4. Pass to the next peer. - ???

//if a peer is a miner

  1. Collect transactions into block
  2. Calculate PoW for the block
  3. If found include it to his version of the blockchain
  4. Broadcast the block (with nonce and targe)

Other peers:

  1. Get the block
  2. Verify that PoW for block is Valid
  3. Include the block into their version of the blockchain

I would like to understand Bitcoin's performance speed at every step in general or given my specifications of the laptop if possible. How I can calculate signature generation, signature verification, transaction verification, block PoW verification, **etc speed?**

  • 1
    Typically, it's easy to benchmark times ($end - $start) and send them somewhere. Is there particular software you wish to test? – karimkorun Oct 10 '15 at 17:02
  • Thanks for you reply. No I didn't have anything particular on my mind, but I am have more experience with Python and C++, so I thought of those implementations. Yes as you said I thought of find the start and stop timestamps between parts of code in charge of signature generation/verification, transaction verification, and then just subtract them from each other. – Nur Oct 10 '15 at 17:37
0

All of these things you want to calculate are highly dependent not just on the hardware you use, but the software you use. For example you can generate signatures many different ways and every bitcoin wallet generates them a little differently. The signature generation performance of Java in bitcoinJ is going to different than that of Go in btcwallet is going to be different than that of C++ in bitcoin core and so on. In addition, deterministic signatures are going to have a different performance profile than non-deterministic signatures and so on.

That said, if you really wanted to, you can run some performance testing on any one of these, though not all of them exist. For verifying signatures in btcd, there is a benchmark test that you can use.

Note that block verification (or creation) necessarily means verification of all transactions in the block as well as checking the proof-of-work. Checking the proof-of-work, by the way, is really as simple as a calculation of a double-sha256, or a single "hash" that mining gear can do billions or trillions of per second.

  • Thanks for you reply. To be honest I have never used Go, I basically have academic experience with Python and C++. I installed Go though, but even following the guide from github, still can't properly figure out how to run this benchmark test. – Nur Oct 10 '15 at 17:40
  • It should be pretty straightforward. Try go test -bench BenchmarkSigVerify in the btcd/btcec directory. – Jimmy Song Oct 10 '15 at 22:09
  • Sorry for bothering, so as you said I ran go test -bench BenchmarkSigVerify and received an error: go tool: no such tool "6g" As I've read it can be problem with .bashrc, so I checked it for export GOROOT=/usr/lib/go and it was there, but to be sure I did source .bashrc, still the same error – Nur Oct 11 '15 at 7:46
  • Totally depends on your setup. Wherever the btcd repository is, make sure the GOPATH is pointed there. Typically this is /home/<username>/go. export GOPATH=/home/myusername/go should set it up. – Jimmy Song Oct 12 '15 at 23:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.