第3課

Mise en œuvre de la preuve de travail sur la blockchain

Dans cette session, nous nous concentrerons sur la mise en œuvre de la méthode de consensus par preuve de travail sur notre blockchain. La preuve de travail est une méthode de sécurité qui exige un effort de calcul pour ajouter un nouveau bloc à la blockchain, ce qui empêche les mauvais acteurs de modifier rapidement la chaîne.

3.1 Comprendre la preuve de travail

  1. Présentez le concept de preuve de travail : Expliquez que la preuve de travail exige des mineurs qu'ils résolvent une énigme difficile à calculer pour ajouter un nouveau bloc. Cette énigme consiste à trouver une valeur de hachage qui réponde à certains critères, tels qu'un nombre spécifique de zéros initiaux.

    Python
    pythonCopy code
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4 # Ajustez le niveau de difficulté selon vos besoins
    

    Ce code ajoute un attribut de difficulté à la classe Blockchain, qui représente le nombre de zéros initiaux requis dans le hachage.

  2. Mettez en œuvre la méthode proof_of_work: Cette méthode génère un hachage valide en ajustant une valeur de nonce jusqu'à ce que le hachage réponde aux critères de difficulté.

    Python
    pythonCopy code
    import hashlib
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block) :
     target = "0" * self.difficulté
     nonce = 0while True :
     data = str(block) + str(nonce)
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             if hash_value[:self.difficulty] == target :
     return hash_value
     nonce += 1
    

    Ce code ajoute la méthode proof_of_work à la classe Blockchain. Il utilise une chaîne cible avec le nombre requis de zéros en tête et ajuste la valeur du nonce jusqu'à ce qu'un hachage valide soit trouvé.

3.2 Ajout de la preuve de travail à la création de blocs

  1. Mettre à jour la méthode add_block: Modifiez la méthode add_block pour y inclure la preuve de travail. Générer un hachage valide pour le nouveau bloc à l'aide de la méthode proof_of_work.

    Python
    pythonCopy code
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block) :
        # Détails de la mise en œuvredef add_block(self, block) :
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 else None
     block.previous_hash = previous_hash
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Ce code modifie la méthode add_block pour définir le previous_hash du nouveau bloc, appeler la méthode mine sur le bloc avec le niveau de difficulté, et ajouter le bloc à la chaîne.

  2. Implémentez la méthode mine dans la classe Block: La méthode mine ajustera la valeur nonce du bloc jusqu'à ce qu'un hachage valide soit trouvé.

    Python
    pythonCopy code
    import hashlib
    class Block :
     def __init__(self, index, timestamp, data, previous_hash, nonce=0) :
     self.index = index
     self.timestamp = timestamp
     self.data = data
     self.previous_hash = previous_hash
     self.nonce = nonce
     self.hash = self.calculate_hash()
    
     def calculate_hash(self) :
     data = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         return hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, difficulty) :
     target = "0" * difficulty
     while self.hash[:difficulty] != cible :
     self.nonce += 1
     self.hash = self.calculate_hash()
    

Ce code ajoute la méthode mine à la classe Block. Il ajuste la valeur du nonce et recalcule le hachage du bloc jusqu'à ce que le hachage réponde aux critères de difficulté.

3.3 Test de l'implémentation de la preuve de travail

  1. Créez une nouvelle instance de blockchain : Instanciez un nouvel objet Blockchain et ajoutez des blocs à la chaîne.

    Python
    pythonCopy code
    blockchain = Blockchain()
    block1 = Block(1, datetime.now(), "Block 1 Data")
    block2 = Block(2, datetime.now(), "Block 2 Data")
    block3 = Block(3, datetime.now(), "Bloc 3 Données")
    

    Ce code crée un nouvel objet Blockchain et trois blocs.

  2. Ajoutez les blocs à la chaîne de blocs : Utilisez la méthode add_block pour ajouter les blocs à la chaîne.

    Python
    pythonCopy code
    blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    Ce code ajoute les blocs à la blockchain.

  3. Imprimez la blockchain : Affichez les blocs de la blockchain et leurs hachages.

    Python
    pythonCopy code
    for block in blockchain.chain :
     print(f"Bloc : {block.index}")
     print(f"Hash : {block.hash}")
    

    Ce code parcourt les blocs de la blockchain et imprime leur index et leur valeur de hachage.

3.4 Conclusion

Dans cette leçon, nous avons mis en œuvre l'algorithme de consensus par preuve de travail dans notre blockchain. Nous avons présenté le concept de preuve de travail, expliqué comment il exige des mineurs qu'ils résolvent un puzzle difficile à calculer et l'avons mis en œuvre dans notre blockchain en ajustant une valeur nonce jusqu'à ce qu'un hachage valide soit trouvé. Nous avons également testé la mise en œuvre de la preuve de travail en ajoutant des blocs à la chaîne et en affichant le contenu de la chaîne.

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第3課

Mise en œuvre de la preuve de travail sur la blockchain

