github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/state/runtime/instrumentation/js/internal/tracers/trigram_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 trigram counters
    19      hist: {},
    20      // lastOp is last operation
    21      lastOps: ['',''],
    22      lastDepth: 0,
    23          // step is invoked for every opcode that the VM executes.
    24      step: function(log, db) {
    25          var depth = log.getDepth();
    26          if (depth != this.lastDepth){
    27              this.lastOps = ['',''];
    28              this.lastDepth = depth;
    29              return;
    30          }
    31          var op = log.op.toString();
    32          var key = this.lastOps[0]+'-'+this.lastOps[1]+'-'+op;
    33          if (this.hist[key]){
    34              this.hist[key]++;
    35          }
    36          else {
    37              this.hist[key] = 1;
    38          }
    39          this.lastOps[0] = this.lastOps[1];
    40          this.lastOps[1] = op;
    41      },
    42      // fault is invoked when the actual execution of an opcode fails.
    43      fault: function(log, db) {},
    44      // result is invoked when all the opcodes have been iterated over and returns
    45      // the final result of the tracing.
    46      result: function(ctx) {
    47          return this.hist;
    48      },
    49  }