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
use crate::{base::Handler, AbstractSdkError, ModuleInterface};
use abstract_core::{abstract_ica::IbcResponseMsg, IBC_CLIENT};
use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
pub trait IbcCallbackEndpoint: Handler + ModuleInterface {
fn ibc_callback(
self,
deps: DepsMut,
env: Env,
info: MessageInfo,
msg: IbcResponseMsg,
) -> Result<Response, Self::Error> {
let ibc_client = self.modules(deps.as_ref()).module_address(IBC_CLIENT)?;
if info.sender.ne(&ibc_client) {
return Err(AbstractSdkError::CallbackNotCalledByIbcClient {
caller: info.sender,
client_addr: ibc_client,
module: self.info().0.to_string(),
}
.into());
};
let IbcResponseMsg { id, msg: ack } = msg;
let maybe_handler = self.maybe_ibc_callback_handler(&id);
maybe_handler.map_or_else(
|| Ok(Response::new()),
|handler| handler(deps, env, info, self, id, ack),
)
}
}