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.
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
Akash is developed and tested with golang 1.11+. 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:
- protocol buffers: Protobuf compiler.
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
:
- gogoprotobuf: Golang protobuf compiler plugin.
- mockery: Mock generator.
See below for dependency installation instructions for various platforms.
brew install glide
# dev environment only:
brew install protobuf
curl https://glide.sh/get | sh
# dev environment only:
sudo pacman -Sy protobuf
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
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.