Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: docs update #7

Merged
merged 1 commit into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 24 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
# Vana Satya Proof of Contribution - Python Template

This repository serves as a template for creating proof of contribution tasks using Python and Gramine for secure computation.
This repository serves as a template for creating a [proof of contribution](https://docs.vana.org/vana/core-concepts/key-elements/proof-of-contribution) tasks using Python. It is executed on Vana's Satya Network, a group of highly confidential and secure compute nodes that can validate data without revealing its contents to the node operator.

## Overview

This template provides a basic structure for building proof tasks that:

1. Read input files from the `/input` directory
2. Process the data securely
3. Write proof results to the `/output` directory
4. Use the `/sealed` directory for secure storage (when available)
1. Read input files from the `/input` directory.
2. Process the data securely, running any necessary validations to prove the data authentic, unique, high quality, etc.
3. Write proof results to the `/output/results.json` file in the following format:

```json
{
"dlp_id": 1234, // DLP ID is found in the Root Network contract after the DLP is registered
"valid": false, // A single boolean to summarize if the file is considered valid in this DLP
"score": 0.7614457831325301, // A score between 0 and 1 for the file, used to determine how valuable the file is. This can be an aggregation of the individual scores below.
"authenticity": 1.0, // A score between 0 and 1 to rate if the file has been tampered with
"ownership": 1.0, // A score between 0 and 1 to verify the ownership of the file
"quality": 0.6024096385542169, // A score between 0 and 1 to show the quality of the file
"uniqueness": 0, // A score between 0 and 1 to show unique the file is, compared to others in the DLP
"attributes": { // Custom attributes that can be added to the proof to provide extra context about the encrypted file
"total_score": 0.5,
"score_threshold": 0.83,
"email_verified": true
}
}
```

The project is designed to work with Gramine, a lightweight library OS that enables running unmodified applications in secure enclaves, such as Intel SGX (Software Guard Extensions). This allows the code to run in a trusted execution environment, ensuring confidentiality and integrity of the computation.
The project is designed to work with [Gramine](https://gramine.readthedocs.io/en/latest/), a lightweight library OS that enables running unmodified applications in secure enclaves, such as Intel SGX (Software Guard Extensions). This allows the code to run in a trusted execution environment, ensuring confidentiality and integrity of the computation.

## Project Structure

Expand All @@ -21,7 +37,7 @@ The project is designed to work with Gramine, a lightweight library OS that enab
- `demo/`: Contains sample input and output for testing
- `.github/workflows/`: CI/CD pipeline for building and releasing
- `Dockerfile`: Defines the container image for the proof task
- `my-proof.manifest.template`: Gramine manifest template for secure execution
- `my-proof.manifest.template`: Gramine manifest template for running securely in an Intel SGX enclave
- `config.yaml`: Configuration file for Gramine Shielded Containers (GSC)

## Getting Started
Expand All @@ -37,7 +53,7 @@ To use this template:

The main proof logic is implemented in `my_proof/proof.py`. To customize it, update the `Proof.generate()` function to change how input files are processed.

The proof can be configured using environment variables:
The proof can be configured using environment variables. When running in an enclave, the environment variables must be defined in the `my-proof.manifest.template` file as well. The following environment variables are used for this demo proof:

- `USER_EMAIL`: The email address of the data contributor, to verify data ownership

Expand Down
20 changes: 10 additions & 10 deletions my-proof.manifest.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@ sgx.enclave_size = "256M"
# Increase this as needed, e.g., if you run a web server.
sgx.max_threads = 4

fs.mounts = [
{ type = "encrypted", path = "/sealed", uri = "file:/sealed", key_name = "_sgx_mrenclave" },
{ path = "/input", uri = "file:/input" },
{ path = "/output", uri = "file:/output" },
]

# Whitelist ENV variables that get passed to the enclave
# Using { passthrough = true } allows values to be passed in from the Satya node's /RunProof endpoint
loader.env.USER_EMAIL = { passthrough = true }

# Gramine gives a warning that allowed_files is not safe in production, but it
# should generally be fine for our use case which inherently assumes that input
# files are untrusted until proven otherwise.
#
# Establishing a secure channel would be strong in that it would be harder for
# malicious third parties to tamper with the files.
sgx.allowed_files = [
"file:/input/",
"file:/output/",
# Required for internet access from inside the enclave
"file:/etc/hosts",
"file:/etc/resolv.conf",
]

# These directories are mounted from the host, which will be a temporary directory from the Satya node that's running the proof.
fs.mounts = [
{ type = "encrypted", path = "/sealed", uri = "file:/sealed", key_name = "_sgx_mrenclave" },
{ path = "/input", uri = "file:/input" },
{ path = "/output", uri = "file:/output" },
]

# You can add other Gramine-manifest-compatible options as needed, see the
# Gramine documentation for more details: https://gramine.readthedocs.io. Note
# that gsc defines a number of manifest settings by default.
# that gsc defines a number of manifest settings by default.
Loading