Tamanho (Size)

As três formas de medir o tamanho de uma transação

Você pode medir o tamanho de uma transação de bitcoin de 3 formas:

  1. Bytes (b) – O tamanho da transação no disco.
  2. Unidades de Peso (wu) – Para encaixar transações em um bloco.
  3. Bytes Virtuais (vB) – Para comparar taxas por byte entre transações.

Bytes é a unidade mais direta. É usada para medir qualquer quantidade de dados em um computador.

Unidades de Peso e Bytes Virtuais são medidas exclusivas do bitcoin. Ambas também medem o tamanho de uma transação em termos de bytes, mas dão um desconto a algumas partes dos dados da transação e são usadas ao calcular quantas transações cabem em um bloco.

Ícone Ferramenta Separador de Transação

Separador de Transações

Cole uma transação bruta (hexadecimal) para dividi-la nos seus campos individuais.

1. Bytes (b)

Diagrama mostrando a medição de uma transação de bitcoin em bytes.

Esta é a forma natural de medir o tamanho de uma transação. É o tamanho real da transação em termos de quantos bytes de espaço ela ocupa.

Os bytes são usados ao medir o tamanho de uma transação quando ela está sendo enviada pela rede, ou quanto espaço ela ocupa no disco (ex.: quando armazenada nos arquivos da blockchain).

Medir o tamanho de uma transação em bytes era mais importante quando o limite de tamanho do bloco também era medido em bytes (1.000.000 bytes, ou 1 megabyte). Porém, o limite de tamanho do bloco agora é baseado em peso.

Exemplo

Transação: 30dcd74b7fd8a585db3b2beddd4a7fc0edcfe9b8a1bac9abee695648659f8a6a

01000000000101dd40a8d7f105055e781afa632207f5d3c4b4f4cad9f0fb320d0f0aa8e1ba904b0000000000ffffffff021027000000000000160014858e1f88ff6f383f45a75088e15a095f20fc663f841c0000000000001976a9142241a6c3d4cc3367efaa88b58d24748caef79a7288ac02483045022100d66341c3e6ce846b92bedcf9bc673ab8e47b770c616618eb91009e44816f4c2f0220622b5ebf6afabee3f4255bbcb84609e1185d4b6b1055602f5eed2541e26324620121022ed6c7d33a59cc16d37ad9ba54230696bd5424b8931c2a68ce76b0dbbc222f6500000000

Tamanho: 226 bytes

Há 226 bytes nesta transação.

Você pode conferir isso você mesmo, porque cada 2 caracteres hexadecimais representam 1 byte.

Tamanhos típicos de transação

O tamanho de uma transação em bytes depende principalmente de quantas entradas e saídas há na transação. Aqui estão os tamanhos médios para transações típicas (com scripts de travamento P2PKH padrão nas saídas):

  • Entradas: 1, Saídas: 1 = 191 ou 192 bytes
  • Entradas: 1, Saídas: 2 = 225 ou 226 bytes (mais comum)
  • Entradas: 2, Saídas: 1 = 338 ou 339 bytes
  • Entradas: 2, Saídas: 2 = 373 ou 374 bytes (muito comum)

Quanto mais entradas e saídas há em uma transação, maior ela fica.

Não há limite para o tamanho de uma transação em termos de bytes, a não ser pelo fato de que ela precisa caber dentro de um bloco.

2. Unidades de Peso (wu)

BIP 141

Diagrama mostrando a medição de uma transação de bitcoin em unidades de peso.

Toda transação tem uma medida de peso. Essa medida foi introduzida na atualização segregated witness. O peso de uma transação é calculado multiplicando o tamanho (em bytes) de diferentes partes da transação por 4 ou por 1:

Multiplicadores de peso por campo da transação
CampoMultiplicador
version×4
marker×1
flag×1
input×4
output×4
witness×1
locktime×4

Isso, portanto, dá um desconto aos dados de testemunha.

Exemplo

Transação: 30dcd74b7fd8a585db3b2beddd4a7fc0edcfe9b8a1bac9abee695648659f8a6a

01000000000101dd40a8d7f105055e781afa632207f5d3c4b4f4cad9f0fb320d0f0aa8e1ba904b0000000000ffffffff021027000000000000160014858e1f88ff6f383f45a75088e15a095f20fc663f841c0000000000001976a9142241a6c3d4cc3367efaa88b58d24748caef79a7288ac02483045022100d66341c3e6ce846b92bedcf9bc673ab8e47b770c616618eb91009e44816f4c2f0220622b5ebf6afabee3f4255bbcb84609e1185d4b6b1055602f5eed2541e26324620121022ed6c7d33a59cc16d37ad9ba54230696bd5424b8931c2a68ce76b0dbbc222f6500000000

