From 595b0e02a87390ffab127d6feff2dd99dffa7beb Mon Sep 17 00:00:00 2001 From: hu55a1n1 Date: Wed, 29 Nov 2023 13:13:20 -0800 Subject: [PATCH] Init cw-tee-mtcs contract --- .../contracts/cw-tee-mtcs/Cargo.toml | 56 +++++++++++++++++++ .../contracts/cw-tee-mtcs/README.md | 4 ++ .../contracts/cw-tee-mtcs/src/bin/schema.rs | 11 ++++ .../contracts/cw-tee-mtcs/src/contract.rs | 50 +++++++++++++++++ .../contracts/cw-tee-mtcs/src/error.rs | 11 ++++ .../contracts/cw-tee-mtcs/src/lib.rs | 15 +++++ .../contracts/cw-tee-mtcs/src/msg.rs | 11 ++++ .../contracts/cw-tee-mtcs/src/state.rs | 9 +++ 8 files changed, 167 insertions(+) create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/README.md create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/bin/schema.rs create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/lib.rs create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs create mode 100644 bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml new file mode 100644 index 0000000..d18bf27 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml @@ -0,0 +1,56 @@ +[package] +name = "cw-tee-mtcs" +version = "0.1.0" +authors = ["hu55a1n1 "] +edition = "2021" + +exclude = [ + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + +[profile.release] +opt-level = 3 +debug = false +rpath = false +lto = true +debug-assertions = false +codegen-units = 1 +panic = 'abort' +incremental = false +overflow-checks = true + +[features] +# for more explicit tests, cargo test --features=backtraces +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all instantiate/execute/query exports +library = [] + +[package.metadata.scripts] +optimize = """docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.14.0 +""" + +[dependencies] +cosmwasm-schema = "1.5.0" +cosmwasm-std = { version = "1.5.0", features = [ + "cosmwasm_1_3", + # Enable this if you only deploy to chains that have CosmWasm 1.4 or higher + # "cosmwasm_1_4", +] } +cw-storage-plus = "1.1.0" +cw2 = "1.1.1" +schemars = "0.8.15" +serde = { version = "1.0.189", default-features = false, features = ["derive"] } +thiserror = { version = "1.0.49" } + +[dev-dependencies] +cw-multi-test = "0.17.0" diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/README.md b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/README.md new file mode 100644 index 0000000..f2a1561 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/README.md @@ -0,0 +1,4 @@ +# CosmWasm smart contract to support MTCS on TEE + +An implementation of the on-chain component of +the [Key managers proposal v1](https://github.com/informalsystems/tee-mtcs/issues/26). diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/bin/schema.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/bin/schema.rs new file mode 100644 index 0000000..353dd79 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/bin/schema.rs @@ -0,0 +1,11 @@ +use cosmwasm_schema::write_api; + +use cw_tee_mtcs::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; + +fn main() { + write_api! { + instantiate: InstantiateMsg, + execute: ExecuteMsg, + query: QueryMsg, + } +} diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs new file mode 100644 index 0000000..45c62ea --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs @@ -0,0 +1,50 @@ +use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; +use cw2::set_contract_version; + +use crate::error::ContractError; +use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; +use crate::state::{State, STATE}; + +// version info for migration info +const CONTRACT_NAME: &str = "crates.io:cw-tee-mtcs"; +const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + _env: Env, + info: MessageInfo, + _msg: InstantiateMsg, +) -> Result { + let state = State { + owner: info.sender.to_string(), + }; + set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + STATE.save(deps.storage, &state)?; + + Ok(Response::new() + .add_attribute("method", "instantiate") + .add_attribute("owner", info.sender)) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + _deps: DepsMut, + _env: Env, + _info: MessageInfo, + _msg: ExecuteMsg, +) -> Result { + todo!() +} + +pub mod execute {} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(_deps: Deps, _env: Env, _msg: QueryMsg) -> StdResult { + todo!() +} + +pub mod query {} + +#[cfg(test)] +mod tests {} diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs new file mode 100644 index 0000000..840de74 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs @@ -0,0 +1,11 @@ +use cosmwasm_std::StdError; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum ContractError { + #[error("{0}")] + Std(#[from] StdError), + + #[error("Unauthorized")] + Unauthorized, +} diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/lib.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/lib.rs new file mode 100644 index 0000000..f71330c --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/lib.rs @@ -0,0 +1,15 @@ +#![deny( + warnings, + trivial_casts, + trivial_numeric_casts, + unused_import_braces, + unused_qualifications +)] +#![forbid(unsafe_code)] + +pub mod contract; +mod error; +pub mod msg; +pub mod state; + +pub use crate::error::ContractError; diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs new file mode 100644 index 0000000..642f348 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs @@ -0,0 +1,11 @@ +use cosmwasm_schema::{cw_serde, QueryResponses}; + +#[cw_serde] +pub struct InstantiateMsg; + +#[cw_serde] +pub enum ExecuteMsg {} + +#[cw_serde] +#[derive(QueryResponses)] +pub enum QueryMsg {} diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs new file mode 100644 index 0000000..79a7e97 --- /dev/null +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs @@ -0,0 +1,9 @@ +use cosmwasm_schema::cw_serde; +use cw_storage_plus::Item; + +#[cw_serde] +pub struct State { + pub owner: String, +} + +pub const STATE: Item = Item::new("state");