diff --git a/Blockchaindiag.drawio.png b/Blockchaindiag.drawio.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d3fae5b25e03a72a69547febd0dcfa2fbc8a666
Binary files /dev/null and b/Blockchaindiag.drawio.png differ
diff --git a/README.md b/README.md
index 30afc98d55416f3e8c71adad9ac5a7c4e8590eaa..9cb8c846743883f43d9118a87d3d6633ade9f695 100644
--- a/README.md
+++ b/README.md
@@ -11,15 +11,15 @@ Avant de passer à la réalisation et au développement de la blockchain, il a 
 
 Pour se faire, nous avons décidé de représenter les différentes entités d'une blockchain en différentes classes : 
 
-    -  Une classe Blockchain, représentant la blockchain dans sa globalité;
-    -  Une classe Bloc, représentant les blocs contenues dans la blockchain;
-    -  Une classe Transaction, représentant une transaction qui sera contenu dans un bloc;
-    -  Une classe Coinbase, qui hérite de Transaction, cette classe va représenter une transaction coinbase dans un bloc;
-    -  Une classe UTxO, représentant le détails des tranasactions
-    -  Une classe Wallet représentant un wallet enregistré sur la blockchain
+-  Une classe Blockchain, représentant la blockchain dans sa globalité;
+-  Une classe Bloc, représentant les blocs contenues dans la blockchain;
+-  Une classe Transaction, représentant une transaction qui sera contenu dans un bloc;
+-  Une classe Coinbase, qui hérite de Transaction, cette classe va représenter une transaction coinbase dans un bloc;
+-  Une classe UTxO, représentant le détails des tranasactions
+-  Une classe Wallet représentant un wallet enregistré sur la blockchain
 
 
-    TODO : METTRE DIAGRAMME DE CLASSE
+![alt text](Blockchaindiag.drawio.png)
 
 ## Réalisation
 
@@ -35,19 +35,54 @@ Plus précisément, lors d'une transaction, les UTx0 outputs de cette dernière
 
 Une transaction est identifé par : 
 
-    - Un ID de transaction;
-    - Un wallet de provenance et un wallet de destination; 
-    - Une liste d'UTxO inputs et une liste d'UTxO outputs;
-    - D'une signature
+- Un ID de transaction;
+- Un wallet de provenance et un wallet de destination; 
+- Une liste d'UTxO inputs et une liste d'UTxO outputs;
+- D'une signature
 
 Au sein de notre blockchain, pour simuler la création d'une transaction, notre programme va éxéuter la suite d'instruction suivante : 
 
-    1) Sélection d'un wallet de provenance et d'un wallet de destination de façon aléatoire
-    2) Séléction d'un montant à envoyer 
-    3) Signature de la transaction par le wallet de provenance
-    4) Vérification de la signature
-    5) Création de la transaction
+1) Sélection d'un wallet de provenance et d'un wallet de destination de façon aléatoire
+2) Sélection d'un montant à envoyer 
+3) Signature de la transaction par le wallet de provenance
+4) Vérification de la signature
+5) Création de la transaction
+
+Une fois les transactions crées nous pouvons passer au minage d'un bloc.
+
+### Minage d'un bloc
+
+Pour le minage d'un bloc, nous avons fais le choix de créer une classe MinageManager avec une fonction `static mineABloc(Bloc bloc)`.
+
+Cette fonction va effectuer les tâches suivantes : 
+
+- Ajouter une coinbase transaction contenant un seul UTxO outputs d'une valeur de 5 qui sera la récompense du mineur qui arrive a miné le bloc.
+- De générer une target 
+- De rentrer dans une boucle et il en sortira seulement dans le cas ou le mineur aura trouvé un hash satisfaisant.
+
+### Assemblage
+
+Une fois les principaux composants de la blockchain modéliser, il a fallu mettre en place un système permettant à la fois de créer des transactions et à la fois de miner un bloc dès lors que notre "pool" de transaction arrive à 50. En effet, dans notre blockchain, le minage d'un bloc se déclenche dès lors que nous avons 50 transactions dans notre "pool".
+
+
+#### Thread : TransactionCreator
+
+Dans notre classe `TransactionCreator` qui étend de `Thread`, il va appeler la fonction static `createTransaction` de la classe `Blockchain` toute les 1 seconde.
+
+#### Thread : Mineur
+
+Notre classe `Mineur` qui étend de `Thread` effectue un peu plus de traitement. En effet, le traitement est le suivant : 
+
+1) On récupére le dernier bloc de la blockchain
+2) On récupère les 50 dernières transactions
+3) On créer le bloc qui contient les transactions et le hash du bloc précédent
+4) On mine le bloc comme expliqué ci-dessus.
+
+### Conclusion
+
+Le développement de notre blockchain a été une expérience intéressante. Il nous a permis de développé une compréhension des principes fondamentaux d'une blockchain ainsi que son potentiel pour révolutionner plusieurs secteurs grâce à sa transparense, sa sécurité et sa décentralisation. 
+
+
 
-Une fois les transactions crées nous pouvons passer au minage d'un bloc....
 
 
diff --git a/blockchain-project.iml b/blockchain-project.iml
new file mode 100644
index 0000000000000000000000000000000000000000..3b0c98fb511c7d61c66d12b0c4f2698c2334f5b7
--- /dev/null
+++ b/blockchain-project.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4">
+  <component name="AdditionalModuleElements">
+    <content url="file://$MODULE_DIR$" dumb="true">
+      <excludeFolder url="file://$MODULE_DIR$/.idea/copilot/chatSessions" />
+    </content>
+  </component>
+</module>
\ No newline at end of file
diff --git a/src/main/java/fr/miage/App.java b/src/main/java/fr/miage/App.java
index 0b47048992d8ac7a168402e96777981a19ccbeec..09f8cd9802d1424ae0779dcc73b157a3a97e8042 100644
--- a/src/main/java/fr/miage/App.java
+++ b/src/main/java/fr/miage/App.java
@@ -10,8 +10,7 @@ import fr.miage.threads.TransactionCreator;
 public class App {
     public static synchronized void main(String[] args) throws NoSuchAlgorithmException, InterruptedException {
 
-        Blockchain blockchain = new Blockchain("Blockchain de Jérémy BRODIER et Corentin SAINT-DIZIER");
-
+        Blockchain blockchain = Blockchain.getInstance("Blockchain de Jérémy BRODIER et Corentin SAINT-DIZIER");
         TransactionCreator transactionCreator = new TransactionCreator(blockchain);
         Mineur mineur = new Mineur(blockchain);
         transactionCreator.start();
diff --git a/src/main/java/fr/miage/Blockchain.java b/src/main/java/fr/miage/Blockchain.java
index d9cda316c1c764bd2e89c3206c7f8121d011544a..fb7f5c1693cce714290ca4ab89a0a632ee95fbba 100644
--- a/src/main/java/fr/miage/Blockchain.java
+++ b/src/main/java/fr/miage/Blockchain.java
@@ -16,13 +16,15 @@ import java.util.Set;
 import fr.miage.blocs.Bloc;
 
 public class Blockchain {
+
+    private static Blockchain instance = null;
     private String name;
     private LinkedList<Bloc> blocs;
     private List<Wallet> wallets;
     public static Set<UTxO> utxos = new HashSet<>();
     public static Set<Transaction> transactionsPool = new HashSet<>();
 
-    public Blockchain(String name) throws NoSuchAlgorithmException, InterruptedException {
+    private Blockchain(String name) throws NoSuchAlgorithmException, InterruptedException {
         this.name = name;
         this.wallets = setupWallet();
         // Création du premier bloc contenant les transactions de coinbase
@@ -32,7 +34,14 @@ public class Blockchain {
             }
         };
         ;
-        System.out.println("[BLOC] --- Hash du genesis bloc : " + this.blocs.getFirst().getHash());
+    }
+
+    public static Blockchain getInstance(String name) throws NoSuchAlgorithmException, InterruptedException {
+        if (instance == null) {
+            instance = new Blockchain(name);
+        }
+        return instance;
+
     }
 
     public List<Wallet> setupWallet() throws NoSuchAlgorithmException, InterruptedException {
diff --git a/src/main/java/fr/miage/MinageManager.java b/src/main/java/fr/miage/MinageManager.java
index ee068ff363c917afdfef31ff0ee4baf7bf800e9e..1bfad92b8e99d50a44f92732e90ccbb74263b3a5 100644
--- a/src/main/java/fr/miage/MinageManager.java
+++ b/src/main/java/fr/miage/MinageManager.java
@@ -17,12 +17,9 @@ import fr.miage.blocs.BlocHeader;
 
 public class MinageManager {
 
-    private static final int DIFFICULTY = 6;
-    private static double MAX_NONCE = Math.pow(2, 32);
-    private Blockchain blockchain;
+    private static final int DIFFICULTY = 5;
 
-    public MinageManager(Blockchain blockchain) {
-        this.blockchain = blockchain;
+    public MinageManager() {
     }
 
     public static void mineABloc(Bloc bloc) {
diff --git a/src/main/java/fr/miage/Wallet.java b/src/main/java/fr/miage/Wallet.java
index 47d0cff0b0ae5e9adea21ce6fba61767d0e67697..ba422e5bfbb34313790eee5dbf44b2b410b392c9 100644
--- a/src/main/java/fr/miage/Wallet.java
+++ b/src/main/java/fr/miage/Wallet.java
@@ -9,7 +9,6 @@ import java.util.List;
 
 public class Wallet {
     private KeyPair keyPair;
-    private double solde;
     private List<UTxO> utxos;
     private String name; // temp
 
@@ -69,7 +68,7 @@ public class Wallet {
 
     @Override
     public String toString() {
-        return "Wallet [keyPair=" + keyPair + ", solde=" + solde + ", utxos=" + utxos + ", name=" + name + "]";
+        return "Wallet [keyPair=" + keyPair + ", utxos=" + utxos + ", name=" + name + "]";
     }
 
     public KeyPair getKeyPair() {
diff --git a/src/main/java/fr/miage/threads/Mineur.java b/src/main/java/fr/miage/threads/Mineur.java
index 82cadd91b8e594e78832661c8461bbe6fc4ff6ca..4ce51f48920a993afeff55203f4283ea1f6e6bec 100644
--- a/src/main/java/fr/miage/threads/Mineur.java
+++ b/src/main/java/fr/miage/threads/Mineur.java
@@ -34,8 +34,8 @@ public class Mineur extends Thread {
 
                     System.out.println("[MINAGE] -- Minage du bloc....");
                     Bloc bloc = new Bloc(transactions, previousBloc.getHash());
-                    MinageManager.mineABloc(bloc);
                     Blockchain.transactionsPool.removeAll(transactions);
+                    MinageManager.mineABloc(bloc);
                     transactions.clear();
                     if (bloc != null) {
                         blockchain.addBloc(bloc);
diff --git a/target/classes/fr/miage/App.class b/target/classes/fr/miage/App.class
index 1388792d8d6fb77aefb8a404c65223d66c2edde7..01a6e190c4e3380acf2bd19f9ed4efe3719e9b64 100644
Binary files a/target/classes/fr/miage/App.class and b/target/classes/fr/miage/App.class differ