Taxa (Fee)

O restante de uma transação

Diagrama mostrando a taxa de transação como o restante do valor sendo enviado.

Uma taxa de transação é o restante de uma transação.

Se você somar todos os valores das entradas e subtrair todos os valores das saídas, a quantidade que sobra é a taxa. Por exemplo:

Transação: 82b81a39d1b6bff8366eab2297f61db7ac34b7d901f5cfc40143ca704ded980e

entrada 0 = 2699815 satoshis

saída   0 = 1593900 satoshis
saída   1 = 1060915 satoshis

taxa      =   45000 satoshis

Como você pode ver, não há uma saída designada de "taxa" nem nada assim. A taxa é só a quantidade de moedas que você não consome na transação.

Cuidado, pois qualquer quantidade de satoshis que sobre em uma transação será recolhida como taxa. Algumas pessoas já definiram taxas enormes por engano ao dimensionar incorretamente suas saídas. Por exemplo, a transação cc455ae816e6cdafdb58d54e35d4f46d860047458eacf1c7405dc634631c570d teve uma taxa de 291,240900 BTC.

Incentivo ao Minerador

Por que definir uma taxa em uma transação?

Uma taxa de transação funciona como um incentivo para um minerador incluir a sua transação no bloco candidato dele.

Isso porque os mineradores podem coletar todas as taxas das transações que incluíram no bloco por meio da transação coinbase (se conseguirem minerar o bloco com sucesso na blockchain).

Diagrama mostrando as taxas de transação sendo coletadas pelo minerador por meio da transação coinbase.

Portanto, se há mais transações no memory pool do que cabem no próximo bloco, os mineradores escolhem preencher seus blocos candidatos com as transações de maior taxa disponíveis. Isso maximiza a quantidade de bitcoins que conseguem reivindicar se minerarem o bloco.

Diagrama mostrando um minerador selecionando as transações de maior taxa do memory pool para inclusão no seu bloco candidato.

Portanto, definir uma taxa na sua transação permite que ela compita com outras transações por espaço no próximo bloco. De forma geral:

Se todas as transações do memory pool cabem no próximo bloco, você pode simplesmente definir a taxa mínima na sua transação, pois não há competição para entrar no próximo bloco.

Taxas por Byte (Feerates)

Como as taxas de transação são medidas?

Os mineradores querem maximizar a quantidade de taxas que conseguem reivindicar dos seus blocos. Para isso, medem cada transação com base em quanta taxa ela fornece por quantidade de espaço que ocupa em um bloco.

Por exemplo, uma transação pequena com uma taxa grande é mais valiosa do que uma transação grande com a mesma taxa.

Diagrama mostrando duas transações com taxas do mesmo tamanho, mas uma é maior que a outra e por isso tem uma taxa/byte menor.

Então, ao comparar as taxas de transações, pegamos o tamanho da taxa e o dividimos pelo tamanho da transação (em termos de quanto espaço ela ocupa em um bloco). Isso é chamado de feerate (taxa por byte) e permite comparar transações para descobrir quais são mais valiosas para os mineradores.

Há 3 formas diferentes de medir feerates:

  1. sats/byte (Obsoleto)
  2. sats/wu (Usado Internamente)
  3. sats/vbyte (Mais Comum)

sats/byte (Obsoleto)

Diagrama mostrando o cálculo do feerate em sats/byte como a taxa dividida pelo número de bytes da transação.

O limite do bloco costumava ser de 1.000.000 bytes (1 MB).

Então, naturalmente, o valor de uma transação para um minerador era medido em satoshis por byte, ou sats/byte para abreviar.

Porém, desde a atualização segregated witness (BIP 141), agora usamos uma nova medida de peso para determinar quantas transações cabem em um bloco…

sats/wu (Usado Internamente)

Diagrama mostrando o cálculo do feerate em sats/wu como a taxa dividida pelo número de unidades de peso da transação.

O limite do bloco agora é de 4.000.000 unidades de peso.

O tamanho das transações agora é medido em termos do seu peso, que multiplica o tamanho da maior parte dos dados da transação por 4. Porém, os novos dados de testemunha são multiplicados por 1, o que efetivamente lhes dá um desconto em relação às outras partes da transação.

Então, como os blocos agora têm um limite máximo de peso, os mineradores medem os feerates das transações em satoshis por unidade de peso (ou sats/wu para abreviar).

