- how an execution is performed
- what kind of evidence can be produced
- how verification works
- HTTP (different Prado nodes make the HTTP request at the same time and results are signed)
- JavaScript (Prado runs the JS function and creates a verifiable receipt)
- Python (Prado runs the Python function and creates a verifiable receipt)
Two classes of runtimes
Prado runtimes fall into two fundamental categories:1. Deterministic runtimes (JS, Python)
- Output depends only on:
- code
- input
- No external dependencies
- Execution can be replayed exactly
2. Non-deterministic runtimes (HTTP)
- Output depends on:
- external APIs
- time
- network conditions
- Execution cannot be replayed
How verification works by runtime
JavaScript / Python (deterministic)
What happens- Prado executes the code once
- A receipt is generated with:
- code hash
- input hash
- output hash
- The verifier re-runs the same code locally
- The output is recomputed
- The output hash is compared to the receipt
- The output must follow from the code and input
- Prado cannot fake the result without being detected
HTTP (attestation-based)
What happens- Multiple HTTP nodes perform the same request
- Each node:
- records the full request and response
- hashes a canonical observation
- signs the hash
- Prado aggregates these attestations into a receipt
- Raw observations are returned as disclosures
- The verifier checks the receipt’s integrity
- Each disclosed observation is:
- canonicalized
- hashed
- matched against the receipt
- (Optionally) node signatures are verified
- Which nodes observed what
- That the observations were not modified
- That the receipt commits immutably to those claims
- That the API response is “correct”
- That the data should be trusted
- That nodes agree with each other