code: func WriteTrace(writer io.Writer, logs []StructLog) {
  	for _, log := range logs {
  		fmt.Fprintf(writer, "%-16spc=%08d gas=%v cost=%v", log.Op, log.Pc, log.Gas, log.GasCost)
  		if log.Err != nil {
  			fmt.Fprintf(writer, " ERROR: %v", log.Err)
  		}
  		fmt.Fprintln(writer)
  
  		if len(log.Stack) > 0 {
  			fmt.Fprintln(writer, "Stack:")
  			for i := len(log.Stack) - 1; i >= 0; i-- {
  				fmt.Fprintf(writer, "%08d  %x\n", len(log.Stack)-i-1, math.PaddedBigBytes(log.Stack[i], 32))
  			}
  		}
  		if len(log.Memory) > 0 {
  			fmt.Fprintln(writer, "Memory:")
  			fmt.Fprint(writer, hex.Dump(log.Memory))
  		}
  		if len(log.Storage) > 0 {
  			fmt.Fprintln(writer, "Storage:")
  			for h, item := range log.Storage {
  				fmt.Fprintf(writer, "%x: %x\n", h, item)
  			}
  		}
  		fmt.Fprintln(writer)
  	}
  }
docs: // WriteTrace writes a formatted trace to the given writer