Glossaire / Adresses et clés
Dérivation BIP-49
- Qu'est-ce que la dérivation BIP-49 ?
- La dérivation BIP-49 place les comptes SegWit imbriqués sur leur propre branche à m/49'/0'/0', de sorte qu'un portefeuille qui ne sait pas les lire n'affiche rien plutôt qu'un solde erroné.
Spécifié dans BIP-49.
Le BIP-49 réserve le premier niveau durci de l'arbre de clés, 49', aux comptes dont les adresses sont des P2WPKH encapsulées dans du P2SH. Il a été attribué le 19 mai 2016 et a ensuite reçu ses propres octets de version de clé étendue, 0x049d7cb2 pour ypub et 0x049d7878 pour yprv. Si votre portefeuille exporte une clé de compte commençant par ypub, c'est la branche que doit parcourir une restauration.
Comment cela fonctionne
Le BIP-49 tranche deux questions : quelle branche d'un arbre BIP-32 contient les clés SegWit encapsulées, et comment une adresse est construite à partir d'une clé de cette branche.
La branche reprend le modèle à cinq niveaux que le BIP-44 utilisait déjà, m / purpose' / coin_type' / account' / change / address_index, et change exactement un nombre. Le purpose devient 49' au lieu de 44'. Le coin type, le compte, la chaîne et l'index gardent le sens que le BIP-44 leur a donné.
La partie adresse est mécanique : hachez la clé publique compressée, encapsulez le résultat de 20 octets dans un script de rachat de 22 octets, puis hachez ce script pour obtenir ce sur quoi la sortie s'engage. La spécification écrit les deux éléments sous la forme scriptSig: 0x160014{20-byte-key-hash} et scriptPubKey: 0xA914{20-byte-script-hash}87.
Le plus intéressant est l'option que l'auteur a rejetée. Weigl énumère deux approches : garder le compte que vous avez déjà et accrocher les adresses SegWit encapsulées aux mêmes clés publiques, ou créer des comptes dédiés sous un nouveau purpose. La première est plus conviviale jusqu'à ce que quelque chose tourne mal, et alors, selon les mots de la spécification, le compte « might show up but also it might miss some UTXOs ». Le BIP-49 a choisi les comptes dédiés précisément parce que cette option « fails in a more visible way ». Un écran vide est un meilleur message d'erreur qu'un nombre erroné plausible.
La sérialisation a fini par recevoir le même traitement : les clés publiques étendues de cette branche utilisent les octets de version 0x049d7cb2, un encodage base58 donnant le préfixe ypub, avec 0x049d7878 pour yprv et upub et uprv sur le testnet.
Où le voit-on
Le BIP-49 apparaît sous la forme d'une clé étendue commençant par ypub plutôt que xpub, et sous celle du compte SegWit encapsulé qu'un portefeuille liste à côté du compte natif. Mycelium, que notre classement note 3,7, prend en charge les comptes SegWit natifs et encapsulés dans une seule application, les deux schémas que le SLIP-0132 enregistre sous zpub et ypub.
Le préfixe ypub a été ajouté après coup, et cette histoire se voit encore. Le BIP-43, qui a inventé le niveau purpose en 2014, demandait aux développeurs de conserver 0x0488B21E et le préfixe xpub pour tous les purposes. Le BIP-49 a d'abord été publié ainsi, et le SLIP-0132, créé le 8 février 2018 pour enregistrer correctement les octets de version, décrit le résultat sans détour : le préfixe inchangé a conduit à une « unsustainable user confusion », car soit l'utilisateur devait se rappeler de quelle branche venait un xpub, soit l'outil de réception devait balayer les deux espaces d'adresses. Un préfixe est un indice, pas une garantie. Si vous collez une clé étendue dans un explorateur de blocs et qu'il en dérive des adresses commençant par 1 alors que votre portefeuille affiche des adresses commençant par 3, vous tenez une clé BIP-49 portant le préfixe plus ancien, et il faut indiquer le chemin à l'outil à la main.
La spécification fournit un vecteur de testnet qu'il vaut la peine de vérifier contre un outil : la phrase abandon répétée onze fois puis suivie de about, racine de compte m/49'/1'/0', première adresse de réception 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2.
Dérivation BIP-49 vs SegWit imbriqué
La dérivation BIP-49 est une règle sur les clés, et le SegWit imbriqué est un schéma que la chaîne voit ; les deux vont souvent ensemble, mais ni l'un ni l'autre n'implique l'autre. Une sortie est du SegWit imbriqué à cause du script sur lequel elle s'engage, et rien en lui n'indique quel chemin a produit la clé. Un portefeuille peut en construire un à partir d'une clé privée importée, ou à partir de l'approche que le BIP-49 a rejetée, qui dérivait une seconde adresse P2SH à partir de clés publiques déjà présentes dans un compte BIP-44. Savoir que vos bitcoins sont sur des adresses 3 ne vous dit donc pas où restaurer, et c'est pourquoi le chemin du compte doit figurer dans vos notes à côté de la sauvegarde de la phrase de récupération.