diff --git a/src/main/java/fr/miage/Blockchain.java b/src/main/java/fr/miage/Blockchain.java
index b5a5b0a5158a48bfcf3daabb3863106a9f558879..d9cda316c1c764bd2e89c3206c7f8121d011544a 100644
--- a/src/main/java/fr/miage/Blockchain.java
+++ b/src/main/java/fr/miage/Blockchain.java
@@ -45,7 +45,7 @@ public class Blockchain {
 
     // Permet de créer une transaction avec deux wallets aléatoire et de l'ajouter
     // dans la transaction pool;
-    public void createTransaction() {
+    public void createTransaction() throws InterruptedException {
         List<Wallet> walletsCopy = new ArrayList<>();
         walletsCopy.addAll(wallets);
         Wallet walletSender = selectWallet(walletsCopy);
@@ -58,21 +58,33 @@ public class Blockchain {
             System.out.println("Wallets vides");
             return;
         }
-        
         System.out.println("[TRANSACTION] --- Création d'une transaction =========================================\n");
         System.out.println("            " + walletSender.getName() + " envoie " + randomAmountToSend + " à "
                 + walletReceiver.getName() + "\n");
-        Transaction tx = new Transaction(walletSender, walletReceiver, randomAmountToSend, EnumTypeTransaction.NORMAL);
+
+        Transaction tx = new Transaction(walletSender, walletReceiver, EnumTypeTransaction.NORMAL);
+        tx.putUTxO(walletSender, walletReceiver, randomAmountToSend);
+
+        Blockchain.utxos.addAll(tx.getOutputs());
+        Blockchain.utxos.removeAll(tx.getInputs());
         String transactionData = getTransactionData(tx);
+
         try {
-            byte[] signature = sign(transactionData, walletSender.getKeyPair().getPrivate());
-            System.out.println("[SIGNATURE] --- Signature de la transaction : " + signature);
-            tx.setSignature(signature);
-            if (verifySignature(transactionData, signature, walletSender.getKeyPair().getPublic())) {
+            if (makeFakeSign()) {
+                Wallet fakeWallet = new Wallet("FakeWallet");
+                tx.sign(transactionData, fakeWallet.getKeyPair().getPrivate());
+            } else {
+                tx.sign(transactionData, walletSender.getKeyPair().getPrivate());
+            }
+            System.out.println("[SIGNATURE] --- Signature de la transaction : " + tx.getSignature());
+            if (tx.verifySignature(transactionData, walletSender.getKeyPair().getPublic())) {
                 System.out.println("[SIGNATURE] --- Signature vérifiée");
                 Blockchain.transactionsPool.add(tx);
             } else {
                 System.out.println("[SIGNATURE] --- Signature non valide : TRANSACTION REJETEE");
+                Blockchain.utxos.removeAll(tx.getOutputs());
+                Blockchain.utxos.addAll(tx.getInputs());
+                return;
             }
         } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
             e.printStackTrace();
@@ -84,21 +96,10 @@ public class Blockchain {
         return tx.getInputs().toString() + tx.getOutputs().toString() + tx.getId();
     }
 
-    public byte[] sign(String data, PrivateKey privateKey)
-            throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
-        Signature signature = Signature.getInstance("SHA256withRSA");
-        signature.initSign(privateKey);
-        signature.update(data.getBytes());
-        return signature.sign();
-    }
-
-    public boolean verifySignature(String data, byte[] signature, PublicKey publicKey)
-            throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
-        Signature sign = Signature.getInstance("SHA256withRSA");
-        sign.initVerify(publicKey);
-        sign.update(data.getBytes());
-        System.out.println("[SIGNATURE] --- Vérification de la signature : " + signature.toString());
-        return sign.verify(signature);
+    public boolean makeFakeSign() {
+        int num1 = (int) (Math.random() * 5) + 1;
+        int num2 = (int) (Math.random() * 5) + 1;
+        return num1 == num2;
     }
 
     public Wallet selectWallet(List<Wallet> wallets) {
@@ -118,7 +119,6 @@ public class Blockchain {
             i++;
         }
         return null;
-
     }
 
     public void addBloc(Bloc bloc) {
diff --git a/src/main/java/fr/miage/Transaction.java b/src/main/java/fr/miage/Transaction.java
index 10cfdd3cd6f372495fc8b9362abe7e44a8c42e19..e25078855e038561cf420f444adda42654b5847f 100644
--- a/src/main/java/fr/miage/Transaction.java
+++ b/src/main/java/fr/miage/Transaction.java
@@ -1,6 +1,11 @@
 package fr.miage;
 
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
 import java.security.PublicKey;
+import java.security.Signature;
+import java.security.SignatureException;
 import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
@@ -22,35 +27,44 @@ public class Transaction {
         this.id = UUID.randomUUID();
     }
 
-    public Transaction(Wallet sender, Wallet receiver, double amount, EnumTypeTransaction typeTransaction) {
+    public Transaction(Wallet sender, Wallet receiver, EnumTypeTransaction typeTransaction) {
+        this.sender = sender;
+        this.receiver = receiver;
+        this.typeTransaction = typeTransaction.NORMAL;
+        this.id = UUID.randomUUID();
+    }
+
+    public void putUTxO(Wallet sender, Wallet receiver, double amount) {
         this.inputs = sender.getUTxOsForTransaction(amount);
-        // System.out.println("Inputs : " + this.inputs);
-        // System.out.println("Set UTxO : " + Blockchain.utxos);
-        if (inputs != null) {
-            if (isValidTransaction(inputs)) {
-                this.sender = sender;
-                this.receiver = receiver;
-                this.typeTransaction = typeTransaction.NORMAL;
-                this.id = UUID.randomUUID();
-                UTxO utxoAmount = new UTxO(this.id, UUID.randomUUID(), receiver.getKeyPair().getPublic(), amount);
-
-                this.receiver.addUTxO(utxoAmount);
-                UTxO utxoRest = new UTxO(this.id, UUID.randomUUID(), sender.getKeyPair().getPublic(),
-                        getTotalAmountUtxoInput(inputs) - amount);
-                this.sender.addUTxO(utxoRest);
-                this.outputs = Arrays.asList(utxoAmount, utxoRest);
-                for (UTxO utxo : this.inputs) {
-                    Blockchain.utxos.add(utxo);
-                }
-                Blockchain.utxos.addAll(this.outputs);
-                printUtxoDetails(inputs, outputs);
-            } else {
-                System.err.println("Transaction invalide, utxo absent");
-            }
-        } else {
-            System.out.println("Solde insuffisant");
+        UTxO utxoAmount = new UTxO(this.id, UUID.randomUUID(), receiver.getKeyPair().getPublic(), amount);
+        this.receiver.addUTxO(utxoAmount);
+        UTxO utxoRest = new UTxO(this.id, UUID.randomUUID(), sender.getKeyPair().getPublic(),
+                getTotalAmountUtxoInput(inputs) - amount);
+        this.sender.addUTxO(utxoRest);
+        this.outputs = Arrays.asList(utxoAmount, utxoRest);
+        for (UTxO utxo : this.inputs) {
+            Blockchain.utxos.add(utxo);
         }
-        Blockchain.utxos.removeAll(this.inputs);
+
+        printUtxoDetails(inputs, outputs);
+
+    }
+
+    public void sign(String data, PrivateKey privateKey)
+            throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
+        Signature signature = Signature.getInstance("SHA256withRSA");
+        signature.initSign(privateKey);
+        signature.update(data.getBytes());
+        this.signature = signature.sign();
+    }
+
+    public boolean verifySignature(String data, PublicKey publicKey)
+            throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
+        Signature sign = Signature.getInstance("SHA256withRSA");
+        sign.initVerify(publicKey);
+        sign.update(data.getBytes());
+        System.out.println("[SIGNATURE] --- Vérification de la signature : " + signature.toString());
+        return sign.verify(signature);
     }
 
     public void printUtxoDetails(List<UTxO> inputs, List<UTxO> outputs) {
diff --git a/src/main/java/fr/miage/threads/TransactionCreator.java b/src/main/java/fr/miage/threads/TransactionCreator.java
index 0a81c840242c79d5fe4d9404eb2d2dfd97a60e5a..bff9b62e9c5c44674050da1f84574ae971a6bce2 100644
--- a/src/main/java/fr/miage/threads/TransactionCreator.java
+++ b/src/main/java/fr/miage/threads/TransactionCreator.java
@@ -15,7 +15,12 @@ public class TransactionCreator extends Thread {
 
     public void run() {
         while (true) {
-            blockchain.createTransaction();
+            try {
+                blockchain.createTransaction();
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
             System.out.println(
                     "[POOL] Nombre de transaction dans la pool : " + Blockchain.transactionsPool.size() + "\n");
             try {