cycles-quartz/crates/contracts/core/README.md

83 lines
2.1 KiB
Markdown
Raw Normal View History

# Quartz CosmWasm (quartz-cw)
Quartz CosmWasm (quartz-cw) 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<T>` wrapper for secure message handling
- Traits and structures for easy contract development
- State management and message handling utilities
- Support for both DCAP and EPID attestation protocols
- Mock SGX support for testing environments
## Installation
Add `quartz-cw` to your `Cargo.toml`:
```toml
[dependencies]
quartz-cw = { path = "../packages/quartz-cw" }
```
## Usage
Here's a basic example of how to use `quartz-cw` 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, EPID, 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-cw = { path = "../packages/quartz-cw", features = ["mock-sgx"] }
```
## Testing
To run the tests:
```sh
cargo test
```
## License
This project is licensed under [LICENSE_NAME]. See the LICENSE file for details.
## Contributing
We welcome contributions! Please feel free to submit a Pull Request.
For more information on the implementation details, check out the following files: