Git Product home page Git Product logo

consensus-go's Introduction

Build Status Coverage Report

This is a mirror of GitLab repository

Aleph Consensus

aleph logo

Aleph is an asynchronous and Byzantine fault tolerant consensus protocol aimed at ordering arbitrary messages (transactions). It has been designed to operate continuously under conditions where there is no bound on message-delivery delay and under the assumption that there is a significant probability of malicious behavior, making it an excellent fit for blockchain-related applications. For more information, check the paper

This repository contains an implementation founded by Aleph Zero Foundation.

Results from experiments run on AWS

The following results come from experiments performed on 112 nodes of AWS EC2 instances distributed uniformly between 7 different regions across Europe and United States. We used the m4.4xlarge instances with 16 cores and 64 GiB memory.

load txps latency
25.6 GiB/s 89600 tx/s 416ms

Installation

The implementation requires go version 1.12 and currently supports only Linux. It requires the following packages:

go get github.com/onsi/ginkgo/ginkgo

go get github.com/onsi/gomega/...

go get -v -d -t ./... - this should be run from consensus-go directory

Unit tests

To run unit tests please use the following command: ginkgo -r -p

Experiments

There are two types of experiments that can be performed:

  1. Local: go to experiments/local/single_machine and run ./run.sh addrs True
  2. Remote using AWS EC2:
  • Create an account on AWS, set up credentials, and a default region as described here.
  • Install packages needed for orchestrating experiments: GNU parallel, zip, unzip and Python 3 packages: fabric, boto3, ipython, tqdm, matplotlib
  • Then, go to experiments/aws and run python shell.py. This opens a shell with procedures orchestrating experiments. The main procedure is run_protocol(n_processes, regions, instance_type) that runs n_processes spread uniformly across specified regions. It uses EC2 machines of instance_type.
  • Before running any experiments, it is required to create OS images in all AWS regions in which machines will be spawned. Run create_images(regions), where regions is a list of all AWS regions of interest.
  • The most basic experiment can be run with run_protocol(7, use_regions(), 't2.micro'). It spawns 7 machines in 7 different regions: 4 in US and 3 in EU. As of time of writing, AWS EC2 was providing users with a limited time of free usage of machines of type t2.micro and some quota for free storage and data transfer, so such an experiment can be conducted free of charge.
  • The parameters of the protocol are defined in the file pkg/config/config.go.
  • After the experiment is finished, the logs containing useful data of the experiment can be downloaded with get_logs procedure.

Analyzing logs

After collecting the logs, the performance can be analyzed as follows python pkg/log_analyzer/loganal.py logs.zip

License

Aleph Go implementation is released under the Apache 2.0 license. See the LICENSE.txt for details

consensus-go's People

Contributors

cardinal-crate-owner avatar damianstraszak avatar fixxxedpoint avatar h4nsu avatar mike1729 avatar timorl avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.