Porém, esse sats/wu está em uma escala diferente da antiga medida sats/byte. Então, para manter a compatibilidade com softwares antigos que ainda usam sats/byte, temos uma última medida para feerates…

sats/vbyte (Mais Comum)

Diagrama mostrando o cálculo do feerate em sats/vbyte como a taxa dividida pelo número de bytes virtuais da transação, que é o peso dividido por 4.

Se você dividir o limite do bloco de 4.000.000 unidades de peso por 4, obtém 1.000.000 de bytes virtuais.

E, se você dividir o peso de uma transação por 4 também, volta praticamente a usar a mesma medida sats/byte de antes. Mas agora cada byte de dado de testemunha conta apenas como 0,25 de um byte, e é por isso que nos referimos a essa medida como bytes virtuais em vez de bytes reais.

A medida sats/vbyte significa que os feerates das transações segwit mais novas ficam alinhados com os feerates das transações legadas medidas em sats/byte. Por exemplo:

Transação Legada: a04c291e586b10f6db4d38bcba414dea2fd39d53745763d13c49026af1f09262

taxa:               15977 sats

tamanho:            223 bytes
tamanho virtual:    223 vbytes

sats/byte:          72
sats/vbyte:         72

Transação Segwit: 7169e93ede0096c32e4fb90f267ea29fb539324cfc3927ea9ded9066b879a1e8

taxa:               10317 sats

tamanho:            226 bytes
tamanho virtual:    143,50 vbytes

sats/byte:          46
sats/vbyte:         72

Como você pode ver, uma transação legada tem o mesmo feerate em sats/byte e em sats/vbyte.

Então, em vez de usar a nova medida de peso para ambas, trazemos o peso das novas transações segwit de volta à mesma escala de antes. Isso facilita comparar os feerates de transações em softwares que ainda usam sats/byte.

Internamente, no Bitcoin, só nos importamos com transações em termos de unidades de peso. Mas, em coisas como exploradores de blockchain, tendemos a usar sats/vbyte em vez de sats/wu.

Aumentar a Taxa (Fee Bumping)

Como você pode aumentar a taxa de uma transação?

Se há muitas transações no memory pool e você enviou uma transação de taxa baixa para a rede, pode acabar esperando algum tempo até a transação ser minerada.

Se isso acontecer, você pode querer aumentar a taxa da sua transação enquanto ela ainda está no memory pool. Isso aumenta o incentivo para um minerador incluir a sua transação no próximo bloco, o que acelera o tempo que ela leva para ser minerada.

Esse processo é chamado de "fee bumping" (aumento de taxa), e há dois métodos para fazê-lo:

  1. Replace By Fee (RBF)
  2. Child Pays For Parent (CPFP)

1. Replace By Fee (RBF)

BIP 125

Diagrama mostrando uma transação de taxa menor no memory pool sendo substituída por uma transação de taxa maior.

Este é o método mais simples.

Para habilitar esse recurso, você só precisa definir um dos valores de sequence da sua transação como 0xFFFFFFFD ou menor. Então, enquanto essa transação estiver no memory pool, você tem a opção de enviar uma nova versão da transação com uma taxa mais alta para o memory pool, e essa transação de taxa mais alta substitui diretamente a antiga, de taxa baixa.

E é só isso. Se um nó ou minerador receber uma transação que gasta as mesmas entradas (mas desta vez com uma taxa mais alta), ele ficará feliz em despejar a transação original do seu mempool e manter a nova, de taxa mais alta.

O Replace By Fee permite substituir diretamente transações no memory pool.

Se uma transação atual no memory pool não tem o RBF habilitado, não há nada que você possa fazer para substituí-la. Você só vai precisar esperar, ou usar o CPFP (veja abaixo) em vez disso.

2. Child Pays For Parent (CPFP)

Diagrama mostrando uma transação filha aumentando o feerate geral tanto da filha quanto da transação pai.

Esta é uma técnica antiga, mas ainda funciona hoje.

Basicamente, essa técnica se aproveita de dois fatos:

  1. Você pode gastar a saída de uma transação enquanto ela ainda está no memory pool.
  2. Um minerador precisa sempre incluir os "pais" de qualquer transação que ele inclua em um bloco (se os pais também estiverem no memory pool).

Portanto, se você tem uma transação de taxa baixa parada no memory pool, pode incentivar um minerador a incluí-la no próximo bloco gastando uma das suas saídas em uma nova transação e colocando uma taxa suficientemente grande nessa nova transação, para que valha a pena incluir a primeira transação.

