1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use abstract_os::{
manager::state::OS_ID,
objects::module::{Module, ModuleInfo},
version_control::{state::OS_ADDRESSES, Core, ModuleResponse, QueryMsg},
};
use cosmwasm_std::{Addr, QuerierWrapper, StdError};
use cosmwasm_std::StdResult;
pub fn get_os_core(
querier: &QuerierWrapper,
os_id: u32,
version_control_addr: &Addr,
) -> StdResult<Core> {
let maybe_os = OS_ADDRESSES.query(querier, version_control_addr.clone(), os_id)?;
match maybe_os {
None => Err(StdError::generic_err(format!(
"OS with id {} is not active.",
os_id
))),
Some(core) => Ok(core),
}
}
pub fn verify_os_manager(
querier: &QuerierWrapper,
maybe_manager: &Addr,
version_control_addr: &Addr,
) -> StdResult<Core> {
let os_id = OS_ID.query(querier, maybe_manager.clone())?;
let maybe_os = OS_ADDRESSES.query(querier, version_control_addr.clone(), os_id)?;
match maybe_os {
None => Err(StdError::generic_err(format!(
"OS with id {} is not active.",
os_id
))),
Some(core) => {
if &core.manager != maybe_manager {
Err(StdError::generic_err(
"Proposed manager is not the manager of this instance.",
))
} else {
Ok(core)
}
}
}
}
pub fn verify_os_proxy(
querier: &QuerierWrapper,
maybe_proxy: &Addr,
version_control_addr: &Addr,
) -> StdResult<Core> {
let os_id = OS_ID.query(querier, maybe_proxy.clone())?;
let maybe_os = OS_ADDRESSES.query(querier, version_control_addr.clone(), os_id)?;
match maybe_os {
None => Err(StdError::generic_err(format!(
"OS with id {} is not active.",
os_id
))),
Some(core) => {
if &core.proxy != maybe_proxy {
Err(StdError::generic_err(
"Proposed proxy is not the proxy of this instance.",
))
} else {
Ok(core)
}
}
}
}
pub fn get_module(
querier: &QuerierWrapper,
module_info: ModuleInfo,
version_control_addr: &Addr,
) -> StdResult<Module> {
let resp: ModuleResponse = querier.query_wasm_smart(
version_control_addr,
&QueryMsg::Module {
module: module_info,
},
)?;
Ok(resp.module)
}