From e4965e8587fa413140a7301e859f13eb6287b613 Mon Sep 17 00:00:00 2001 From: saintdi25u <corentinstd@gmail.com> Date: Fri, 15 Mar 2024 11:30:30 +0100 Subject: [PATCH] modification code + ajout readme --- Blockchaindiag.drawio.png | Bin 0 -> 80467 bytes README.md | 69 ++++++++++++++++----- blockchain-project.iml | 8 +++ src/main/java/fr/miage/App.java | 3 +- src/main/java/fr/miage/Blockchain.java | 13 +++- src/main/java/fr/miage/MinageManager.java | 7 +-- src/main/java/fr/miage/Wallet.java | 3 +- src/main/java/fr/miage/threads/Mineur.java | 2 +- target/classes/fr/miage/App.class | Bin 951 -> 981 bytes 9 files changed, 76 insertions(+), 29 deletions(-) create mode 100644 Blockchaindiag.drawio.png create mode 100644 blockchain-project.iml diff --git a/Blockchaindiag.drawio.png b/Blockchaindiag.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3fae5b25e03a72a69547febd0dcfa2fbc8a666 GIT binary patch literal 80467 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%0A-5?29^>~O>*&}U@~RZ!z<Slowt5M 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 T7k4o*Ffe$!`njxgN@xNAvDxxX literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 30afc98..9cb8c84 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 + ## 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 0000000..3b0c98f --- /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 0b47048..09f8cd9 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 d9cda31..fb7f5c1 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 ee068ff..1bfad92 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 47d0cff..ba422e5 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 82cadd9..4ce51f4 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 GIT binary patch delta 306 zcmdnaewCf;)W2Q(7#J8F8H_h_u`n`oFo;doVzgnCV31;Gken>YC?>|kAk84d$iSVR zTH={kT#}fVoXW_cIk}KgM8YSnNIy3-F+Ek^DJMTUJ2@jUGtZixL2hy<qXvg8g8~l& zD}&<Xos6>P%8U%+aK$AVMX8A?#rnRPd8wsETntJK3S11b3~D?K>I`g*46MZ^iA5zK zVYSV?Omd9%wG7M*EDQ_`ibA407{q;cGss42Z)cGA-OZo`VyO7(Y-3Q>-NvA?k%57M ziGhoOfkBFaje&uImw}CekAa_opFx5_fI)^qkU@b#n1P#tfk6vmAcH1@76StV8-p~1 lHiHfWBLhE!5Q8p*9s?7D1Oq37K7#=RGXp0hgCW>pBLHRUG@bwe delta 285 zcmcc0zMY-x)W2Q(7#J8F8H_e^u`tT8Gl(%V2&Wb4=Vm6Rr|LW9<R@n*XC!9kaWF_s z7G$(h7G;p)VPIvDW@Hf6@X1OnOVrOv%uCk~E-A{)OSjexV`q?^yqZyiLxw>fq)uV- zZAMu}rO7`TWuz1t<hdAR7*u%})EL+p8CZ);5{pW>7!(;)H|sOWG1fOSFf*_)Ffgd@ zW)O`O65q}s>9d<bCQ^GlgPiYf21O7<*-vL1gNp7p2K9{$3=B*RTnr2hQVeVi3=F&s zTnzjS!VCfoG7N$Y3JgLFDhwhF+zbp1S`b4SG#E4)7#O%1q#3jrv>6x~gc*bwbQp9Q Ym>6UjI2rU9c=Z{W85kK1zy=!v0HrxEF8}}l -- GitLab