Lição 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

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.

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

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.

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

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.

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.

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.

Isenção de responsabilidade

* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.

* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.