Glossário / Mineração e consenso
Peso de bloco
- O que é o peso de bloco?
- O peso de bloco mede um bloco de bitcoin em uma escala na qual um byte de dados de testemunha custa 1 unidade e qualquer outro byte custa 4, com um limite de 4.000.000 unidades.
Especificação no BIP-141.
O peso existe porque os bytes não custam todos o mesmo para um nó. Os dados de assinatura podem ser descartados depois que uma transação fica enterrada, então o BIP141 os precificou em um quarto de todo o resto e fixou o orçamento em 4.000.000 unidades por bloco. Seu saque compete por esse orçamento, e o desconto é a razão pela qual enviar de um endereço moderno custa menos do que enviar de um antigo.
Como funciona
A fórmula do BIP141 diz: o peso é igual ao tamanho base multiplicado por três, mais o tamanho total. O tamanho base é o bloco serializado do modo antigo, com as testemunhas removidas; o tamanho total é a serialização completa. Escrita ao contrário, a mesma regra diz quatro unidades por byte que não é de testemunha e uma unidade por byte de testemunha, que é a versão que vale a pena memorizar.
Divida o peso por quatro e arredonde para cima e você obtém bytes virtuais, a unidade que todos os estimadores de taxa e todas as carteiras usam. Um pagamento que gasta duas entradas e cria duas saídas, todas elas SegWit nativas, chega a aproximadamente 208 bytes virtuais, ou cerca de 832 unidades de peso. Encha um bloco só com pagamentos assim e cabem perto de 4.800 deles. O mesmo pagamento construído com endereços legacy pay to public key hash mede cerca de 374 bytes, o que pesa 1.496 unidades porque nada dele tem direito ao desconto, então só cerca de 2.670 caberiam.
Essa diferença é todo o sentido do projeto. O desconto nas testemunhas fez a adoção do SegWit se pagar sozinha: uma carteira que se atualizava obtinha taxas menores em cada transação, sem que ninguém precisasse ser convencido de que um bloco maior era seguro. Isso também empurra o comportamento na direção que a rede quer, já que gastar saídas antigas e consolidá-las em novas é mais barato por entrada do que costumava ser.
Dois detalhes confundem as pessoas. O peso é calculado por transação e depois somado, então o peso de um bloco é a soma de suas transações mais seu cabeçalho e seus contadores, e um minerador que monta um bloco está resolvendo um problema da mochila diante do orçamento de 4.000.000 unidades, e não de uma contagem de bytes. E o peso não tem relação com o valor: uma transação de 900 unidades de peso que move 40 bitcoin e outra que move 40.000 satoshis pagam taxas idênticas, porque a rede cobra pelo espaço, nunca pelo valor.
Onde você o vê
Todo explorador de blocos mostra o peso ao lado do tamanho, e a RPC getblock do Bitcoin Core retorna weight, size e strippedsize como três campos separados. As visualizações da mempool também se baseiam nele: as barras que mostram o que espera confirmação são empilhadas pela taxa em sat/vB, que leva no denominador o peso dividido por quatro.
O peso também é o que uma corretora realmente cobra de você em uma taxa de saque. Uma plataforma que anuncia uma taxa fixa em bitcoin está fazendo uma média sobre o peso das transações que espera montar, e lucra quando a mempool está tranquila e perde quando ela está cheia. Uma plataforma que agrupa, enviando dezenas de saques de clientes como saídas de uma única transação, paga por um conjunto de entradas em vez de dezenas, e é por isso que corretoras que agrupam conseguem cobrar taxas muito menores do que as que transmitem cada saque separadamente.
Peso de bloco vs byte virtual
O peso de bloco é a medida bruta e um byte virtual é a mesma medida dividida por quatro. Ambos descrevem os mesmos dados; só a escala muda. O peso é a unidade escrita nas regras de consenso, então o número 4.000.000 aparece no código como peso. Os bytes virtuais são a unidade escrita nas interfaces das carteiras, porque é mais fácil raciocinar com uma taxa de 8 sat/vB do que com 2 sat por unidade de peso. Quando uma carteira diz que sua transação ocupa 141 vbytes, o bloco em que ela entra tem 564 unidades menos de espaço.