Bài học 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, доки не буде знайдено дійсний хеш. Ми також перевірили реалізацію підтвердження роботи, додавши блоки до ланцюжка та відобразивши вміст блокчейну.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 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, доки не буде знайдено дійсний хеш. Ми також перевірили реалізацію підтвердження роботи, додавши блоки до ланцюжка та відобразивши вміст блокчейну.

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.