nsi:tds:cryptographie:blockchain
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:tds:cryptographie:blockchain [2023/04/11 19:26] – goupillwiki | nsi:tds:cryptographie:blockchain [2023/05/08 01:14] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 110: | Ligne 110: | ||
| <WRAP tip>On peut indiquer l' | <WRAP tip>On peut indiquer l' | ||
| - | ==== Signature | + | === Signature === |
| Dans la transaction '' | Dans la transaction '' | ||
| Ligne 117: | Ligne 117: | ||
| * Paul veut donner 5 unité à Judith. On crée le texte '' | * Paul veut donner 5 unité à Judith. On crée le texte '' | ||
| * on encode le texte et on hache. On utilise pour cela '' | * on encode le texte et on hache. On utilise pour cela '' | ||
| - | * on calcule la signature '' | + | * on calcule la signature '' |
| + | * '' | ||
| * la transaction est alors complétée : '' | * la transaction est alors complétée : '' | ||
| - | Dans l' | + | Dans l' |
| <code python> | <code python> | ||
| - | b" | + | '12d1cc8b27164fdc440bde8190347fe0484489bf9e04e71f2cd6edf182910dd493c02c68bf01fa752a297fa34c358d6a451deffc77df39b3' |
| </ | </ | ||
| Ligne 130: | Ligne 131: | ||
| * comme dans ce qui précède, on produit le texte '' | * comme dans ce qui précède, on produit le texte '' | ||
| * on hache ce texte : '' | * on hache ce texte : '' | ||
| - | * on déchiffre | + | * on cherche la version '' |
| + | * on déchiffre '' | ||
| * on compare si '' | * on compare si '' | ||
| Ligne 223: | Ligne 225: | ||
| # blockchain.py | # blockchain.py | ||
| import hashlib | import hashlib | ||
| + | import os | ||
| import rsa | import rsa | ||
| Ligne 239: | Ligne 242: | ||
| """ | """ | ||
| # mettre empreinte_precedent, | # mettre empreinte_precedent, | ||
| - | # suivi du version texte de data | + | # suivi de la version texte de data (__str__ ci dessous) |
| # encoder en utf8 pour obtenir un bytes b | # encoder en utf8 pour obtenir un bytes b | ||
| # faire le hash avec hashlib.sha256(b) | # faire le hash avec hashlib.sha256(b) | ||
| Ligne 253: | Ligne 256: | ||
| """ | """ | ||
| sauvegarde le bloc dans un fichier dont le nom est l' | sauvegarde le bloc dans un fichier dont le nom est l' | ||
| - | du bloc précédent suivit de l' | + | du bloc précédent suivit de l' |
| """ | """ | ||
| # le fichier doit contenir le contenu de __str__ | # le fichier doit contenir le contenu de __str__ | ||
| - | # si le fichier existe, il ne faut rien faire | + | # si le fichier existe |
| + | |||
| + | def next_filename(self) -> str: | ||
| + | """ | ||
| + | renvoie le nom de fichier du bloc suivant | ||
| + | """ | ||
| + | return self.FOLDER + self.empreinte() + self.EXT | ||
| Ligne 264: | Ligne 273: | ||
| lance la procédure de chargement pour construire la blockchain | lance la procédure de chargement pour construire la blockchain | ||
| """ | """ | ||
| + | self.blocs = [] | ||
| + | self.keys = {} | ||
| + | self.credits = {} | ||
| self.load() | self.load() | ||
| Ligne 277: | Ligne 289: | ||
| # | # | ||
| # créer le bloc0 avec les infos du fichier mettre bloc0 dans self.blocs | # créer le bloc0 avec les infos du fichier mettre bloc0 dans self.blocs | ||
| - | # créer un self.comptes | + | # créer un self.keys = { identifiant: |
| - | # les infos sur les comptes | + | # créer un self.credits = { identifiant: |
| # à partir de là, tant que l' | # à partir de là, tant que l' | ||
| # charger le fichier, lire la transaction, | # charger le fichier, lire la transaction, | ||
| | | ||
| + | # pour info, on peut obtenir les noms de fichiers en faisant : | ||
| + | # fichiers = [f for f in os.listdir(' | ||
| + | | ||
| def add_transaction(id_source: | def add_transaction(id_source: | ||
| """ | """ | ||
| Ligne 293: | Ligne 308: | ||
| # vérifie la signature | # vérifie la signature | ||
| # vérifie si le compte source a assez de crédits | # vérifie si le compte source a assez de crédits | ||
| + | # modifie l' | ||
| # crée un bloc pour la transaction | # crée un bloc pour la transaction | ||
| # en indiquant l' | # en indiquant l' | ||
| # ajoute le bloc dans la liste des blocs | # ajoute le bloc dans la liste des blocs | ||
| # sauvegarder le bloc | # sauvegarder le bloc | ||
| - | # modifie l' | ||
| def empreinte_transaction(self, | def empreinte_transaction(self, | ||
| Ligne 304: | Ligne 319: | ||
| id_cible: identifiant cible | id_cible: identifiant cible | ||
| value: quantité | value: quantité | ||
| - | renvoie l' | + | renvoie l' |
| """ | """ | ||
| # fabrique le texte formé de la façon id_source; | # fabrique le texte formé de la façon id_source; | ||
| - | # encode, hash, | + | # encode, hash |
| - | # renvoie digest() | + | # renvoie digest |
| - | def compte(self, identifiant: | + | def credit(self, identifiant: |
| """ | """ | ||
| - | renvoie la valeur de compte | + | renvoie la valeur de crédit |
| """ | """ | ||
| </ | </ | ||
| Ligne 366: | Ligne 381: | ||
| judith = Client(" | judith = Client(" | ||
| - | print(f" | + | print(f" |
| - | print(f" | + | print(f" |
| t = paul.transaction(" | t = paul.transaction(" | ||
| success = b.add_transaction(*t) # * pour ventiler les morceaux du tuple t dans les arguments | success = b.add_transaction(*t) # * pour ventiler les morceaux du tuple t dans les arguments | ||
nsi/tds/cryptographie/blockchain.1681234007.txt.gz · Dernière modification : de goupillwiki
