Skip to content

Kcpf/blockchain-simulation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Consenso

A ideia deste entregável é aprender o conceito básico do algoritmo de consenso Proof of Work, utilizado no processo de mineração de várias criptomoedas, como o Bitcoin. Assim, conforme visto na aula, você precisara descobrir um "nonce" que, somado às informações contidas no bloco, gere um hash válido para a dificuldade definida pela rede.

O bloco deste exercício contém sete informações:

  • Difficulty (dificuldade da rede)
  • Height (altura do bloco)
  • Merkle Root (raiz merkle das transações)
  • Nonce
  • Previous Hash (hash do bloco anterior)
  • Timestamp (data e horário)
  • Transactions (lista de strings contendo as transações)

A estrutura segue o seguinte exemplo de string em Python: f"{height}{previous_hash}{merkle_root}{timestamp}{difficulty}{nonce}".

Obs: Tenha em mente que a dificuldade pode variar. Uma dificuldade 3, necessita que vocês gerem um hash com três zeros no começo, por exemplo: 00024232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3

Informações técnicas:

  • Você poderá usar a linguagem e biblioteca que desejar

  • Recomendamos, pela simplicidade, Python ou Javasript

  • Dicas:

    • Biblioteca Crypto e Axios (Javascript)
    • Bibliotecas Python Dome, Starkbank e requests (Python)
    • O modelo desta simulação segue todos os padrões de uma rede Bitcoin, portanto o Hash deve ser criado a partir de 2 SHA-256 seguidos da string mencionada acima
    • Veja este link para entender melhor o desafio
    • Caso esteja com dificuldades para criar a Merkle Root a partir das transações, veja este código
  • Requests

      {
          "difficulty": int,
          "height": int,
          "last_hash": string,
          "valid": bool
      }
    
      Obs: valid indica se a rede é válida ou não
    
      {
          "height": int,
          "previous_hash": string,
          "merkle_root": string,
          "timestamp": float ou int,
          "difficulty": int,
          "nonce": int,
          "tx": Lista de strings
      }
    
      Obs: Timestamp deve estar em UNIX!
    

Opcional:


About

A Flask web-app for tasks in BlockchainInsper/Entregaveis repository

Resources

Stars

Watchers

Forks

Releases

No releases published