Glossário / Referência do desenvolvedor
Script PP
- O que é o script PP?
- O script PP era o campo obrigatório em uma saída do BIP70 que continha o script de bloqueio em bruto que o pagador tinha de reproduzir, os mesmos bytes que acabam em uma saída de transação.
Especificação no BIP-70.
De tudo o que o BIP70 colocava na rede, o script é a única parte que sobreviveu na blockchain. Certificados, notas e prazos de validade ficaram todos fora da cadeia, enquanto o script de bloqueio entrava na transação palavra por palavra e está hoje no conjunto de saídas não gastas. Esses bytes, e nada mais na solicitação, decidem quem pode gastar os bitcoins.
Como funciona
Status: histórico. O script era o campo 2 da mensagem Output e a única parte dela que um comerciante não podia omitir, já que o valor tinha zero como padrão. O Bitcoin Core parou de interpretar qualquer parte disso na versão 0.20.0, lançada em 3 de junho de 2020.
Enviar um script em vez de um endereço foi uma escolha deliberada. Um endereço é um formato de transporte humano: base58check ou bech32, com um prefixo, uma soma de verificação e um conjunto de caracteres escolhido para sobreviver a ser anotado e lido em voz alta. Uma carteira que recebe um precisa decodificá-lo em um script antes de poder construir qualquer coisa. O BIP70 pulava a ida e volta e nomeava o destino na forma que a rede realmente usa.
As formas padrão têm tamanhos fixos, e conhecê-las torna um explorador de blocos muito mais fácil de ler:
- "Pay to public key hash", 25 bytes: duplicar, calcular o hash, empilhar 20 bytes, verificar a igualdade, verificar a assinatura.
- "Pay to script hash", 23 bytes: calcular o hash, empilhar 20 bytes, verificar a igualdade.
- SegWit de chave única, 22 bytes: um byte de versão zero e um hash de 20 bytes.
- SegWit de hash de script, 34 bytes: versão zero e um hash de 32 bytes.
- Taproot, 34 bytes: versão um e uma chave de 32 bytes.
Do que o formato abriu mão foi da detecção de erros. O bech32 garante que qualquer substituição de quatro caracteres em um endereço de até 89 caracteres seja detectada, e o base58check detecta corrupção com um hash de quatro bytes. Os bytes em bruto de um script não trazem nem uma nem outra. Um bit alterado em um endereço produz uma sequência que sua carteira rejeita; um bit alterado em um script produz uma saída válida que ninguém poderá gastar jamais.
Onde você o vê
Os tipos de script são a razão pela qual dois saques do mesmo tamanho podem custar taxas diferentes.
Uma corretora que permite escolher um formato de endereço está escolhendo um script por você. Uma saída SegWit de chave única ocupa 22 bytes contra 25 da forma legada, o que é trivial, mas gastá-la depois não é: essa entrada custa aproximadamente 68 bytes virtuais, enquanto uma legada custa cerca de 148, então os bitcoins que você recebe hoje definem parte da sua conta de taxas pelo resto da vida deles. A 20 sat/vB, a diferença é de cerca de 1.600 satoshis para cada entrada que você acabar gastando.
Os exploradores indicam o tipo de cada saída que exibem, e é assim que você pode verificar em que tipo de saída recebeu de fato. Softwares mais recentes descrevem destinos com descritores de saída, uma forma de texto compacta que abrange toda uma família de scripts e sua derivação, em vez de um script por vez.
O hábito que vale a pena manter de tudo isso é simples. Confirme o destino em um dispositivo com tela própria, porque malware que troca um endereço na sua área de transferência é comum, e uma carteira de hardware exibindo o destinatário real é a verificação que o detecta.
Script PP vs script de chave pública
O campo do BIP70 era um contêiner; um script de chave pública é a coisa em si. Um script de chave pública, também chamado de scriptPubKey ou script de bloqueio, aparece em toda saída de transação já criada e declara a condição que quem gasta deve satisfazer. O script PP era um lugar específico por onde uma cópia de um deles passava, dentro de um protocolo que ninguém executa. Use o nome do campo apenas ao ler a documentação do BIP70, e o nome geral em todos os outros casos.