Skip to content
Simple blockchain server written in haskell. Feedback welcome.
Branch: master
Clone or download
aviaviavi Merge pull request #7 from agam/master
Factor out common constraint in type signatures.
Latest commit 32a8cac Mar 1, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
app basic integration test working Jun 18, 2017
src Factor out common constraint in type signatures. Mar 1, 2018
test import format Jun 19, 2017
.gitignore fully functioning May 24, 2017
LICENSE Create LICENSE May 29, 2017 readme Jun 18, 2017
Setup.hs spock project Apr 30, 2017
stack.yaml basic unit test May 24, 2017

Legion - a simple blockchain implementation

Build Status

An as-simple-as-possible blockchain server inspired by naivechain, but written in Haskell. Spinning up several Legion nodes creates a peer to peer network that syncronizes the block chain across the network.

Prereqs: To compile from source, you'll need stack.

Alternatively, you can get a precompiled pre-release binary. Note: if you download the binary from github, you'll need to mark it executable by running:

$ chmod +x legion-exe


$ stack exec legion-exe [http port] [p2p port] [optional: `seedhost:seedP2PPort`]


$ stack exec legion-exe 8001 9001

By default, legion will log what it's doing to standard out. In another terminal window:

$ stack exec legion-exe 8002 9002 localhost:9001

Alternatively, you grab the binaries from the github releases, and run that directly rather than via stack exec

The 3rd argument tells the node where a seed node can be found to bootstrap the connection to the peer to peer network. The current state of the (valid) blockchain will be fetched from all servers, and it will automatically keep itself updated and post its own updated to others.

Now that 2 nodes are now synced, and you can view the current chain from either node at http://localhost:$httpPort/chain, eg http://localhost:8001/chain

Add a new block to the blockchain via a POST request to /block:

$ curl -H "Content-Type: application/json" -X POST -d '{"blockBody": "this is the data for the next block"}' http://localhost:8001/block
You can’t perform that action at this time.