vByte, abreviado vB, é uma unidade de tamanho virtual das transações de Bitcoin. As diferentes partes dos dados têm pesos distintos. A carteira usa esse tamanho no cálculo da taxa: uma transação maior ou uma taxa por vB mais alta resulta em um custo total maior.
Ana quer enviar Bitcoin e a carteira oferece uma taxa de 2 sat/vB. Sat significa satoshi, a menor unidade do bitcoin; vB indica o tamanho virtual da transação. Se a transação pronta tiver 127 vB, o custo nessa taxa será de 254 sat. A taxa por unidade, também chamada Fee Rate, não é o custo total do envio. O exemplo explica o cálculo, sem recomendar uma taxa para a rede de hoje. Pagar uma taxa também não garante um prazo específico de confirmação. [3] [5] [7]
A carteira não gasta o saldo como um único número. Ela usa saídas de transações recebidas anteriormente e ainda não gastas, chamadas UTXO. Cada saída utilizada acrescenta uma entrada; muitas vezes há também uma saída que devolve o troco à sua carteira. Juntar muitos recebimentos pequenos pode, portanto, exigir mais dados do que enviar um valor maior a partir de um único recebimento. A taxa total é a soma dos valores das entradas menos a soma dos valores das saídas. A assinatura digital comprova a autorização para gastar os fundos selecionados. Antes de criá-la, a carteira estima o tamanho; o custo real e o tamanho final determinam a taxa efetiva por unidade. [6] [7]
Byte é uma unidade comum para medir dados. Mas, ao calcular a taxa de uma transação de Bitcoin, nem todos os bytes contam da mesma forma. SegWit separa parte dos dados que comprovam a autorização para gastar, incluindo assinaturas. Essa parte se chama witness. Um byte dos dados básicos contribui com 4 WU para o peso da transação; um byte acrescentado pelo formato que inclui witness contribui com 1 WU. WU significa unidade de peso. Os campos auxiliares marker e flag dessa representação recebem o mesmo desconto. As assinaturas continuam sendo verificadas: peso menor não autoriza pular verificações. [1] [2]
Serializar é escrever a transação como uma sequência exata de bytes que os computadores conseguem transmitir e ler. Chamemos B ao tamanho sem witness e T ao tamanho completo. BIP 141 define o peso como W = 3 × B + T. Os dados básicos já estão incluídos em T; por isso, a fórmula os conta quatro vezes, e os dados witness acrescentados, uma vez. Ela não mede o valor do pagamento nem o tempo de processamento. [1]
O tamanho virtual é o peso dividido por 4, arredondado para cima até um número inteiro: vsize = ceil(W / 4). ceil significa arredondar para cima. Uma transação de 401 WU ocupa, portanto, 101 vB. O arredondamento vale para a transação inteira. Arredondar cada entrada separadamente e depois somar pode produzir um resultado diferente. [1]
Considere os tamanhos ilustrativos B = 100 e T = 208 bytes. A fórmula resulta em W = 508 WU e vsize = 127 vB, o tamanho usado no exemplo inicial da taxa. Mas a transação completa não encolheu: sua representação integral ainda transmite 208 bytes. O tamanho virtual é uma medida ponderada usada para capacidade e taxas, não uma compressão de arquivo. [1] [5]
Um explorador de blocos é um aplicativo para consultar transações e blocos de uma determinada rede. Sem dados witness, B = T e, portanto, W = 4 × T. O tamanho virtual básico passa a corresponder ao tamanho completo em bytes. É por isso que um explorador às vezes mostra números iguais nos dois campos de tamanho e às vezes não. Com SegWit, não basta dividir todos os bytes transmitidos por quatro: a ponderação diferente se aplica a partes específicas dos dados. [1] [2]
Um nó é um programa que verifica transações e blocos e se comunica com outros participantes da rede. Bitcoin Core v29.0 usa o tamanho ajustado ceil(max(W, sigop_cost × bytes_per_sigop) / 4) em algumas regras de funcionamento. sigop_cost expressa o custo ponderado das operações de assinatura; bytes_per_sigop é um parâmetro dessas regras. max escolhe o maior valor. Uma verificação especialmente exigente pode aumentar o tamanho considerado nessas regras. Isso não altera o peso de BIP 141 nem as regras de validade dos blocos. É um detalhe da versão indicada, não uma conta adicional obrigatória para fazer um pagamento comum. [1] [4]
Um pagamento pode gastar uma saída de outra transação ainda não confirmada. Ao avaliar esse pacote, pode-se dividir o total pertinente de taxas pela soma dos tamanhos virtuais correspondentes. A média simples das taxas por unidade ignoraria os tamanhos diferentes. Bitcoin Core v29.0 também considera ajustes locais de prioridade e não conta novamente as transações que já estão em sua fila de espera. Uma taxa conjunta alta não supera todas as outras regras nem garante aceitação ou confirmação. [4] [8]
Antes de enviar, observe a taxa por unidade junto com o custo total e o tamanho estimado. Depois de criar a transação, decoderawtransaction pode mostrar os campos reais size, vsize e weight: bytes, tamanho virtual e peso. Para pagamentos comuns, não é preciso calcular as fórmulas à mão. Cuidado também com o nome CompactSize: ele designa uma codificação de inteiros com comprimento variável. Não é outro nome de vByte nem uma forma de reduzir a transação. [5] [6]
Para ter uma visão mais completa, leia este verbete junto com Block Weight, Compact Blocks, Block Propagation, Initial Block Download, Bitcoin, SegWit. Também há referências a este verbete em Compact Blocks, Pruned Node, Block Weight, Package Relay.