Este projeto é uma API minimalista construída em TypeScript que simula um blockchain básico para aprendizado e demonstração. Ele implementa funcionalidades essenciais de um blockchain, como criação de blocos, registro de transações e mineração.
- Simulação de um blockchain básico com proof-of-work simplificado.
- Registro de transações entre remetentes e destinatários.
- Mineração de blocos para adicionar transações ao blockchain.
- Visualização completa do blockchain (cadeia de blocos).
- Node.js: Ambiente de execução.
- Express.js: Framework para criação da API.
- TypeScript: Tipagem estática e segurança de código.
- Jest: Testes unitários.
- Insomnia: Ferramenta para testar os endpoints.
- Node.js (v16 ou superior)
- npm (v7 ou superior)
-
Clone este repositório:
git clone https://github.com/Gustavohenribra/blockchain-api.git cd blockchain-api -
Instale as dependências:
npm install
-
Configure o ambiente:
- Crie um arquivo
.envna raiz do projeto e adicione a porta e a chave que usara no header da requisição para a autenticação:PORT="3000" API_KEY="123"
- Crie um arquivo
-
Inicie o servidor:
- Ambiente de desenvolvimento:
npm run dev
- Compilação e execução:
npm run build npm start
- Ambiente de desenvolvimento:
- Descrição: Mensagem de boas-vindas.
- Resposta:
{ "message": "API Blockchain Simplificada!" }
- Descrição: Adiciona uma nova transação à lista de pendentes.
- Corpo da Requisição:
{ "sender": "Alice", "receiver": "Bob", "amount": 100 } - Resposta:
{ "sender": "Alice", "receiver": "Bob", "amount": 100 }
- Descrição: Cria um bloco com as transações pendentes.
- Corpo da Requisição:
{ "transactions": [ { "sender": "Alice", "receiver": "Bob", "amount": 50 } ] } - Resposta:
{ "hash": "abc123", "transactions": [ { "sender": "Alice", "receiver": "Bob", "amount": 50 } ], "previousHash": "xyz789", "timestamp": 1673622920 }
- Descrição: Retorna toda a cadeia de blocos.
- Resposta:
[ { "hash": "genesis-hash", "transactions": [], "previousHash": "0", "timestamp": 1673620000 }, { "hash": "abc123", "transactions": [ { "sender": "Alice", "receiver": "Bob", "amount": 50 } ], "previousHash": "genesis-hash", "timestamp": 1673622920 } ]
- Instale o Insomnia: Insomnia
- Crie um novo Workspace e configure os endpoints acima.
- Teste as rotas fornecendo os dados esperados.
npm run dev: Inicia o servidor em ambiente de desenvolvimento.npm run build: Compila o projeto para JavaScript.npm start: Inicia o servidor em produção.npm test: Executa os testes com Jest.
- O projeto utiliza Jest para realizar testes unitários.
- Para rodar os testes:
npm test
Contribuições são bem-vindas! Sinta-se à vontade para enviar pull requests ou abrir issues para melhorias e correções.
Este projeto está licenciado sob a MIT License.