Skip to main content

quartz_contract_core/handler/execute/
session_create.rs

1use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
2
3use crate::{
4    error::Error,
5    handler::Handler,
6    msg::execute::session_create::SessionCreate,
7    state::{Session, SESSION},
8};
9
10impl Handler for SessionCreate {
11    // Create new SESSION with msg.nonce and no pubkey.
12    fn handle(self, deps: DepsMut<'_>, env: &Env, _info: &MessageInfo) -> Result<Response, Error> {
13        // TODO(hu55a1n1): overwrite previous session?
14
15        // ASSERT msg.contract == env.contract.address
16        let addr = deps.api.addr_validate(self.contract())?;
17        if addr != env.contract.address {
18            return Err(Error::ContractAddrMismatch);
19        }
20
21        // STORE in SESSION: (msg.nonce, None)
22        SESSION
23            .save(deps.storage, &Session::create(self.nonce()))
24            .map_err(Error::Std)?;
25
26        Ok(Response::new().add_attribute("action", "session_create"))
27    }
28}