github.com/tirogen/go-ethereum@v1.10.12-0.20221226051715-250cfede41b6/eth/tracers/internal/tracetest/util.go (about)

     1  package tracetest
     2  
     3  import (
     4  	"strings"
     5  	"unicode"
     6  
     7  	// Force-load native and js packages, to trigger registration
     8  	_ "github.com/tirogen/go-ethereum/eth/tracers/js"
     9  	_ "github.com/tirogen/go-ethereum/eth/tracers/native"
    10  )
    11  
    12  // To generate a new callTracer test, copy paste the makeTest method below into
    13  // a Geth console and call it with a transaction hash you which to export.
    14  
    15  /*
    16  // makeTest generates a callTracer test by running a prestate reassembled and a
    17  // call trace run, assembling all the gathered information into a test case.
    18  var makeTest = function(tx, rewind) {
    19    // Generate the genesis block from the block, transaction and prestate data
    20    var block   = eth.getBlock(eth.getTransaction(tx).blockHash);
    21    var genesis = eth.getBlock(block.parentHash);
    22  
    23    delete genesis.gasUsed;
    24    delete genesis.logsBloom;
    25    delete genesis.parentHash;
    26    delete genesis.receiptsRoot;
    27    delete genesis.sha3Uncles;
    28    delete genesis.size;
    29    delete genesis.transactions;
    30    delete genesis.transactionsRoot;
    31    delete genesis.uncles;
    32  
    33    genesis.gasLimit  = genesis.gasLimit.toString();
    34    genesis.number    = genesis.number.toString();
    35    genesis.timestamp = genesis.timestamp.toString();
    36  
    37    genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer", rewind: rewind});
    38    for (var key in genesis.alloc) {
    39      var nonce = genesis.alloc[key].nonce;
    40      if (nonce) {
    41        genesis.alloc[key].nonce = nonce.toString();
    42      }
    43    }
    44    genesis.config = admin.nodeInfo.protocols.eth.config;
    45  
    46    // Generate the call trace and produce the test input
    47    var result = debug.traceTransaction(tx, {tracer: "callTracer", rewind: rewind});
    48    delete result.time;
    49  
    50    console.log(JSON.stringify({
    51      genesis: genesis,
    52      context: {
    53        number:     block.number.toString(),
    54        difficulty: block.difficulty,
    55        timestamp:  block.timestamp.toString(),
    56        gasLimit:   block.gasLimit.toString(),
    57        miner:      block.miner,
    58      },
    59      input:  eth.getRawTransaction(tx),
    60      result: result,
    61    }, null, 2));
    62  }
    63  */
    64  
    65  // camel converts a snake cased input string into a camel cased output.
    66  func camel(str string) string {
    67  	pieces := strings.Split(str, "_")
    68  	for i := 1; i < len(pieces); i++ {
    69  		pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:]
    70  	}
    71  	return strings.Join(pieces, "")
    72  }