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
use crate::applications::transfer::context::Ics20Context;
use crate::applications::transfer::error::Error as Ics20Error;
use crate::applications::transfer::is_sender_chain_source;
use crate::applications::transfer::packet::PacketData;
use crate::core::ics04_channel::packet::Packet;
use crate::prelude::*;
pub mod on_ack_packet;
pub mod on_recv_packet;
pub mod on_timeout_packet;
pub mod send_transfer;
fn refund_packet_token(
ctx: &mut impl Ics20Context,
packet: &Packet,
data: &PacketData,
) -> Result<(), Ics20Error> {
let sender = data
.sender
.clone()
.try_into()
.map_err(|_| Ics20Error::parse_account_failure())?;
if is_sender_chain_source(
packet.source_port.clone(),
packet.source_channel.clone(),
&data.token.denom,
) {
let escrow_address =
ctx.get_channel_escrow_address(&packet.source_port, &packet.source_channel)?;
ctx.send_coins(&escrow_address, &sender, &data.token)
}
else {
ctx.mint_coins(&sender, &data.token)
}
}