A bitcoin style minimal blockchain implementation in crystal https://cocol-project.github.io/cocol


Stability Experimental Crystal 0.27.2 License MPL-2.0 Build Status


About 🌐

The Cocol Project has the goal to lower the entry barrier for developers interested in building blockchains and dApps. There is still a long way to go and your help is needed.

Installation 🏹

Cocol is written in Crystal, so make sure to follow the installation instructions first.

After setting up Crystal you can clone the Cocol repository and install the dependencies:

> git clone https://github.com/cocol-project/cocol.git
> cd cocol
> shards install

Usage βš”

Make your changes to the code-base and than build Cocol

> crystal build -Dpreview_mt src/cocol.cr

The binary ./bin/cocol offers the following CLI options


-p --port            The port your Cocol node is going to run on
-m --master          Making this node a master (there can only be one)
--max-connections    Setting the max-connections for peers.
--miner              Making this node a miner
--update             Triggering an update on launch (will catch up with the current height)

There is also a script that starts multiple nodes and the master for you

> ./script/start.sh 66 5

First number is the amount of nodes and the second max-connections per node. It will start the master node with the port 3000 and every other node with 3000 + n

You can now start one or several miner like this:

> ./cocol -p 4100 --max-connections 5 --miner

Now go ahead and open the explorer in a browser:

> open ./explorer/index.html

You should see 66 nodes and a miner (red border)

Each one of the nodes has a REST API on the corresponding port (e.g. 3001)

You can create transactions or query the current ledger

Development πŸ‘¨β€πŸ’»πŸ‘©β€πŸ’»

Cocol is in a very early stage. Expect changes, bugs and messy code.

Contributing πŸ‘·β€β™‚οΈπŸ‘·β€β™€οΈ

  1. Fork it ( https://github.com/cocol-project/cocol/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request


  • github: cserb | twitter: @cerbivore | Cristian Șerb - creator, maintainer
Github statistic:
  • 8
  • 1
  • 0
  • 3
  • 0
  • 8 days ago


Mozilla Public License 2.0