Glossário / Endereços e chaves
P2WSH
Outros nomes: Pay-to-Witness-Script-Hash.
- O que é o P2WSH?
- O P2WSH bloqueia bitcoins em um compromisso SHA-256 de 32 bytes com um script de testemunha, dando aos contratos muito mais espaço do que o P2SH e um desconto no script quando ele é revelado.
Especificação no BIP-141.
Pay to witness script hash é a saída SegWit versão 0 para qualquer coisa mais complicada que uma única chave, escrita como um endereço bc1q de 62 caracteres. O Bitcoin Core retransmite um gasto cujo script de testemunha chega a 3.600 bytes e cuja testemunha comporta até 100 itens na pilha, enquanto um script de resgate P2SH para em 520 bytes. O espaço extra é o motivo pelo qual os contratos sérios migraram para cá.
Como funciona
Uma saída P2WSH é o byte 0x00 da versão de testemunha 0 seguido de um push de 32 bytes, 34 bytes no total. Esses 32 bytes são um SHA-256 simples do script de testemunha serializado, não o RIPEMD-160 de um SHA-256 usado em outras partes do bitcoin.
Essa escolha é deliberada. Um compromisso de 160 bits oferece cerca de 80 bits de resistência a colisões, o que é desconfortável quando uma contraparte ajuda a escolher o que entra no script e poderia procurar dois scripts que compartilhem um hash. Um compromisso de 256 bits elimina essa preocupação. O P2WPKH de chave única mantém o hash mais curto porque só uma parte escolhe a chave, e o endereço fica 20 caracteres mais curto por isso.
O gasto empilha os argumentos na pilha da testemunha e termina com o script serializado. Um nó calcula o hash desse último item, compara-o com o compromisso e então executa o script com o que resta. A política de retransmissão do Bitcoin Core define os limites em policy.h: 3.600 bytes para o script, 100 itens na pilha e 80 bytes por item.
As taxas explicam a migração. Um gasto 2 de 3 aqui ocupa cerca de 104,5 vbytes, porque as duas assinaturas e todo o script de 105 bytes viajam na testemunha a uma unidade de peso por byte. A mesma política sob P2SH custa aproximadamente 297 vbytes. O teto de consenso de 20 chaves do OP_CHECKMULTISIG também é alcançável, já que vinte chaves ocupam menos de 700 bytes.
Onde você vê isso
Todo canal Lightning tem seus fundos depositados em uma saída P2WSH 2 de 2, o que faz dela um dos tipos de script mais comuns na blockchain, mesmo que poucas pessoas cheguem a digitar o endereço. Custódia institucional, políticas de miniscript e cláusulas de herança com timelock também a usam.
Em um explorador de blocos, uma saída P2WSH não gasta é uma sequência bc1q de 62 caracteres e nada mais. Ela parece a mesma quer proteja duas chaves quer vinte, e as condições só aparecem quando os bitcoins se movem.
Os backups precisam incluir o script. Uma frase de recuperação regenera chaves, não scripts arbitrários, então guarde o descritor ou os bytes exatos do script junto da frase de recuperação e confirme que consegue restaurar a partir deles antes que o endereço guarde dinheiro real.
P2WSH vs script de testemunha
O P2WSH é a saída; o script de testemunha é o conteúdo com que ela se compromete. A saída contém 32 bytes de hash e nada mais, então não transmite nenhuma informação sobre as condições associadas, e nada do script aparece on-chain até um gasto publicá-lo. A obrigação é desigual por isso. Um remetente precisa apenas do endereço e pode pagar sem entender nada. O destinatário precisa dos bytes exatos do script para sempre, porque perdê-los torna os bitcoins impossíveis de gastar, não importa quantas chaves privadas sobrevivam.