core/vm, internal/ethapi: tracer no full storage, nicer json output (#15499)
* core/vm, internal/ethapi: tracer no full storage, nicer json output * core/vm, internal/ethapi: omit disabled trace fields
This commit is contained in:
		| @@ -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,omitempty"` | ||||
| 	Storage *map[string]string `json:"storage,omitempty"` | ||||
| } | ||||
|  | ||||
| // formatLogs formats EVM returned structured logs for json output | ||||
| func FormatLogs(structLogs []vm.StructLog) []StructLogRes { | ||||
| 	formattedStructLogs := make([]StructLogRes, len(structLogs)) | ||||
| 	for index, trace := range structLogs { | ||||
| 		formattedStructLogs[index] = StructLogRes{ | ||||
| func FormatLogs(logs []vm.StructLog) []StructLogRes { | ||||
| 	formatted := make([]StructLogRes, len(logs)) | ||||
| 	for index, trace := range logs { | ||||
| 		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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user