I've heard that the standard client prioritizes which transaction to relay based on the Bitcoin Days Destroyed and the fee paid on the transaction, but what is the exact formula used to determine which transaction has higher priority? That is, how does the standard client prioritize which transaction to send to other nodes first?
-
possible duplicate of What is the coin selection algorithm?– Stephen GornickCommented Apr 11, 2012 at 1:19
-
2@StephenGornick Not a duplicate, this relates to relaying transactions while the one you linked relates to prioritizing coins used in transactions.– BinaryMageCommented Apr 11, 2012 at 5:08
-
Maybe you should precise what you mean by relay. Are you interested in the order transactions are relayed to other peers, or the order (and maybe quantity) that are considered to build new blocks?– Stéphane GimenezCommented Apr 11, 2012 at 21:42
2 Answers
The priority of a transaction is (the sum of (coin age in blocks * coin value in satoshis) over all the inputs in the transaction) divided by the size of the transaction in bytes.
Here's a random example transaction copied from http://bitcoincharts.com/bitcoin/txlist/:
It has 2 inputs (both of which have since been spent in other (confirmed) transactions rendering this transaction unconfirmable):
- one for 0.1005 BTC from block 165774
- one for 0.0995 BTC from block 165777
It is 439 bytes long, and has a priority of 432,232,688.
The most recent blocks in the blockchain is 175262 at the time of writing.
I sum the (age * values) for each transaction and divide by size. The + 1
is because transactions confirmed in the newest block are considered to have an age of 1, not 0:
>>> current_block = 175262
>>> ((current_block - 165774 + 1) * 0.1005e8 +
(current_block - 165777 + 1) * 0.0995e8) / 439
432232687.92710704
As you can see, the priority of a transaction will go up as new blocks are found.
-
This is the priority the client uses to decide which transactions to include in mined blocks. This is most likely what someone wants to know when they ask about transaction priority. Commented Apr 12, 2012 at 1:35
-
Agreed. Great answer but not to the right question. It would be an excellent answer to this question, I'd suggest you copy it there and remove it from here. Commented Apr 12, 2012 at 1:42
-
I think this is the calculation the question was referring to. It's just that it's not used to decide which transactions to relay. There's no priority calculation when deciding which transactions to relay. Commented Apr 12, 2012 at 6:35
The rules for the Bitcoin.org client are to keep the first transaction in which a bitcoin address is spent and to discard without relaying any others that might arrive.
So the priority is based on chronological time of arrival.
There has been talk of variations that would allow a replacement transaction with a higher fee to supercede an earlier transaction that has not yet been confirmed.
And there is an attack vector that describes how this priority can be modified to facilitate double spending.