Mon but: créer une blockchain, en 🐍python🐍, en moins d'une semaine.
Il s'agit de mon premier gros projet, en python, il m'a permis de progresser et d'apprendre de mes erreurs.
J'y ai découvert Flask, les algorithmes de hachages, j'ai écris des kilomètres de docstrings.
Soyez indulgent.e 😁.
Cette application permet de:
- Créer des nodes (flask, serveur dev --> non-sécurisé).
- Enregistrer des nodes sur la blockchain.
- Vérifier la blockchain.
- Mettre à jour la blockchain gràce aux nodes, en trouvant un consensus.
- Miner un block.
- Renvoyer toute la chaine.
- Enregistrer un nouvelle transaction sur la blockchain.
-
Installer Postman.
-
Installer Python 3.8+.
-
Activer votre environnement virtuel. Exemple avec venv:
python3 -m venv /chemin/vers/environnement/virtuel
ou sous windows
py -m venv /chemin/vers/environnement/virtuel
- Installer les modules requis, dans le même dossier.
pip install -r requirements.txt
Plusieurs solutions s'offrent à vous (toujours vers le même dossier):
- 👯Cloner ce repo sur votre machine local à l'aide de cette adresse:
https://github.com/Sam-prog-sudo/Chain-of-Fools.git
. - 🍴Forker ce repo.
C'est une invitation à la contribution👋
- 💾Télécharger le repo à cette adresse:
https://github.com/Sam-prog-sudo/Chain-of-Fools/archive/master.zip
Lancer un Shell pour la création de nodes puis, lancer Postman pour l'envoie et le retour de requêtes.
Commencer par démarrer au moins un serveur (node):
Par défaut, le numéro de port est 5000
py python app/main.py
py app/main.py -p 5001
py app/main.py --port 5002
Pour miner un nouveau block, il faut trouver la nouvelle preuve de travail.
Pour ce faire, il faut envoyer une requête GET
à l'adresse http://localhost:[numéro-de-port]/mine
.
En suivant la nomenclature du format JSON, ajouter dans le Body
de la requête:
{
"sender": "adresse de l'émetteur",
"recipient": "adresse du bénéficiaire",
"amount": quantité-émise (un entier relatif),
}
Puis, envoyer la requête POST
à l'adresse http://localhost:[numéro-de-port]/transactions/new
.
Pour obtenir toutes les informations stockées sur la blockchain, il suffit d'envoyer une requête GET
à l'adresse:
http://localhost:5000/chain_of_fools
.
En suivant la nomenclature du format JSON, ajouter dans le Body
de la requête. Par exemple:
{
"nodes": ["http://192.168.1.1", "http://192.168.1.4"]
}
NB: il s'agit d'une liste de node à rajouter.
Pour enregistrer un nouveau node sur le réseau, il faut envoyer la requête POST
à l'adresse
http://localhost:[numéro-de-port]/nodes/register
.
Dans le cas où il y aurait plusieurs nodes, cette requête permet d'assurer la validité de la chaine,
à l'aide d'un algorithme de consensus.
Pour s'assurer que le node courant détient la chaine la plus à jour (donc la plus longue),
il suffit d'envoyer une requête GET
à l'adresse http://localhost:5000/nodes/resolve
.
Cette liste est non-exhaustive:
(Essayer de) respecter la PEP 8- Séparer les views de la logique
- Mettre en place des test avec pytest.
- Générer une documentation avec sphinx.
- Créer des nodes qui vérifient les transactions.
- Gérer les erreurs de 'requests'.
- Améliorer l'algorithme de travail.
- Améliorer l'algorithme de hashage.
- Permettre une saugarde physique de la blockchain.
- Stocker d'autres informations sur la blockchain (hors cryptomonnaie).
- Améliorer la sécurité des nodes (une vraie passoire...).
- Obtenir certaines informations de la blockchain (qui a fait quelle transaction, et quand; combien de block ont été miné; etc.)
- Créer un wallet
- Créer un interface graphique (legos qui s'imbriquent ?)
Pourquoi une blockchain ?
😱 https://sametmax.com/ 😱 ?
😥 oui, je sais ... et nan, ça ne s'écris pas pareil.