Glossário / Endereços e chaves
Caminho de derivação
- O que é um caminho de derivação?
- Um caminho de derivação é o percurso pela árvore de chaves de uma carteira HD, escrito como m/84h/0h/0h/0/0, que indica ao software exatamente qual chave, entre bilhões, reconstruir a partir da sua frase de recuperação.
Especificação no BIP-44.
Um caminho é uma coordenada, não um segredo. Dois números logo no início decidem se suas palavras reconstroem endereços que começam com 1, 3, bc1q ou bc1p, porque o BIP-44, o BIP-49, o BIP-84 e o BIP-86 leem a mesma frase de maneiras diferentes. Anotar o caminho junto com o seu backup é a diferença entre uma restauração que encontra seus bitcoins e uma que informa zero.
Como funciona
Um caminho é lido da esquerda para a direita, um nível por barra, e cada nível estreita a busca. O m no início é a chave mestra gerada a partir da sua frase de recuperação. Tudo o que vem depois é um índice, e um apóstrofo ou um h marca esse índice como endurecido.
O primeiro nível é a finalidade, e é o nível que decide como são seus endereços.
| Padrão | Caminho da conta | Endereços que produz |
|---|---|---|
| BIP-44 | m/44h/0h/0h | legado, começando com 1 |
| BIP-49 | m/49h/0h/0h | SegWit aninhado, começando com 3 |
| BIP-84 | m/84h/0h/0h | SegWit nativo, começando com bc1q |
| BIP-86 | m/86h/0h/0h | Taproot, começando com bc1p |
O segundo nível é o tipo de moeda, obtido do registro SLIP-0044, em que bitcoin é 0 e toda testnet é 1. O terceiro é o número da conta, que é como uma mesma frase de recuperação pode conter uma carteira pessoal em 0h e uma carteira empresarial em 1h sem histórico compartilhado. Depois disso o endurecimento para: o quarto nível é a cadeia, 0 para endereços que você entrega e 1 para troco, e o quinto é o índice de endereço, que aumenta conforme você recebe pagamentos.
Essa divisão entre níveis endurecidos e normais é proposital. Como o nível da conta é endurecido, a chave pública estendida de m/84h/0h/0h pode ser exportada para um celular ou um contador, que então pode derivar todos os endereços de recebimento e de troco abaixo dela, mas não pode passar lateralmente para outra conta nem subir em direção à chave mestra.
A multiassinatura usa a própria ramificação. O BIP-48 coloca as chaves dos coassinantes em m/48h/0h/0h/2h para SegWit nativo, com o último nível endurecido indicando o tipo de script, de modo que um dispositivo consegue distinguir uma conta de assinatura única de uma conta de multiassinatura antes de assinar qualquer coisa.
Por que isso importa quando você compra bitcoin
O caminho nunca afeta sua segurança. Não muda nada sobre o quão difícil é roubar seus bitcoins, e muda tudo sobre se o software à sua frente consegue encontrá-los.
A falha que isso provoca é comum e invariavelmente assustadora. Você compra em uma corretora, saca para um dispositivo, e os bitcoins chegam a endereços bc1q sob m/84h/0h/0h. Um ano depois você restaura as mesmas 24 palavras em outro aplicativo que usa o padrão legado, e o saldo mostra 0,00000000 enquanto um explorador de blocos ainda mostra seu dinheiro intacto no endereço antigo. Nada foi perdido. O aplicativo está olhando para a ramificação errada de uma árvore com quatro bilhões de filhos por nível.
Os padrões diferem entre as carteiras analisadas neste site. A Trezor Suite e a Ledger Live apresentam cada uma as contas por tipo de endereço e escolhem um propósito por você em silêncio. A Electrum pergunta qual tipo de script você quer na hora de restaurar e esconde um campo de caminho de texto livre atrás de uma opção avançada. A Sparrow varre vários caminhos padrão de uma vez e mostra qual deles tem histórico. Nenhuma delas está errada, e nenhuma delas consegue adivinhar o que a outra fez.
Dois hábitos eliminam todo o problema. Escreva o caminho da conta e o tipo de endereço na mesma nota que o nome da carteira, e guarde essa nota em algum lugar a que você possa chegar sem a frase de recuperação, como um gerenciador de senhas, já que ela sozinha não revela nada. Depois, antes de confiar em uma restauração, compare o primeiro endereço de recebimento que ela mostra com o que o seu dispositivo original mostra. Se essas duas sequências coincidirem, todos os endereços abaixo delas também vão coincidir.
Restaurar 24 palavras na Electrum e ver zero
Uma restauração no caminho errado acontece assim. Uma Trezor Model T foi configurada com 24 palavras, um saque de corretora foi para seu primeiro endereço SegWit nativo, e o dispositivo agora está em uma gaveta. Meses depois, a frase é digitada na Electrum em um notebook.
A Electrum pergunta o tipo de script antes de escanear. Escolha legado p2pkh e ela deriva m/44h/0h/0h, mostra endereços que começam com 1, não encontra nada e informa uma carteira vazia. Os bitcoins continuam no endereço bc1q, continuam confirmados, continuam visíveis para qualquer pessoa com o txid.
A correção leva um minuto. Restaure de novo, escolha SegWit nativo, ou abra o campo avançado de derivação e digite m/84'/0'/0' à mão. A Electrum escaneia de novo, o saldo aparece, e a lista de endereços começa com a mesma sequência que a Trezor mostra na aba de recebimento. Se ainda mostrar zero e você souber que os pagamentos foram mais adiante na ramificação, aumente o limite de lacuna do padrão 20 antes de supor que algo está faltando.
Nada nessa sequência envolveu risco para os bitcoins, porque uma restauração é uma operação de leitura. Você pode testar cada finalidade, uma após a outra, e o único custo é o tempo que cada nova varredura leva.
Caminho de derivação vs descritor de saída
Um caminho diz onde; um descritor diz onde, o quê e a partir de qual chave. O descritor wpkh([fingerprint/84h/0h/0h]xpub/0/*) contém o mesmo caminho, mais o tipo de script como função de envoltório, mais a própria chave estendida, mais uma soma de verificação que detecta um caractere digitado errado. Entregar um caminho a alguém não diz nada sobre a sua carteira. Entregar um descritor entrega todo o seu histórico de endereços e todos os endereços futuros dessa ramificação, e é por isso que um é seguro de enviar por e-mail e o outro não.