Lektion 3

Implementierung von Proof-of-Work auf Blockchain

Wir werden uns in dieser Sitzung auf die Implementierung der Proof-of-Work-Konsensmethode auf unserer Blockchain konzentrieren. Proof-of-Work ist eine Sicherheitsmethode, die Rechenaufwand erfordert, um einen neuen Block zur Blockchain hinzuzufügen und so zu verhindern, dass böswillige Akteure die Kette schnell ändern.

3.1 Proof-of-Work verstehen

  1. Stellen Sie das Konzept des Proof-of-Work vor: Erklären Sie, dass der Proof-of-Work von Minern verlangt, ein rechentechnisch schwieriges Rätsel zu lösen, um einen neuen Block hinzuzufügen. Bei diesem Rätsel geht es darum, einen Hash-Wert zu finden, der bestimmte Kriterien erfüllt, beispielsweise eine bestimmte Anzahl führender Nullen.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Passen Sie den Schwierigkeitsgrad nach Bedarf an
    

    Dieser Code fügt der Blockchain Klasse ein difficulty hinzu, das die Anzahl der im Hash erforderlichen führenden Nullen darstellt.

  2. Implementieren Sie die Methode proof_of_work : Diese Methode generiert einen gültigen Hash, indem sie einen Nonce-Wert anpasst, bis der Hash die Schwierigkeitskriterien erfüllt.

    Python 
     pythonCopy code 
     import hashlib 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def Proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0while True: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             if hash_value[:self.difficulty] == Ziel: 
     Rückgabe Hashwert 
     Nonce += 1
    

    Dieser Code fügt der Blockchain Klasse die Methode proof_of_work hinzu. Es verwendet eine target mit der erforderlichen Anzahl führender Nullen und passt den nonce Wert an, bis ein gültiger Hash gefunden wird.

3.2 Proof-of-Work zur Blockerstellung hinzufügen

  1. Aktualisieren Sie die Methode add_block : Ändern Sie die Methode add_block so, dass sie einen Arbeitsnachweis enthält. Generieren Sie mit der Methode proof_of_work einen gültigen Hash für den neuen Block.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def Proof_of_work(self, block): 
     # Implementierungsdetailsdef add_block(self, block): 
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 sonst Keine 
     block. previous_hash = previous_hash 
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Dieser Code ändert die add_block Methode, um den previous_hash des neuen Blocks festzulegen, die mine Methode für den Block mit dem Schwierigkeitsgrad aufzurufen und den Block an die Kette anzuhängen.

  2. Implementieren Sie die mine Methode in der Block Klasse: Die mine Methode passt den nonce Wert des Blocks an, bis ein gültiger Hash gefunden wird.

    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 berechne_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 meine(selbst, Schwierigkeit): 
     Ziel = „0“ * Schwierigkeit 
     while self.hash[:difficulty] != Ziel: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Dieser Code fügt die mine -Methode zur Block Klasse hinzu. Es passt den nonce Wert an und berechnet den Hash des Blocks neu, bis der Hash die Schwierigkeitskriterien erfüllt.

