Lição 3

Реализация Proof-of-Work на Blockchain

На этой сессии мы сосредоточимся на реализации метода консенсуса proof-of-work в нашем блокчейне. Proof-of-work - это метод обеспечения безопасности, который требует вычислительных усилий для добавления нового блока в блокчейн, не позволяя плохим игрокам быстро изменить цепочку.

3.1 Понимание Proof-of-Work

  1. Представьте концепцию proof-of-work: Объясните, что доказательство работы требует от майнеров решения сложной в вычислительном отношении головоломки для добавления нового блока. Эта головоломка предполагает поиск хэш-значения, которое соответствует определенным критериям, например, имеет определенное количество ведущих нулей.

    Python
    pythonCopy code
    class Blockchain:
     def __init__(self):
     self.chain = []
     self.difficulty = 4 # Настройте уровень сложности по мере необходимости.
    

    Этот код добавляет к классу Blockchain атрибут difficulty, который представляет собой количество ведущих нулей, необходимых в хэше.

  2. Реализуйте метод proof_of_work: Этот метод будет генерировать достоверный хэш путем корректировки значения nonce до тех пор, пока хэш не будет удовлетворять критериям сложности.

    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] == target:
     return hash_value
     nonce += 1
    

    Этот код добавляет метод proof_of_work в класс Blockchain. Он использует целевую строку с необходимым количеством ведущих нулей и корректирует значение nonce до тех пор, пока не будет найден правильный хэш.

3.2 Добавление доказательства работы при создании блока

  1. Обновите метод add_block: Измените метод add_block, чтобы включить в него функцию proof-of-work. Сгенерируйте действительный хэш для нового блока, используя метод proof_of_work.

    Python
    pythonCopy code
    class Blockchain:
     def __init__(self):
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block):
        # Детали реализацииdef 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)
    

    Этот код модифицирует метод add_block, чтобы установить previous_hash нового блока, вызвать метод mine на блоке с уровнем сложности и добавить блок в цепочку.

  2. Реализуйте метод mine в классе Block: Метод mine будет корректировать значение nonce блока до тех пор, пока не будет найден правильный хэш.

    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] != target:
     self.nonce += 1
     self.hash = self.calculate_hash()
    

Этот код добавляет метод mine в класс Block. Он корректирует значение nonce и пересчитывает хэш блока до тех пор, пока хэш не будет соответствовать критериям сложности.

3.3 Тестирование реализации Proof-of-Work

  1. Создайте новый экземпляр блокчейна: Инстанцируйте новый объект Blockchain и добавьте несколько блоков в цепочку.

    Python
    pythonCopy code
    blockchain = Blockchain()
    block1 = Block(1, datetime.now(), "Блок 1 Данные")
    block2 = Block(2, datetime.now(), "Блок 2 Данные")
    block3 = Block(3, datetime.now(), "Блок 3 Данные")
    

    Этот код создает новый объект Blockchain и три блока.

  2. Добавьте блоки в блокчейн: Используйте метод add_block для добавления блоков в цепочку.

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

    Этот код добавляет блоки в блокчейн.

  3. Распечатать блокчейн: Выведите на экран блоки блокчейна и их хэши.

    Python
    pythonКопирование кода
    для блока в blockchain.chain:
     print(f"Block: {block.index}")
     print(f"Hash: {block.hash}")
    

    Этот код выполняет итерации по блокам блокчейна и печатает их индекс и хэш-значения.

3.4 Заключение

В этом уроке мы реализовали алгоритм консенсуса proof-of-work в нашем блокчейне. Мы представили концепцию proof-of-work, объяснили, как она требует от майнеров решения сложной в вычислительном отношении головоломки, и реализовали ее в нашем блокчейне путем корректировки значения nonce до тех пор, пока не будет найден правильный хэш. Мы также протестировали реализацию proof-of-work, добавив блоки в цепочку и отобразив содержимое блокчейна.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 3

Реализация Proof-of-Work на Blockchain