Então a transação filha tem uma taxa tão atraente que torna vantajoso para o minerador incluir também a transação pai, de taxa baixa. Ou, para ser mais preciso, a transação filha aumenta o feerate médio de ambas as transações.

Não há motivo para usar o CPFP quando você pode usar o RBF. Mas é uma opção útil para se ter caso você tenha uma transação travada no memory pool sem o RBF habilitado.

Taxa Mínima de Retransmissão

Qual é a taxa mínima que você pode definir em uma transação?

Diagrama mostrando nós da rede rejeitando transações com feerates que não atendem às suas próprias configurações individuais de taxa mínima de retransmissão.

Em geral, você quer definir pelo menos uma taxa de 1 sat/vbyte nas suas transações, por causa das configurações de taxa mínima de retransmissão (minimum relay fee) que os nós usam.

Cada nó pode escolher a sua própria taxa mínima de retransmissão. Essa configuração é usada para que os nós não desperdicem recursos processando e mantendo transações de baixo valor que pagam pouca ou nenhuma taxa. Então é meio como um filtro de spam.

A taxa mínima de retransmissão padrão atual é de 1 sat/vbyte.

Porém, a taxa mínima de retransmissão é uma política, e não uma regra de consenso, então não é impossível que uma transação de taxa zero seja minerada na blockchain. Isso só significa que qualquer nó para o qual você enviar uma transação com um feerate abaixo dessa configuração não a aceitará nem a retransmitirá para outros nós.

Então, basicamente, a não ser que você conheça um minerador ou consiga minerar a transação você mesmo, a taxa que você define na sua transação precisa estar acima da taxa mínima de retransmissão dos nós/mineradores para os quais você está transmitindo a sua transação.

Você pode descobrir a taxa mínima de retransmissão atual do seu nó rodando bitcoin-cli getmempoolinfo. Você pode ajustá-la definindo a opção minrelaytxfee=<valor> no arquivo de configuração do seu Bitcoin Core.

A taxa mínima de retransmissão padrão definida pelo Bitcoin Core pode ser encontrada em validation.h. Por algum motivo, ela é definida como 1000 sat/kb em vez de 1 sat/vbyte, mas as duas significam a mesma coisa.

Resumo

Haverá taxas de transação, então [os mineradores] terão um incentivo para receber e incluir todas as transações que puderem.
Satoshi Nakamoto, Lista de E-mails de Criptografia (artigo do dinheiro eletrônico P2P do Bitcoin)

Uma taxa de transação é o restante de uma transação de bitcoin, e é usada como incentivo para um minerador incluir a sua transação em um bloco.

Os mineradores selecionam transações com base na taxa por unidade de peso, que é uma medida de quanto um minerador pode ganhar em taxas por quantidade de espaço que a transação ocupa em um bloco. Isso significa que, se muitas transações são enviadas à rede ao mesmo tempo, há mais competição para entrar nos blocos, e os feerates aumentam.

Se você define uma taxa baixa na sua transação e percebe que ela não está sendo minerada rápido o suficiente, sempre pode substituí-la por uma transação de taxa mais alta usando RBF. Ou, se o RBF não estiver habilitado, sempre pode usar o CPFP em vez disso, para incentivar um minerador a incluir a sua transação no próximo bloco.

Por fim, se você está construindo uma transação de bitcoin manualmente, sempre confira o tamanho das suas saídas. Ter um monte de satoshis devorados por um minerador porque você calculou mal o tamanho da sua saída de troco não é uma forma divertida de aprender a construir transações corretamente. Aqui estão alguns exemplos lamentáveis:

Por que o explorador não mostra as taxas das transações?

O explorador de blocos deste site obtém as informações de transação diretamente do Bitcoin Core via comandos bitcoin-cli (em vez de armazenar os dados em um banco de dados próprio). Infelizmente, a consulta getrawtransaction [txid] não retorna o valor da taxa de transações já mineradas. Seria possível calcular a taxa buscando os valores de cada entrada, mas isso exigiria várias requisições por transação, deixando o explorador muito mais lento.

Como o objetivo principal do explorador é exibir os dados brutos das transações, optei, por questão de velocidade, por não calcular nem exibir as taxas e os feerates de cada transação. Se você quiser ver as taxas das transações na blockchain, dê uma olhada no mempool.space.