diff --git a/Cargo.lock b/Cargo.lock index c328995..4fd20cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -74,9 +74,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.12" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", @@ -157,7 +157,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -168,7 +168,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -406,9 +406,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9fa1897e4325be0d68d48df6aa1a71ac2ed4d27723887e7754192705350730" +checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" [[package]] name = "cfg-if" @@ -473,7 +473,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -834,9 +834,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a5d17510e4a1a87f323de70b7b1eaac1ee0e37866c6720b2d279452d0edf389" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ "darling_core", "darling_macro", @@ -844,27 +844,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98eea36a7ff910fa751413d0895551143a8ea41d695d9798ec7d665df7f7f5e" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] name = "darling_macro" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a366a3f90c5d59a4b91169775f88e52e8f71a0e7804cc98a8db2932cf4ed57" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -948,14 +948,14 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ecdsa" @@ -1275,7 +1275,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -1391,9 +1391,9 @@ dependencies = [ [[package]] name = "half" -version = "1.8.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "hashbrown" @@ -1418,9 +1418,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" +checksum = "379dada1584ad501b383485dd706b8afb7a70fcbc7f4da7d780638a5a6124a60" [[package]] name = "hex" @@ -1993,9 +1993,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ "bitflags 2.4.2", "cfg-if 1.0.0", @@ -2014,7 +2014,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2025,9 +2025,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", @@ -2154,7 +2154,7 @@ checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2202,9 +2202,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "polyval" @@ -2237,7 +2237,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ "proc-macro2", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2286,7 +2286,7 @@ dependencies = [ "prost 0.12.3", "prost-types 0.12.3", "regex", - "syn 2.0.50", + "syn 2.0.51", "tempfile", "which", ] @@ -2314,7 +2314,7 @@ dependencies = [ "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2338,7 +2338,7 @@ dependencies = [ [[package]] name = "quartz-cw" version = "0.1.0" -source = "git+ssh://git@github.com/informalsystems/bisenzone-cw-mvp.git?branch=hu55a1n1/11-use-quartz#c49fc8da96d2039179aec962c85f190aee999d62" +source = "git+ssh://git@github.com/informalsystems/bisenzone-cw-mvp.git?branch=hu55a1n1/11-use-quartz#0e877198416e3c2fb85777c177bcbabb3ca80b69" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -2348,8 +2348,6 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "tendermint 0.34.0", - "tendermint-light-client", "thiserror", ] @@ -2365,6 +2363,7 @@ dependencies = [ "quartz-proto", "quartz-relayer", "quartz-tee-ra", + "rand", "serde", "serde_json", "tendermint 0.34.0", @@ -2408,7 +2407,7 @@ dependencies = [ [[package]] name = "quartz-tee-ra" version = "0.1.0" -source = "git+ssh://git@github.com/informalsystems/bisenzone-cw-mvp.git?branch=hu55a1n1/11-use-quartz#c49fc8da96d2039179aec962c85f190aee999d62" +source = "git+ssh://git@github.com/informalsystems/bisenzone-cw-mvp.git?branch=hu55a1n1/11-use-quartz#0e877198416e3c2fb85777c177bcbabb3ca80b69" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -2880,7 +2879,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2913,7 +2912,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -2953,7 +2952,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -3045,12 +3044,12 @@ checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3137,9 +3136,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.50" +version = "2.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +checksum = "6ab617d94515e94ae53b8406c628598680aa0c9587474ecbe58188f7b345d66c" dependencies = [ "proc-macro2", "quote", @@ -3192,9 +3191,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if 1.0.0", "fastrand", @@ -3473,7 +3472,7 @@ checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -3612,7 +3611,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -3728,7 +3727,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -3782,7 +3781,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] [[package]] @@ -3980,7 +3979,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", "wasm-bindgen-shared", ] @@ -4014,7 +4013,7 @@ checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4237,5 +4236,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.51", ] diff --git a/enclaves/quartz/Cargo.toml b/enclaves/quartz/Cargo.toml index a8c47e5..d6bcda8 100644 --- a/enclaves/quartz/Cargo.toml +++ b/enclaves/quartz/Cargo.toml @@ -8,10 +8,11 @@ clap = { version = "4.1.8", features = ["derive"] } color-eyre = "0.6.2" cosmwasm-std = "1.4.0" prost = "0.12" -tendermint = "0.34.0" -tendermint-light-client = "0.34.0" +rand = "0.8.5" serde = { version = "1.0.189", features = ["derive"] } serde_json = "1.0.94" +tendermint = "0.34.0" +tendermint-light-client = "0.34.0" tonic = "0.11" tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] } diff --git a/enclaves/quartz/src/main.rs b/enclaves/quartz/src/main.rs index 569c67e..b852e06 100644 --- a/enclaves/quartz/src/main.rs +++ b/enclaves/quartz/src/main.rs @@ -37,13 +37,19 @@ async fn main() -> Result<(), Box> { let light_client_opts = LightClientOpts::new( args.chain_id, - args.trusted_height, - args.trusted_hash, - args.trust_threshold, + args.trusted_height.into(), + Vec::from(args.trusted_hash) + .try_into() + .expect("invalid trusted hash"), + ( + args.trust_threshold.numerator(), + args.trust_threshold.denominator(), + ), args.trusting_period, args.max_clock_drift, args.max_block_lag, - ); + )?; + let config = Config::new( EpidAttestor.mr_enclave()?, Duration::from_secs(30 * 24 * 60), diff --git a/enclaves/quartz/src/server.rs b/enclaves/quartz/src/server.rs index d53a852..201c78b 100644 --- a/enclaves/quartz/src/server.rs +++ b/enclaves/quartz/src/server.rs @@ -1,9 +1,14 @@ -use quartz_cw::{msg::instantiate::CoreInstantiate, state::Config}; +use quartz_cw::{ + msg::{execute::session_create::SessionCreate, instantiate::CoreInstantiate}, + state::{Config, Nonce}, +}; use quartz_proto::quartz::{ core_server::Core, InstantiateRequest as RawInstantiateRequest, - InstantiateResponse as RawInstantiateResponse, SessionCreateRequest, SessionCreateResponse, + InstantiateResponse as RawInstantiateResponse, SessionCreateRequest as RawSessionCreateRequest, + SessionCreateResponse as RawSessionCreateResponse, }; -use quartz_relayer::types::InstantiateResponse; +use quartz_relayer::types::{InstantiateResponse, SessionCreateResponse}; +use rand::Rng; use tonic::{Request, Response, Status}; use crate::attestor::Attestor; @@ -35,6 +40,7 @@ where _request: Request, ) -> TonicResult> { let core_instantiate_msg = CoreInstantiate::new(self.config.clone()); + let quote = self .attestor .quote(core_instantiate_msg) @@ -45,14 +51,17 @@ where } async fn session_create( &self, - request: Request, - ) -> TonicResult> { - println!("Got a request: {:?}", request); + _request: Request, + ) -> TonicResult> { + let nonce = rand::thread_rng().gen::(); + let session_create_msg = SessionCreate::new(nonce); - let reply = SessionCreateResponse { - message: "Hello!".to_string(), - }; + let quote = self + .attestor + .quote(session_create_msg) + .map_err(|e| Status::internal(e.to_string()))?; - Ok(Response::new(reply)) + let response = SessionCreateResponse::new(nonce, quote); + Ok(Response::new(response.into())) } } diff --git a/utils/quartz-relayer/src/types.rs b/utils/quartz-relayer/src/types.rs index 367be79..c6ed744 100644 --- a/utils/quartz-relayer/src/types.rs +++ b/utils/quartz-relayer/src/types.rs @@ -1,6 +1,9 @@ use cosmwasm_std::{HexBinary, StdError}; -use quartz_cw::state::{Config, RawConfig}; -use quartz_proto::quartz::InstantiateResponse as RawInstantiateResponse; +use quartz_cw::state::{Config, Nonce, RawConfig}; +use quartz_proto::quartz::{ + InstantiateResponse as RawInstantiateResponse, + SessionCreateResponse as RawSessionCreateResponse, +}; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq)] @@ -82,3 +85,83 @@ impl From for RawInstantiateResponseMsg { } } } + +#[derive(Clone, Debug, PartialEq)] +pub struct SessionCreateResponse { + message: SessionCreateResponseMsg, +} + +impl SessionCreateResponse { + pub fn new(nonce: Nonce, quote: Vec) -> Self { + Self { + message: SessionCreateResponseMsg { nonce, quote }, + } + } + + pub fn quote(&self) -> &[u8] { + &self.message.quote + } + + pub fn into_message(self) -> SessionCreateResponseMsg { + self.message + } +} + +impl TryFrom for SessionCreateResponse { + type Error = StdError; + + fn try_from(value: RawSessionCreateResponse) -> Result { + let raw_message: RawSessionCreateResponseMsg = serde_json::from_str(&value.message) + .map_err(|e| StdError::parse_err("RawSessionCreateResponseMsg", e))?; + Ok(Self { + message: raw_message.try_into()?, + }) + } +} + +impl From for RawSessionCreateResponse { + fn from(value: SessionCreateResponse) -> Self { + let raw_message: RawSessionCreateResponseMsg = value.message.into(); + Self { + message: serde_json::to_string(&raw_message).expect("infallible serializer"), + } + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct SessionCreateResponseMsg { + nonce: Nonce, + quote: Vec, +} + +impl SessionCreateResponseMsg { + pub fn into_tuple(self) -> (Nonce, Vec) { + (self.nonce, self.quote) + } +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct RawSessionCreateResponseMsg { + nonce: HexBinary, + quote: HexBinary, +} + +impl TryFrom for SessionCreateResponseMsg { + type Error = StdError; + + fn try_from(value: RawSessionCreateResponseMsg) -> Result { + Ok(Self { + nonce: value.nonce.to_array()?, + quote: value.quote.into(), + }) + } +} + +impl From for RawSessionCreateResponseMsg { + fn from(value: SessionCreateResponseMsg) -> Self { + Self { + nonce: value.nonce.into(), + quote: value.quote.into(), + } + } +}