Glossário / Endereços e chaves
SegWit aninhado
Outros nomes: Wrapped SegWit, P2SH-P2WPKH, endereço 3.
- O que é o SegWit aninhado?
- O SegWit aninhado envolve um hash de chave do SegWit nativo dentro de um endereço P2SH, ganhando compatibilidade com softwares que não conseguiam ler strings bc1, a um custo de cerca de 23 vbytes extras por entrada.
Especificação no BIP-49.
Em 2017, quase nenhuma corretora conseguia interpretar um endereço bech32, então o BIP-141 permitiu que um programa de testemunha ficasse dentro de uma saída pay to script hash comum. O resultado parece, para quem envia, qualquer outro endereço que começa com 3, e o gasto ocupa cerca de 91 vbytes, contra 148 de uma entrada legada e 68 de uma entrada bc1q simples. Era uma ponte, e a travessia está aberta há anos.
Como funciona
Uma saída SegWit aninhada é uma saída P2SH sem nada de especial: OP_HASH160, um hash de 20 bytes, OP_EQUAL. O que está atrás do hash é incomum. O script de resgate não é realmente um script, mas o próprio programa de testemunha de 22 bytes: o byte de versão 0x00 seguido de um push do HASH160 de 20 bytes da sua chave pública comprimida.
Por isso o gasto usa os dois mundos. O scriptSig contém exatamente um item, esse programa de 22 bytes, que satisfaz a verificação P2SH. A assinatura e a chave pública vão para a testemunha, onde ganham o desconto. Somando o opcode de push, o scriptSig contribui com 23 bytes que não são de testemunha, pesando 92 unidades, e 92 dividido por quatro é toda a penalidade de 23 vbytes em relação ao SegWit nativo.
As carteiras mantêm esses endereços em sua própria ramificação. O BIP-49 atribui o caminho de derivação m/49'/0'/0', e o SLIP-132 deu a essa ramificação o prefixo de chave estendida ypub, que é o motivo pelo qual restaurar um backup produz endereços que começam com 3 em vez de bc1q. Errar o prefixo durante uma restauração mostra uma carteira vazia mesmo com a frase de recuperação correta.
Onde você vê isso
Qualquer tela de depósito ou saque que ofereça "SegWit" e "Native SegWit" como opções separadas está oferecendo aninhado e nativo, nessa ordem. As telas de configuração de conta da Ledger e da Trezor fazem o mesmo. As corretoras que adotaram o SegWit cedo padronizaram a forma aninhada e muitas nunca mudaram, então uma grande quantidade de armazenamento a frio com custódia ainda fica atrás de endereços que começam com 3.
Mudar para o SegWit nativo é uma transação on-chain, não uma mudança de configuração, porque os dois formatos vêm de ramificações diferentes da mesma frase de recuperação. Faça isso quando as taxas estiverem baixas, envie primeiro um teste pequeno e verifique depois que sua carteira está exibindo a conta m/84'/0'/0'. Não há diferença de segurança entre os dois, então nada é urgente. A troca é puramente de taxas contra compatibilidade, e a compatibilidade deixou de ser escassa.
SegWit aninhado vs endereço P2SH
O SegWit aninhado é um tipo de endereço P2SH, e on-chain é impossível distinguir os dois até um gasto. Uma string que começa com 3 pode corresponder a um programa de testemunha de 22 bytes, a um script de resgate multiassinatura 2 de 3 ou a uma cláusula de recuperação com bloqueio temporal, e a saída não gasta não revela nada. Essa opacidade já foi contada como um benefício de privacidade. Na prática, agora significa que um explorador de blocos não pode dizer o que você tem, e quem envia não pode avisar que esvaziar o endereço custará mais do que custaria esvaziar um bc1q.