| 
									
										
										
										
											2015-06-10 19:56:40 +02:00
										 |  |  | package vm | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2015-06-12 11:18:17 +02:00
										 |  |  | 	"unicode" | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-10 19:56:40 +02:00
										 |  |  | func StdErrFormat(logs []StructLog) { | 
					
						
							| 
									
										
										
										
											2015-06-12 13:35:14 +02:00
										 |  |  | 	fmt.Fprintf(os.Stderr, "VM STAT %d OPs\n", len(logs)) | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 	for _, log := range logs { | 
					
						
							| 
									
										
										
										
											2015-06-12 13:35:14 +02:00
										 |  |  | 		fmt.Fprintf(os.Stderr, "PC %08d: %s GAS: %v COST: %v", log.Pc, log.Op, log.Gas, log.GasCost) | 
					
						
							|  |  |  | 		if log.Err != nil { | 
					
						
							|  |  |  | 			fmt.Fprintf(os.Stderr, " ERROR: %v", log.Err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fmt.Fprintf(os.Stderr, "\n") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 		fmt.Fprintln(os.Stderr, "STACK =", len(log.Stack)) | 
					
						
							| 
									
										
										
										
											2015-06-10 21:08:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		for i := len(log.Stack) - 1; i >= 0; i-- { | 
					
						
							|  |  |  | 			fmt.Fprintf(os.Stderr, "%04d: %x\n", len(log.Stack)-i-1, common.LeftPadBytes(log.Stack[i].Bytes(), 32)) | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const maxMem = 10 | 
					
						
							|  |  |  | 		addr := 0 | 
					
						
							|  |  |  | 		fmt.Fprintln(os.Stderr, "MEM =", len(log.Memory)) | 
					
						
							|  |  |  | 		for i := 0; i+16 <= len(log.Memory) && addr < maxMem; i += 16 { | 
					
						
							|  |  |  | 			data := log.Memory[i : i+16] | 
					
						
							|  |  |  | 			str := fmt.Sprintf("%04d: % x  ", addr*16, data) | 
					
						
							|  |  |  | 			for _, r := range data { | 
					
						
							|  |  |  | 				if r == 0 { | 
					
						
							|  |  |  | 					str += "." | 
					
						
							| 
									
										
										
										
											2015-06-12 11:18:17 +02:00
										 |  |  | 				} else if unicode.IsPrint(rune(r)) { | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 					str += fmt.Sprintf("%s", string(r)) | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					str += "?" | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			addr++ | 
					
						
							|  |  |  | 			fmt.Fprintln(os.Stderr, str) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-10 12:57:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		fmt.Fprintln(os.Stderr, "STORAGE =", len(log.Storage)) | 
					
						
							|  |  |  | 		for h, item := range log.Storage { | 
					
						
							|  |  |  | 			fmt.Fprintf(os.Stderr, "%x: %x\n", h, common.LeftPadBytes(item, 32)) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-06-10 19:56:40 +02:00
										 |  |  | 		fmt.Fprintln(os.Stderr) | 
					
						
							| 
									
										
										
										
											2015-06-10 12:23:49 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |