Co-authored-by: Dave Kaj <davidkajpust@informal.systems> Co-authored-by: Ethan Buchman <ethan@coinculture.info>
74 lines
2 KiB
Markdown
74 lines
2 KiB
Markdown
|
|
# Quartz CosmWasm (quartz-contract-core)
|
|
|
|
Quartz CosmWasm (quartz-contract-core) is a high-level framework for building attestation-aware smart contracts on CosmWasm. It provides a robust foundation for developing secure, Intel SGX-based contracts with built-in remote attestation support.
|
|
|
|
## Features
|
|
|
|
- `Attested<M, A>` wrapper for a message and its attestation
|
|
- MockAttestation type for development ease
|
|
- Session management for secure communication between contract and enclave
|
|
- Verify DCAP attestations (by calling `dcap-verifier` and `tcbinfo` contracts)
|
|
- Mock SGX support for testing environments
|
|
|
|
See also the [spec.md](./SPEC.md)
|
|
|
|
## Installation
|
|
|
|
Add `quartz-contract-core` to your `Cargo.toml`:
|
|
|
|
```toml
|
|
[dependencies]
|
|
quartz-contract-core = { path = "../packages/quartz-contract-core" }
|
|
```
|
|
|
|
## Usage
|
|
|
|
Here's a basic example of how to use `quartz-contract-core` in your CosmWasm contract:
|
|
|
|
```rust
|
|
use quartz_cw::prelude::*;
|
|
use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
|
|
|
|
pub fn execute(
|
|
deps: DepsMut,
|
|
env: Env,
|
|
info: MessageInfo,
|
|
msg: QuartzExecuteMsg,
|
|
) -> Result<Response, ContractError> {
|
|
match msg {
|
|
QuartzExecuteMsg::Attested(attested_msg) => {
|
|
// Handle attested message
|
|
// Verification of the attestation is done automatically
|
|
let result = attested_msg.handle(deps, env, info)?;
|
|
Ok(result)
|
|
},
|
|
// Other message handlers...
|
|
}
|
|
}
|
|
```
|
|
|
|
## Key Components
|
|
|
|
1. `Attested<M, A>`: A wrapper struct for holding a message and its attestation.
|
|
2. `Attestation`: A trait for attestation types (DCAP, Mock).
|
|
3. `HasUserData`: A trait for extracting user data from attestations.
|
|
4. `RawHandler`: A trait for handling raw messages.
|
|
|
|
## Configuration
|
|
|
|
You can enable mock SGX support for testing by adding the `mock-sgx` feature to your `Cargo.toml`:
|
|
|
|
```toml
|
|
[dependencies]
|
|
quartz-contract-core = { path = "../packages/quartz-contract-core", features = ["mock-sgx"] }
|
|
```
|
|
|
|
## Testing
|
|
|
|
To run the tests:
|
|
|
|
```sh
|
|
cargo test
|
|
```
|