Урок 3

Впровадження Proof-of-Work на Blockchain

У цій сесії ми зосередимося на впровадженні методу консенсусу підтвердження роботи в нашому блокчейні. Підтвердження роботи — це метод безпеки, який вимагає обчислювальних зусиль для додавання нового блоку в ланцюжок блоків, запобігаючи швидкій зміні ланцюга зловмисниками.

3.1 Розуміння доказу роботи

  1. Ознайомтеся з концепцією підтвердження роботи: поясніть, що підтвердження роботи вимагає від майнерів вирішення складної обчислювальної головоломки, щоб додати новий блок. Ця головоломка передбачає пошук хеш-значення, яке відповідає певним критеріям, наприклад, має певну кількість початкових нулів.

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

    Цей код додає атрибут difficulty до класу Blockchain , який представляє кількість початкових нулів, необхідних у хеші.

  2. Застосуйте метод proof_of_work : цей метод генеруватиме дійсний хеш шляхом коригування значення nonce, доки хеш не відповідатиме критеріям складності.

    Python 
     код pythonCopy 
     імпорт хешлібу 
     клас 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] == ціль: 
     повернення hash_value 
     nonce += 1
    

    Цей код додає метод proof_of_work до класу Blockchain . Він використовує target рядок із необхідною кількістю початкових нулів і коригує значення nonce , доки не буде знайдено дійсний хеш.

3.2 Додавання підтвердження роботи до створення блоку

  1. Оновіть метод add_block : змініть метод add_block , щоб включити доказ роботи. Згенеруйте дійсний хеш для нового блоку за допомогою методу proof_of_work .

    Python 
     код pythonCopy 
     клас 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() якщо len(self.chain) > 0 else Жодного 
     block.previous_hash = попередній_хеш 
     block.mine(self.difficulty)
         self.chain.append(блок)
    

    Цей код змінює метод 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 = попередній_хеш 
     self.nonce = одноразовий 
     self.hash = self.calculate_hash()
    
     def calculate_hash(self): 
     дані = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         повернути hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, трудність): 
     target = "0" * трудність 
     while self.hash[:difficulty] != target: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Цей код додає метод mine до класу Block . Він регулює значення nonce і перераховує хеш блоку, поки хеш не відповідатиме критеріям складності.

3.3 Тестування реалізації Proof-of-Work

  1. Створіть новий екземпляр блокчейну: створіть новий об’єкт Blockchain і додайте кілька блоків до ланцюжка.

    Python 
     pythonКопіювати код 
     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 
     pythonКопіювати код 
     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 Висновок

У цьому уроці ми реалізували консенсусний алгоритм підтвердження роботи в нашому блокчейні. Ми представили концепцію підтвердження роботи, пояснили, як це вимагає від майнерів вирішення складної обчислювальної головоломки, і реалізували її в нашому блокчейні, коригуючи значення nonce, доки не буде знайдено дійсний хеш. Ми також перевірили реалізацію підтвердження роботи, додавши блоки до ланцюжка та відобразивши вміст блокчейну.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 3

Впровадження Proof-of-Work на Blockchain

У цій сесії ми зосередимося на впровадженні методу консенсусу підтвердження роботи в нашому блокчейні. Підтвердження роботи — це метод безпеки, який вимагає обчислювальних зусиль для додавання нового блоку в ланцюжок блоків, запобігаючи швидкій зміні ланцюга зловмисниками.

3.1 Розуміння доказу роботи

  1. Ознайомтеся з концепцією підтвердження роботи: поясніть, що підтвердження роботи вимагає від майнерів вирішення складної обчислювальної головоломки, щоб додати новий блок. Ця головоломка передбачає пошук хеш-значення, яке відповідає певним критеріям, наприклад, має певну кількість початкових нулів.

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

    Цей код додає атрибут difficulty до класу Blockchain , який представляє кількість початкових нулів, необхідних у хеші.

  2. Застосуйте метод proof_of_work : цей метод генеруватиме дійсний хеш шляхом коригування значення nonce, доки хеш не відповідатиме критеріям складності.

    Python 
     код pythonCopy 
     імпорт хешлібу 
     клас 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] == ціль: 
     повернення hash_value 
     nonce += 1
    

    Цей код додає метод proof_of_work до класу Blockchain . Він використовує target рядок із необхідною кількістю початкових нулів і коригує значення nonce , доки не буде знайдено дійсний хеш.

3.2 Додавання підтвердження роботи до створення блоку

  1. Оновіть метод add_block : змініть метод add_block , щоб включити доказ роботи. Згенеруйте дійсний хеш для нового блоку за допомогою методу proof_of_work .

    Python 
     код pythonCopy 
     клас 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() якщо len(self.chain) > 0 else Жодного 
     block.previous_hash = попередній_хеш 
     block.mine(self.difficulty)
         self.chain.append(блок)
    

    Цей код змінює метод 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 = попередній_хеш 
     self.nonce = одноразовий 
     self.hash = self.calculate_hash()
    
     def calculate_hash(self): 
     дані = str(self.index) + str(self.timestamp) + str(self.data) + str(self.previous_hash) + str(self.nonce)
         повернути hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, трудність): 
     target = "0" * трудність 
     while self.hash[:difficulty] != target: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Цей код додає метод mine до класу Block . Він регулює значення nonce і перераховує хеш блоку, поки хеш не відповідатиме критеріям складності.

3.3 Тестування реалізації Proof-of-Work

  1. Створіть новий екземпляр блокчейну: створіть новий об’єкт Blockchain і додайте кілька блоків до ланцюжка.

    Python 
     pythonКопіювати код 
     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 
     pythonКопіювати код 
     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 Висновок

У цьому уроці ми реалізували консенсусний алгоритм підтвердження роботи в нашому блокчейні. Ми представили концепцію підтвердження роботи, пояснили, як це вимагає від майнерів вирішення складної обчислювальної головоломки, і реалізували її в нашому блокчейні, коригуючи значення nonce, доки не буде знайдено дійсний хеш. Ми також перевірили реалізацію підтвердження роботи, додавши блоки до ланцюжка та відобразивши вміст блокчейну.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.