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