Pular para o conteúdo
buybitcoinsmart

Glossário / Transações e taxas

SIGHASH_NONE

O que é SIGHASH_NONE?
SIGHASH_NONE é o sinalizador que assina as entradas de uma transação e não cobre nenhuma de suas saídas, o que deixa o destino do dinheiro aberto a qualquer pessoa que a manipule.

Trate isso como um cheque em branco. Uma entrada SIGHASH_NONE autoriza o gasto e não diz nada sobre quem recebe, então um minerador ou qualquer nó que retransmita pode reescrever todas as saídas antes de a transação ser confirmada. Seu valor é 2, nenhuma carteira de uso comum o oferece, e se você algum dia vir um na sua própria transação, algo deu errado.

Como funciona

Construir esse resumo significa descartar a lista de saídas por completo antes de calcular o hash.

O que resta ainda é substancial: a versão da transação, o outpoint da entrada que está sendo assinada, o próprio número de sequência dessa entrada, o script que ela gasta e o locktime. Os números de sequência de todas as outras entradas são zerados, um segundo grau de liberdade, porque permite que os coassinantes ajustem seus próprios bloqueios temporais relativos depois que essa assinatura já existe.

O que não resta é o ponto central. Sem nenhuma saída coberta, a assinatura diz apenas que este bitcoin pode ser gasto em uma transação desta versão nesse momento ou depois. Quem tiver a transação meio construída escolhe para onde vai o valor, e isso inclui qualquer pessoa que a veja na rede, já que uma transação não confirmada é pública desde o momento em que é transmitida.

Acrescente o modificador ANYONECANPAY e o byte passa a ser 0x82, a assinatura mais fraca que o bitcoin pode produzir: ela cobre uma entrada e absolutamente nada mais.

O sinalizador existe desde a primeira versão, em janeiro de 2009, e nunca foi removido, porque removê-lo deixaria bitcoins bloqueados presos antes que alguém pensasse nas consequências. O BIP143 e o BIP341 o reimplementaram fielmente para o segwit e o Taproot em vez de descartá-lo em silêncio.

Onde você o vê

O SIGHASH_NONE aparece quase em lugar nenhum, o que é exatamente o que se deve esperar.

O uso teórico é um protocolo no qual uma parte contribui com fundos e uma contraparte escolhe o destino, com essa contraparte obrigada por algo fora da assinatura. Nenhum aplicativo de bitcoin amplamente usado funciona assim. Construções que precisam de entradas flexíveis recorrem ao ANYONECANPAY, e construções que precisam de saídas flexíveis usam alternativas pré-assinadas, nas quais os destinos possíveis são fixados de antemão.

Assim, uma assinatura SIGHASH_NONE em circulação é um erro ou um roubo em andamento. As mempools são vigiadas de forma contínua por bots que procuram anomalias gastáveis, e uma transação que carregue uma delas não ficará muito tempo ali sem ser notada. Quem escreve código de assinatura deve tratar o sinalizador como um número inteiro que nunca passa, e quem audita um sistema de custódia deve confirmar que o sinalizador é uma constante, e não um parâmetro fornecido por quem faz a chamada.

Para quem compra e guarda bitcoin, a conclusão é curta: você não vai encontrar isso, sua carteira não vai oferecer isso, e um software que peça para você assinar com isso é um software do qual se afastar.

SIGHASH_NONE vs SIGHASH_SINGLE

O SIGHASH_NONE cobre zero saídas; o SIGHASH_SINGLE cobre exatamente uma, a saída que está no mesmo índice da entrada que está sendo assinada. Essa única saída coberta muda por completo o caráter da assinatura. Com o SIGHASH_SINGLE, quem assina pode garantir o próprio pagamento e deixar o resto da transação aberto, o que é uma peça utilizável para swaps e mercados. O SIGHASH_NONE não garante nada em absoluto a quem assina, e é por isso que um tem aplicações reais e o outro aparece principalmente em relatos de incidentes.

Não confundir com

Perguntas frequentes

Alguém pode roubar bitcoins assinados com SIGHASH_NONE?

Sim, se a transação chegar a uma mempool pública. A assinatura não cobre nenhuma saída, então qualquer pessoa que a veja pode substituir por seu próprio endereço e retransmitir. Essa é a razão pela qual nenhuma carteira de uso comum expõe o sinalizador.

Por que o bitcoin ainda aceita um sinalizador que ninguém usa?

Porque removê-lo seria um hard fork. Os bitcoins bloqueados em scripts que esperam que o sinalizador funcione se tornariam impossíveis de gastar, então as duas reescritas posteriores do algoritmo de hash de assinatura o reimplementaram em vez de descartá-lo.

Termos relacionados

Mais em Transações e taxas

Ler esta página em inglês