Aller au contenu
buybitcoinsmart

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.

À ne pas confondre avec

Questions fréquentes

Pourquoi ma clé publique étendue commence-t-elle par ypub plutôt que par xpub ?

Parce qu'elle a été sérialisée avec les octets de version que le BIP-49 attribue à cette branche, 0x049d7cb2, qui donnent ypub en base58. Le préfixe est une étiquette du schéma de dérivation, pas un autre type de clé, et le SLIP-0132 l'enregistre aux côtés de xpub et zpub.

Le BIP-49 est-il obsolète ?

Non. L'en-tête du BIP indique toujours Deployed, et les portefeuilles qui ont créé des comptes sur la branche 49' continuent de les dériver normalement. Rien dans la spécification n'a retiré cette branche, et les bitcoins qui s'y trouvent n'ont besoin d'aucun sauvetage.

Peut-on savoir à partir d'une adresse si elle vient du BIP-49 ?

Non. Une sortie P2SH n'enregistre que le hachage de script sur lequel elle s'engage, donc une adresse 3 ne révèle rien du chemin qui la sous-tend. Notez le chemin du compte avec votre sauvegarde plutôt que de tenter de le déduire plus tard.

À lire ensuite

Termes associés

Plus de termes : Adresses et clés

Lire cette page en anglais