@@ -98,16 +98,75 @@ pub fn from_blockifier_execution_info(res: &TransactionExecutionInfo, tx: &Trans
9898 } )
9999 } )
100100 . collect ( ) ;
101- let events = recursive_call_info_iter ( res)
101+
102+ // get all validate_calls
103+ let validate_calls = res. validate_call_info . iter ( ) . flat_map ( |call_info| call_info. iter ( ) ) ;
104+
105+ let validate_events = validate_calls
102106 . flat_map ( |call| {
103- call. execution . events . iter ( ) . map ( |event| Event {
104- // See above for why we use storage address.
105- from_address : call. call . storage_address . into ( ) ,
106- keys : event. event . keys . iter ( ) . map ( |k| k. 0 ) . collect ( ) ,
107- data : event. event . data . 0 . clone ( ) ,
107+ call. execution . events . iter ( ) . map ( |event| {
108+ let ordered_event = Event {
109+ // See above for why we use storage address.
110+ from_address : call. call . storage_address . into ( ) ,
111+ keys : event. event . keys . iter ( ) . map ( |k| k. 0 ) . collect ( ) ,
112+ data : event. event . data . 0 . clone ( ) ,
113+ } ;
114+ ( ordered_event, event. order )
108115 } )
109- } )
110- . collect ( ) ;
116+ } ) . collect :: < Vec < ( Event , usize ) > > ( ) ;
117+
118+ // Sort by order and extract just the Events
119+ let mut validate_events_with_order = validate_events;
120+ validate_events_with_order. sort_by_key ( |( _, order) | * order) ;
121+ let final_validate_events: Vec < Event > = validate_events_with_order. into_iter ( ) . map ( |( event, _) | event) . collect ( ) ;
122+
123+ // get all execute_calls
124+ let execute_calls = res. execute_call_info . iter ( ) . flat_map ( |call_info| call_info. iter ( ) ) ;
125+
126+ let execute_events = execute_calls
127+ . flat_map ( |call| {
128+ call. execution . events . iter ( ) . map ( |event| {
129+ let ordered_event = Event {
130+ // See above for why we use storage address.
131+ from_address : call. call . storage_address . into ( ) ,
132+ keys : event. event . keys . iter ( ) . map ( |k| k. 0 ) . collect ( ) ,
133+ data : event. event . data . 0 . clone ( ) ,
134+ } ;
135+ ( ordered_event, event. order )
136+ } )
137+ } ) . collect :: < Vec < ( Event , usize ) > > ( ) ;
138+
139+ // Sort by order and extract just the Events
140+ let mut execute_events_with_order = execute_events;
141+ execute_events_with_order. sort_by_key ( |( _, order) | * order) ;
142+ let final_execute_events: Vec < Event > = execute_events_with_order. into_iter ( ) . map ( |( event, _) | event) . collect ( ) ;
143+
144+
145+ // get all fee_transfer_calls
146+ let fee_transfer_calls = res. fee_transfer_call_info . iter ( ) . flat_map ( |call_info| call_info. iter ( ) ) ;
147+
148+ let fee_transfer_events = fee_transfer_calls
149+ . flat_map ( |call| {
150+ call. execution . events . iter ( ) . map ( |event| {
151+ let ordered_event = Event {
152+ // See above for why we use storage address.
153+ from_address : call. call . storage_address . into ( ) ,
154+ keys : event. event . keys . iter ( ) . map ( |k| k. 0 ) . collect ( ) ,
155+ data : event. event . data . 0 . clone ( ) ,
156+ } ;
157+ ( ordered_event, event. order )
158+ } )
159+ } ) . collect :: < Vec < ( Event , usize ) > > ( ) ;
160+
161+ // Sort by order and extract just the Events
162+ let mut fee_transfer_events_with_order = fee_transfer_events;
163+ fee_transfer_events_with_order. sort_by_key ( |( _, order) | * order) ;
164+ let final_fee_transfer_events: Vec < Event > = fee_transfer_events_with_order. into_iter ( ) . map ( |( event, _) | event) . collect ( ) ;
165+
166+
167+ let mut events = final_validate_events. clone ( ) ;
168+ events. extend ( final_execute_events) ;
169+ events. extend ( final_fee_transfer_events) ;
111170
112171 // Note: these should not be iterated over recursively because they include the inner calls
113172 // We only add up the root calls here without recursing into the inner calls.
0 commit comments