Skip to content

comrade-coop/apocryph

Repository files navigation

Apocryph

Apocryph is a decentralised three-sided compute marketplace, allowing end-users to deploy their own personal instance of "cloud" software and developers to train AI/ML models or deploy arbitrary software applications to pre-verified machines in the marketplace. All programs would run inside a secure computing enclave that no one else can access (using TEE technology) for a modest fee (however much the machine provider charges; it's a marketplace) and with regular uptime and data storage SLAs; "cloud" software developers are being rewarded for providing the software (essentially use cases) to the marketplace with a fraction of the fees generated by the instances of their software.

Discord

📓 For more information you can check our documentation (specs) draft:

Spinning up a local testing environment

Note The following tests have been conducted on Linux.

Dependencies

Before running the various tests, Make sure the following dependencies are installed and available in your PATH:

  • curl: tool for transferring data using various network protocols. The name stands for "Client for URL"
  • xargs: command that builds and executes command lines from standard input.
  • sed: stream editor for filtering and transforming text.
  • go: The Go programming language compiler.
  • protoc: The protocol buffer compiler, protoc, is used to compile .proto files, which contain service and message definitions.
  • protoc-gen-go: tool used in conjunction with protobuf to generate Go code from protobuf definition files
  • protoc-gen-connect-go: generates Go code from protobuf files specifically tailored for the Connect RPC. go install connectrpc.com/connect/cmd/protoc-gen-connect-go@latest
  • abigen: convert Ethereum ABI definitions into easy to use, type-safe Go packages. go install github.com/ethereum/go-ethereum/cmd/abigen@latest
  • turbo: High-performance build system
  • kubectl: The Kubernetes command-line tool for managing Kubernetes clusters.
  • docker: platform for developing, shipping, and running applications using containerization.
  • jq: lightweight and flexible command-line JSON processor.
  • kind: tool that runs a single-node Kubernetes cluster locally.
  • ctlptl: An utility for declaratively setting up local Kubernetes clusters.
  • tilt: A toolkit automating the process of setting up a new local development cluster.
  • helm: package manager for Kubernetes
  • helmfile: declarative configuration tool for Helm.
  • forge, cast, anvil: tools for building Ethereum-based applications.
  • ipfs: The InterPlanetary File System
  • constellation: Constellation is a Kubernetes engine that provides a secure and confidential way to run Kubernetes clusters. (Needed in test/e2e/constellation).

Clone and cd into the project:

git clone https://github.com/comrade-coop/apocryph
cd apocryph

Run the following commands to complete all necessary build steps and generate the required files for running the tests.

npm i && turbo sync 

Rerun turbo sync whenever you change files under the proto/ and contracts/ folders.

To start a local environment for e.g. integration-testing or evaluating the project, you can use tilt with Tiltfile in the test/e2e folder.

You can use it, for example, by running the following commands:

# Create a kind cluster:
ctlptl create cluster kind --registry=ctlptl-registry --kubernetes-version=v1.31.0
# Start tilt and run the nginx test:
tilt up -- --include ./test/e2e/nginx/Tiltfile

The first command will spin up a kind cluster with a local registry. Then, the second command will, after checking that any additional dependencies are met, then deploy all necessary prerequisites into local cluster, and finally deploying a pod from a manifest file into the cluster.

Once you are done playing around with the test, run the following commands to clean up:

# Clean up the local cluster:
tilt down -- --include ./test/e2e/nginx/Tiltfile
# Delete up the local cluster:
ctlptl create delete kind

Contributing

As it is, this project is still in its infancy, and most non-trivial contributions should be done only after discussing them with the team -- or else risk missing the point. So, if you fancy contributing to the project, please feel free to hop on our Discord server or just open/reply to an issue discussing your concrete ideas for contribution.

Also, see the PUBLISHING.md documentation for more details on the overall structure of the project.

License

SPDX-License-Identifier: GPL-3.0


NOTE: If you're looking for the code for the consensus-based approach used in Apocryph from 2020 to 2022, please see this issue for more details.