diff --git a/README.md b/README.md index 1b369e237680651a22da2eb59099227443f5df37..c18874eb46598247066ed5a38292b4c151873938 100644 --- a/README.md +++ b/README.md @@ -11,20 +11,20 @@ Pour lancer l'application, lancer respectivement les commandes suivantes : - `mvn clean compile assembly:single` - `java -jar target/blockchain-project-1.0-SNAPSHOT-jar-with-dependencies.jar` -Dans le cas ou le fichier `.jar` ne se lance pas. Vous pouvez lancer l'application depuis la classe `App.java`. +Dans le cas où le fichier `.jar` ne se lance pas, vous pouvez lancer l'application depuis la classe `App.java`. ## Conception Avant de passer à la réalisation et au développement de la blockchain, il a été tout d'abord important de comprendre l'orchestration d'une blockchain. -Pour se faire, nous avons décidé de représenter les différentes entités d'une blockchain en différentes classes : +Pour ce 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 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 contenue 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 Wallet, représentant un wallet enregistré sur la blockchain  @@ -33,22 +33,22 @@ Pour se faire, nous avons décidé de représenter les différentes entités d'u ### Blockchain -Concernant notre blockchain, nous avons décidé de la représenté par une liste chainé `LinkedList` de bloc. Cela nous permet de garder un lien de précédence entre les différents blocs. +Concernant notre blockchain, nous avons décidé de la représenté par une liste chainée `LinkedList` de blocs. Cela nous permet de garder un lien de précédence entre les différents blocs. -De plus, nous avons décidé d'y intégrer un `Set` d'UTxO, ce set va tout d'abord nous permettre d'avoir que des UTxO unique au sein du Set, cela va éviter d'avoir des UTx0 qui n'appartiennent à personne. Mais la principale utilité de ce Set et d'y référencer tous les UTx0 disponible pour une transaction. +De plus, nous avons décidé d'y intégrer un `Set` d'UTxO. Ce set va nous permettre d'avoir des UTxO uniques au sein du Set, afin d'éviter d'avoir des UTx0 qui n'appartiennent à personne. Mais la principale utilité de ce Set est d'y référencer tous les UTx0 disponibles pour une transaction. Plus précisément, lors d'une transaction, les UTx0 outputs de cette dernière seront inséré dans le Set et les UTx0 inputs seront supprimer de ce Set. ### Transaction -Une transaction est identifé par : +Une transaction est identifiée 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 -Au sein de notre blockchain, pour simuler la création d'une transaction, notre programme va éxéuter la suite d'instruction suivante : +Au sein de notre blockchain, pour simuler la création d'une transaction, notre programme va exécuter la suite d'instructions suivante : 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 @@ -56,36 +56,38 @@ Au sein de notre blockchain, pour simuler la création d'une transaction, notre 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. +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)`. +Pour le minage d'un bloc, nous avons fait 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. +- Ajouter une coinbase transaction contenant un seul UTxO output d'une valeur de 5 qui sera la récompense du mineur qui arrive à miner le bloc. +- Générer une target +- Rentrer dans une boucle et il en sortira seulement dans le cas où 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". +Une fois les principaux composants de la blockchain modélisés, il a fallu mettre en place un système permettant à la fois de créer des transactions et de miner un bloc dès lors que notre "pool" de transactions arrive à 50 transactions. +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. +Dans notre classe `TransactionCreator` qui étend de `Thread`, il va appeler la fonction statique `createTransaction` de la classe `Blockchain` toutes les secondes. #### 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 +1) On récupére le dernier bloc de la blockchain. +2) On récupère les 50 dernières transactions. +3) On crée 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. \ No newline at end of file +Le développement de notre blockchain a été une expérience intéressante. +Il nous a permis de comprendre les principes fondamentaux d'une blockchain ainsi que son potentiel pour révolutionner plusieurs secteurs grâce à sa transparence, sa sécurité et sa décentralisation. \ No newline at end of file