الدرس رقم 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. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 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. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.