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 }