From bca2adbfc421a5b5badfc67c5ecf3c957c4f57e5 Mon Sep 17 00:00:00 2001 From: hu55a1n1 Date: Wed, 29 Nov 2023 14:09:57 -0800 Subject: [PATCH] Implement join request --- .../contracts/cw-tee-mtcs/Cargo.toml | 1 + .../contracts/cw-tee-mtcs/src/contract.rs | 39 +++++++++++++++++-- .../contracts/cw-tee-mtcs/src/error.rs | 10 +++++ .../contracts/cw-tee-mtcs/src/msg.rs | 17 +++----- .../contracts/cw-tee-mtcs/src/state.rs | 9 +++-- 5 files changed, 57 insertions(+), 19 deletions(-) diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml index d18bf27..ac389f6 100644 --- a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/Cargo.toml @@ -48,6 +48,7 @@ cosmwasm-std = { version = "1.5.0", features = [ ] } cw-storage-plus = "1.1.0" cw2 = "1.1.1" +ecies = "0.2.6" schemars = "0.8.15" serde = { version = "1.0.189", default-features = false, features = ["derive"] } thiserror = { version = "1.0.49" } diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs index 45c62ea..cfd795b 100644 --- a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/contract.rs @@ -2,6 +2,7 @@ use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Respons use cw2::set_contract_version; use crate::error::ContractError; +use crate::msg::execute::JoinComputeNodeMsg; use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; use crate::state::{State, STATE}; @@ -29,15 +30,45 @@ pub fn instantiate( #[cfg_attr(not(feature = "library"), entry_point)] pub fn execute( - _deps: DepsMut, + deps: DepsMut, _env: Env, _info: MessageInfo, - _msg: ExecuteMsg, + msg: ExecuteMsg, ) -> Result { - todo!() + match msg { + ExecuteMsg::JoinComputeNode(JoinComputeNodeMsg { + compute_node_pub_key, + nonce, + }) => execute::enqueue_join_request(deps, compute_node_pub_key, nonce), + } } -pub mod execute {} +pub mod execute { + use cosmwasm_std::{DepsMut, Response}; + use ecies::PublicKey; + + use crate::state::Nonce; + use crate::state::{Request, REQUESTS}; + use crate::ContractError; + + pub fn enqueue_join_request( + deps: DepsMut, + compute_node_pub_key: String, + nonce: Nonce, + ) -> Result { + let _ = PublicKey::parse_slice(compute_node_pub_key.as_bytes(), None)?; + + REQUESTS.save( + deps.storage, + &nonce, + &Request::JoinComputeNode(compute_node_pub_key.clone()), + )?; + + Ok(Response::new() + .add_attribute("action", "enqueue_request") + .add_attribute("compute_node_pub_key", compute_node_pub_key)) + } +} #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(_deps: Deps, _env: Env, _msg: QueryMsg) -> StdResult { diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs index 840de74..d05eb20 100644 --- a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/error.rs @@ -1,4 +1,5 @@ use cosmwasm_std::StdError; +use ecies::SecpError; use thiserror::Error; #[derive(Error, Debug)] @@ -8,4 +9,13 @@ pub enum ContractError { #[error("Unauthorized")] Unauthorized, + + #[error("Invalid pubkey")] + InvalidPubKey(SecpError), +} + +impl From for ContractError { + fn from(e: SecpError) -> Self { + Self::InvalidPubKey(e) + } } diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs index 0e4d9b3..abb0171 100644 --- a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/msg.rs @@ -4,24 +4,19 @@ use cosmwasm_schema::{cw_serde, QueryResponses}; pub struct InstantiateMsg; #[cw_serde] -pub enum ExecuteMsg {} +pub enum ExecuteMsg { + JoinComputeNode(execute::JoinComputeNodeMsg), +} pub mod execute { use super::*; - #[cw_serde] - pub struct Nonce([u8; 32]); + use crate::state::Nonce; #[cw_serde] pub struct JoinComputeNodeMsg { - compute_node_pub_key: String, - nonce: Nonce, - } - - #[cw_serde] - pub struct ShareEpochKeyMsg { - compute_node_pub_key: String, - nonce: Nonce, + pub compute_node_pub_key: String, + pub nonce: Nonce, } } diff --git a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs index 14d4ec4..6b204f3 100644 --- a/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs +++ b/bisenzone-cw-mvp/contracts/cw-tee-mtcs/src/state.rs @@ -1,7 +1,9 @@ -use crate::msg::execute::{JoinComputeNodeMsg, Nonce, ShareEpochKeyMsg}; use cosmwasm_schema::cw_serde; use cw_storage_plus::{Item, Map}; +pub type Nonce = [u8; 32]; +pub type RawPublicKey = String; + #[cw_serde] pub struct State { pub owner: String, @@ -9,9 +11,8 @@ pub struct State { #[cw_serde] pub enum Request { - JoinComputeNode(JoinComputeNodeMsg), - ShareEpochKey(ShareEpochKeyMsg), + JoinComputeNode(RawPublicKey), } pub const STATE: Item = Item::new("state"); -pub const REQUESTS: Map<&Nonce, &Request> = Map::new("requests"); +pub const REQUESTS: Map<&Nonce, Request> = Map::new("requests");