Ciri

Build Status Gitter

Ciri is an ongoing Ethereum implementation.

It aims to be a feature complete Ethereum implementation and expects to achieve both research-friendly and high-performance. As you see, it's still under development.

See How to learn Ethereum and contribute to Ciri.

See projects and milestones for current development status.

Roadmap

See Roadmap on Wiki

Development

Ciri depends on rocksdb, secp256k1, ethash and snappy.

It's a recommendation to setup with docker, it will help to save lots of time.

Setup with docker

Use docker command to pull image:

docker pull ciriethereum/ciri

Or you can use our prepared rake tasks if you're not familiar with docker:

clone repo and submodules

git clone --recursive https://github.com/ciri-ethereum/ciri.git
cd ciri

make sure we have installed docker, ruby and rake

# make sure we have installed docker, ruby and rake
docker -v
gem install rake

Pull docker image

# pull Ciri docker image
rake docker:pull

Build docker image

(it will take a few minutes)

# build Ciri docker image
rake docker:build

Run tests in docker

# run tests
rake docker:quick

Other usages

# open a shell for developing
rake docker:shell

# type 'rake -T' see other supported tasks 
rake -T

Manually Setup

clone repo and submodules

git clone --recursive https://github.com/ciri-ethereum/ciri.git

Install dependencies

On a mac you can install rocksdb and snappy with homebrew

brew install rocksdb snappy

then manually install

ethash

cd ethash/src/libethash && cmake CMakeLists.txt && make install

secp256k1

cd secp256k1 && ./autogen.sh && ./configure --enable-module-recovery --enable-experimental --enable-module-ecdh && make && make install

For linux users, remember to check Dockerfile instructions for hint.

then run:

bundle install

run tests:

RUBY_THREAD_VM_STACK_SIZE=52428800 bundle exec rake quick

Why Ruby?

Because Ruby has built-in block support!

Seriously,

Ruby is a scripting language which makes it easy to write prototype or research code (like the official python Ethereum implementation intended).

According to the several performance research projects in Ruby community (JIT, JRuby, TruffleRuby), we are highly looking forward to seeing improvement of this language performance in the future.

Due to Ruby, we could expect to achieve both research-friendly and high-performance in our implementation.

Contributors

See Contributors