52 / 691BIP125

Replace-by-Fee (RBF)

Substituição de uma transação não confirmada com uma taxa superior

Replace-by-Fee (RBF) é uma política local do mempool e de propagação de transações Bitcoin. Permite aceitar uma substituição em conflito com uma transação não confirmada, desde que cumpra as regras do nó relativas a taxas, validade e proteção contra DoS.

RBF trata de transações antes da confirmação. O BIP125 descreveu a sinalização opt-in e as regras de substituição associadas ao Bitcoin Core 0.12. Full-RBF não exige essa sinalização: o Core 24 permitiu configurá-lo, o Core 28 ativou-o por predefinição e o Core 29 removeu a opção mempoolfullrbf. RBF não altera o consenso nem um bloco confirmado; influencia qual transação válida, não confirmada e em conflito o nó guarda e propaga.

RBF substitui no mempool uma ou mais transações não confirmadas com as quais a transação de substituição partilha pelo menos uma entrada gasta. Não reescreve transações já confirmadas num bloco. A substituição altera os dados da transação e tem outro txid; tem de satisfazer por si própria as condições de gasto das entradas, incluindo as assinaturas exigidas. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core v30.0 — Mempool replacement policy]

O BIP125 descreve um sinal opt-in explícito quando pelo menos uma entrada tem um valor nSequence inferior a 0xfffffffe, bem como a herança do sinal de um antepassado não confirmado. Trata-se de uma política histórica, não de uma condição de consenso. Full-RBF permite avaliar uma substituição mesmo sem esse sinal; a sua ausência não garante que um pagamento não possa ser substituído. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 0.12.0 release notes]

RBF é uma política local do mempool e de retransmissão, não uma regra de consenso. Um minerador pode escolher uma transação em conflito válida segundo o consenso que outro nó não tinha anteriormente no mempool. Um Full Node verifica o bloco resultante segundo o consenso, independentemente da preferência anterior do seu mempool. [BIP 125 — Opt-in Full Replace-by-Fee Signaling] [Bitcoin Core 29.0 release notes]

A política do Bitcoin Core 30 para uma única transação de substituição também limita novas entradas não confirmadas e o número de transações expulsas. A substituição tem de cumprir as regras de standardness, propagação e validade, não apenas gastar o mesmo UTXO. Os limites protegem CPU, memória e capacidade de transmissão; as regras de substituição de pacotes devem ser avaliadas separadamente consoante a versão do nó. [Bitcoin Core v30.0 — Mempool replacement policy]

A taxa total é um montante em satoshis; a taxa por byte virtual exprime-se em sat/vB. Numa substituição individual no Core 30, a taxa tem de cobrir a soma das taxas de todas as transações expulsas e ainda o custo calculado segundo incrementalrelayfee para o tamanho da substituição. A sua taxa por byte virtual tem de superar as das transações diretamente em conflito. Uma taxa por byte superior, por si só, ou o simples acréscimo de satoshis não basta; o Core 30 tem incrementalrelayfee predefinida de 0,1 sat/vB, mas a configuração do nó pode ser diferente. [Bitcoin Core v30.0 — Mempool replacement policy] [Bitcoin Core 30.0 release notes]

Substituir uma transação pai pode também expulsar do mempool os descendentes que gastam as suas saídas. Portanto, nem sempre se trata de comparar apenas duas transações. Numa substituição individual, o Core 30 limita a 100 a soma das contagens de descendentes das transações diretamente em conflito, incluindo essas próprias transações; este cálculo pode contar descendentes comuns várias vezes. As taxas e as relações no pacote podem, por isso, influenciar o sucesso da substituição. [Bitcoin Core v30.0 — Mempool replacement policy]

RBF aumenta a taxa substituindo a própria transação que gasta as entradas. Child Pays for Parent (CPFP) mantém a transação pai e acrescenta uma transação filha com uma taxa suficiente para que o minerador possa avaliar a taxa conjunta por byte virtual. A escolha depende das saídas controladas, da capacidade de assinar as entradas necessárias e do grafo de transações; CPFP não substitui a transação pai. [Bitcoin Core v30.0 — Mempool replacement policy]

Gasto duplo designa tentativas em conflito de gastar o mesmo UTXO. RBF é uma forma de o nó escolher entre essas transações não confirmadas segundo a sua política. Uma substituição em conflito pode servir tanto para aumentar legitimamente a taxa como para redirecionar um pagamento não confirmado. RBF não autoriza terceiros a gastar entradas sem cumprir as respetivas condições. [BIP 125 — Opt-in Full Replace-by-Fee Signaling]

Zero-conf significa um pagamento sem confirmação, não sem configuração. O Bitcoin não garante que a primeira transação vista por um comerciante seja incluída num bloco. Full-RBF evidencia esse limite: aceitar zero-conf é uma decisão de risco comercial, não uma liquidação Bitcoin definitiva. [BIP 125 — Opt-in Full Replace-by-Fee Signaling]

A RPC getmempoolentry mostra o estado de uma transação não confirmada; testmempoolaccept testa uma única transação candidata de substituição assinada face ao mempool atual e às regras do próprio nó, sem a difundir. O resultado não promete aceitação por outros nós nem inclusão num bloco minerado. O Core 28 ativou full-RBF por predefinição através de mempoolfullrbf; o Core 29 removeu essa opção. A RPC getmempoolinfo apresenta os parâmetros de taxas, mas o campo fullrbf está marcado como obsoleto no Core 30; verifique sempre a versão e a configuração concretas. [Bitcoin Core 28.0 release notes] [Bitcoin Core 29.0 release notes] [Bitcoin Core getmempoolinfo RPC] [Bitcoin Core testmempoolaccept RPC] [Bitcoin Core getmempoolentry RPC] [Bitcoin Core v30.0 — Mempool RPC implementation]

Para ter uma visão mais completa, leia este verbete junto com Taxas de transação, Mempool, CPFP (Child Pays for Parent), Gasto duplo, Confirmação, Fee Rate. Também há referências a este verbete em Saída de troco, Confirmação, Gasto duplo, Fee Rate.

DOC · 001BIP 125 — Opt-in Full Replace-by-Fee SignalingEspecificação ↗DOC · 002Bitcoin Core v30.0 — Mempool replacement policyDocumentação ↗DOC · 003Bitcoin Core 0.12.0 release notesDocumentação ↗DOC · 004Bitcoin Core 24.0.1 release notesDocumentação ↗DOC · 005Bitcoin Core 28.0 release notesDocumentação ↗DOC · 006Bitcoin Core 29.0 release notesDocumentação ↗DOC · 007Bitcoin Core getmempoolinfo RPCDocumentação ↗DOC · 008Bitcoin Core testmempoolaccept RPCDocumentação ↗DOC · 009Bitcoin Core 30.0 release notesDocumentação ↗DOC · 010Bitcoin Core getmempoolentry RPCDocumentação ↗DOC · 011Bitcoin Core v30.0 — Mempool RPC implementationFonte primária ↗
Fontes em primeiro lugar · Não é recomendação de investimento