Pular para o conteúdo
buybitcoinsmart

Glossário / Referência do desenvolvedor

Script de resgate

Outros nomes: Redeem script.

O que é um script de resgate?
Um script de resgate é o contrato de gasto completo oculto atrás de uma saída pay-to-script-hash, fornecido por quem gasta no fim do script de assinatura e cujo hash é calculado para verificar se coincide.

Especificação no BIP-16.

O BIP-16 permitiu que um remetente pagasse a um hash de 20 bytes em vez de a um contrato inteiro, e o script de resgate é o contrato que esse hash representa. Ele precisa caber em um único elemento da pilha, então 520 bytes é o teto absoluto. Perca esses bytes e suas chaves privadas não valem nada, o que faz do script de resgate parte do seu backup, e não do seu software.

Como funciona

Um script de resgate é invisível enquanto os bitcoins ficam parados. A saída que os guarda contém apenas um hash e um padrão que o consenso reconhece, aplicado em toda a rede desde 1º de abril de 2012, no bloco 173.805. Ninguém que paga a você fica sabendo nada sobre as condições, e um explorador de blocos também não.

A revelação acontece no gasto. O script de assinatura empilha os argumentos de que o contrato precisa e termina com o próprio contrato serializado. Um nó que valida pega esse último item, calcula seu hash, compara o resultado com o hash da saída e só então desserializa o item e o executa como código sobre o restante da pilha. As duas etapas precisam passar, e como o campo que o transporta não pode conter nada além de inserções de dados, o próprio script não consegue introduzir comportamento antes de ser verificado.

O script de resgate mais comum que existe não é um contrato. A partir de 2017, as carteiras que queriam a economia do SegWit sem deixar de receber pagamentos de software antigo envolveram um programa de testemunha em um hash de script, então o script de resgate tem 22 bytes: um byte de versão e um hash de chave de 20 bytes, sem nada a executar. Milhões de endereços de saque de corretoras que começam com 3 escondem exatamente isso e nada mais.

Onde você o encontra

O Bitcoin Core entrega um a você sempre que você cria um endereço de script, e seu comando decodescript converte o hexadecimal de volta em assembly legível. Em um descritor, o script é escrito explicitamente como sh(wpkh(...)) ou sh(multi(...)), que é a forma moderna de registrá-lo, porque as carteiras de descritores chegaram no Bitcoin Core 0.21.0 em janeiro de 2021 e tornaram obsoleto o velho hábito de importar endereços isolados.

O modo de perda é real e específico. Uma frase de recuperação regenera chaves. Ela não regenera um script arbitrário e não pode informar as chaves públicas dos outros coassinantes, então um arranjo 2-de-3 em que cada participante guardou apenas sua própria frase de recuperação é impossível de gastar. Pessoas já perderam bitcoins mesmo tendo um conjunto completo de chaves privadas e nenhum registro do script no qual aquelas chaves foram organizadas. Guarde o descritor junto com cada backup de frase de recuperação e restaure a partir dele uma vez, com um valor pequeno, antes que o endereço contenha algo que você sentiria falta.

A outra coisa a saber é o limite de tamanho. Quinze chaves públicas comprimidas, mais seus prefixos de inserção e os opcodes ao redor, somam 513 bytes, o que cabe por pouco; uma décima sexta não cabe. É esse teto, e não alguma regra sobre multiassinatura, que limita um endereço de script a quinze coassinantes.

Script de resgate vs script de testemunha

Um script de resgate e um script de testemunha ocupam o mesmo lugar conceitual em duas eras diferentes, e a diferença está em onde os bytes viajam e como são fixados. Um script de resgate é fixado com um hash de 160 bits e viaja no script de assinatura a quatro unidades de peso por byte. Um script de testemunha é fixado com um SHA-256 completo de 256 bits e viaja na testemunha a uma unidade de peso por byte, e por isso a mesma política custa cerca de um quarto para gastar. Um arranjo aninhado usa os dois ao mesmo tempo: o script de resgate é o programa de testemunha de 34 bytes e o script de testemunha é o contrato de fato. Se você estiver registrando um backup para uma multiassinatura SegWit envolvido, precisa dos dois por escrito, não de um só.

Não confundir com

Perguntas frequentes

Posso recuperar um endereço P2SH apenas com minha frase de recuperação?

Só se o script for um modelo padrão de chave única que sua carteira consiga reconstruir. Qualquer multiassinatura ou política personalizada também precisa do script de resgate ou de um descritor que o registre, porque uma frase de recuperação deriva chaves e não pode reconstruir um script arbitrário.

Todo endereço que começa com 3 esconde uma multiassinatura?

Não. A maioria esconde uma carteira SegWit envolvida de chave única, em que o script de resgate é um programa de testemunha de 22 bytes sem lógica alguma. Uma saída não gasta revela apenas um hash, então ninguém consegue distinguir as duas até que os bitcoins se movam.

Leia a seguir

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês