💡 The Plain-English Definition
Since the SegWit upgrade — Segregated Witness, the 2017 change to how Bitcoin stores transaction data — Bitcoin measures a transaction’s size in weight units rather than plain bytes. Signature data, called witness data, counts at only a quarter of the weight of the rest. A virtual byte (vByte) is simply weight units divided by four. This discount is why SegWit and Taproot transactions cost less in fees than legacy ones.
🤔 But Why Though?
Before SegWit, transaction size was measured in raw bytes and the block-size limit was 1MB. SegWit needed to raise the effective capacity of a block while staying backward compatible — meaning old nodes (computers that validate the chain) that didn’t understand SegWit should still be able to check the network. The fix was to introduce a new measurement: the block limit became 4 million weight units rather than bytes, with different parts of a transaction given different weights.
Non-witness data — inputs, outputs, version numbers, the parts old nodes also read — counts at 4 weight units per byte. Witness data — the signatures and scripts that SegWit moved into a separate witness section — counts at just 1 weight unit per byte. The discount works as an incentive: upgraded full nodes can validate the separately stored signature data, while older nodes can skip it. By making witness data cheaper to include, SegWit nudged people toward the newer address formats that use it.
To turn weight into vBytes for a fee calculation, you divide the total weight by 4. Take a transaction with 600 bytes of non-witness data and 200 bytes of witness data: that’s (600 × 4) + (200 × 1) = 2,600 weight units, or 650 vBytes. At a feerate — fee per vByte — of 10 sat/vByte, the fee comes to 6,500 satoshis. This is why the same payment costs less from a Native SegWit (bc1q) or Taproot (bc1p) address than from a Legacy (1…) one: the newer transactions put more of their data in the discounted witness section, so they work out to fewer vBytes and a lower fee at any given feerate.
🌍 The Real-World Analogy
Think of weight units like a shipping rate that charges less for the packaging than for the goods inside. You’re shipping a box of books with some bubble wrap. The books — non-witness data — are charged at the standard rate. The bubble wrap — witness data — is charged at a quarter of the rate, because it’s part of the protection that makes the delivery work, not the core content. Your total cost depends on both, but leaning on the cheaper “bubble wrap” keeps it lower than padding the box with more “books.”
⚡ So What?
This is why address type matters for fees: sending from Legacy (1…) addresses costs more than sending from SegWit (bc1q) or Taproot (bc1p) ones. If you’re still on Legacy addresses, switching to Native SegWit or Taproot for new transactions typically saves 20–40% in fees. And when you estimate a fee, the unit to use is vBytes, not raw bytes — most wallets and fee tools already do this for you, but knowing why explains why different wallet types quote different fees for the same payment.
