Visão geral
Pay-to-Script-Hash (P2SH), introduzido no BIP16, transferiu o ônus das condições de gasto complexas do remetente para o destinatário. Antes do P2SH, se alguém quisesse receber bitcoin em um arranjo multisig, o remetente tinha que incluir o script multisig completo em sua saída de transação. O P2SH simplificou isso permitindo que o destinatário fornecesse apenas um hash do script, com o script completo revelado somente no momento do gasto.
Como o P2SH funciona
O remetente bloqueia fundos ao hash de um script de resgate. Ao gastar, o destinatário revela o script de resgate completo junto com os dados necessários para satisfazê-lo.
Script de Bloqueio:
OP_HASH160 <scriptHash> OP_EQUAL
Script de Desbloqueio (gastando um multisig 2-de-3):
OP_0 <assinatura1> <assinatura2> <redeemScript>
Onde redeemScript =
OP_2 <pubKey1> <pubKey2> <pubKey3> OP_3 OP_CHECKMULTISIG
Validação:
┌────────────────────┐
│ 1. Hash do │
│ redeemScript │──> Deve corresponder ao <scriptHash>
├────────────────────┤
│ 2. Executar o │
│ redeemScript │──> Deve retornar VERDADEIRO
│ com as │
│ assinaturas │
└────────────────────┘
Formato de endereço
Os endereços P2SH usam codificação Base58Check e começam com o caractere 3 na mainnet. Isso facilita para as carteiras distinguir endereços P2SH dos P2PKH (que começam com 1).
Casos de uso comuns
- Carteiras multisig — O caso de uso P2SH mais comum, habilitando requisitos de assinatura m-de-n
- SegWit encapsulado — O P2SH pode encapsular um script SegWit (
P2SH-P2WPKH), permitindo que carteiras mais antigas enviem para endereços SegWit - Scripts com bloqueio de tempo — Arranjos de custódia ou vesting usando
OP_CHECKLOCKTIMEVERIFY
Limitações
O P2SH requer revelar o script de resgate completo ao gastar, o que expõe as condições de gasto na cadeia. O formato mais novo P2TR (Taproot) aborda essa preocupação de privacidade revelando apenas o caminho de gasto específico que foi usado, mantendo os demais caminhos ocultos.