A lot of attention is given to Bitcoin’s proof-of-work. It is at the center of how the network ensures its security.
A few other alternatives to proof of work, usually called proof-of-stake systems have been implemented by other distributed consensus systems like Peercoin, NXT and Bitshares.
However, I didn’t realize that Bitcoin implements any sort of proof-of stake in its protocol till last week when I heard Bitcoin’s chief scientist, Gavin Andresen give a talk about Bitcoin’s early days and things that Satoshi may have not known.
First, here is a chart of the transaction volume from Bitcoin’s early days.
See those spikes around Nov 2010. Gavin described that as ‘penny flooding’ or in other words spamming of the network.
So, how did the Bitcoin developers take care of this issue?
Transaction Priority! Buried in the details of transaction-fees is the logic of how the network prioritizes transactions.
Transaction priority is calculated as a value-weighted sum of input age, divided by transaction size in bytes:priority = sum(input_value_in_base_units * input_age)/size_in_bytes
Transactions need to have a priority above 57,600,000 to avoid the enforced limit (as of client version 0.3.21). This threshold is written in the code as COIN * 144 / 250, suggesting that the threshold represents a one day old, 1 btc coin (144 is the expected number of blocks per day) and a transaction size of 250 bytes.
This was a suggestion made by Gavin. And a problem that had been apparently nagging Satoshi for a while. Satoshi wrote a personal email to Gavin describing how this may actually solve the spamming problem. And if you’ve been paying attention to the network ever since, it looks like it has.
But it’s not like the people who have looked under the hood of how Bitcoin works don’t know about transaction priority and what it’s purpose is. It’s that many of us have never thought of it as a proof of stake in the network. At least, I did not till Gavin put it that way in his talk at Bitcore Dev in Boston.