Skip to content

Commit 808e89b

Browse files
committed
fix unhandled ibc and htcl events
Signed-off-by: onur-ozkan <[email protected]>
1 parent f04b98d commit 808e89b

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

mm2src/coins/tendermint/tendermint_tx_history_v2.rs

+20-9
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ where
459459
}
460460

461461
/// Reads sender and receiver addresses properly from an HTLC event.
462-
fn read_real_htlc_addresses(transfer_details: &mut TransferDetails, msg_event: &&Event) {
462+
fn read_real_htlc_addresses(transfer_details: &mut TransferDetails, msg_event: &Event) {
463463
match msg_event.kind.as_str() {
464464
CREATE_HTLC_EVENT => {
465465
let from = some_or_return!(get_value_from_event_attributes(
@@ -492,10 +492,16 @@ where
492492
}
493493
}
494494

495-
fn parse_transfer_values_from_events(tx_events: Vec<&Event>) -> Vec<TransferDetails> {
495+
fn parse_transfer_values_from_events(mut tx_events: Vec<&Event>) -> Vec<TransferDetails> {
496496
let mut transfer_details_list: Vec<TransferDetails> = vec![];
497497

498-
for event in tx_events.iter() {
498+
for i in 0..tx_events.len() {
499+
if i >= tx_events.len() {
500+
continue;
501+
}
502+
503+
let event = tx_events[i];
504+
499505
let amount_with_denoms = some_or_continue!(get_value_from_event_attributes(
500506
&event.attributes,
501507
AMOUNT_TAG_KEY,
@@ -533,18 +539,20 @@ where
533539

534540
// For HTLC transactions, the sender and receiver addresses in the "transfer" event will be incorrect.
535541
// Use `read_real_htlc_addresses` to handle them properly.
536-
if let Some(htlc_event) = tx_events
542+
if let Some(htlc_event_index) = tx_events
537543
.iter()
538-
.find(|e| [CREATE_HTLC_EVENT, CLAIM_HTLC_EVENT].contains(&e.kind.as_str()))
544+
.position(|e| [CREATE_HTLC_EVENT, CLAIM_HTLC_EVENT].contains(&e.kind.as_str()))
539545
{
540-
read_real_htlc_addresses(&mut tx_details, htlc_event);
546+
read_real_htlc_addresses(&mut tx_details, tx_events[htlc_event_index]);
547+
tx_events.remove(htlc_event_index);
541548
}
542549
// For IBC transactions, the sender and receiver addresses in the "transfer" event will be incorrect.
543550
// Use `read_real_ibc_addresses` to handle them properly.
544-
else if let Some(ibc_event) = tx_events.iter().find(|e| {
551+
else if let Some(ibc_event_index) = tx_events.iter().position(|e| {
545552
[IBC_SEND_EVENT, IBC_RECEIVE_EVENT, IBC_NFT_RECEIVE_EVENT].contains(&e.kind.as_str())
546553
}) {
547-
read_real_ibc_addresses(&mut tx_details, ibc_event);
554+
read_real_ibc_addresses(&mut tx_details, tx_events[ibc_event_index]);
555+
tx_events.remove(ibc_event_index);
548556
}
549557

550558
handle_new_transfer_event(&mut transfer_details_list, tx_details);
@@ -643,7 +651,10 @@ where
643651
}
644652
}
645653

646-
fn get_transfer_details(tx_events: Vec<Event>, fee_amount_with_denom: String) -> Vec<TransferDetails> {
654+
fn get_transfer_details(mut tx_events: Vec<Event>, fee_amount_with_denom: String) -> Vec<TransferDetails> {
655+
tx_events.sort_by_key(|k| k.kind.clone());
656+
tx_events.dedup();
657+
647658
// We are only interested `DELEGATE_EVENT` events for delegation transactions.
648659
if let Some(delegate_event) = tx_events.iter().find(|e| e.kind == DELEGATE_EVENT) {
649660
return parse_transfer_values_from_events(vec![delegate_event]);

mm2src/common/log.rs

-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ macro_rules! covered_warn {
168168
};
169169
}
170170

171-
172171
#[cfg(test)]
173172
#[macro_export]
174173
macro_rules! covered_warn {

0 commit comments

Comments
 (0)