Coder Social home page Coder Social logo

caciolucas / blockchain-imd0293 Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 257 KB

Project made for the course IMD0293 "Special Topics in IOT D". Two blockchain full-nodes were made using Flask APIs and a simple front end with VueJS and PrimeVue was built to consume the endpoints.

Python 70.00% JavaScript 2.74% HTML 1.07% Vue 26.18%

blockchain-imd0293's Introduction

ALUNO: CÁCIO LUCAS NOBRE DE ALMEIDA BEZERRA e MICAEL FELIPE DOS SANTOS

Atividade: Consenso e API (06-consensus)

Esta atividade tem como objetivo implementar uma API de acesso ao nosso blockchain. Isso permitirá a interação entre múltiplos nós que implementem nosso protocolo. Outro objetivo desta atividade é definir o modelo de consenso.

Metodologia e Avaliação

Essa atividade encerra o projeto de desenvolvimento de nosso blockchain privado. A entrega será realizada no Google Classroom mas a avaliação será feita no formato de apresentação online ao professor, no dia 25/03/2021, das 17:00 as 18:30. O trabalho deve ser desenvolvido individualmente ou em dupla. Plágios não serão tolerados, resultando em nota zero para todos os envolvidos.

Instruções de submissão

Submissão deve ser feita a partir do GitHub Classroom até às 23:59 do dia 25/03/2021 (mesmo dia da apresentação). Basta realizar o commit do seu arquivo blockchain.py no repositório privado criado para você a partir do link disponibilizado. Qualquer dúvida nesta etapa consulte o professor no Discord. Não esqueça de editar o arquivo README.md para conter o seu nome completo.

Instalação

Baixe o arquivo ./blockchain.py para obter o boilerplate para esta atividade. Caso seja necessário, utilize o gerenciador de pacotes pip para instalar os módulos necessários. Todos os boilerplates são compatíveis com o Python 3+.

Descrição

Sua API precisará implementar 5 end-points:

  • [POST] /transactions/create para criar uma nova transação a ser incluída no próximo bloco. No corpo da requisicão HTTP, usando POST, inclua as informações necessárias para criação de uma nova transação.
  • [GET] /transactions/mempool para retornar a memory pool do nó.
  • [GET] /mine para informar o nó para criar e minerar um novo bloco. Ou seja, um nó que for requisitado a partir desse end-point deve pegar todas as transações incluídas em seu memory pool, montar um bloco e minera-lo.
  • [GET] /chain para retornar o blockchain completo daquele nó.
  • [POST] /nodes/register para aceitar uma lista de novos nós no formato de URLs. Note que já existe uma variável do tipo conjunto (set) chamado nodes para armazenar os nós registrados.
  • [GET] /nodes/resolve para executar o modelo de consenso, resolvendo conflitos e garantindo que contém a cadeia de blocos correta. Basicamente o que deve ser feito pelo nó é solicitar a todos os seus nós registrados os seus respectivos blockchains. Então deve-se conferir se o blockchain é válido, e, se for maior (mais longo) que o atual, deve substitui-lo.

Para auxiliar no desenvolvimento do consenso, implemente os métodos isValidChain() e resolveConflicts(). As assinaturas e a descrição já estão no código exemplo.

Utilize qualquer framework que desejar para implementar a API. Uma sugestão é o framework Flask, bastante leve e de fácil utilização. Instale usando o pip. Veja como é simples criar um end-point:

from flask import Flask
app = Flask(__name__)

@app.route('/hello', methods=['GET'])
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(port=5000)

Se eu executar esse código, temos um serviço web em execução. Caso entre em http://127.0.0.1:5000/hello, o método hello() será executado!

Caso precise fazer requisições HTTP no Python, você pode utilizar o módulo requests. Também é bem simples, por exemplo, para requisitar o blockchain completo do nó 127.0.0.1:5001:

import requests

response = requests.get('http://127.0.0.1:5001/chain')
obj = response.json()

Para testar, será necessário executar no mínimo dois nós simultaneamente, e no caso de ser na mesma máquina, as instâncias em execução devem usar portas diferentes (por exemplo, porta 5000 e 5001).

Licença

MIT

blockchain-imd0293's People

Contributors

caciolucas avatar github-classroom[bot] avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.