Bitcoin fee rates talk about how much data is required to explain the transaction, not how much bitcoin there is.
So, complicated scripts like multisigs or paying to a whole lot of different addresses will be more expensive to send because they take up more bytes. The simpler the transaction, the smaller the amount of data required to express it and the cheaper it will be.
1000 bitcoin locked with a single key in a segwit address us less bytes than 1000 sats locked in a 12 of 12 multisig address. In this example, its cheaper to send the 1000 bitcoin utxo than the 1000 sat utxo.
Is there a way to figure out how much it would cost to send a transaction? For example- if I have 1M sats that are made up of 5 inputs in a single sig HW wallet, how could I figure out how much the fee would be to send those 1M sats another wallet?
Also adding this question on another response in case you don’t know!
It depends on the output type of the UTXOs you are spending.
If they start with
1…, they are Pay to Public Key Hash (P2PKH) aka legacy outputs and spending them their inputs weight 148 vB
3…, they are probably Pay to Script Hash-wrapped Pay to Witness Public Key Hash (P2SH-P2WPKH) aka wrapped segwit outputs and spending them weighs 91 vB for each (since you said they're single-sig)
bc1q… they are Pay to Witness Public Key Hash (P2WPKH, native segwit v0) and their input weight is 68 vB
bc1p… they are Pay to Taproot (P2TR, native segwit v1) outputs and weigh 57.5 vB to spend
So, if e.g. your UTXOs were P2PKH 5 × 148 vB × 100 s/vB = 74 000 sats, if they’re P2WPKH it’s 5 × 68 vB × 100 s/vB = 34 000 sats.
To that you’ll still need to add the weight of the recipient output, change output, and transaction header. Outputs are also different weight depending on type, ranging 31–43 vB. The header should be either 10 vB or 10.5 vB depending on whether your inputs are segwit or not.
Btw, the fee has nothing to do with the value of your UTXO.
A 1k sats UTXO has to pay the same fee as a 1M sats UTXO since they probably would use the same amount of bytes in a block. Maybe that's where your confusion comes from?
If you want to get the absolute fee, you need to know how many (virtual) bytes your tx contains. That indeed depends on your UTXO but not on the value of your UTXO. For example, UTXOs from a multisig setup are more expensive since they contain larger scripts / "are more complicated".
Is there a way to figure out how much it would cost to send a transaction? For example- if I have 1M sats that are made up of 5 inputs in a single sig HW wallet, how could I figure out how much the fee would be to send those 1M sats another wallet?
Sparrow wallet shows you the transaction in hex. If you have the hex string, you should be able to divide the length of that hex string by 2 (since one byte basically fits into two hex characters: 0xff = 255 = 2^8 - 1 and one byte is 8 bits) to get how many bytes this transaction has.
However, since SegWit (Segregated Witness), we use "virtual bytes" for fee rates. So the witness part is weighted less. So it's actually more complicated than just counting bytes.
That's where my knowledge starts lacking, so I'll stop here. Hopefully someone else will chime in and explain it better to you in more detail.
Sure! When calculating the fee, you can divide the sats/vB by the current fee rate in sats/vbyte to get the actual fee amount. Hope this clarifies things for you!
Sure, calculating fees can be confusing at first. To calculate it, divide the current fee rate (in sats) by the size of your transaction in virtual bytes (vB). This will give you the fee in sats/vB. Good luck!
1…
, they are Pay to Public Key Hash (P2PKH) aka legacy outputs and spending them their inputs weight 148 vB3…
, they are probably Pay to Script Hash-wrapped Pay to Witness Public Key Hash (P2SH-P2WPKH) aka wrapped segwit outputs and spending them weighs 91 vB for each (since you said they're single-sig)bc1q…
they are Pay to Witness Public Key Hash (P2WPKH, native segwit v0) and their input weight is 68 vBbc1p…
they are Pay to Taproot (P2TR, native segwit v1) outputs and weigh 57.5 vB to spend0xff = 255 = 2^8 - 1
and one byte is 8 bits) to get how many bytes this transaction has.