Skip to content

Commit 855cdbd

Browse files
committed
handle external ibc acc
1 parent 78e9f62 commit 855cdbd

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

shared/src/utils.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -341,29 +341,27 @@ fn convert_account(
341341
serde_json::from_str::<PfmMemo>(packet_data.memo.as_ref()).is_ok()
342342
};
343343

344-
let receiver = if is_pfm {
345-
if is_sender {
346-
ChainAddress::IbcPfmAccount(packet_data.sender.to_string(), token)
347-
} else {
348-
ChainAddress::IbcPfmAccount(packet_data.receiver.to_string(), token)
349-
}
350-
} else if is_sender {
351-
ChainAddress::ChainAccount(namada_sdk::token::Account {
352-
owner: packet_data.sender.clone().try_into().map_err(|_| {
353-
"Ibc receiver address is notv valid".to_string()
354-
})?,
355-
token,
356-
})
344+
let address = if is_sender {
345+
&packet_data.sender
346+
} else {
347+
&packet_data.receiver
348+
};
349+
350+
Ok(if is_pfm {
351+
ChainAddress::IbcPfmAccount(address.to_string(), token)
352+
} else if !address.as_ref().starts_with("tnam1") {
353+
ChainAddress::ExternalAccount(address.to_string(), token)
357354
} else {
358355
ChainAddress::ChainAccount(namada_sdk::token::Account {
359-
owner: packet_data.receiver.clone().try_into().map_err(|_| {
360-
"Ibc receiver address is notv valid".to_string()
356+
owner: Address::decode(address).map_err(|err| {
357+
format!(
358+
"Ibc {} address is not valid: {err}",
359+
if is_sender { "sender" } else { "receiver" }
360+
)
361361
})?,
362362
token,
363363
})
364-
};
365-
366-
Ok(receiver)
364+
})
367365
}
368366

369367
fn get_namada_ibc_trace_when_receiving(

0 commit comments

Comments
 (0)