témoin séparé : Dérivez les adresses Segwit de xPub ou zPub à l'aide de PYTHON


Je m’arrache les cheveux pour essayer de comprendre quelques concepts. Je souhaite utiliser un portefeuille Segwit dans mon Ledger Nano S pour dériver des clés publiques enfants non durcies (?) (et donc des adresses segwit) qui correspondent à celles produites par mon Nano. Je veux le faire en utilisant Python 3. Je pense que la création d’une adresse comme celle-ci s’appelle un « portefeuille de surveillance », ou du moins elle est décrite dans les documents Bip32 comme ceci  :

Cela permet par exemple à une entreprise de boutique en ligne de laisser son serveur Web générer de nouvelles adresses (hachages de clé publique) pour chaque commande ou pour chaque client, sans donner au serveur Web accès aux clés privées correspondantes (qui sont nécessaires pour dépenser les fonds reçus).

com/bitcoin/bips/blob/master/bip-0032.mediawiki#Motivation

témoin séparé : Dérivez les adresses Segwit de xPub ou zPub à l'aide de PYTHON

C’est précisément ce que j’essaie de faire en utilisant Python pour mon application Django. Je ne souhaite pas utiliser un service tiers car on me dit de ne pas faire confiance à la divulgation de ma clé publique étendue (xPub). Je souhaite utiliser le xPub de mon Ledger Nano S. En fait, je ne suis pas tout à fait sûr si mon Nano S utilise un xpub ou un zpub, mais j’ai posé cette question dans une question distincte.

Le Ledger Nano S a-t-il un xPub ou un zPub pour les portefeuilles Bitcoin ?

Quoi qu’il en soit, j’ai converti la clé « xpub » en une clé « zpub » et j’ai essayé de dériver de nouvelles clés à la fois en utilisant BEAUCOUP de modules python différents et sans réussir à créer une adresse qui correspond ou même ressemble à celle que mon Nano produit.

Ce que j’ai essayé

Afin d’éliminer les réponses qui suggèrent des méthodes que j’ai déjà essayées, voici une liste complète et exhaustive de toutes les méthodes que j’ai essayées, avec des liens vers toutes les questions similaires sur Stack Exchange.

Au début, j’ai essayé btclib avec Pycoin.

Remarque  : dans tous les exemples, j’essaie d’utiliser Bitcoin Testnet

de btclib importer bip32

registry importer network_for_netcode

BTC pour le Mainnet

xpub = « x(z/t)pub-big-long-key-that-start-with-tpub-zpub-xpub »

derive(xpub, « 84’/1’/0’/0/0 »)

format(child_xpub_key))

format(clé.adresse()))

Similaire à cette question :

Déduire la clé publique de xpub ?

J’obtiens une erreur en utilisant le chemin de dérivation « durci » et pour que l’erreur disparaisse, je ne peux utiliser que le chemin 84/1/0/0/0. J’ai même essayé les chemins 0 et 0/0. Bien sûr, le chemin que mon Nano me donne inclut le (‘). D’après ma compréhension, ce chemin de dérivation est destiné aux clés zpub, mais même si je convertis en zpub, cela ne me donne pas une adresse qui correspond à mon Nano. Je suppose que c’est parce que je devrais utiliser Bip44 ou Bip84 pour dériver des adresses ? Correct?

Bip44Coins

FromExtendedKey(key_str

# Dériver le compte 0 pour Bitcoin : m/44’/0’/0′

Purpose().Coin().Account(0)

Ce qui me donne l’erreur

Bip44DepthError  : la profondeur actuelle (3) n’est pas adaptée à la dérivation

Je sais déjà que je ne veux pas m/44’/0’/0′ mais la doc ne donne aucune idée de comment changer le chemin et regarder le code source ne m’a pas aidé non plus.

Ensuite, j’ai essayé d’utiliser pybitcointools du célèbre Vitalik Buterin. Il a même un rôle dans les docs sur les « watch wallets » :

Pour des raisons de sécurité, la semence et le xprv devraient idéalement être conservés dans un entrepôt frigorifique uniquement. Si une application web doit pouvoir fournir des adresses à la demande, la solution est d’utiliser un watch wallet, généré à partir du xpub. Par exemple, prenons le Dash xpub d’un exemple précédent  :

à partir de l’importation de cryptos *

pièce = tiret()

xpub = ‘xpub-some-xpub-key’

ou plutôt elles n’existent pas. Il n’y a pas d’exemple sur la façon de faire fonctionner cela avec Bitcoin.

Conclusion

De toutes les méthodes que j’ai essayées, au moins btclib ne m’a donné aucune erreur. Je pourrais utiliser ces modules python de manière incorrecte ou peut-être qu’il existe un meilleur module/classe python que je devrais utiliser. Toute direction serait utile. Merci en avance.