/akash

Blockchain-powered decentralized compute platform

Primary LanguageGoApache License 2.0Apache-2.0

Akash Build status Coverage Go Report Card

Overview

Akash is a cloud infrastructure platform whose resources are provided by independent datacenters. A high-level overview of the Akash Protocol can be found here; a detailed protocol definition can be found here; and the target workload definition spec is here.

This repository contains Akash Suite, the reference implementation of the Akash Protocol. It is an actively-developed prototype currently focused on the distributed marketplace functionality.

The Akash Suite is composed of two applications: akash and akashd. akashd is the (tendermint-powered) blockchain node that implements the decentralized exchange; akash is the client used to access the exchange and network in general.

Installing

The latest binary release can be installed with Homebrew:

$ brew tap ovrclk/tap
$ brew install akash

Or GoDownloader:

$ curl https://raw.githubusercontent.com/ovrclk/akash/master/godownloader.sh | sh

Building

Dependencies

Akash is developed and tested with golang 1.10+. Building requires a working golang installation, a properly set GOPATH, and $GOPATH/bin present in $PATH.

Additional requirements are:

  • glide: Golang library management.

For development environments, requirements include:

Most golang libraries will be packaged in the local vendor/ directory via glide, however the following packages will be installed globally with their binaries placed in $GOPATH/bin by make devdeps-install:

See below for dependency installation instructions for various platforms.

MacOS:

brew install glide

# dev environment only:
brew install protobuf

Arch Linux:

curl https://glide.sh/get | sh

# dev environment only:
sudo pacman -Sy protobuf

Akash Suite

Download and build akash and akashd:

go get -d github.com/ovrclk/akash
cd $GOPATH/src/github.com/ovrclk/akash
make deps-install
make

# dev environment only:
make devdeps-install

Running

We use thin integration testing environments to simplify the development and testing process. We currently have two environments:

  • Single node: simple (no workloads) single node running locally.
  • Single node with workloads: single node and provider running locally, running workloads within a virtual machine.
  • Multi node: multiple nodes and providers running in a virtual machine.