I often see claims that Segwit increases transactions per block by 1.7x to 2x. I'm not sure if this is true, but if I do the math myself, I don't get this number.
My understanding is:
1) The “weight” calc changes from:
weight = transaction size to: weight = non_sig_siz * 4 + sig_size
where total max "weight" per block goes from
1024^2 to 4*(1024^2).
Really weight is a new concept, previously it was measured in bytes.
2) That typical transactions are around 500b, and that signatures are 65b of that. They vary, but you can check here for average historical transaction sizes:
((500.0 – 65.0)*4+65)/4.0 = 451.25 1-(451.25/500) = 9.7%
Suggesting we’d only get about 10% not 70-100% more transactions with segwit.
I'm not sure if there a mistake in my math, or my understanding of segwit weights, or typical tx sizes, or something else. I've seen 1.7 to 2x in posts from people more knowledgeable than me, so I would be interested to see how this works.
Of course if transactions were not typical, and had almost nothing but signature data in them, you could fit far far more transactions in a block. E.g. if you could find a way to create a transaction that was only signature data, you could fit about 8x as many transactions per block, though those transactions would be useless.
For typical realistic use cases, is my 10% figure in the right order of magnitude, or is there something I'm missing that would allow 2x as many realistic useful transactions?