@@ -116,7 +116,7 @@ impl CallInfo {
116
116
calls
117
117
}
118
118
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
120
120
/// in which they were emitted.
121
121
pub fn get_sorted_events ( & self ) -> Result < Vec < Event > , TransactionError > {
122
122
let calls = self . gen_call_topology ( ) ;
@@ -127,8 +127,11 @@ impl CallInfo {
127
127
for call in calls {
128
128
for ordered_event in call. events {
129
129
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
+ ) ;
132
135
}
133
136
}
134
137
@@ -140,7 +143,7 @@ impl CallInfo {
140
143
Ok ( starknet_events. into_iter ( ) . flatten ( ) . collect ( ) )
141
144
}
142
145
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
144
147
/// by the order in which they were sent.
145
148
pub fn get_sorted_l2_to_l1_messages ( & self ) -> Result < Vec < L2toL1MessageInfo > , TransactionError > {
146
149
let calls = self . gen_call_topology ( ) ;
@@ -613,6 +616,26 @@ mod tests {
613
616
use super :: * ;
614
617
use crate :: utils:: { string_to_hash, Address } ;
615
618
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
+
616
639
#[ test]
617
640
fn non_optional_calls_test ( ) {
618
641
let mut tx_info = TransactionExecutionInfo {
0 commit comments