Glossário / Endereços e chaves
Endereço P2SH
Outros nomes: Pay-to-Script-Hash, Saída P2SH.
- O que é um endereço P2SH?
- Um endereço P2SH começa com 3 e se compromete com o hash de um script de resgate, de modo que as condições de gasto permanecem secretas até que alguém revele o script.
Especificação no BIP-16.
Pay to script hash chegou com o BIP-16, em vigor a partir do bloco 173.805 em 1º de abril de 2012, e mudou quem carrega o custo da complexidade. Antes dele, o remetente tinha que escrever o contrato inteiro na saída. Depois dele, o remetente escreve 23 bytes e o destinatário paga para revelar o script mais tarde, e é por isso que um endereço 3 pode ocultar um cofre de cinco chaves ou uma simples carteira de uma única chave.
Como funciona
O script de saída é curto e idêntico para todo endereço P2SH: OP_HASH160 seguido de um hash de 20 bytes e OP_EQUAL, 23 bytes no total. O hash se compromete com um script de resgate que só o destinatário conhece.
O gasto acontece em duas passagens. O scriptSig fornece os argumentos de que o script de resgate precisa e, como item final, o próprio script de resgate serializado. Um nó calcula o hash desse último item, compara-o com o valor comprometido e, se coincidirem, desserializa o script e o executa sobre tudo o que resta na pilha. As duas etapas precisam ter sucesso.
Dois limites definem o que cabe. Um script de resgate é um único elemento da pilha, portanto não pode exceder o limite de inserção de 520 bytes que o Bitcoin Core define como MAX_SCRIPT_ELEMENT_SIZE. A política de retransmissão acrescenta um segundo teto de 15 operações de assinatura por entrada P2SH. Juntos, eles limitam o arranjo bem abaixo do que a linguagem de script permite em geral, onde o limite é um script de 10.000 bytes.
O endereço em si é Base58Check com um byte de versão 0x05, o que produz o 3 inicial e uma sequência de 34 caracteres. O BIP-13 definiu esse formato, separadamente da regra de consenso do BIP-16.
Onde você o vê
Formulários de saque de corretoras que descrevem uma opção como "SegWit" sem dizer "native" geralmente se referem a um endereço 3. Cofres de multiassinatura construídos antes de 2018 os usam. Também os usam trocas atômicas e contratos de bloqueio temporal com hash que precisam de um script, mas querem um endereço que uma carteira comum possa pagar.
A consequência do desenho é a ambiguidade, e ela é total. Uma saída 3 não gasta revela apenas um hash, então um explorador de blocos não pode dizer se ela contém uma única chave aninhada ou um quórum corporativo, e o remetente também não. A informação só aparece na transação de gasto.
Essa ambiguidade carrega um modo real de perda. Recuperar bitcoins de uma saída P2SH exige o script de resgate, não apenas as chaves privadas. Uma frase de recuperação sozinha não reconstrói um script arbitrário, então qualquer arranjo P2SH mais elaborado que uma derivação padrão de carteira precisa ter backup feito como descritor ou como os próprios bytes do script. Pessoas já perderam bitcoins tendo todas as chaves e nenhum script.
Endereço P2SH vs multiassinatura P2SH
A multiassinatura P2SH é uma das coisas que você pode colocar dentro de um endereço P2SH, não um sinônimo do formato. O endereço é um contêiner, e o script de resgate escondido nele pode ser uma multiassinatura m-de-n, um hash de chave SegWit aninhado, uma cláusula de recuperação com bloqueio temporal ou um script que ninguém nunca escreveu. Ler um endereço 3 como “um endereço de multiassinatura” é um palpite que falha com frequência, porque o SegWit aninhado fez do 3 o formato padrão de chave única por vários anos após 2017 e deixou milhões de carteiras comuns atrás desse prefixo.