Skip to content
An experimental distributed ledger platform based on a sea of DAG Nodes
Java
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows initial create of action Nov 14, 2019
apollo-web Kinder (#11) Nov 10, 2019
apollo Kinder (#11) Nov 10, 2019
avalanche Kinder (#11) Nov 10, 2019
bootstrap-client squashed Sep 23, 2019
bootstrap-service squashed Sep 23, 2019
docs/media Kinder (#11) Nov 10, 2019
fireflies Kinder (#11) Nov 10, 2019
func-testing Kinder (#11) Nov 10, 2019
ghost Kinder (#11) Nov 10, 2019
protocols Kinder (#11) Nov 10, 2019
simple-ca squashed Sep 23, 2019
slush squashed Sep 23, 2019
.gitignore Frist Sep 21, 2019
CODE_OF_CONDUCT.md squashed Sep 23, 2019
LICENSE squashed Sep 23, 2019
README.md Update netty-all. Minor doc updates (#9) Oct 22, 2019
eclipse-format.xml Kinder (#11) Nov 10, 2019
pom.xml Kinder (#11) Nov 10, 2019

README.md

Apollo

The Apollo project aims for a distributed ledger platform based on a sea of DAG nodes. As such, this project combines several interesting technologies. The underlying membership of Apollo is managed by the Fireflies secure communication layer. The consensus layer is supplied by Avalanche. An IPFS-esque DAG based DHT is provided in addition to DAG ledger state.

Protocols

  • Fireflies - byzantine tolerant secure membership and communictions
    • Assumes byzantine members (and allows one to parameterize the system according to the probability of such)
    • Creates an overlay network in which each member gossips with the successor of the member in a ring
    • The monitoring ring is capable of detecting member crashes (failures)
    • Reliable group message flooding
  • Avalanche - scalable, leaderless, byzantine fault tolerant consensus
    • Consensus on causal ordering of events with a high dynamic range of nodes
  • Ghost- a Merkle directed acyclic graph (DAG) used for storing block data
    • An immutable, content-based, single hop Distributed Hash Table (DHT) in which the "key" of data stored is the hash of that data (meaning you look up data with the key)
    • Leverages the underlying Fireflies rings for consistent hash rings and single hop routing

Not A Coin Platform(tm)

Apollo isn't designed for coins, rather as essentially a distributed database. Of course the systems of Apollo can be used for such, the design goals are much different. Thus, no coins for you.

Status

Note that Apollo is very much a work in progress. It is by no means a full featured, hardened distributed ledger platform. I am a strong believer in iterative development and believe it is the only way to create robust systems. Consequently, things are still changing, there is much experimental in the current work, and much left to be done. ;)

Requirements

Apollo is a pure Java application The build system uses Maven, and requires Maven 3.5.3+. The Maven enforcer plugin enforces dependency convergance and Apollo is built using Java 11.

Apollo is a multi module Maven project. This means that the various modules of Apollo are built and versioned as a whole, rather than being seperated out into individual repositories. This also means that modules refer to other modules within the project as dependencies, and consequently must be built in the correct order. Note that Maven does this by default, so there should be no issues. However, it does mean that you can't simply cd into a module and build it without building its dependencies first.

Building

To build Apollo, cd to the root directory of the repository and then do:

mvn clean install

Note that the install maven goal is required, as this installs the modules in your local repository for use by dependent modules within the rest of the build.

You can’t perform that action at this time.