pub struct IbcDestinationCallbackMsg {
pub packet: IbcPacket,
pub ack: IbcAcknowledgement,
}
Expand description
The message type of the IBC destination callback.
The IBC destination callback is needed for cases where someone triggers the sending of an
IBC packet through some other message (i.e. not through crate::IbcMsg::SendPacket
) and
your contract needs to know that it received this.
A prominent example is the crate::IbcMsg::Transfer
message. Without callbacks, you cannot know
that someone sent you IBC coins.
It is important to validate that the packet and acknowledgement are what you expect them to be. For example for a transfer message, the receiver is not necessarily the contract itself.
The callback is called when the packet is being acknowledged on the destination chain. This happens for both synchronous and asynchronous acknowledgements.
Note that there are some prerequisites that need to be fulfilled to receive destination callbacks:
- The contract must implement the
ibc_destination_callback
entrypoint. - The IBC application in the destination chain must have support for the callbacks middleware.
- You have to add serialized
IbcCallbackRequest
to a specific field of the message. ForIbcMsg::Transfer
, this is thememo
field and it needs to be json-encoded.
Fields§
§packet: IbcPacket
§ack: IbcAcknowledgement
Trait Implementations§
Source§impl Clone for IbcDestinationCallbackMsg
impl Clone for IbcDestinationCallbackMsg
Source§fn clone(&self) -> IbcDestinationCallbackMsg
fn clone(&self) -> IbcDestinationCallbackMsg
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for IbcDestinationCallbackMsg
impl Debug for IbcDestinationCallbackMsg
Source§impl<'de> Deserialize<'de> for IbcDestinationCallbackMsg
impl<'de> Deserialize<'de> for IbcDestinationCallbackMsg
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for IbcDestinationCallbackMsg
impl JsonSchema for IbcDestinationCallbackMsg
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref
keyword. Read moreimpl Eq for IbcDestinationCallbackMsg
impl StructuralPartialEq for IbcDestinationCallbackMsg
Auto Trait Implementations§
impl Freeze for IbcDestinationCallbackMsg
impl RefUnwindSafe for IbcDestinationCallbackMsg
impl Send for IbcDestinationCallbackMsg
impl Sync for IbcDestinationCallbackMsg
impl Unpin for IbcDestinationCallbackMsg
impl UnwindSafe for IbcDestinationCallbackMsg
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more