Skip to content

AMTInformatique/Chain-of-Fools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chain of Fools

image

Avant-propos

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 😁.

Table des matières


Introduction

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.

Installation

Prérequis

  • 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
pip install -r requirements.txt

Code source

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👋


Utilisation

Lancer un Shell pour la création de nodes puis, lancer Postman pour l'envoie et le retour de requêtes.

Création de node

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

Miner un block

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.

Enregistrer des transaction

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.

Obtenir la blockchain

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.

Enregistrer un node

En suivant la nomenclature du format JSON, ajouter dans le Bodyde 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.

Consensus de la blockchain

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.

Améliorations possibles

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 ?)

FAQ

Pourquoi une blockchain ?

Parce que :)

😱 https://sametmax.com/ 😱 ?

😥 oui, je sais ... et nan, ça ne s'écris pas pareil.

License

MIT license

About

Une blockchain

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages