blockspace.wiki

Weight units and vbytes

Three ways to size a Bitcoin transaction (raw bytes, weight units and vbytes), the exact formulas, and why BTI's books count raw bytes.

A Bitcoin transaction has three sizes. Its raw bytes are its full serialized length. Its weight, in weight units (WU), is what the block limit counts. Its virtual size, in vbytes (vB), is what fee markets price. This page gives the formulas from block.space's data-types reference and says which one BTI uses where.

The formulas #

The data-types reference (citing BIP 141) gives:

stripped_size = serialized size without marker/flag/witness   (bytes)
total_size    = full serialized size                          (bytes)  ← BTI's "raw bytes"
weight        = stripped_size * 3 + total_size                (WU)
vsize         = ceil(weight / 4)                              (vbytes)

Put another way, every non-witness byte costs 4 WU and every byte on the witness side, including the marker, flag and every length prefix, costs 1 WU. A legacy transaction with no witness has weight = 4 × size exactly, so its vsize equals its size.

The reference also gives two exact inversions, used to recover the witness share of a transaction from the figures bitcoind reports:

stripped_size = (weight − total_size) / 3
witness_bytes = total_size − stripped_size = (4·total_size − weight) / 3

The block limit #

The consensus block limit is 4,000,000 WU. Blockspace Value Theory (§3.1) works through what that allows: a block made almost entirely of witness data approaches 4 MB, while the vbyte capacity of a block is 1,000,000 vB (BVT's worked example in §3.6). BVT calls 4 MB × 144 blocks a day × 365 days ≈ 210 GB a year a ceiling, "not a schedule": the most that could be consumed if every block were filled to the weight limit with maximally discounted data, which has never been sustained.

BVT also notes the limit is a social variable: the 4M weight limit is where the community currently believes the decentralization constraint binds, "revisable in either direction".

Two worked transactions #

From the BTI case studies (2026-08-10), with the case studies' own check that base × 3 + size = weight:

transaction size (bytes) weight (WU) vsize (vB)
the first BRC-20 mint, block 779,833 338 620 155
a 3.9 MB jpeg inscription reveal, block 960,962 3,911,459 3,911,741 977,936

The jpeg reveal is almost entirely witness: its file is "nearly a full block", in the case study's words. The case study puts its bytes-to-vbytes ratio, commit included, at about 4.00.

Which one BTI counts #

BTI's design states the rule: raw bytes are the measure; vbytes are an observable. The books apply no weight discounting to backing. But the design keeps both measures on every row, because the ratio of bytes to vbytes is the witness discount, and that is worth measuring in its own right. The data-types reference opens with the same rule: "raw serialized bytes, no weight discounting".

So block.space's boards offer a bytes and a vbytes toggle, and the books carry both. The chain totals the census reports, on the latest reading:

  • raw bytes: 777.05 GB
  • vbytes: 567.70 GB

(as of block 972,306, 2026-10-20 11:06:05 UTC.)

Fees are priced in vbytes #

Fee markets price vbytes. At a fee rate of f sat/vB, the data-types reference says, a witness byte costs f/4 sats and a non-witness byte costs f sats. That one fact explains much of how data is carried on Bitcoin. Large payloads overwhelmingly choose witness envelopes. OP_RETURN, whose bytes are all non-witness, costs about four times as much per byte, and the reference says it wins only for small payloads or where single-transaction atomicity matters.

Size limits beyond the block #

Standard relay policy adds a limit of its own: a standard transaction may weigh at most 400,000 WU, about 100,000 vB. Bigger transactions are valid but must be sent to a miner directly. See relay policy.

Sources #

  1. block.space docs: data types · block.space/docs/datatypes
  2. Blockspace Value Theory · block.space/docs/bvt
  3. block.space docs: measurements · block.space/docs/measurements
  4. block.space meter and summary APIs · block.space/api/summary
  5. Blockspace Holdings records

Live figures: census as of block 972,306, 2026-10-20 11:06:05 UTC. Refreshed hourly.

Updated 2026-10-20 · This page as Markdown