Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit fc956ea

Browse files
juanbonoxqft
authored andcommitted
fix get_sorted_events bug (#912)
* fix get_sorted_events bug * fmt * fix clippy --------- Co-authored-by: Estéfano Bargas <estefano.bargas@fing.edu.uy>
1 parent 84e3a9b commit fc956ea

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/execution/mod.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ impl CallInfo {
116116
calls
117117
}
118118

119-
/// Returns a list of StarkNet Event objects collected during the execution, sorted by the order
119+
/// Returns a list of Starknet Event objects collected during the execution, sorted by the order
120120
/// in which they were emitted.
121121
pub fn get_sorted_events(&self) -> Result<Vec<Event>, TransactionError> {
122122
let calls = self.gen_call_topology();
@@ -127,8 +127,11 @@ impl CallInfo {
127127
for call in calls {
128128
for ordered_event in call.events {
129129
let event = Event::new(ordered_event.clone(), call.contract_address.clone());
130-
starknet_events.remove(ordered_event.order as usize - 1);
131-
starknet_events.insert(ordered_event.order as usize - 1, Some(event));
130+
starknet_events.remove((ordered_event.order as isize - 1).max(0) as usize);
131+
starknet_events.insert(
132+
(ordered_event.order as isize - 1).max(0) as usize,
133+
Some(event),
134+
);
132135
}
133136
}
134137

@@ -140,7 +143,7 @@ impl CallInfo {
140143
Ok(starknet_events.into_iter().flatten().collect())
141144
}
142145

143-
/// Returns a list of StarkNet L2ToL1MessageInfo objects collected during the execution, sorted
146+
/// Returns a list of Starknet L2ToL1MessageInfo objects collected during the execution, sorted
144147
/// by the order in which they were sent.
145148
pub fn get_sorted_l2_to_l1_messages(&self) -> Result<Vec<L2toL1MessageInfo>, TransactionError> {
146149
let calls = self.gen_call_topology();
@@ -613,6 +616,26 @@ mod tests {
613616
use super::*;
614617
use crate::utils::{string_to_hash, Address};
615618

619+
#[test]
620+
fn test_get_sorted_single_event() {
621+
let address = Address(Felt252::zero());
622+
let ordered_event = OrderedEvent::new(0, vec![], vec![]);
623+
let event = Event::new(ordered_event.clone(), address.clone());
624+
let internal_calls = vec![CallInfo {
625+
events: vec![ordered_event],
626+
..Default::default()
627+
}];
628+
let call_info = CallInfo {
629+
contract_address: address,
630+
internal_calls,
631+
..Default::default()
632+
};
633+
634+
let sorted_events = call_info.get_sorted_events().unwrap();
635+
636+
assert_eq!(sorted_events, vec![event]);
637+
}
638+
616639
#[test]
617640
fn non_optional_calls_test() {
618641
let mut tx_info = TransactionExecutionInfo {

0 commit comments

Comments
 (0)