Leçon 3

Implementando Prova de Trabalho em Blockchain

Nesta sessão, nos concentraremos na implementação do método de consenso de prova de trabalho em nosso blockchain. A prova de trabalho é um método de segurança que exige esforço computacional para adicionar um novo bloco ao blockchain, evitando que malfeitores alterem rapidamente a cadeia.

3.1 Compreendendo a Prova de Trabalho

  1. Apresente o conceito de prova de trabalho: Explique que a prova de trabalho exige que os mineradores resolvam um quebra-cabeça computacionalmente difícil para adicionar um novo bloco. Esse quebra-cabeça envolve encontrar um valor hash que atenda a determinados critérios, como ter um número específico de zeros à esquerda.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Ajuste o nível de dificuldade conforme necessário
    

    Este código adiciona um atributo difficulty à classe Blockchain , que representa o número de zeros iniciais necessários no hash.

  2. Implemente o proof_of_work : Este método irá gerar um hash válido ajustando um valor nonce até que o hash atenda aos critérios de dificuldade.

    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 Verdadeiro: 
     dados = str(bloco) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             se hash_value[:self.difficulty] == alvo: 
     retorno hash_value 
     nonce += 1
    

    Este código adiciona o proof_of_work à classe Blockchain . Ele usa uma string target com o número necessário de zeros à esquerda e ajusta o valor nonce até que um hash válido seja encontrado.

3.2 Adicionando Prova de Trabalho à Criação de Bloco

  1. Atualize o método add_block : Modifique o método add_block para incluir prova de trabalho. Gere um hash válido para o novo bloco usando o proof_of_work .

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4defproof_of_work(self, block): 
     # Detalhes de implementaçãodef add_block(self, block): 
     previous_hash = self.chain[-1].hash() se len(self.chain) > 0 else Nenhum 
     bloco.previous_hash = hash_anterior 
     bloco.mine(self.dificuldade)
         self.chain.append(bloco)
    

    Este código modifica o método add_block para definir o previous_hash do novo bloco, chama o método mine no bloco com o nível de dificuldade e anexa o bloco à cadeia.

  2. Implemente o método mine na classe Block : O método mine ajustará o valor nonce do bloco até que um hash válido seja encontrado.

    Python 
     pythonCopy code 
     import hashlib 
     class Bloco: 
     def __init__(self, index, timestamp, data, previous_hash, nonce = 0): 
     self.index = index 
     self.timestamp = timestamp 
     self.data = data 
     self.hash_anterior = anterior_hash 
     self.nonce = nonce 
     self.hash = self.calculate_hash()
    
     def calcular_hash(self): 
     dados = str(self.index) + str(self.timestamp) + str(self.dados) + str(self.hash_anterior) + str(self.nonce)
         retornar hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, dificuldade): 
     alvo = "0" * dificuldade 
     enquanto self.hash[:difficulty] != alvo: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Este código adiciona o método mine à classe Block . Ele ajusta o valor nonce e recalcula o hash do bloco até que o hash atenda aos critérios de dificuldade.