Tamanho: 226 bytes

Peso: 574 unidades de peso (116 × 4 + 110 × 1)

Há 226 bytes nesta transação. Desses, 116 bytes são dados não-testemunha, então são multiplicados por 4; e 110 bytes são dados de testemunha, então são multiplicados por 1. Some os dois e você obtém 574 unidades de peso.

Limite do Bloco (4.000.000 unidades de peso)

A medida de peso é importante porque os blocos podem conter até 4.000.000 unidades de peso de dados de transação.

Então, quando os mineradores preenchem seus blocos candidatos com transações, eles usam o peso da transação para determinar quantas transações conseguem encaixar no bloco.

Diagrama mostrando um bloco sendo preenchido com transações usando o peso como medida do tamanho de cada transação.

Usar bytes para os tamanhos de transação e para o limite do bloco era mais simples. Mas essa nova medida de peso introduz justiça ao custo de gastar saídas.

Por que os dados de testemunha pesam menos?

Porque isso ajuda a trazer mais equilíbrio entre o custo de criar uma saída e o custo de gastar uma saída (em termos de taxas de transação).

A quantidade de dados necessária para destravar uma saída (ou seja, os dados de assinatura) é injustamente maior do que a quantidade necessária para colocar uma trava na saída em primeiro lugar. Então a nova medida de peso aproxima mais o "tamanho" de entradas e saídas em uma transação.

Diagrama mostrando o tamanho comparativo de uma saída e de uma entrada quando medidos em bytes e em unidades de peso.

3. Bytes Virtuais (vBytes, vB)

Diagrama mostrando a medição de uma transação de bitcoin em bytes virtuais.

O tamanho virtual de uma transação é o mesmo que o seu peso dividido por 4.

Ou, dito de outra forma, em vez de multiplicar algumas partes de uma transação por 4 para criar um desconto para os dados de testemunha, você desconta os dados de testemunha diretamente, multiplicando-os por 0,25:

Multiplicadores de byte virtual por campo da transação
CampoMultiplicador
version×1
marker×0,25
flag×0,25
input×1
output×1
witness×0,25
locktime×1

Então o "peso" e o "tamanho virtual" fornecem a mesma medida, apenas com unidades diferentes. Mas usar bytes virtuais facilita comparar o feerate de transações segwit novas com o feerate de transações legadas (que antes usavam sats-por-byte).

Uma transação legada terá o mesmo tamanho em bytes e em vbytes.

Um bloco pode conter 1.000.000 de bytes virtuais.

Exemplo

Transação: 30dcd74b7fd8a585db3b2beddd4a7fc0edcfe9b8a1bac9abee695648659f8a6a

01000000000101dd40a8d7f105055e781afa632207f5d3c4b4f4cad9f0fb320d0f0aa8e1ba904b0000000000ffffffff021027000000000000160014858e1f88ff6f383f45a75088e15a095f20fc663f841c0000000000001976a9142241a6c3d4cc3367efaa88b58d24748caef79a7288ac02483045022100d66341c3e6ce846b92bedcf9bc673ab8e47b770c616618eb91009e44816f4c2f0220622b5ebf6afabee3f4255bbcb84609e1185d4b6b1055602f5eed2541e26324620121022ed6c7d33a59cc16d37ad9ba54230696bd5424b8931c2a68ce76b0dbbc222f6500000000

Tamanho: 226 bytes

vSize: 143,50 bytes virtuais (116 × 1 + 110 × 0,25)

Há 226 bytes nesta transação. Desses, 116 bytes são dados não-testemunha, então são multiplicados por 1; e 110 bytes são dados de testemunha, então são multiplicados por 0,25. Some os dois e você obtém 143,50 bytes virtuais.

Como você pode ver, os cálculos de peso e de vsize funcionam da mesma forma.

Por que usamos bytes virtuais?

Então, por que temos tanto o peso quanto os vbytes? Por que não calcular o peso de uma transação multiplicando algumas partes por 0,25 e usar só isso?

Em outras palavras, por que ter duas medidas que fazem a mesma coisa?

Porque o tamanho virtual é fracionário quando computado com precisão. O peso é um inteiro. Só usamos inteiros no código de consenso.
Pieter Wuille, bitcoin.stackexchange.com

Veja, trabalhar com números fracionários em computadores muitas vezes pode levar a erros de arredondamento, e é por isso que, no Bitcoin, preferimos trabalhar com números inteiros ao realizar cálculos criticamente importantes. A aritmética de inteiros sempre retorna resultados consistentes e confiáveis, enquanto a de ponto flutuante não.

Então, em resumo:

Recursos