github.com/divan/go-ethereum@v1.8.14-0.20180820134928-1de9ada4016d/eth/tracers/internal/tracers/unigram_tracer.js (about)

     1  // Copyright 2018 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  {
    18      // hist is the map of opcodes to counters
    19      hist: {},
    20      // nops counts number of ops
    21      nops: 0,
    22      // step is invoked for every opcode that the VM executes.
    23      step: function(log, db) {
    24          var op = log.op.toString();
    25          if (this.hist[op]){
    26              this.hist[op]++;
    27          }
    28          else {
    29              this.hist[op] = 1;
    30          }
    31          this.nops++;
    32      },
    33      // fault is invoked when the actual execution of an opcode fails.
    34      fault: function(log, db) {},
    35  
    36      // result is invoked when all the opcodes have been iterated over and returns
    37      // the final result of the tracing.
    38      result: function(ctx) {
    39          if(this.nops > 0){
    40              return this.hist;
    41          }
    42      },
    43  }