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.
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é.
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.
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é.
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.
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.
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.
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.
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.
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é.
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.
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é.
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.
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.
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.
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.