@ -710,45 +710,52 @@ type ExecutionResult struct {
// StructLogRes stores a structured log emitted by the EVM while replaying a
// transaction in debug mode
type StructLogRes struct {
Pc uint64 ` json:"pc" `
Op string ` json:"op" `
Gas uint64 ` json:"gas" `
GasCost uint64 ` json:"gasCost" `
Depth int ` json:"depth" `
Error error ` json:"error" `
Stack [ ] string ` json:"stack" `
Memory [ ] string ` json:"memory" `
Storage map [ string ] string ` json:"storage" `
Pc uint64 ` json:"pc" `
Op string ` json:"op" `
Gas uint64 ` json:"gas" `
GasCost uint64 ` json:"gasCost" `
Depth int ` json:"depth" `
Error error ` json:"error,omitempty " `
Stack * [ ] string ` json:"stack,omitempty " `
Memory * [ ] string ` json:"memory,omitempt y" `
Storage * map [ string ] string ` json:"storage,omitempty " `
}
// formatLogs formats EVM returned structured logs for json output
func FormatLogs ( structL ogs [ ] vm . StructLog ) [ ] StructLogRes {
formattedStructLogs := make ( [ ] StructLogRes , len ( structL ogs) )
for index , trace := range structL ogs {
formattedStructLogs [ index ] = StructLogRes {
func FormatLogs ( l ogs [ ] vm . StructLog ) [ ] StructLogRes {
formatted := make ( [ ] StructLogRes , len ( l ogs) )
for index , trace := range l ogs {
formatted [ index ] = StructLogRes {
Pc : trace . Pc ,
Op : trace . Op . String ( ) ,
Gas : trace . Gas ,
GasCost : trace . GasCost ,
Depth : trace . Depth ,
Error : trace . Err ,
Stack : make ( [ ] string , len ( trace . Stack ) ) ,
Storage : make ( map [ string ] string ) ,
}
for i , stackValue := range trace . Stack {
formattedStructLogs [ index ] . Stack [ i ] = fmt . Sprintf ( "%x" , math . PaddedBigBytes ( stackValue , 32 ) )
if trace . Stack != nil {
stack := make ( [ ] string , len ( trace . Stack ) )
for i , stackValue := range trace . Stack {
stack [ i ] = fmt . Sprintf ( "%x" , math . PaddedBigBytes ( stackValue , 32 ) )
}
formatted [ index ] . Stack = & stack
}
for i := 0 ; i + 32 <= len ( trace . Memory ) ; i += 32 {
formattedStructLogs [ index ] . Memory = append ( formattedStructLogs [ index ] . Memory , fmt . Sprintf ( "%x" , trace . Memory [ i : i + 32 ] ) )
if trace . Memory != nil {
memory := make ( [ ] string , 0 , ( len ( trace . Memory ) + 31 ) / 32 )
for i := 0 ; i + 32 <= len ( trace . Memory ) ; i += 32 {
memory = append ( memory , fmt . Sprintf ( "%x" , trace . Memory [ i : i + 32 ] ) )
}
formatted [ index ] . Memory = & memory
}
for i , storageValue := range trace . Storage {
formattedStructLogs [ index ] . Storage [ fmt . Sprintf ( "%x" , i ) ] = fmt . Sprintf ( "%x" , storageValue )
if trace . Storage != nil {
storage := make ( map [ string ] string )
for i , storageValue := range trace . Storage {
storage [ fmt . Sprintf ( "%x" , i ) ] = fmt . Sprintf ( "%x" , storageValue )
}
formatted [ index ] . Storage = & storage
}
}
return formattedStructLogs
return formatted
}
// rpcOutputBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are