Poderia explicar de forma bem básica sobre esses termos? Até o momento eu achei que sabia como funcionava o Segwit e agora bagunçou tudo na minha mente. Anteriormente ao Segwit o bloco tinha 1 MB de tamanho máximo, certo? Esses 1 MB sempre ocuparam 4 MB em disco?
Eu expliquei um pouco em termos simples aqui:
Fazendo um ELI5 bem simplório, o conjunto da transação, que antes pesava 1 MB, agora pesa 4 MB. Porém, a diferença é que antigamente, a assinatura e scripts da transação eram guardadas junto aos inputs e outputs da transação. No Segwit, elas são movidas para uma espécie de segundo bloco, chamado de Merkle Tree (ou bloco estendido), que na verdade faz parte do todo, junto à "primeira parte do bloco" (onde se guarda os inputs/outputs).
O que isso significa é que a base da transação (agora inputs/outputs) pesa menos, já que essa assinatura, que representava até 65% da transação, não é mais guardada lá. Os nodes "legacy", que não suportam o Segwit, recebem apenas esse bloco base e por isso veem a rede com os olhos de que há apenas 1 MB de tamanho. Já os nodes Segwit também recebem essa assinatura separada (chamada de "Witness"), que representa o restante do espaço (3 MB).
edit:
Uma curiosidade: de certa forma, as transações Segwit são vistas como "anyone-can-spend" pelos nodes desatualizados simplesmente por que eles não veem a assinatura da transação. Mas como todo o restante da rede vê, eles não conseguem roubar suas moedas.
Focando mais na sua pergunta (simplificando):
- Os blocos, que pesavam 1 MB, recebiam as transações compostas pela base (inputs+outputs) + signature. O que mais ocupava espaço era a parte da assinatura (signature).
- Com o Segwit, as transações agora são compostas apenas pelos inputs+outputs (a base). A assinatura (signature) agora é guardada em outro lugar. Esse lugar pode pesar até os outros 3 MB, enquanto a base da transação ainda continua com os seus 1 MB.
Você pode pensar nisso como se a sua transação fosse uma casa que tem o tamanho de 1 MB. Lá dentro, você coloca os inputs+outputs+signature. Com o Segwit, você constroi uma garagem. A casa continua do mesmo tamanho, mas agora você consegue tirar a signature (que pesa até 65% do conteúdo) e colocar na garagem. O conjunto da propriedade aumentou, mas a casa continua do mesmo tamanho.
Os blocos antigos veem só a casa (base da transação), enquanto os atualizados também veem a garagem (assinatura). As transações legacy pesam mais em relação as Segwit por que essa assinatura continua guardada dentro da casa, junto com a base (inputs+outputs), e a garagem não é utilizada.
Você pode se perguntar: "Mas não é praticamente a mesma coisa? Se minha transação pesa a mesma coisa independente da assinatura estar dentro da casa ou dentro da garagem, por que as transações Segwit são mais baratas? Eu não só movi ela de lugar?"
Resposta: Por que agora o tamanho das transações são calculadas de forma diferente.
Você calcula o vSize com a formula:
(3 * base_size + total_size) / 4Se eu tenho uma transação que pesa 1000 kb e 0 de witness data (a assinatura dentro da casa): (3 * 1000) + 1000 = 4000 / 4 = 1000 vbytes
Se eu tenho uma transação que pesa 800 kb e 200 de witness data (a assinatura fora da casa): (3 * 800) + 1000 = 3400 / 4 = 850 vbytes
Ou seja, quanto mais witness data, mais "leve" fica a transação na nova medida. Ambos "pesam a mesma coisa", mas no final, há uma grande diferença.