Implement join request
This commit is contained in:
parent
8603c97534
commit
bca2adbfc4
5 changed files with 57 additions and 19 deletions
|
@ -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" }
|
||||||
|
|
|
@ -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> {
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in a new issue