Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lhartikk/naivechain
A blockchain implementation in 200 lines of code
https://github.com/lhartikk/naivechain
Last synced: 18 days ago
JSON representation
A blockchain implementation in 200 lines of code
- Host: GitHub
- URL: https://github.com/lhartikk/naivechain
- Owner: lhartikk
- License: apache-2.0
- Created: 2016-10-09T14:43:06.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-04-13T09:14:37.000Z (over 4 years ago)
- Last Synced: 2024-02-17T13:31:14.461Z (9 months ago)
- Language: JavaScript
- Size: 57.6 KB
- Stars: 5,263
- Watchers: 281
- Forks: 1,191
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- License: License.txt
Awesome Lists containing this project
- awesome - naivechain - A blockchain implementation in 200 lines of code (JavaScript)
README
# Naivechain - a blockchain implementation in 200 lines of code
### Motivation
All the current implementations of blockchains are tightly coupled with the larger context and problems they (e.g. Bitcoin or Ethereum) are trying to solve. This makes understanding blockchains a necessarily harder task, than it must be. Especially source-code-wisely. This project is an attempt to provide as concise and simple implementation of a blockchain as possible.
### What is blockchain
[From Wikipedia](https://en.wikipedia.org/wiki/Blockchain_(database)) : Blockchain is a distributed database that maintains a continuously-growing list of records called blocks secured from tampering and revision.### Key concepts of Naivechain
Check also [this blog post](https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54#.dttbm9afr5) for a more detailed overview of the key concepts
* HTTP interface to control the node
* Use Websockets to communicate with other nodes (P2P)
* Super simple "protocols" in P2P communication
* Data is not persisted in nodes
* No proof-of-work or proof-of-stake: a block can be added to the blockchain without competition![alt tag](naivechain_blockchain.png)
![alt tag](naivechain_components.png)
### Naivecoin
For a more extensive tutorial about blockchains, you can check the project [Naivecoin](https://lhartikk.github.io/). It is based on Naivechain and implements for instance Proof-of-work, transactions and wallets.### Quick start
(set up two connected nodes and mine 1 block)
```
npm install
HTTP_PORT=3001 P2P_PORT=6001 npm start
HTTP_PORT=3002 P2P_PORT=6002 PEERS=ws://localhost:6001 npm start
curl -H "Content-type:application/json" --data '{"data" : "Some data to the first block"}' http://localhost:3001/mineBlock
```### Quick start with Docker
(set up three connected nodes and mine a block)
###
```sh
docker-compose up
curl -H "Content-type:application/json" --data '{"data" : "Some data to the first block"}' http://localhost:3001/mineBlock
```### HTTP API
##### Get blockchain
```
curl http://localhost:3001/blocks
```
##### Create block
```
curl -H "Content-type:application/json" --data '{"data" : "Some data to the first block"}' http://localhost:3001/mineBlock
```
##### Add peer
```
curl -H "Content-type:application/json" --data '{"peer" : "ws://localhost:6001"}' http://localhost:3001/addPeer
```
#### Query connected peers
```
curl http://localhost:3001/peers
```