Mining demystified
Heavy tools
gigahash
terahash
petahash
1
PH
=
b50f642411733cd63264d3bedc046a5364ff3c77d2b37ca298ad8f1b5a9f05ba
x
1 000 000 000 000 000
(1 quadrillion)
~
58 000
TB
each second
!
1
PH
=
b50f642411733cd63264d3bedc046a5364ff3c77d2b37ca298ad8f1b5a9f05ba
x
1 000 000 000 000 000
(1 quadrillion)
~
58 000
TB
each second
!
Current Bitcoin network hash rate: ~50 PH/s
Y U NEED SO MANY HASHES?
Mining:
creation of new bitcoins and
distributing transactions
Idea: Make it really hard to mine
hard mine
mine hard
mine hard
Get it? :)
Hard to do, easy to verify
Proof of work
A new block roughly every 10 minutes
New block references previous block
Forming a ...?
Forming a block chain
“Side effect”: adding new bitcoins
25 bitcoins reward per block
~7700 EUR every 10 minutes
~400m EUR per year
Reward halves every
210,000 blocks = 4 years
Next halving:
~ 21 August 2016
How mining works
Cryptographic function called
“double SHA-256”
Secure Hash Algorithm
Invented by NSA
OMG!
Nothing to fear,
all math, all open source
256 bits “digest size”
(length of resulting hash)
“hello”
first round of SHA-256:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
second round of SHA-256:
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50
Hash length of 64 characters:
32 hex octets with 8 bits each = 256 bits
Sort of a checksum
Virtually impossible to reverse
First step to mine a new block:
Collecting new transactions
Second step:
Hashing of block header
If hash starts with enough zeros,
you found a block
000000000000000024aed4ca327f8957bb5f112787ff5350971a3fe38c144f14
Bingo!
If not, increment “nonce” or other values in
block header and try again
A quadrillion times!
Enough zeros?
Currently 17:
00000000000000000
Determined by “difficulty”,
adjusted ~ every 2 weeks
Pooled mining
Share work with other miners
Pool participants send partial work
to earn shares
For example all hashes
with 12 leading zeros
Compensation according to share
If a block was found,
new work is being sent out
Pool communication protocols:
Stratum, Getwork, Getblocktemplate
Stratum used by most pools
Stratum uses JSON-RPC
JavaScript Object Notation
Remote Procedure Call
Human-readable (sort of):
{"id": 1, "method": "mining.subscribe", "params": []}
To be continued...
Thanks for listening!
@meinharrd
meinhard@benn.org
benn.org
Presentation held at
Bitcoin Startups Meet-up Berlin
6 May 2014
CC-BY-NC 2014 Meinhard Benn

Bitcoin Mining Demystified