Os endereços P2SH ou Pay-to-Script-Hash são um tipo especial de endereço no Bitcoin, que permite criar endereços que podem receber ou enviar transações nas quais uma série de instruções devem ser cumpridas para desbloquear os saldos que esses endereços contêm.

El Pay-to-ScriptHash, ou também conhecido como P2SH, é um formato de script usado na rede Bitcoin que permite bloquear bitcoins no hash do script (uma parte) e, em seguida, fornecer o script original (completo) quando os bitcoins são desbloqueados no momento de fazer uma transação.

Este recurso permite a criação de scripts de resgate personalizados que podem ser facilmente compartilhados com outros usuários. Ou seja, permite criar endereços ou transações com programações não convencionais. E estes só podem ser desbloqueados cumprindo uma série de condições pré-estabelecidas.

Desde 2012, o Bitcoin e outras criptomoedas incorporaram o formato P2SH em muitos de seus endereços. Por meio do qual as transações podem ser enviadas para um hash de script em vez de um hash de chave pública. Ou seja, as transações são enviadas para um endereço que começa com 3 em vez de um que começa com 1 (ECDSA) Pelo que endereços codificados neste formato representam o hash codificado de um script e não de uma chave pública ECDSA.

Da mesma forma, devido a esta característica, endereços com formato P2SH são geralmente utilizados para realizar transações para endereços de múltiplas assinaturas. Embora este não seja seu único uso. Com o P2SH você pode configurar endereços que podem representar um script através do qual outros tipos de transações são codificados. Por exemplo, com o P2SH, um usuário pode enviar seus bitcoins para um endereço seguro de muitas maneiras possíveis ou incomuns, sem ter conhecimento de como a segurança foi configurada. Já o usuário que recebe a transação pode precisar atender a certas condições ou instruções especiais para desbloquear a transação.

Exemplo de uma transação P2SH

Uma transação P2SH funciona porque o scriptPubKey contém um hash que deve ser desbloqueado para liberar o pagamento dos bitcoins bloqueados. Primeiro, o script de origem de desbloqueio da transação (script de resgate ou script de resgate) está dentro do scriptSig da transação.

scriptSig de um P2SH

Aqui podemos ver claramente que o scriptSig menciona um endereço MuSig ou assinaturas múltiplas do tipo (2 de 3). Nele vemos três chaves (as chaves na imagem), duas assinaturas (dos participantes da transação) e o OP_CODE (código de operação), OP_CHECKMULTISIG. O que esta parte do script de transação fará é verificar se as assinaturas e chaves dentro dele são capazes de desbloquear a operação.

Ou seja, verifique se pelo menos 2 das três pessoas autorizadas estão fazendo a transação. Depois que o script verificar isso, podemos ter certeza de que temos o script de desbloqueio do bitcoin e passaremos para a segunda parte.

Na segunda parte, vemos como o scriptPubKey de uma transação P2SH tem a seguinte estrutura:

scriptPubKey de um P2SH

Esses OP_CODEs nos dizem que o scriptPubKey só será desbloqueado se pudermos provar que temos o script de origem da transação (o script de resgate verificado no scriptSig). Para fazer isso, devemos pegar o resultado deste script e executar a operação OP_HASH160. Ou seja, aplique um hash ao script SHA-256 e então um RIPEMD-160. O resultado será comparado com o "script hash" dentro do scriptPubKey (usando OP_EQUAL) e se o resultado for idêntico, teremos desbloqueado com sucesso nossos bitcoins.

Implementação do formato P2SH em endereços Bitcoin

BIP-0013

El Formato de endereço Pay-to-ScriptHash foi inicialmente introduzido no BIP 13 desenhado por Gavin Andresen. Onde ele descreve um novo formato para endereços Bitcoin com o qual transações arbitrárias complexas podem ser suportadas.

Neste BIP, Andressen descreve que este novo formato para endereços Bitcoin usará um comprimento fixo de 20 bytes. Que representa o hash do script por meio do qual as criptomoedas podem ser trocadas. E pode ser facilmente usado e escaneado a partir de um código QR, ou copiado e colado rapidamente para realizar a transação desejada.

Da mesma forma, Andresen descreve que a função está integrada nos primeiros 4 bytes da sequência de bytes checksum ou checksum do endereço, que fortalece a infraestrutura e segurança da rede Bitcoin. Permitindo a implementação de um método de verificação muito mais seguro, ideal e eficiente do que simplesmente truncar SHA-256. Ao mesmo tempo, uma identidade própria é adicionada para cada endereço criado na rede.

BIP-0016

Da mesma forma, no BIP 16, que foi anunciado alguns meses após o BIP 13 por Gavin Andresen, P2SH é explicado como um soft fork para o protocolo Bitcoin projetado para permitir que endereços P2SH sejam estabelecidos como um novo tipo de transação padrão. Isso busca simplificar o uso de scripts em qualquer tipo de transação, por mais complexa que seja.

O BIP 16, em conjunto com o BIP 13, visa minimizar as mudanças que precisam ser feitas na infraestrutura de suporte da rede Bitcoin. Tornando mais fácil compartilhar scripts de bloqueio com outros usuários, não importa quão complexos sejam esses scripts.