Dans cette session, nous nous concentrerons sur la mise en œuvre de la méthode de consensus par preuve de travail sur notre blockchain. La preuve de travail est une méthode de sécurité qui exige un effort de calcul pour ajouter un nouveau bloc à la blockchain, ce qui empêche les mauvais acteurs de modifier rapidement la chaîne.

3.1 Comprendre la preuve de travail

  1. Présentez le concept de preuve de travail : Expliquez que la preuve de travail exige des mineurs qu'ils résolvent une énigme difficile à calculer pour ajouter un nouveau bloc. Cette énigme consiste à trouver une valeur de hachage qui réponde à certains critères, tels qu'un nombre spécifique de zéros initiaux.

    Python
    pythonCopy code
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4 # Ajustez le niveau de difficulté selon vos besoins
    

    Ce code ajoute un attribut de difficulté à la classe Blockchain, qui représente le nombre de zéros initiaux requis dans le hachage.

  2. Mettez en œuvre la méthode proof_of_work: Cette méthode génère un hachage valide en ajustant une valeur de nonce jusqu'à ce que le hachage réponde aux critères de difficulté.

    Python
    pythonCopy code
    import hashlib
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block) :
     target = "0" * self.difficulté
     nonce = 0while True :
     data = str(block) + str(nonce)
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             if hash_value[:self.difficulty] == target :
     return hash_value
     nonce += 1
    

    Ce code ajoute la méthode proof_of_work à la classe Blockchain. Il utilise une chaîne cible avec le nombre requis de zéros en tête et ajuste la valeur du nonce jusqu'à ce qu'un hachage valide soit trouvé.

3.2 Ajout de la preuve de travail à la création de blocs

  1. Mettre à jour la méthode add_block: Modifiez la méthode add_block pour y inclure la preuve de travail. Générer un hachage valide pour le nouveau bloc à l'aide de la méthode proof_of_work.

    Python
    pythonCopy code
    class Blockchain :
     def __init__(self) :
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block) :
        # Détails de la mise en œuvredef add_block(self, block) :
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 else None
     block.previous_hash = previous_hash
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Ce code modifie la méthode add_block pour définir le previous_hash du nouveau bloc, appeler la méthode mine sur le bloc avec le niveau de difficulté, et ajouter le bloc à la chaîne.

  2. Implémentez la méthode mine dans la classe Block: La méthode mine ajustera la valeur nonce du bloc jusqu'à ce qu'un hachage valide soit trouvé.

    Python
    pythonCopy code
    import hashlib
    class Block :
     def __init__(self, index, timestamp, data, previous_hash, nonce=0) :
     self.index = index
     self.timestamp = timestamp
     self.data = data
     self.previous_hash = previous_hash
     self.nonce = nonce
     self.hash = self.calculate_hash()
    
     def calculate_hash(self) :
     data = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         return hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, difficulty) :
     target = "0" * difficulty
     while self.hash[:difficulty] != cible :
     self.nonce += 1
     self.hash = self.calculate_hash()
    

Ce code ajoute la méthode mine à la classe Block. Il ajuste la valeur du nonce et recalcule le hachage du bloc jusqu'à ce que le hachage réponde aux critères de difficulté.

3.3 Test de l'implémentation de la preuve de travail

  1. Créez une nouvelle instance de blockchain : Instanciez un nouvel objet Blockchain et ajoutez des blocs à la chaîne.

    Python
    pythonCopy code
    blockchain = Blockchain()
    block1 = Block(1, datetime.now(), "Block 1 Data")
    block2 = Block(2, datetime.now(), "Block 2 Data")
    block3 = Block(3, datetime.now(), "Bloc 3 Données")
    

    Ce code crée un nouvel objet Blockchain et trois blocs.

  2. Ajoutez les blocs à la chaîne de blocs : Utilisez la méthode add_block pour ajouter les blocs à la chaîne.

    Python
    pythonCopy code
    blockchain.add_block(block1)
    blockchain.add_block(block2)
    blockchain.add_block(block3)
    

    Ce code ajoute les blocs à la blockchain.

  3. Imprimez la blockchain : Affichez les blocs de la blockchain et leurs hachages.

    Python
    pythonCopy code
    for block in blockchain.chain :
     print(f"Bloc : {block.index}")
     print(f"Hash : {block.hash}")
    

    Ce code parcourt les blocs de la blockchain et imprime leur index et leur valeur de hachage.

3.4 Conclusion

Dans cette leçon, nous avons mis en œuvre l'algorithme de consensus par preuve de travail dans notre blockchain. Nous avons présenté le concept de preuve de travail, expliqué comment il exige des mineurs qu'ils résolvent un puzzle difficile à calculer et l'avons mis en œuvre dans notre blockchain en ajustant une valeur nonce jusqu'à ce qu'un hachage valide soit trouvé. Nous avons également testé la mise en œuvre de la preuve de travail en ajoutant des blocs à la chaîne et en affichant le contenu de la chaîne.

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。