3.3 Testando a Implementação da Prova de Trabalho

  1. Crie uma nova instância de blockchain: instancie um novo objeto Blockchain e adicione alguns blocos à cadeia.

    Python 
     pythonCopiar código 
     blockchain = Blockchain() 
     bloco1 = Bloco(1, datetime.now(), "Bloco 1 Dados") 
     bloco2 = Bloco(2, datetime.now(), "Bloco 2 Dados") 
     bloco3 = Bloco(3, datetime.now(), "Bloco 3 Dados")
    

    Este código cria um novo objeto Blockchain e três blocos.

  2. Adicione os blocos ao blockchain: Use o método add_block para adicionar os blocos à cadeia.

    Python 
     pythonCopiar código 
     blockchain.add_block(block1)
    blockchain.add_block(bloco2)
    blockchain.add_block(bloco3)
    

    Este código adiciona os blocos ao blockchain.

  3. Imprima o blockchain: Exiba os blocos do blockchain e seus hashes.

    Python 
     pythonCopiar código 
     para bloco em blockchain.chain:
     print(f"Bloco: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Este código itera sobre os blocos do blockchain e imprime seus valores de índice e hash.

3.4 Conclusão

Nesta lição, implementamos o algoritmo de consenso de prova de trabalho em nosso blockchain. Introduzimos o conceito de prova de trabalho, explicamos como ele exige que os mineradores resolvam um quebra-cabeça computacionalmente difícil e o implementamos em nosso blockchain ajustando um valor nonce até que um hash válido seja encontrado. Também testamos a implementação da prova de trabalho adicionando blocos à cadeia e exibindo o conteúdo do blockchain.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 3

Implementando Prova de Trabalho em Blockchain

Nesta sessão, nos concentraremos na implementação do método de consenso de prova de trabalho em nosso blockchain. A prova de trabalho é um método de segurança que exige esforço computacional para adicionar um novo bloco ao blockchain, evitando que malfeitores alterem rapidamente a cadeia.

3.1 Compreendendo a Prova de Trabalho

  1. Apresente o conceito de prova de trabalho: Explique que a prova de trabalho exige que os mineradores resolvam um quebra-cabeça computacionalmente difícil para adicionar um novo bloco. Esse quebra-cabeça envolve encontrar um valor hash que atenda a determinados critérios, como ter um número específico de zeros à esquerda.

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4 # Ajuste o nível de dificuldade conforme necessário
    

    Este código adiciona um atributo difficulty à classe Blockchain , que representa o número de zeros iniciais necessários no hash.

  2. Implemente o proof_of_work : Este método irá gerar um hash válido ajustando um valor nonce até que o hash atenda aos critérios de dificuldade.

    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 Verdadeiro: 
     dados = str(bloco) + str(nonce) 
     hash_value = hashlib.sha256(data.encode()).hexdigest()
             se hash_value[:self.difficulty] == alvo: 
     retorno hash_value 
     nonce += 1
    

    Este código adiciona o proof_of_work à classe Blockchain . Ele usa uma string target com o número necessário de zeros à esquerda e ajusta o valor nonce até que um hash válido seja encontrado.

3.2 Adicionando Prova de Trabalho à Criação de Bloco

  1. Atualize o método add_block : Modifique o método add_block para incluir prova de trabalho. Gere um hash válido para o novo bloco usando o proof_of_work .

    Python 
     pythonCopy code 
     class Blockchain: 
     def __init__(self): 
     self.chain = [] 
     self.difficulty = 4defproof_of_work(self, block): 
     # Detalhes de implementaçãodef add_block(self, block): 
     previous_hash = self.chain[-1].hash() se len(self.chain) > 0 else Nenhum 
     bloco.previous_hash = hash_anterior 
     bloco.mine(self.dificuldade)
         self.chain.append(bloco)
    

    Este código modifica o método add_block para definir o previous_hash do novo bloco, chama o método mine no bloco com o nível de dificuldade e anexa o bloco à cadeia.

  2. Implemente o método mine na classe Block : O método mine ajustará o valor nonce do bloco até que um hash válido seja encontrado.

    Python 
     pythonCopy code 
     import hashlib 
     class Bloco: 
     def __init__(self, index, timestamp, data, previous_hash, nonce = 0): 
     self.index = index 
     self.timestamp = timestamp 
     self.data = data 
     self.hash_anterior = anterior_hash 
     self.nonce = nonce 
     self.hash = self.calculate_hash()
    
     def calcular_hash(self): 
     dados = str(self.index) + str(self.timestamp) + str(self.dados) + str(self.hash_anterior) + str(self.nonce)
         retornar hashlib.sha256(data.encode()).hexdigest()
    
     def mine(self, dificuldade): 
     alvo = "0" * dificuldade 
     enquanto self.hash[:difficulty] != alvo: 
     self.nonce += 1 
     self.hash = self.calculate_hash()
    

Este código adiciona o método mine à classe Block . Ele ajusta o valor nonce e recalcula o hash do bloco até que o hash atenda aos critérios de dificuldade.

3.3 Testando a Implementação da Prova de Trabalho

  1. Crie uma nova instância de blockchain: instancie um novo objeto Blockchain e adicione alguns blocos à cadeia.

    Python 
     pythonCopiar código 
     blockchain = Blockchain() 
     bloco1 = Bloco(1, datetime.now(), "Bloco 1 Dados") 
     bloco2 = Bloco(2, datetime.now(), "Bloco 2 Dados") 
     bloco3 = Bloco(3, datetime.now(), "Bloco 3 Dados")
    

    Este código cria um novo objeto Blockchain e três blocos.

  2. Adicione os blocos ao blockchain: Use o método add_block para adicionar os blocos à cadeia.

    Python 
     pythonCopiar código 
     blockchain.add_block(block1)
    blockchain.add_block(bloco2)
    blockchain.add_block(bloco3)
    

    Este código adiciona os blocos ao blockchain.

  3. Imprima o blockchain: Exiba os blocos do blockchain e seus hashes.

    Python 
     pythonCopiar código 
     para bloco em blockchain.chain:
     print(f"Bloco: {block.index}") 
     print(f"Hash: {block.hash}")
    

    Este código itera sobre os blocos do blockchain e imprime seus valores de índice e hash.

3.4 Conclusão

Nesta lição, implementamos o algoritmo de consenso de prova de trabalho em nosso blockchain. Introduzimos o conceito de prova de trabalho, explicamos como ele exige que os mineradores resolvam um quebra-cabeça computacionalmente difícil e o implementamos em nosso blockchain ajustando um valor nonce até que um hash válido seja encontrado. Também testamos a implementação da prova de trabalho adicionando blocos à cadeia e exibindo o conteúdo do blockchain.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas 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.