croncat_agents/
external.rs1use crate::error::ContractError;
2use cosmwasm_std::{
3 to_binary, Addr, CosmosMsg, Deps, Empty, QuerierWrapper, StdError, StdResult, Uint128, WasmMsg,
4};
5use croncat_sdk_agents::types::Config;
6use croncat_sdk_core::internal_messages::agents::AgentWithdrawOnRemovalArgs;
7use croncat_sdk_factory::state::CONTRACT_ADDRS;
8use croncat_sdk_manager::msg::ManagerQueryMsg;
9use croncat_sdk_manager::types::Config as ManagerConfig;
10use croncat_sdk_tasks::msg::TasksQueryMsg;
11use croncat_sdk_tasks::types::SlotTasksTotalResponse;
12pub mod croncat_tasks_contract {
13 use super::*;
14
15 pub(crate) fn assert_caller_is_tasks_contract(
16 deps_queries: &QuerierWrapper<Empty>,
17 config: &Config,
18 sender: &Addr,
19 ) -> StdResult<()> {
20 let addr = query_tasks_addr(deps_queries, config)?;
21 if addr != *sender {
22 return Err(cosmwasm_std::StdError::GenericErr {
23 msg: ContractError::Unauthorized {}.to_string(),
24 });
25 }
26 Ok(())
27 }
28
29 pub(crate) fn query_tasks_addr(
30 deps_queries: &QuerierWrapper<Empty>,
31 config: &Config,
32 ) -> StdResult<Addr> {
33 let (agents_name, version) = &config.croncat_tasks_key;
34 CONTRACT_ADDRS
35 .query(
36 deps_queries,
37 config.croncat_factory_addr.clone(),
38 (agents_name, version),
39 )?
40 .ok_or_else(|| StdError::generic_err(ContractError::InvalidVersionKey {}.to_string()))
41 }
42
43 pub fn query_tasks_slots(deps: Deps, config: &Config) -> StdResult<(u64, u64)> {
44 let croncat_tasks_addr = query_tasks_addr(&deps.querier, config)?;
45 let response: SlotTasksTotalResponse = deps.querier.query_wasm_smart(
47 croncat_tasks_addr,
48 &TasksQueryMsg::SlotTasksTotal { offset: None },
49 )?;
50
51 Ok((response.block_tasks, response.cron_tasks))
52 }
53}
54
55pub mod croncat_manager_contract {
56
57 use super::*;
58
59 pub fn query_manager_config(deps: &Deps, config: &Config) -> StdResult<ManagerConfig> {
60 let manager_addr = query_manager_addr(&deps.querier, config)?;
61 let manager_config: ManagerConfig = deps
63 .querier
64 .query_wasm_smart(manager_addr, &ManagerQueryMsg::Config {})?;
65
66 Ok(manager_config)
67 }
68
69 pub(crate) fn query_manager_addr(
70 deps_queries: &QuerierWrapper<Empty>,
71 config: &Config,
72 ) -> StdResult<Addr> {
73 let (manager_name, version) = &config.croncat_manager_key;
74 CONTRACT_ADDRS
75 .query(
76 deps_queries,
77 config.croncat_factory_addr.clone(),
78 (manager_name, version),
79 )?
80 .ok_or(cosmwasm_std::StdError::GenericErr {
81 msg: ContractError::InvalidVersionKey {}.to_string(),
82 })
83 }
84
85 pub fn create_withdraw_rewards_submsg(
86 querier: &QuerierWrapper<Empty>,
87 config: &Config,
88 agent_id: &str,
89 payable_account_id: String,
90 ) -> StdResult<CosmosMsg> {
91 let addr = query_manager_addr(querier, config)?;
92 let args = AgentWithdrawOnRemovalArgs {
93 agent_id: agent_id.to_owned(),
94 payable_account_id,
95 };
96 let execute = CosmosMsg::Wasm(WasmMsg::Execute {
97 contract_addr: addr.into(),
98 msg: to_binary(&croncat_sdk_manager::msg::ManagerExecuteMsg::AgentWithdraw(
99 Some(args),
100 ))?,
101 funds: vec![],
102 });
103
104 Ok(execute)
105 }
106 pub fn query_agent_rewards(
107 querier: &QuerierWrapper<Empty>,
108 config: &Config,
109 agent_id: &str,
110 ) -> StdResult<Uint128> {
111 let addr = query_manager_addr(querier, config)?;
112 let response: Uint128 = querier.query_wasm_smart(
114 addr,
115 &ManagerQueryMsg::AgentRewards {
116 agent_id: agent_id.to_owned(),
117 },
118 )?;
119
120 Ok(response)
121 }
122 pub(crate) fn assert_caller_is_manager_contract(
123 deps_queries: &QuerierWrapper<Empty>,
124 config: &Config,
125 sender: &Addr,
126 ) -> StdResult<()> {
127 let addr = query_manager_addr(deps_queries, config)?;
128 if addr != *sender {
129 return Err(cosmwasm_std::StdError::GenericErr {
130 msg: ContractError::Unauthorized {}.to_string(),
131 });
132 }
133 Ok(())
134 }
135}