ibc_testkit/fixtures/applications/
transfer.rs

1use bon::builder;
2use ibc::apps::transfer::types::msgs::transfer::MsgTransfer;
3use ibc::apps::transfer::types::packet::PacketData;
4use ibc::apps::transfer::types::{Memo, PrefixedCoin};
5use ibc::core::channel::types::packet::Packet;
6use ibc::core::channel::types::timeout::{TimeoutHeight, TimeoutTimestamp};
7use ibc::core::host::types::identifiers::{ChannelId, PortId, Sequence};
8use ibc::core::primitives::Signer;
9
10use crate::fixtures::core::signer::dummy_account_id;
11
12/// Returns a dummy [`MsgTransfer`], for testing purposes only!
13#[builder]
14pub fn dummy_msg_transfer(
15    #[builder(start_fn)] packet_data: PacketData,
16    #[builder(default = PortId::transfer())] port_id_on_a: PortId,
17    #[builder(default = ChannelId::zero())] chan_id_on_a: ChannelId,
18    #[builder(default = TimeoutHeight::Never)] timeout_height_on_b: TimeoutHeight,
19    #[builder(default = TimeoutTimestamp::Never)] timeout_timestamp_on_b: TimeoutTimestamp,
20) -> MsgTransfer {
21    MsgTransfer {
22        port_id_on_a,
23        chan_id_on_a,
24        packet_data,
25        timeout_height_on_b,
26        timeout_timestamp_on_b,
27    }
28}
29
30pub fn extract_transfer_packet(msg: &MsgTransfer, sequence: Sequence) -> Packet {
31    let data = serde_json::to_vec(&msg.packet_data)
32        .expect("PacketData's infallible Serialize impl failed");
33
34    Packet {
35        seq_on_a: sequence,
36        port_id_on_a: msg.port_id_on_a.clone(),
37        chan_id_on_a: msg.chan_id_on_a.clone(),
38        port_id_on_b: PortId::transfer(),
39        chan_id_on_b: ChannelId::zero(),
40        data,
41        timeout_height_on_b: msg.timeout_height_on_b,
42        timeout_timestamp_on_b: msg.timeout_timestamp_on_b,
43    }
44}
45
46/// Returns a dummy [`PacketData`], for testing purposes only!
47#[builder]
48pub fn dummy_packet_data(
49    #[builder(start_fn)] token: PrefixedCoin,
50    #[builder(default = dummy_account_id())] sender: Signer,
51    #[builder(default = dummy_account_id())] receiver: Signer,
52    #[builder(default = "".into())] memo: Memo,
53) -> PacketData {
54    PacketData {
55        token,
56        sender,
57        receiver,
58        memo,
59    }
60}