← Bitcoin Encyclopedia

Weight Units and vBytes

🌿 Intermediate

💡 The Plain-English Definition

After the SegWit (Segregated Witness — the 2017 upgrade that changed how Bitcoin transaction data is stored) upgrade, Bitcoin measures transaction size in weight units rather than bytes — with signature data (witness data) counted at one quarter the weight of other transaction data. A virtual byte (vByte) is 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 increase effective block capacity while remaining backward compatible — old nodes that didn’t understand SegWit should still be able to validate the network. The solution: introduce a new measurement system where the block limit is 4 million weight units (not bytes), and apply different weights to different parts of a transaction.

Non-witness data (inputs, outputs, version numbers — the parts old nodes also read) counts at 4 weight units per byte. Witness data (signatures and scripts — the parts moved to a separate witness section by SegWit) counts at 1 weight unit per byte. This discount makes sense as an incentive: SegWit signature data is stored separately and full nodes that have upgraded can validate it, while older nodes can skip it. By making witness data cheaper to include, SegWit encouraged adoption of the new address formats that use witness data.

Converting to vBytes for fee calculation: divide total weight by 4. A transaction with 600 bytes of non-witness data and 200 bytes of witness data has (600 × 4) + (200 × 1) = 2,600 weight units, which equals 650 vBytes. If the current feerate is 10 sat/vByte, the fee is 6,500 satoshis. This is why the same payment amount costs less in fees when sent from a Native SegWit (bc1q) or Taproot (bc1p) address than from a Legacy (1…) address: the SegWit and Taproot transactions include more data in the discounted witness section, resulting in fewer vBytes and lower fees at any given feerate.

🌍 The Real-World Analogy

Think of weight units like a shipping rate that charges less for lightweight packaging material than for the goods themselves. You’re shipping a box of books with some bubble wrap. The books (non-witness data) are charged at standard rate. The bubble wrap (witness data) is charged at a quarter of the standard rate because it’s part of the protection system that makes the delivery work, not the core content. Your total shipping cost depends on both, but using more efficient “bubble wrap” (witness data) keeps the cost lower than padding the box with more “books” (non-witness data).

⚡ 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) addresses. If you’re currently using Legacy addresses, switching to Native SegWit or Taproot for new transactions typically saves 20–40% in fees. When estimating transaction fees, use vBytes (not raw bytes) as the unit — most wallets and fee estimation tools already do this automatically, but knowing why explains why different wallet types show different fee estimates for the same payment.

Part of The Bitcoin Encyclopedia 167 terms, plain English, no jargon.