Introduzir o conceito de prova de trabalho: Explique que a prova de trabalho exige que os mineiros resolvam um puzzle computacionalmente difícil para adicionar um novo bloco. Este enigma envolve encontrar um valor de hash que satisfaça certos critérios, como ter um número específico de zeros iniciais.
Python
Código PythonCopy
classe Blockchain:
def __init__(auto):
ego.cadeia = []
auto-f.dificuldade = 4 # Ajuste o nível de dificuldade conforme necessário
Este código adiciona um atributo de dificuldade
à classe Blockchain
, que representa o número de zeros iniciais exigido no hash.
Implementar o método proof_of_work
: Este método vai gerar um hash válido ajustando um valor nonce até que o hash atenda aos critérios de dificuldade.
Python
Código PythonCopy
importar hashlib
classe Blockchain:
def __init__(auto):
ego.cadeia = []
self.dificuldade = 4def proof_of_work (próprio, bloco):
alvo = " 0 " * auto.dificuldade
nonce = 0 enquanto Verdadeiro:
dados = str (bloco) + str (nonce)
hash_value = hashlib.sha256 (dados.encode ()) .hexdigest ()
se hash_value [:self.dificuldade] == alvo:
devolver hash_value
numa += 1
Este código adiciona o método proof_of_work
à classe Blockchain.
Usa uma cadeia de caracteres alvo
com o número necessário de zeros iniciais e ajusta o valor nonce
até que seja encontrado um hash válido.
Atualizar o método add_block
: Modificar o método add_block para incluir
a prova de trabalho. Gere um hash válido para o novo bloco usando o método proof_of_work
.
Python
Código PythonCopy
classe Blockchain:
def __init__(auto):
ego.cadeia = []
self.dificuldade = 4def proof_of_work (próprio, bloco):
# Detalhes da implementação:def add_block (auto, bloco):
Anterior_hash = self.chain [-1] .hash () se é lotado (ego.chain) >0 mais Nenhum
bloquear.previous_hash = Anterior_hash
bloque.meu (self.dificuldade)
self.encade.anexar (bloco)
Este código modifica o método add_block
para definir o anterior hash
do novo bloco, chamar o método meu
no bloco com o nível de dificuldade e anexar o bloco à cadeia.
Implementar o método mine
na classe Block
: O método mina
vai ajustar o valor nonce
do bloco até que um hash válido seja encontrado.
Python
Código PythonCopy
importar hashlib
classe Bloco:
def __init__(auto, índice, carimbo de data e hora, dados, anteriores, nonce=0):
self.index = índice
self.carimbo de data/hora = carimbo de data e hora
self.data = dados
self.previous_hash = Anterior_hash
self.nonce = nonce
self.hash = self.calculate_hash ()
def calculate_hash (self):
dados = str (self.index) + str (self.carimbo de data/hora) + str (self.data) + str (self.previous_hash) + str (self.nonce)
devolver hashlib.sha256 (dados.encode ()) .hexdigest ()
def meu (eu próprio, dificuldade):
alvo = " 0 " * dificuldade
enquanto self.hash [:dificuldade] ! = alvo:
self.nonce += 1
self.hash = self.calculate_hash ()
Este código adiciona o método meu
à classe Block
. Ajusta o valor de nonce
e recalcula o hash do bloco até que o hash atenda aos critérios de dificuldade.
Criar uma nova instância de blockchain: Instanciar um novo objeto Blockchain
e adicionar alguns blocos à cadeia.
Python
Código PythonCopy
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 à blockchain: Use o método add_block
para adicionar os blocos à cadeia.
Python
Código PythonCopy
blockchain.add_block (block1)
blockchain.add_block (block2)
blockchain.add_block (block3)
Este código adiciona os blocos à cadeia de blocos.
Imprima a cadeia de blocos: exibe os blocos da blockchain e os seus hashes.
Python
Código PythonCopy
para bloco na blockchain.chain:
imprimir (f " Bloco: {block.index}")
imprimir (f " Hash: {block.hash}")
Este código itera os blocos da blockchain e imprime os seus valores de índice e hash.
Nesta lição, implementámos o algoritmo de consenso de prova de trabalho na nossa blockchain. Introduzimos o conceito de prova de trabalho, explicamos como exige que os mineiros resolvam um quebra-cabeça computacionalmente difícil e o implementámos na nossa blockchain ajustando um valor nonce até ser encontrado um hash válido. Também testámos a implementação da prova de trabalho adicionando blocos à cadeia e exibindo o conteúdo da blockchain.
Introduzir o conceito de prova de trabalho: Explique que a prova de trabalho exige que os mineiros resolvam um puzzle computacionalmente difícil para adicionar um novo bloco. Este enigma envolve encontrar um valor de hash que satisfaça certos critérios, como ter um número específico de zeros iniciais.
Python
Código PythonCopy
classe Blockchain:
def __init__(auto):
ego.cadeia = []
auto-f.dificuldade = 4 # Ajuste o nível de dificuldade conforme necessário
Este código adiciona um atributo de dificuldade
à classe Blockchain
, que representa o número de zeros iniciais exigido no hash.
Implementar o método proof_of_work
: Este método vai gerar um hash válido ajustando um valor nonce até que o hash atenda aos critérios de dificuldade.
Python
Código PythonCopy
importar hashlib
classe Blockchain:
def __init__(auto):
ego.cadeia = []
self.dificuldade = 4def proof_of_work (próprio, bloco):
alvo = " 0 " * auto.dificuldade
nonce = 0 enquanto Verdadeiro:
dados = str (bloco) + str (nonce)
hash_value = hashlib.sha256 (dados.encode ()) .hexdigest ()
se hash_value [:self.dificuldade] == alvo:
devolver hash_value
numa += 1
Este código adiciona o método proof_of_work
à classe Blockchain.
Usa uma cadeia de caracteres alvo
com o número necessário de zeros iniciais e ajusta o valor nonce
até que seja encontrado um hash válido.
Atualizar o método add_block
: Modificar o método add_block para incluir
a prova de trabalho. Gere um hash válido para o novo bloco usando o método proof_of_work
.
Python
Código PythonCopy
classe Blockchain:
def __init__(auto):
ego.cadeia = []
self.dificuldade = 4def proof_of_work (próprio, bloco):
# Detalhes da implementação:def add_block (auto, bloco):
Anterior_hash = self.chain [-1] .hash () se é lotado (ego.chain) >0 mais Nenhum
bloquear.previous_hash = Anterior_hash
bloque.meu (self.dificuldade)
self.encade.anexar (bloco)
Este código modifica o método add_block
para definir o anterior hash
do novo bloco, chamar o método meu
no bloco com o nível de dificuldade e anexar o bloco à cadeia.
Implementar o método mine
na classe Block
: O método mina
vai ajustar o valor nonce
do bloco até que um hash válido seja encontrado.
Python
Código PythonCopy
importar hashlib
classe Bloco:
def __init__(auto, índice, carimbo de data e hora, dados, anteriores, nonce=0):
self.index = índice
self.carimbo de data/hora = carimbo de data e hora
self.data = dados
self.previous_hash = Anterior_hash
self.nonce = nonce
self.hash = self.calculate_hash ()
def calculate_hash (self):
dados = str (self.index) + str (self.carimbo de data/hora) + str (self.data) + str (self.previous_hash) + str (self.nonce)
devolver hashlib.sha256 (dados.encode ()) .hexdigest ()
def meu (eu próprio, dificuldade):
alvo = " 0 " * dificuldade
enquanto self.hash [:dificuldade] ! = alvo:
self.nonce += 1
self.hash = self.calculate_hash ()
Este código adiciona o método meu
à classe Block
. Ajusta o valor de nonce
e recalcula o hash do bloco até que o hash atenda aos critérios de dificuldade.
Criar uma nova instância de blockchain: Instanciar um novo objeto Blockchain
e adicionar alguns blocos à cadeia.
Python
Código PythonCopy
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 à blockchain: Use o método add_block
para adicionar os blocos à cadeia.
Python
Código PythonCopy
blockchain.add_block (block1)
blockchain.add_block (block2)
blockchain.add_block (block3)
Este código adiciona os blocos à cadeia de blocos.
Imprima a cadeia de blocos: exibe os blocos da blockchain e os seus hashes.
Python
Código PythonCopy
para bloco na blockchain.chain:
imprimir (f " Bloco: {block.index}")
imprimir (f " Hash: {block.hash}")
Este código itera os blocos da blockchain e imprime os seus valores de índice e hash.
Nesta lição, implementámos o algoritmo de consenso de prova de trabalho na nossa blockchain. Introduzimos o conceito de prova de trabalho, explicamos como exige que os mineiros resolvam um quebra-cabeça computacionalmente difícil e o implementámos na nossa blockchain ajustando um valor nonce até ser encontrado um hash válido. Também testámos a implementação da prova de trabalho adicionando blocos à cadeia e exibindo o conteúdo da blockchain.