Glossário / Transações e taxas
SIGHASH_ANYONECANPAY
- O que é SIGHASH_ANYONECANPAY?
- SIGHASH_ANYONECANPAY é um modificador que retira todas as outras entradas do resumo, de modo que uma assinatura cobre apenas o bitcoin que ela gasta e outras pessoas podem entrar na transação livremente.
Não é um modo próprio. O sinalizador tem o valor 128 e é somado a um dos três modos base, produzindo 129, 130 ou 131, e cada combinação responde a uma pergunta diferente sobre o que o signatário está disposto a deixar que estranhos alterem. O financiamento coletivo e os mercados de ordinals são os dois lugares onde ele se mostra útil.
Como funciona
Ativar o modificador reduz o lado das entradas do resumo a um único item: o outpoint que está sendo gasto, seu número de sequência e o script que ele desbloqueia.
Todas as outras entradas desaparecem do cálculo. Um signatário que trabalha sob essa regra não sabe nem se importa com quantas outras pessoas contribuíram com bitcoins, em que ordem o fizeram ou se mais chegarão depois, e adicionar uma entrada mais tarde não pode invalidar uma assinatura feita antes. Essa propriedade é o recurso inteiro, e é o que torna as assinaturas colecionáveis: várias pessoas podem assinar isoladamente, em momentos diferentes, em máquinas diferentes, e alguém pode reunir as peças em uma única transação válida.
O modo base continua regendo o lado das saídas, e as três combinações se comportam de maneira bem diferente.
- 129, o modificador com a regra de todas as saídas, significa “meu bitcoin entra e os pagamentos devem ser exatamente esta lista”. Entradas podem ser adicionadas, saídas não.
- 130, o modificador com a regra sem saídas, é a assinatura mais fraca que o protocolo permite: um bitcoin entra, e nenhuma declaração sobre onde qualquer coisa vai parar.
- 131, o modificador com a regra de uma única saída, significa “meu bitcoin entra e devo receber a saída no meu índice”. Todo o resto fica em aberto.
Onde você o encontra
Duas construções o usam a sério, e ambas dependem de que estranhos possam adicionar fundos sem quebrar o que já está assinado.
A primeira é o contrato de garantia, a versão em bitcoin de uma promessa de aporte em financiamento coletivo. Cada apoiador assina o valor 129 sobre uma lista fixa de saídas que contém o pagamento do projeto, e cada promessa é uma entrada. A transação só se torna válida quando as entradas prometidas cobrem as saídas, então a meta de financiamento se impõe sozinha, com aritmética em vez de um agente de depósito em garantia, e uma campanha que não atinge a meta simplesmente nunca produz uma transação válida. Prometer um aporte não custa nada e desistir não custa nada, porque os bitcoins nunca se movem.
A segunda é a oferta pré-assinada em um mercado. Um vendedor assina o valor 131 sobre sua própria saída de inscrição ou de runa e o preço que deseja, publica o resultado como uma transação parcialmente assinada, e qualquer comprador a completa com suas próprias entradas, seu próprio troco e uma taxa. Nenhum contrato de anúncio, nenhum custodiante e nenhuma contraparte em quem confiar para a liquidação em si.
Vem com um aviso. Um valor 130 parado em uma mempool pública é dinheiro grátis para quem o pegar primeiro, e apenas um bit o separa das combinações seguras. Se você estiver revisando código de assinatura, verifique se o modo base é uma constante definida no código e se o modificador é a única parte que algo pode variar.
Ler o byte do sinalizador
Divida o byte do sinalizador de sighash em suas duas metades e ele deixa de ser enigmático. Os bits baixos dão o modo base: 1 para todas as saídas, 2 para nenhuma, 3 para uma única saída correspondente. O bit alto, que vale 128, é o modificador. Assim, uma assinatura que termina em 81 cobre tudo, exceto as outras entradas, 83 é a regra dos mercados, e um simples 01 sem modificador é o pagamento comum que sua própria carteira produz toda vez que você gasta.