Glossário / Transações e taxas
Número de sequência
Outros nomes: nSequence.
- O que é o número de sequência?
- O número de sequência é um campo de quatro bytes presente em cada entrada de transação que sinaliza a substituição por taxa maior, ativa o locktime e pode codificar um bloqueio temporal relativo.
Especificação no BIP-68.
Três funções sem relação entre si dividem um mesmo campo porque o bitcoin não podia acrescentar outro. O plano original de Satoshi para ele, um canal de pagamento rudimentar em que cada nova versão aumentava o número, foi abandonado por volta de 2010 porque nenhuma regra obrigava os mineradores a preferir o mais alto. O que sobreviveu é um conjunto de valores mágicos que decidem como as transações da sua carteira se comportam.
Como funciona
Ler um número de sequência significa verificá-lo contra três regras separadas, na ordem da idade delas.
O valor final. Uma sequência de 0xffffffff, 4.294.967.295 em decimal, marca uma entrada como final. Se todas as entradas de uma transação forem finais, o campo locktime é ignorado por completo. Esse era o padrão nas primeiras carteiras e ainda é o que se vê em transações construídas por software que nunca pensou nesse campo.
O sinal de substituição. O BIP125 atribuiu significado à extremidade inferior da faixa: qualquer entrada definida como 0xfffffffd ou menos anuncia que o remetente pode substituir a transação por uma versão que pague mais. O valor 0xfffffffe acerta no meio termo, ativando o locktime sem dar o sinal de substituição. Essa distinção perdeu quase toda a sua força, porque o Bitcoin Core retransmite substituições independentemente do sinal desde a versão 28.0, em outubro de 2024.
O bloqueio temporal relativo. O BIP68 reinterpretou os bits baixos para transações que declaram a versão 2 ou superior, e a regra passou a ser aplicável no bloco 419.328, em julho de 2016. Quando o bit 31 não está definido, os 16 bits inferiores indicam quanto tempo deve passar após a confirmação do próprio bitcoin gasto por aquela entrada. O bit 22 escolhe a unidade: não definido significa blocos, com um máximo de 65.535 blocos ou aproximadamente 455 dias, e definido significa períodos de 512 segundos, o que dá um teto próximo de 388 dias. O relógio começa na confirmação da transação mãe, não em uma data fixa, e é exatamente disso que um contrato entre duas pessoas precisa.
Onde você o vê
O número de sequência aparece como uma coluna em despejos de transações brutas e como uma caixa de seleção no software de carteira, e as duas visões raramente usam as mesmas palavras.
Um explorador de blocos que decodifica entradas imprimirá valores como 4294967293 ao lado de cada uma. Isso é 0xfffffffd, e indica que a carteira construiu uma transação substituível. O decoderawtransaction do Bitcoin Core mostra o mesmo número, e a Sparrow e a Electrum o expõem atrás de um botão "replace by fee", em vez de como um número.
A Lightning é o usuário real mais pesado. O atraso de revogação de um canal, a janela durante a qual sua contraparte pode ser punida por publicar um estado antigo, é um bloqueio temporal relativo aplicado por meio desse campo na entrada da transação de compromisso. O mesmo mecanismo sustenta trocas submarinas, projetos de cofres e qualquer contrato em que um caminho de reembolso só deva ficar disponível depois que a outra parte tiver tido uma chance justa de agir.
Número de sequência vs locktime
Os números de sequência são por entrada; o locktime é por transação. Essa é a forma mais rápida de distingui-los, e explica por que os dois são usados para coisas diferentes.
O locktime estabelece um único prazo absoluto para toda a transação, expresso como uma altura de bloco ou um horário real, e se aplica tanto se os bitcoins gastos tiverem um dia quanto cinco anos. Um bloqueio temporal relativo em um número de sequência conta a partir da confirmação do bitcoin específico que aquela entrada gasta, então cada entrada pode carregar seu próprio período de espera e o mesmo script funciona não importa quando ele receba fundos. Os dois também dependem um do outro de uma forma incômoda: o locktime só é aplicado quando pelo menos um número de sequência está abaixo do valor final, então uma carteira que define tudo como 0xffffffff desativa silenciosamente o outro campo.