Skip to main content

quartz_contract_core/handler/
instantiate.rs

1use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
2use quartz_tee_ra::Error as RaVerificationError;
3
4use crate::{
5    error::Error,
6    handler::Handler,
7    msg::{
8        execute::attested::{Attestation, HasUserData},
9        instantiate::{CoreInstantiate, Instantiate},
10    },
11    state::{RawConfig, CONFIG},
12};
13
14impl<A> Handler for Instantiate<A>
15where
16    A: Attestation + Handler + HasUserData,
17{
18    fn handle(self, deps: DepsMut<'_>, env: &Env, info: &MessageInfo) -> Result<Response, Error> {
19        if self.0.msg().config().mr_enclave() != self.0.attestation().mr_enclave() {
20            return Err(RaVerificationError::MrEnclaveMismatch.into());
21        }
22        self.0.handle(deps, env, info)
23    }
24}
25
26impl Handler for CoreInstantiate {
27    fn handle(self, deps: DepsMut<'_>, _env: &Env, _info: &MessageInfo) -> Result<Response, Error> {
28        CONFIG
29            .save(deps.storage, &RawConfig::from(self.config().clone()))
30            .map_err(Error::Std)?;
31
32        Ok(Response::new().add_attribute("action", "instantiate"))
33    }
34}