SegWit Is and Isn’t A Blocksize Increase
As opposed to my usual impenetrable rambles, I’m going to keep this one short and sweet. Many claiming SegWit is a block size increase. Many claiming it is not. So what is it from the point of view of the only thing that matters here, the data structures in the code? Let’s answer that now. No references this time, because everything I’m claiming is obvious.
SegWit is a blocksize increase
From the point of view of new nodes, SegWit is a blocksize increase. Witness data is included in conceptual “blocks”, and for a “2.1MB SegWit” block, new nodes will store the full 2.1MB of data in their block data structures. Clearly, once SegWit activates the size of blocks will increase for these upgraded nodes.
A new wire protocol is even designed to handle this redefinition of “block”, with which only SegWit-supporting nodes can communicate.
SegWit is not a blocksize increase
From the point of view of old nodes and the code they run, SegWit is not a block size increase. These nodes still store 1MB of data for “2.1MB SegWit” blocks, and the “block size” from the point of view of these nodes maxes out at 1MB (with a “2.1MB SegWit” block having a size of up to 1MB on old nodes).
Even for old nodes, SegWit remains a capacity increase as pointed out by Jeff Garzik here. From the point of view of old nodes, SegWit makes transactions smaller (wherein new nodes see the larger full transactions, but more block space).
So, let’s end this pointless argument right here.
SegWit is a block size increase. And it also isn’t one. Quantify to whom, and remember that this semantic argument remains a trivial distraction from real scaling solutions.
[From the point of view of politics, the use of the phrase “block size increase” meant something very specific pre-SegWit: lifting MAX_BLOCK_SIZE w.r.t. old nodes. From that political standpoint, SegWit is again not a block size increase. I propose the term “blocksize constant increase” to distinguish the two phenomena.]