Transaction commission
Cryptocurrency Transaction Fees (Transaction Commission) can be included in any transaction in the Bitcoin network[1].
Contents
Description
Currently a large amount of transactions is processed in a way that commission isn’t necessary. At the same time in case if transaction has a lot of entry points (e.g. it carries large amounts of data) a small commission is not uncommon.
Any miner can be the one who processes the transaction and earns the commission fee. When the network finds a new block it includes all information about transactions including their commission. Thus any user of group of users who find that block will gain both the reward for the block and the commission fees for every transaction included in it.
Including commission in a transaction is a voluntary decision but a user who finds a block can attach any transactions he wants to the said block. That way transactions with 0 commission have the lowest priority when transactions with even the minimal possible commission (~0.0001 BTC at the current moment) have standard priority and will more probably be included in the block[2].
In the future along with lowering of reward for each block the main source of miners’ income will become commission for transactions. Even when block reward will disappear altogether there will still be point in mining because users will gain commission for all the transactions when they find a block.
Traditionally, the sender pays the full Bitcoin network fee; deducting the fee from the amount received by the recipient will often be considered an incomplete payment, although some wallets have a “sender-pays-fee” feature where the miner fee is deduced from send amount.
Transaction fees are voluntary on the part of the person making the bitcoin transaction, as the person attempting to make a transaction can include any fee or none at all in the transaction. On the other hand, nobody mining new bitcoins necessarily needs to accept the transactions and include them in the new block being created. The transaction fee is therefore an incentive on the part of the bitcoin transactor to make sure that a particular transaction will get included into a block[3].
Because of deep technical reasons, bitcoin block space is a scarce commodity, getting a transaction mined can be seen as purchasing a portion of it. The price of block space is set by supply and demand, although in the real world the supply of space for transactions is extremely noisy, because more becomes available (and has to be immediately consumed or it’s lost forever) every time a block is mined, and block mined is an intentionally random process, that randomness being essential for bitcoin’s operation. Demand is random and cyclical. Random because each transaction is generated individually so the total amount is noisy (although that averages out to be somewhat smooth at scale) and has both daily and weekly cycles, with more transactions done during the day than at night. Demand can also be affected by speculative movements in the exchange rate. Bram Cohen blog post with helpful background to the market for block space;
Therefore the market for block space asks users to make a tradeoff between confirmation time and cost. Users with high time requirements may pay a higher than average miner fee to be confirmed quickly, while more patent users under less time pressure can save money by being prepared to wait longer.
Reference Implementation
The following sections describe the behavior of the reference implementation as of version 0.12.0. Earlier versions treated fees differently, as do other popular implementations (including possible later versions).
Sending transactions
Transaction with 0 commission can be successfully sent if following conditions are met:
- Its size is lower than 1000 bytes[4]
- Its exit points have value of 0.01 BTC or higher
- Its priority is high enough
In other cases the transaction will be rounded down to 1000 bytes and the commission of 0.0001 BTC will be added. For every following 1000 bytes in that transaction another 0.0001 BTC of commission will be added.
Thus for a transaction of 750 bytes the commission will be 0.0001 BTC and for a transaction of 1001 bytes it will be 0.0002 BTC. Standard Bitcoin wallets always ask their users for approval of commission and if user declines it the transaction can be cancelled. At the current moment an average transaction amounts to roughly 500 bytes which corresponds to a commission of 0.0001 BTC.
Users can decide to pay a predefined fee rate by setting `-paytxfee=<n>;`(or `settxfee <n>` rpc during runtime). A value of `n=0` signals Bitcoin Core to use floating fees. By default, Bitcoin Core will use floating fees.
Based on past transaction data, floating fees approximate the fees required to get into the `m`th block from now. This is configurable with `-txconfirmtarget=<m>` (default: `2`).
Sometimes, it is not possible to give good estimates, or an estimate at all. Therefore, a fallback value can be set with `-fallbackfee=<f>;` (default: `0.0002` BTC/kB).
At all times, Bitcoin Core will cap fees at `-maxtxfee=<x>;` (default: 0.10) BTC.
Furthermore, Bitcoin Core will never create transactions smaller than the current minimum relay fee.
Finally, a user can set the minimum fee rate for all transactions, which defaults to 1000 satoshis per kB.
Note that a typical transaction is 500 bytes.
Inclusion in blocks
In this part of the article the current principle of inclusion of transactions into blocks will be discussed. This setting is flexible for every miner if they want to have blocks of lower or higher size that include lower or higher amount of transactions accordingly.
30 000 bytes are reserved for highest priority transactions and they don’t depend on commission in any way. After that all transactions with lower than highest priority are added to the block. The higher the commission the higher the priority. A block’s maximum size is 300 000 bytes. Transactions that weren’t included in their blocks will remain in miners’ memory storage and can be included in next blocks.
Then transactions that pay a fee of at least 0.00001 BTC/kb are added to the block, highest-fee-per-kilobyte transactions first, until the block is not more than 750,000 bytes big.
The remaining transactions remain in the miner’s “memory pool”, and may be included in later blocks if their priority or fee is large enough.
For Bitcoin Core 0.12.0 zero bytes relay-and-mining-priority-transactions in the block are set aside for the highest priority transactions. Transactions are added highest-priority-first to this section of the block.
Transaction relaying
The reference implementation’s rules for relaying transactions across the peer-to-peer network are very similar to the rules for sending transactions, as a value of 0.00001 BTC is used to determine whether or not a transaction is considered “Free”. However, the rule that all outputs must be 0.01 BTC or larger does not apply. To prevent “penny-flooding” denial-of-service attacks on the network, the reference implementation caps the number of free transactions it will relay to other nodes to (by default) 15 thousand bytes per minute.
Transaction settings
Settings | Default value (unit) |
---|---|
paytxfee | 0.0000 (BTC) |
limitfreerelay | 15 (thousand bytes per minute) |
mintxfee | 0.0001 (BTC) |
blockmaxsize | 300000 (bytes) |
blockminsize | 0 (bytes) |
blockprioritysize | 30000 (bytes) |
Technical details
Transaction priority is calculated as following:
priority = sum * (input_value_in_base_units * input_age) / size_in_bytes
In order to avoid limitation the transaction’s priority has to be no less than 57,600,000. Limit is written in code as COIN * 144 / 250 which implies that transaction has a “coin” with the age of one day (144 is estimated number of blocks mined per day) and the size of transaction is 250 bytes.
Let’s provide an example of a transaction that has 2 entry points one of which is 5 BTC with 10 approvals and the other one is 2 BTC with 2 approvals. Transaction’s size is 500 bytes and thus its priority is equal to
(500000000 * 10 + 200000000 * 3) / 500 = 11,200,000
Fee Plotting Sites
As of May 2016, the following sites seem to plot the required fee, in satoshi per (kilo)byte, required to get a transaction mined in a certain number of blocks. Note that all these algorithms work in terms of probabilities.
- https://bitcoinfees.21.co/
- https://bitcoinfees.github.io/
- https://statoshi.info/dashboard/db/fee-estimates
- http://p2sh.info/dashboard/db/fee-estimation
- https://www.bitcoinqueue.com/2d.html
External links
- https://anduck.net/bitcoin/fees/ – Shows what kind of fees filled up recent blocks
- https://btc.com/stats/unconfirmed-tx – the state of the website’s mempool broken down by fee rate
- https://jochen-hoenicke.de/queue/#1w – another mempool broken down by fee rate site
- https://esotericnonsense.com/ – yet another mempool site, also very good
- http://mempool.us.to/tx.html – Tells you where a unconfirmed txid is in the queue based on its fee rate (Note that not all miners use the same algorithm)
- https://estimatefee.com/ – You can click any of the transactions in that graph to get more info (like its “effective fee rate” which uses recursive ancestors/descendants for CPFP) and an estimated amount of blocks it’ll take to confirm. It works with any transaction in the top 100MB of the bitcoin mempool. And you can enter in any transaction txid for info when you’er wondering why it doesn’t confirm.