You have the choice of 3 dynamic fees (Low / Normal / Priority) that automatically adjust according to the state of the Bitcoin network. When sending, you can also choose the fee option "Custom", which overrides all that and allows you to set an exact value in satoshi per byte of transaction data.



Bitcoin blocks have a limited space, they can only fit so many transactions. When miners choose which transactions to include on blocks, they will choose the ones paying the higher fees. Some transactions take up more space than others, so simply saying that a transaction paid 1000 satoshi in fees doesn't show the complete picture.


Miners optimize block space down to the very last byte, so whenever fees are discussed, the most important metric is satoshi per byte (sat/B). By multiplying the selected sat/B price by the transaction size in bytes you get the final fee value shown in the confirmation screen.


Transaction fee = transaction size ✕ price per byte


It doesn't matter if you are sending 1000 BTC or 0.001, the transaction size depends exclusively on how many previous inputs you are spending, how many destinations the transaction has, and their types. As you see from the images above, a transaction sending 0.0123 BTC has a fee of 710 satoshi, while the second sending 0.0079 BTC has a fee of 7930 satoshi. It all depends on the inputs and outputs used in the transaction. Each input being spent takes between 68 and 149 bytes (even if all inputs come from a single address). Each destination address takes between 31 and 43 bytes.


Let's see two examples below.

  1. A transaction spending a single native segwit input sending to 2 native segwit addresses
    Native segwit input (68 bytes) + native segwit destination (31 bytes) ✕ 2 = 130 bytes

  2. A transaction spending 10 legacy inputs sending to 2 segwit addresses

    Legacy input (149 bytes) ✕ 10 + segwit destination (32) ✕ 2 = 1554 bytes


If both examples above used the same price per byte, the second transaction would have fees more than 10 times greater! Note that none of the calculations above involve the BTC value being sent. Only the number of inputs and outputs matter. Spending a large number of inputs greatly increases the transaction size, that's why if you are a miner, it's recommend to receive less frequent (but higher value) payouts. Spending from native segwit addresses greatly reduces the transaction size, which is why we recommend always receiving into your "default" address.



Disclaimer: this article is a simplification! The term "byte" is being used for familiarity and brevity, but in reality calculations use a "virtual size" and "virtual bytes" according to the segregated witness discount. Base overhead included in every transaction is also being ignored. If you want to get into the nitty-gritty details, you can read this, this or this.


If you want to manually set your fees you can use the sites below:

https://bitcoinfees.earn.com/

https://jochen-hoenicke.de/queue/