[PYTHON] J'ai fait un simple portefeuille de Bitcoin avec pycoin

Aperçu

C'est une application GUI qui implémente les fonctions de base du portefeuille Bitcoin. Il est également possible d'échanger des pièces de monnaie avec cette application. (Nous ne pouvons pas garantir l'opération, nous ne le recommandons donc pas. Si vous le faites, c'est une petite quantité ...)

code

https://github.com/momosuke4989/pycoin-demo

Raison de la fabrication

Une bibliothèque appelée pycoin a été introduite dans Mastering Bitcoin, qui est une bible bitcoin, je l'ai donc créée après avoir étudié python et bitcoin. Lors de la conférence Open Source 2016 Tokyo / Automne, je faisais une démonstration avec un Raspberry Pi avec un écran LCD de 3,2 pouces. C'est pourquoi la spécification de la taille de la fenêtre est étrangement petite.

Comment utiliser

Voir LISEZ-MOI key-generate.py est pour la génération d'adresse bitcoin et create-tx.py est pour la génération de transaction.

Commentaire

Qu'est-ce qu'un portefeuille Bitcoin en premier lieu?

Une application permettant aux utilisateurs généraux de gérer Bitcoin s'appelle un portefeuille. Les principales fonctions sont le stockage et l'envoi / la réception de pièces de monnaie, qui se composent des éléments suivants.

Clé privée et adresse

Dans le monde du bitcoin, les utilisateurs sont identifiés par l'unité de clé privée et l'adresse bitcoin (ci-après dénommée adresse). Si vous le remplacez par le monde des banques, la clé privée est le mot de passe et l'adresse est le numéro de compte. La cryptographie à clé publique (ou la cryptographie à courbe elliptique pour être exact) et les fonctions de hachage sont utilisées pour générer des adresses, mais il est intéressant de noter qu'aucune organisation ou organisme ne contrôle cette tâche. La plage de valeurs que la clé privée peut prendre est suffisamment grande (10 ^ 77), il est donc pratiquement sûr d'ignorer la possibilité de conflits d'adresses. Pour cette raison, il est courant dans le monde du bitcoin d'avoir plusieurs adresses par une seule personne, et on dit qu'il est souhaitable de générer une adresse pour chaque transaction du point de vue de la sécurité, mais la clé privée et l'adresse à chaque fois. C'est beaucoup de travail à générer, et cela devient aussi compliqué à gérer.

Hierarchical Deterministic Wallet Un mécanisme appelé portefeuille déterministe hiérarchique, communément appelé portefeuille HD, a été proposé pour résoudre ce problème. Avec le portefeuille HD, vous pouvez générer plusieurs clés / adresses privées de manière hiérarchique à partir d'une clé principale, et si vous avez une clé principale, vous pouvez également obtenir le solde de toutes les adresses sous la hiérarchie, ce qui est très pratique.

Bien que l'introduction soit devenue assez longue, key-generate.py est une application qui génère une clé privée et une adresse basée sur ce mécanisme.

Transactions et signatures électroniques

Pour envoyer Bitcoin à quelqu'un, vous devez envoyer les informations de transfert sous la forme d'une transaction au réseau Bitcoin et être approuvé. Cependant, dans le monde du bitcoin, toutes les informations sur l'adresse et la quantité sont ouvertes au public, il est donc facile de créer une transaction telle que l'envoi d'argent depuis l'adresse d'une autre personne en rouge vers vous-même. Ce serait irrésistible si quelque chose comme ça était approuvé. Afin d'éviter une telle situation, il suffit d'avoir un propriétaire légitime pour déplacer Bitcoin, mais voici une signature électronique avec une clé privée. Bitcoin tire parti des caractéristiques du cryptage à clé publique et applique des signatures électroniques pour prouver la propriété. La clé privée est traitée au format WIF (Wallet Import Format). Il existe également un format WIF compressé, mais les détails sont omis. (À propos, l'application ci-dessus utilise le format WIF compressé)

create-tx.py est une application qui crée une transaction signée et l'envoie au réseau.

Sentiments divers

Quand j'ai fait quelque chose qui fonctionne comme ça, j'ai appris sensuellement que la clé privée et l'adresse peuvent être gérées séparément. Étant donné que l'application que j'ai créée cette fois n'était pas censée être publiée de cette manière, je pense qu'il y a différents points tels que le fait de ne pas clairement indiquer la licence. (Puis-je l'ajouter ou le modifier plus tard?) Si vous avez des conseils, comme quelque chose d'étrange ici ou quelque chose comme ça, veuillez commenter.

référence

Maîtriser le stockage national de PDF de traduction de Bitcoin https://www.bitcoinbook.info/translations-of-mastering-bitcoin/

référentiel pycoin github https://github.com/richardkiss/pycoin

Recommended Posts

J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai fait un simple blackjack avec Python
J'ai créé un démon avec Python
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Lecteur RSS simple réalisé avec Django
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
J'ai fait un jeu rogue-like avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une application WEB avec Django
J'ai fait un simulateur de neurones avec Python
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai fait une prévision météo de type bot avec Python.
〇✕ J'ai fait un jeu
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un Bot LINE avec Serverless Framework!
J'ai fait un graphique de nombres aléatoires avec Numpy
J'ai fait un simple lecteur RSS ~ Edition C ~
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai créé un bot de livre de compte de ménage avec LINE Bot
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai essayé un RPA simple pour me connecter avec du sélénium
J'ai fait un jeu mono tombé avec Sense HAT
J'ai fait un blackjack avec du python!
J'ai fait un texte Python
J'ai fait un robot discord
J'ai créé COVID19_simulator avec JupyterLab
J'ai créé Word2Vec avec Pytorch
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
Une histoire qui a trébuché lorsque j'ai créé un bot de chat avec Transformer
Un simple lecteur de musique interactif fait avec Chuck et OpenPose
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait une minuterie pomodoro dure qui fonctionne avec CUI
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot