Glossário / Referência do desenvolvedor
Script de testemunha
- O que é o script de testemunha?
- O script de testemunha contém as condições reais de gasto de uma saída P2WSH e viaja na testemunha, onde seus bytes são contados a um quarto do custo habitual.
Especificação no BIP-141.
O SegWit deu aos scripts uma seção própria da transação, e o script de testemunha é o que vai parar ali quando um cofre bc1q é gasto. Cada byte dentro da testemunha conta como uma unidade de peso em vez de quatro, um desconto de 75% que chegou no bloco 481.824, em agosto de 2017. Esse desconto é o motivo pelo qual a custódia com multiassinatura deixou de ser cara.
Como funciona
Um hash SHA-256 simples situado na saída compromete o script de testemunha, que permanece secreto até o dia em que alguém gasta. Quem gasta preenche a pilha da testemunha com os argumentos que as condições exigem e depois acrescenta o script serializado como último item. Um nó calcula o hash desse item, confere os 32 bytes contra o compromisso e executa o que acabou de verificar.
O consenso aplica os mesmos limites de script que os gastos antigos têm: 10.000 bytes de script e 201 instruções efetivas. A política de retransmissão fica bem abaixo, em 3.600 bytes e no máximo 100 itens na pilha, então qualquer coisa maior precisa de um acordo direto com um minerador em vez da difusão comum.
A aritmética é o que mudou o comportamento. Um script 2 de 2 tem 71 bytes: dois empilhamentos de chaves públicas de 33 bytes, os dois opcodes de contagem e o opcode de verificação. Dentro de uma testemunha, esses 71 bytes custam 71 unidades de peso, menos de 18 bytes virtuais. Os mesmos 71 bytes levados do modo antigo, em um script de assinatura, custam 284 unidades de peso, ou 71 bytes virtuais. Nada na segurança mudou, apenas o preço de usá-la.
Onde você o vê
A Lightning funciona com scripts de testemunha. Cada canal recebe seus fundos em uma saída 2 de 2, e as transações de compromisso dentro de um canal são construídas a partir de uma pequena biblioteca de scripts para revogação e pagamentos com bloqueio por hash especificada no BOLT 3, o que significa que a maioria deles é criada e destruída sem nunca chegar à cadeia.
O hardware de assinatura os vê como um campo nomeado. O formato PSBT define um campo para o script de testemunha tanto nas entradas quanto nas saídas, de modo que um coordenador pode entregar a um coassinante as condições exatas que estão sendo satisfeitas e o dispositivo pode mostrar ao usuário o que ele está aceitando, em vez de um hash.
Você também os vê aninhados. Um endereço P2SH-P2WSH aninhado, comum em corretoras que nunca atualizaram suas telas de saque, carrega um script de resgate de 34 bytes cuja única função é apontar para o programa de testemunha, com o script de testemunha por baixo fazendo o trabalho real.
Os backups precisam dos bytes do script, não apenas das chaves. Guarde o descritor de saída junto a cada frase de recuperação, porque um script de testemunha que ninguém anotou transforma um quórum com todas as assinaturas em bitcoins que ninguém pode mover.
Script de testemunha vs Tapscript
Um script de testemunha é um único script que é revelado por completo; uma folha de tapscript é um ramo de uma árvore em que só o ramo que você usa chega a ser publicado. Nos termos do BIP-341, uma saída compromete uma raiz de Merkle sobre muitas folhas, de modo que um cofre com cinco caminhos de recuperação distintos mostra exatamente um deles no momento do gasto e mantém os outros quatro em sigilo para sempre. O tapscript também elimina o limite de 10.000 bytes, desativa o OP_CHECKMULTISIG em favor do OP_CHECKSIGADD, adequado para verificações em lote, e aplica um orçamento de peso para verificações de assinatura em vez de uma contagem fixa de instruções. Se sua carteira escreve bc1q, você está usando scripts de testemunha; bc1p indica o desenho do Taproot.