Implement join request

This commit is contained in:
hu55a1n1 2023-11-29 14:09:57 -08:00
parent 8603c97534
commit bca2adbfc4
5 changed files with 57 additions and 19 deletions

View file

@ -48,6 +48,7 @@ cosmwasm-std = { version = "1.5.0", features = [
] } ] }
cw-storage-plus = "1.1.0" cw-storage-plus = "1.1.0"
cw2 = "1.1.1" cw2 = "1.1.1"
ecies = "0.2.6"
schemars = "0.8.15" schemars = "0.8.15"
serde = { version = "1.0.189", default-features = false, features = ["derive"] } serde = { version = "1.0.189", default-features = false, features = ["derive"] }
thiserror = { version = "1.0.49" } thiserror = { version = "1.0.49" }

View file

@ -2,6 +2,7 @@ use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Respons
use cw2::set_contract_version; use cw2::set_contract_version;
use crate::error::ContractError; use crate::error::ContractError;
use crate::msg::execute::JoinComputeNodeMsg;
use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
use crate::state::{State, STATE}; use crate::state::{State, STATE};
@ -29,15 +30,45 @@ pub fn instantiate(
#[cfg_attr(not(feature = "library"), entry_point)] #[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute( pub fn execute(
_deps: DepsMut, deps: DepsMut,
_env: Env, _env: Env,
_info: MessageInfo, _info: MessageInfo,
_msg: ExecuteMsg, msg: ExecuteMsg,
) -> Result<Response, ContractError> { ) -> Result<Response, ContractError> {
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<Response, ContractError> {
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)] #[cfg_attr(not(feature = "library"), entry_point)]
pub fn query(_deps: Deps, _env: Env, _msg: QueryMsg) -> StdResult<Binary> { pub fn query(_deps: Deps, _env: Env, _msg: QueryMsg) -> StdResult<Binary> {

View file

@ -1,4 +1,5 @@
use cosmwasm_std::StdError; use cosmwasm_std::StdError;
use ecies::SecpError;
use thiserror::Error; use thiserror::Error;
#[derive(Error, Debug)] #[derive(Error, Debug)]
@ -8,4 +9,13 @@ pub enum ContractError {
#[error("Unauthorized")] #[error("Unauthorized")]
Unauthorized, Unauthorized,
#[error("Invalid pubkey")]
InvalidPubKey(SecpError),
}
impl From<SecpError> for ContractError {
fn from(e: SecpError) -> Self {
Self::InvalidPubKey(e)
}
} }

View file

@ -4,24 +4,19 @@ use cosmwasm_schema::{cw_serde, QueryResponses};
pub struct InstantiateMsg; pub struct InstantiateMsg;
#[cw_serde] #[cw_serde]
pub enum ExecuteMsg {} pub enum ExecuteMsg {
JoinComputeNode(execute::JoinComputeNodeMsg),
}
pub mod execute { pub mod execute {
use super::*; use super::*;
#[cw_serde] use crate::state::Nonce;
pub struct Nonce([u8; 32]);
#[cw_serde] #[cw_serde]
pub struct JoinComputeNodeMsg { pub struct JoinComputeNodeMsg {
compute_node_pub_key: String, pub compute_node_pub_key: String,
nonce: Nonce, pub nonce: Nonce,
}
#[cw_serde]
pub struct ShareEpochKeyMsg {
compute_node_pub_key: String,
nonce: Nonce,
} }
} }

View file

@ -1,7 +1,9 @@
use crate::msg::execute::{JoinComputeNodeMsg, Nonce, ShareEpochKeyMsg};
use cosmwasm_schema::cw_serde; use cosmwasm_schema::cw_serde;
use cw_storage_plus::{Item, Map}; use cw_storage_plus::{Item, Map};
pub type Nonce = [u8; 32];
pub type RawPublicKey = String;
#[cw_serde] #[cw_serde]
pub struct State { pub struct State {
pub owner: String, pub owner: String,
@ -9,9 +11,8 @@ pub struct State {
#[cw_serde] #[cw_serde]
pub enum Request { pub enum Request {
JoinComputeNode(JoinComputeNodeMsg), JoinComputeNode(RawPublicKey),
ShareEpochKey(ShareEpochKeyMsg),
} }
pub const STATE: Item<State> = Item::new("state"); pub const STATE: Item<State> = Item::new("state");
pub const REQUESTS: Map<&Nonce, &Request> = Map::new("requests"); pub const REQUESTS: Map<&Nonce, Request> = Map::new("requests");