Pular para o conteúdo
buybitcoinsmart

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.

Não confundir com

Perguntas frequentes

Por que minha chave pública estendida começa com ypub em vez de xpub?

Porque ela foi serializada com os bytes de versão que o BIP-49 atribui a este ramo, 0x049d7cb2, que na codificação base58 resultam em ypub. O prefixo é um rótulo do esquema de derivação, não um tipo diferente de chave, e a SLIP-0132 o registra ao lado de xpub e zpub.

O BIP-49 está obsoleto?

Não. O próprio cabeçalho do BIP ainda diz Deployed, e as carteiras que criaram contas no ramo 49' continuam derivando-as normalmente. Nada na especificação retirou o ramo, e os bitcoins que estão sob ele não precisam de resgate.

Posso saber por um endereço se ele veio do BIP-49?

Não. Uma saída P2SH registra apenas o hash de script a que se compromete, então um endereço que começa com 3 não revela nada sobre o caminho por trás dele. Anote o caminho da conta junto com seu backup em vez de tentar deduzi-lo depois.

Leia a seguir

Termos relacionados

Mais em Endereços e chaves

Ler esta página em inglês