What is the weight of a block that contains no pay-to-witness scripts? I'm trying to understand block weight, a metric introduced by segwit (BIP-141):

block weight = 3 * base size + total size


"base size" is the length of a pre-segwit block, which contains only serialized base transactions. "total size" is the length of a post-segwit block, which contains both serialized base transactions and serialized witness transactions (as defined in BIP-144). The weight of any block must not exceed 4 MB.

The weight of a block without pay-to-witness scripts can found by computing total size. It's tempting to set base size equal to total size:

block weight = 3 * base size + base size = 4 * base size


But this assumes the length of the serialization of a non-segwit base transaction equals the length of the serialization of a non-segwit witness transaction. This doesn't appear to be the case:



The witness transaction serialization format appears to follow the structure shown above (which is also the input to find wtxid). Notice two additional bytes before the list of inputs (marker and flag, respectively). Moreover, the witness requires at least one byte (the witness field count) even if no fields are present.

In other words, a witness transaction serialization will always be at least three bytes longer than a base transaction serialization, regardless of whether a witness is present.

If this is correct, then segwit is in fact reducing the block size limit for blocks devoid of pay-to-witness scripts by a factor proportional to the number of transactions in the block.

What am I missing?
The witness serialization format only applies to transactions that have witnesses. If a transaction does not have witnesses, then its witness serialization format is the non-witness serialization format. 

From BIP 144:


  If the witness is empty, the old serialization format should be used.