На этой сессии мы сосредоточимся на реализации метода консенсуса proof-of-work в нашем блокчейне. Proof-of-work - это метод обеспечения безопасности, который требует вычислительных усилий для добавления нового блока в блокчейн, не позволяя плохим игрокам быстро изменить цепочку.

3.1 Понимание Proof-of-Work

  1. Представьте концепцию proof-of-work: Объясните, что доказательство работы требует от майнеров решения сложной в вычислительном отношении головоломки для добавления нового блока. Эта головоломка предполагает поиск хэш-значения, которое соответствует определенным критериям, например, имеет определенное количество ведущих нулей.

    Python
    pythonCopy code
    class Blockchain:
     def __init__(self):
     self.chain = []
     self.difficulty = 4 # Настройте уровень сложности по мере необходимости.
    

    Этот код добавляет к классу Blockchain атрибут difficulty, который представляет собой количество ведущих нулей, необходимых в хэше.

  2. Реализуйте метод proof_of_work: Этот метод будет генерировать достоверный хэш путем корректировки значения nonce до тех пор, пока хэш не будет удовлетворять критериям сложности.

    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] == target:
     return hash_value
     nonce += 1
    

    Этот код добавляет метод proof_of_work в класс Blockchain. Он использует целевую строку с необходимым количеством ведущих нулей и корректирует значение nonce до тех пор, пока не будет найден правильный хэш.

3.2 Добавление доказательства работы при создании блока

  1. Обновите метод add_block: Измените метод add_block, чтобы включить в него функцию proof-of-work. Сгенерируйте действительный хэш для нового блока, используя метод proof_of_work.

    Python
    pythonCopy code
    class Blockchain:
     def __init__(self):
     self.chain = []
     self.difficulty = 4def proof_of_work(self, block):
        # Детали реализацииdef 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)
    

    Этот код модифицирует метод add_block, чтобы установить previous_hash нового блока, вызвать метод mine на блоке с уровнем сложности и добавить блок в цепочку.

  2. Реализуйте метод mine в классе Block: Метод mine будет корректировать значение nonce блока до тех пор, пока не будет найден правильный хэш.

    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] != target:
     self.nonce += 1
     self.hash = self.calculate_hash()
    

Этот код добавляет метод mine в класс Block. Он корректирует значение nonce и пересчитывает хэш блока до тех пор, пока хэш не будет соответствовать критериям сложности.

3.3 Тестирование реализации Proof-of-Work

  1. Создайте новый экземпляр блокчейна: Инстанцируйте новый объект Blockchain и добавьте несколько блоков в цепочку.

    Python
    pythonCopy code
    blockchain = Blockchain()
    block1 = Block(1, datetime.now(), "Блок 1 Данные")
    block2 = Block(2, datetime.now(), "Блок 2 Данные")
    block3 = Block(3, datetime.now(), "Блок 3 Данные")
    

    Этот код создает новый объект Blockchain и три блока.

  2. Добавьте блоки в блокчейн: Используйте метод add_block для добавления блоков в цепочку.

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

    Этот код добавляет блоки в блокчейн.

  3. Распечатать блокчейн: Выведите на экран блоки блокчейна и их хэши.

    Python
    pythonКопирование кода
    для блока в blockchain.chain:
     print(f"Block: {block.index}")
     print(f"Hash: {block.hash}")
    

    Этот код выполняет итерации по блокам блокчейна и печатает их индекс и хэш-значения.

3.4 Заключение

В этом уроке мы реализовали алгоритм консенсуса proof-of-work в нашем блокчейне. Мы представили концепцию proof-of-work, объяснили, как она требует от майнеров решения сложной в вычислительном отношении головоломки, и реализовали ее в нашем блокчейне путем корректировки значения nonce до тех пор, пока не будет найден правильный хэш. Мы также протестировали реализацию proof-of-work, добавив блоки в цепочку и отобразив содержимое блокчейна.

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.