3.3 Testen der Proof-of-Work-Implementierung

  1. Erstellen Sie eine neue Blockchain-Instanz: Instanziieren Sie ein neues Blockchain Objekt und fügen Sie der Kette einige Blöcke hinzu.

    Python 
     PythonCopy-Code 
     Blockchain = Blockchain() 
     Block1 = Block(1, datetime.now(), „Block 1 Daten“) 
     Block2 = Block(2, datetime.now(), „Block 2 Daten“) 
     block3 = Block(3, datetime.now(), „Block 3 Daten“)
    

    Dieser Code erstellt ein neues Blockchain Objekt und drei Blöcke.

  2. Fügen Sie die Blöcke zur Blockchain hinzu: Verwenden Sie die Methode add_block , um die Blöcke zur Kette hinzuzufügen.

    Python 
     pythonCode kopieren 
     Blockchain.add_block(block1)
    Blockchain.add_block(block2)
    Blockchain.add_block(block3)
    

    Dieser Code fügt die Blöcke zur Blockchain hinzu.

  3. Drucken Sie die Blockchain aus: Zeigen Sie die Blöcke der Blockchain und ihre Hashes an.

    Python 
     pythonCopy-Code 
     für Block in Blockchain.chain:
     print(f"Block: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Dieser Code durchläuft die Blöcke der Blockchain und gibt deren Index- und Hashwerte aus.

3.4 Fazit

In dieser Lektion haben wir den Proof-of-Work-Konsensalgorithmus in unserer Blockchain implementiert. Wir haben das Konzept des Proof-of-Work eingeführt, erklärt, wie es von Minern verlangt, ein rechentechnisch schwieriges Rätsel zu lösen, und haben es in unserer Blockchain implementiert, indem wir einen Nonce-Wert angepasst haben, bis ein gültiger Hash gefunden wurde. Wir haben auch die Proof-of-Work-Implementierung getestet, indem wir Blöcke zur Kette hinzugefügt und den Inhalt der Blockchain angezeigt haben.

Haftungsausschluss
* Kryptoinvestitionen sind mit erheblichen Risiken verbunden. Bitte lassen Sie Vorsicht walten. Der Kurs ist nicht als Anlageberatung gedacht.
* Der Kurs wird von dem Autor erstellt, der Gate Learn beigetreten ist. Vom Autor geteilte Meinungen spiegeln nicht zwangsläufig die Meinung von Gate Learn wider.
Katalog
Lektion 3

Implementierung von Proof-of-Work auf Blockchain

Wir werden uns in dieser Sitzung auf die Implementierung der Proof-of-Work-Konsensmethode auf unserer Blockchain konzentrieren. Proof-of-Work ist eine Sicherheitsmethode, die Rechenaufwand erfordert, um einen neuen Block zur Blockchain hinzuzufügen und so zu verhindern, dass böswillige Akteure die Kette schnell ändern.

3.1 Proof-of-Work verstehen

  1. Stellen Sie das Konzept des Proof-of-Work vor: Erklären Sie, dass der Proof-of-Work von Minern verlangt, ein rechentechnisch schwieriges Rätsel zu lösen, um einen neuen Block hinzuzufügen. Bei diesem Rätsel geht es darum, einen Hash-Wert zu finden, der bestimmte Kriterien erfüllt, beispielsweise eine bestimmte Anzahl führender Nullen.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Passen Sie den Schwierigkeitsgrad nach Bedarf an
    

    Dieser Code fügt der Blockchain Klasse ein difficulty hinzu, das die Anzahl der im Hash erforderlichen führenden Nullen darstellt.

  2. Implementieren Sie die Methode proof_of_work : Diese Methode generiert einen gültigen Hash, indem sie einen Nonce-Wert anpasst, bis der Hash die Schwierigkeitskriterien erfüllt.

    Python 
     pythonCopy code 
     import hashlib 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def Proof_of_work(self, block): 
     target = "0" * self.difficulty 
     nonce = 0while True: 
     data = str(block) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             if hash_value[:self.difficulty] == Ziel: 
     Rückgabe Hashwert 
     Nonce += 1
    

    Dieser Code fügt der Blockchain Klasse die Methode proof_of_work hinzu. Es verwendet eine target mit der erforderlichen Anzahl führender Nullen und passt den nonce Wert an, bis ein gültiger Hash gefunden wird.

3.2 Proof-of-Work zur Blockerstellung hinzufügen

  1. Aktualisieren Sie die Methode add_block : Ändern Sie die Methode add_block so, dass sie einen Arbeitsnachweis enthält. Generieren Sie mit der Methode proof_of_work einen gültigen Hash für den neuen Block.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4def Proof_of_work(self, block): 
     # Implementierungsdetailsdef add_block(self, block): 
     previous_hash = self.chain[-1].hash() if len(self.chain) > 0 sonst Keine 
     block. previous_hash = previous_hash 
     block.mine(self.difficulty)
         self.chain.append(block)
    

    Dieser Code ändert die add_block Methode, um den previous_hash des neuen Blocks festzulegen, die mine Methode für den Block mit dem Schwierigkeitsgrad aufzurufen und den Block an die Kette anzuhängen.

  2. Implementieren Sie die mine Methode in der Block Klasse: Die mine Methode passt den nonce Wert des Blocks an, bis ein gültiger Hash gefunden wird.

    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 berechne_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 meine(selbst, Schwierigkeit): 
     Ziel = „0“ * Schwierigkeit 
     while self.hash[:difficulty] != Ziel: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Dieser Code fügt die mine -Methode zur Block Klasse hinzu. Es passt den nonce Wert an und berechnet den Hash des Blocks neu, bis der Hash die Schwierigkeitskriterien erfüllt.

3.3 Testen der Proof-of-Work-Implementierung

  1. Erstellen Sie eine neue Blockchain-Instanz: Instanziieren Sie ein neues Blockchain Objekt und fügen Sie der Kette einige Blöcke hinzu.

    Python 
     PythonCopy-Code 
     Blockchain = Blockchain() 
     Block1 = Block(1, datetime.now(), „Block 1 Daten“) 
     Block2 = Block(2, datetime.now(), „Block 2 Daten“) 
     block3 = Block(3, datetime.now(), „Block 3 Daten“)
    

    Dieser Code erstellt ein neues Blockchain Objekt und drei Blöcke.

  2. Fügen Sie die Blöcke zur Blockchain hinzu: Verwenden Sie die Methode add_block , um die Blöcke zur Kette hinzuzufügen.

    Python 
     pythonCode kopieren 
     Blockchain.add_block(block1)
    Blockchain.add_block(block2)
    Blockchain.add_block(block3)
    

    Dieser Code fügt die Blöcke zur Blockchain hinzu.

  3. Drucken Sie die Blockchain aus: Zeigen Sie die Blöcke der Blockchain und ihre Hashes an.

    Python 
     pythonCopy-Code 
     für Block in Blockchain.chain:
     print(f"Block: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Dieser Code durchläuft die Blöcke der Blockchain und gibt deren Index- und Hashwerte aus.

3.4 Fazit

In dieser Lektion haben wir den Proof-of-Work-Konsensalgorithmus in unserer Blockchain implementiert. Wir haben das Konzept des Proof-of-Work eingeführt, erklärt, wie es von Minern verlangt, ein rechentechnisch schwieriges Rätsel zu lösen, und haben es in unserer Blockchain implementiert, indem wir einen Nonce-Wert angepasst haben, bis ein gültiger Hash gefunden wurde. Wir haben auch die Proof-of-Work-Implementierung getestet, indem wir Blöcke zur Kette hinzugefügt und den Inhalt der Blockchain angezeigt haben.

Haftungsausschluss
* Kryptoinvestitionen sind mit erheblichen Risiken verbunden. Bitte lassen Sie Vorsicht walten. Der Kurs ist nicht als Anlageberatung gedacht.
* Der Kurs wird von dem Autor erstellt, der Gate Learn beigetreten ist. Vom Autor geteilte Meinungen spiegeln nicht zwangsläufig die Meinung von Gate Learn wider.