@@ -216,13 +216,17 @@ fn fvm_machine_execute_message(
216216 method,
217217 params,
218218 value,
219+ gas_limit,
220+ read_only,
219221 } ) => {
220222 break build_lotus_trace (
221223 from,
222224 to,
223225 method,
224226 params,
225227 value,
228+ gas_limit,
229+ read_only,
226230 & mut initial_gas_charges. into_iter ( ) . chain ( & mut trace_iter) ,
227231 )
228232 . ok ( )
@@ -378,6 +382,9 @@ pub struct TraceMessage {
378382 #[ serde( with = "strict_bytes" ) ]
379383 pub params : Vec < u8 > ,
380384 pub codec : u64 ,
385+ pub gas_limit : u64 ,
386+ pub read_only : bool ,
387+ pub code_cid : Cid ,
381388}
382389
383390#[ derive( Serialize_tuple , Deserialize_tuple , Debug , PartialEq , Eq , Clone ) ]
@@ -388,12 +395,15 @@ pub struct TraceReturn {
388395 pub codec : u64 ,
389396}
390397
398+ #[ allow( clippy:: too_many_arguments) ]
391399fn build_lotus_trace (
392400 from : u64 ,
393401 to : Address ,
394402 method : u64 ,
395403 params : Option < IpldBlock > ,
396404 value : TokenAmount ,
405+ gas_limit : u64 ,
406+ read_only : bool ,
397407 trace_iter : & mut impl Iterator < Item = ExecutionEvent > ,
398408) -> anyhow:: Result < Trace > {
399409 let params = params. unwrap_or_default ( ) ;
@@ -405,6 +415,9 @@ fn build_lotus_trace(
405415 method_num : method,
406416 params : params. data ,
407417 codec : params. codec ,
418+ gas_limit,
419+ read_only,
420+ code_cid : Cid :: default ( ) ,
408421 } ,
409422 msg_ret : TraceReturn {
410423 exit_code : ExitCode :: OK ,
@@ -423,11 +436,16 @@ fn build_lotus_trace(
423436 method,
424437 params,
425438 value,
439+ gas_limit,
440+ read_only,
426441 } => {
427442 new_trace. subcalls . push ( build_lotus_trace (
428- from, to, method, params, value, trace_iter,
443+ from, to, method, params, value, gas_limit , read_only , trace_iter,
429444 ) ?) ;
430445 }
446+ ExecutionEvent :: InvokeActor ( cid) => {
447+ new_trace. msg . code_cid = cid;
448+ }
431449 ExecutionEvent :: CallReturn ( exit_code, return_data) => {
432450 let return_data = return_data. unwrap_or_default ( ) ;
433451 new_trace. msg_ret = TraceReturn {
@@ -501,6 +519,8 @@ mod test {
501519 params : None ,
502520 to : Address :: new_id ( 0 ) ,
503521 value : TokenAmount :: default ( ) ,
522+ gas_limit : u64:: MAX ,
523+ read_only : false ,
504524 } ;
505525 let return_result =
506526 ExecutionEvent :: CallError ( SyscallError :: new ( IllegalArgument , "illegal" ) ) ;
@@ -524,6 +544,8 @@ mod test {
524544 0 ,
525545 None ,
526546 TokenAmount :: default ( ) ,
547+ u64:: MAX ,
548+ false ,
527549 & mut trace_iter,
528550 )
529551 . unwrap ( ) ;
0 commit comments