Glossário / Endereços e chaves
Derivação BIP-49
- O que é a derivação BIP-49?
- A derivação BIP-49 coloca as contas SegWit aninhadas em seu próprio ramo em m/49'/0'/0', de modo que uma carteira que não consegue lê-las não mostra nada em vez de um saldo errado.
Especificação no BIP-49.
O BIP-49 reserva o primeiro nível endurecido da árvore de chaves, 49', para contas cujos endereços são P2WPKH embrulhados dentro de P2SH. Ele foi atribuído em 19 de maio de 2016 e mais tarde ganhou seus próprios bytes de versão de chave estendida, 0x049d7cb2 para ypub e 0x049d7878 para yprv. Se sua carteira exporta uma chave de conta que começa com ypub, esse é o ramo que uma restauração precisa percorrer.
Como funciona
O BIP-49 resolve duas questões: qual ramo de uma árvore BIP-32 guarda as chaves de SegWit embrulhado e como um endereço é construído a partir de uma chave nesse ramo.
O ramo toma emprestado o modelo de cinco níveis que o BIP-44 já usava, m / purpose' / coin_type' / account' / change / address_index, e muda exatamente um número. O propósito passa a ser 49' em vez de 44'. O tipo de moeda, a conta, a cadeia e o índice mantêm os significados que o BIP-44 lhes deu.
A metade do endereço é mecânica: calcule o hash da chave pública comprimida, embrulhe o resultado de 20 bytes em um script de resgate de 22 bytes e depois calcule o hash desse script para obter aquilo a que a saída se compromete. A especificação escreve as duas peças como scriptSig: 0x160014{20-byte-key-hash} e scriptPubKey: 0xA914{20-byte-script-hash}87.
A parte interessante é a opção que o autor rejeitou. Weigl lista duas abordagens: manter a conta que você já tem e pendurar endereços SegWit embrulhados nas mesmas chaves públicas, ou criar contas dedicadas sob um novo propósito. A primeira é mais amigável até que algo dê errado, e então, nas palavras da especificação, a conta "might show up but also it might miss some UTXOs". O BIP-49 escolheu contas dedicadas precisamente porque essa opção "fails in a more visible way". Uma tela vazia é uma mensagem de erro melhor do que um número errado plausível.
A serialização recebeu o mesmo tratamento, com o tempo: as chaves públicas estendidas nesse ramo usam os bytes de versão 0x049d7cb2, codificados em base58 com o prefixo ypub, com 0x049d7878 para yprv e upub e uprv na testnet.
Onde você vê isso
O BIP-49 aparece como uma chave estendida que começa com ypub em vez de xpub, e como a conta SegWit embrulhada que uma carteira lista ao lado da nativa. A Mycelium, que nossa classificação coloca em 3,7, traz contas SegWit nativas e embrulhadas em um só aplicativo, os dois esquemas que a SLIP-0132 registra sob zpub e ypub.
O prefixo ypub foi um acréscimo posterior, e essa história ainda aparece. O BIP-43, que inventou o nível de propósito em 2014, disse aos implementadores para manter 0x0488B21E e o prefixo xpub para todos os propósitos. O BIP-49 saiu assim no início, e a SLIP-0132, criada em 8 de fevereiro de 2018 para registrar os bytes de versão adequadamente, descreve o resultado sem rodeios: o prefixo inalterado levou a "unsustainable user confusion", porque ou o usuário tinha que lembrar de qual ramo vinha uma xpub, ou a ferramenta receptora tinha que escanear os dois espaços de endereços. Um prefixo é uma pista, não uma garantia. Se você colar uma chave estendida em um explorador de blocos e ele derivar endereços começando com 1 enquanto sua carteira mostra endereços começando com 3, você tem uma chave BIP-49 usando o prefixo mais antigo, e a ferramenta precisa receber o caminho manualmente.
A especificação inclui um vetor de testnet que vale a pena verificar em uma ferramenta: a frase abandon repetida onze vezes seguida de about, raiz da conta m/49'/1'/0', primeiro endereço de recebimento 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2.
Derivação BIP-49 vs SegWit aninhado
A derivação BIP-49 é uma regra sobre chaves, e o SegWit aninhado é um padrão que a cadeia vê; os dois geralmente andam juntos, mas nenhum implica o outro. Uma saída é SegWit aninhado por causa do script a que se compromete, e nada nela registra qual caminho produziu a chave. Uma carteira pode construir uma a partir de uma chave privada importada, ou com a abordagem que o BIP-49 rejeitou, que derivava um segundo endereço P2SH de chaves públicas que já estavam em uma conta BIP-44. Saber que seus bitcoins estão em endereços começando com 3, portanto, não diz onde restaurar, e é por isso que o caminho da conta deve estar em suas anotações ao lado do backup da frase de recuperação.