_

package module
v0.0.0-...-135b226 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 17, 2024 License: GPL-3.0 Imports: 0 Imported by: 0

README

Apocryph / Trusted Pods

NOTE: This repository used to host the code recently moved to https://github.com/comrade-coop/apocryph-chain as part of a repository overhaul and reorganization. With due apologies to any past Github stargazers, we hope they would find this new and more active project well worth their star.

Meanwhile, the main body of code was moved here from https://github.com/comrade-coop/trusted-pods (now gone), and parts of the documentation/code might still refer to the old location. Use git remote set-url origin git://github.com/comrade-coop/apocryph (or git remote set-url origin git@github.com:comrade-coop/apocryph.git) to update your local clone/s to point to the right repository.

See this issue for more details.


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.
  • minikube: tool that runs a single-node Kubernetes cluster locally.
  • 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 the end-to-end tests in the test/e2e folder.

Typical development involves running the minikube end-to-end test, which can be done using the following command:

./test/e2e/minikube/run-test.sh

The command, after all dependencies are met, will proceed to start a local docker registry and test ethereum node, build and upload the project to them, then spin up a minikube cluster and deploy all necessary prerequisites into it, and finally deploying a pod from a manifest file into the cluster and then querying it over HTTP. It should display the curl command used to query the pod, and you should be able to use it yourself after the script is finished.

In addition, once you have started the minikube end-to-end test, you can also run the web UI test, which presents a sample interface that publishers can use to deploy a predefined pod template onto the minikube cluster / provider directly from their web browser.

turbo dev

Once you are done playing around with the tests, simply run the following command to delete and stop the minikube cluster:

test/e2e/minikube/run-test.sh teardown

(or alternatively, pass teardown full to also stop any local docker containers used by the test)

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

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL