github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/state/runtime/instrumentation/js/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          return this.hist;
    40      },
    41  }