Por exemplo, antes da implementação do P2SH, se você quisesse adicionar um script de bloqueio complexo em seus bitcoins, era necessário compartilhar todo o script de bloqueio com o usuário que o transferiu. Mas, com o advento do P2SH, agora é possível fornecer ao usuário apenas uma parte do script de bloqueio, em vez de toda a sequência. Ou seja, apenas um hash do script pode ser entregue em vez de todo o script.

Quanto você sabe, cryptonuta?

Os endereços P2SH nos permitem obter maior segurança para nossos fundos?

VERDADEIRO!

O uso de endereços P2SH e sua capacidade de armazenar fundos usando várias assinaturas, nos permite proteger criptomoedas de uma forma muito segura. Isso porque, para ter acesso ao referido dinheiro, teríamos que ter acesso às chaves privadas que criaram o referido endereço, e quanto mais chaves houver, mais difícil será controlar esse endereço por meios maliciosos.

Vantagens da implementação P2SH

Endereços com várias assinaturas

Ativar P2SH irá permite que os usuários do sistema Bitcoin possam fazer ou receber transações em endereços com várias assinaturas. Na verdade, este é o aplicativo mais conhecido para o formato P2SH. Já que os endereços de formato P2SH são projetados para suportar um conjunto de assinaturas que é igual ou menor que o número de chaves privadas vinculadas ou associadas a elas. Ou seja, em um endereço de múltiplas assinaturas que possui 3 chaves associadas, as 3 chaves podem ser os signatários, ou na sua falta, apenas 2 ou 1 delas.

Além disso, Os endereços de Bitcoin que usam o formato P2SH são facilmente identificados, pois começam com o número 3. Porém, embora seja freqüentemente usado para criar endereços com várias assinaturas, não contanto que um endereço comece com esse número significa que é um endereço com várias assinaturas. Um endereço que começa com o número 3 sempre será um endereço P2SH, mas nem sempre será um endereço com várias assinaturas.

Segurança e Privacidade

Por meio do formato P2SH, um usuário pode financiar qualquer script sem saber quais são as condições de gasto vinculadas a esse script. Ou seja, o usuário pode enviar ou compartilhar os scripts associados a uma transação sem ter conhecimento parcial ou total sobre a configuração dessas condições ou instruções de segurança.

Portanto, no caso de ser remetente, o usuário terá apenas que enviar para o endereço P2SH as transações que deseja realizar. Não há necessidade de saber como os fundos que você enviou serão gastos. Enquanto no caso de ser destinatário ou destinatário, o usuário deve conhecer as condições de gastos associados a essa transação. Isso pode variar entre a necessidade de uma multi-assinatura, senha ou outra, para poder acessar as criptomoedas que foram enviadas para você.

Da mesma forma, se o script de bloqueio P2SH contém apenas um hash do script, é impossível saber que tipo de script vem desse hash. Tornando impossível para um usuário saber se uma transação vem de um endereço privado ou de uma multi-assinatura.

Saídas menores não gastas

Como todas as saídas não gastas ou UTXOs de Bitcoin são armazenados na RAM dos nós, é importante economizar esse espaço de armazenamento. Assim, ao utilizar scripts de bloqueio P2SH com sequências menores, os UTXOs exigirão menos espaço para serem armazenados, permitindo que os nós sejam computacionalmente mais eficientes e trabalhem de forma ágil e competente na validação de transações de rede.

Taxas de comissão mais baixas

Como as taxas de comissão cobradas no Bitcoin não estão relacionadas aos valores transferidos, mas ao tamanho das transações, um script hash com um comprimento menor permite que o remetente de uma transação envie seus fundos para endereços P2SH sem ter para pagar altas taxas de comissão. Como aconteceria no caso de usar os scripts completos.

Embora isso possa não ser um problema sério hoje, pode ser no futuro; quando as recompensas de mineração são reduzidas e os nós permanecem com taxas de comissão de transação.

SegWit

Os endereços no formato P2SH são compatíveis com ambos os endereços SegWit como com aqueles que não são. Assim, os usuários podem enviar seus fundos e realizar transações em ambas as carteiras com facilidade.

Desvantagens da implementação P2SH

A verdade é que o P2SH tem muito poucas desvantagens ou limitações. Como o P2SH foi implementado muito depois do desenvolvimento dos scripts Bitcoin originais, os desenvolvedores tiveram a oportunidade de corrigir as limitações que estavam presentes na rede naquela época. No entanto, as limitações apresentadas pelo P2SH são:

Tamanho dos dados

P2SH ocupa mais espaço dentro do blockchain. O que pode causar congestionamento e influenciar a capacidade operacional da rede. Isso ocorre porque durante o bloqueio de bitcoins no P2SH, mais 25 bytes são adicionados ao script original, deixando um script multisig 2 de 3 usando P2SH com 278 bytes. Comparado a 253 bytes para o mesmo script de assinaturas múltiplas 2 de 3 usando P2MS.