Este relatório descreve a implementação de uma Blockchain Simplificada em Python, com foco nos seguintes aspectos:
- Propagação de Blocos e Transações: Simulação da disseminação de informações na rede.
- Resolução de Conflitos (Forks): Mecanismo para lidar com conflitos na cadeia.
- Estado Global e Controle de Saldos: Gerenciamento dos saldos de cada endereço.
- Taxas de Transação e Recompensas: Incentivos para mineradores.
As funções propagar_transacao()
e propagar_bloco()
simulam a propagação, adicionando a transação/bloco a todos os nós na lista nos
.
def propagar_transacao(self, transacao, nos):
# ... (código da função)
def propagar_bloco(self, bloco, nos):
# ... (código da função)
Limitações: Esta é uma simulação. Uma implementação real usaria protocolos de rede.
A função resolver_fork()
escolhe a cadeia mais longa e recalcular_saldos()
garante a consistência.
def resolver_fork(self, cadeias):
# ... (código da função)
def recalcular_saldos(self):
# ... (código da função)
Limitações: A simulação de forks é simplificada.
O dicionário self.saldos
guarda os saldos. criar_transacao()
verifica saldos antes de autorizar transações, e atualizar_saldos()
atualiza os saldos após a mineração.
def atualizar_saldos(self, bloco):
# ... (código da função)
As transações têm um campo taxa
. criar_bloco()
soma as taxas à recompensa do minerador.
def criar_bloco(self, prova, nonce, minerador):
# ... (código da função)
A blockchain é composta por uma série de blocos encadeados. Cada bloco contém:
- Índice: Posição do bloco na cadeia.
- Timestamp: Data e hora de criação.
- Transações: Lista de transações incluídas no bloco.
- Prova: Resultado do Proof-of-Work.
- Nonce: Número usado no PoW.
- Hash Anterior: Hash do bloco anterior.
- Hash Atual: Hash do bloco atual.
O algoritmo PoW simplificado busca um nonce
que, ao ser hasheado com a prova anterior, gere um hash com um número específico de zeros iniciais. A dificuldade do PoW é ajustada pelo parâmetro dificuldade
.
Este projeto é didático e não se destina a produção. Segurança, persistência e consenso são simplificados. A simulação oferece uma visão básica, mas não reflete a complexidade de um sistema real.
Este projeto está licenciado sob a licença MIT.