mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-14 07:53:47 +00:00
move makeTest to own file
This commit is contained in:
parent
8a1f67c7c8
commit
5bc3f62647
3 changed files with 58 additions and 53 deletions
10
eth/tracers/internal/tracetest/README.md
Normal file
10
eth/tracers/internal/tracetest/README.md
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Filling test cases
|
||||||
|
|
||||||
|
To fill test cases for the built-in tracers, the `makeTest.js` script can be used. Given a transaction on a dev/test network, `makeTest.js` will fetch its prestate and then traces with the given configuration.
|
||||||
|
In the Geth console do:
|
||||||
|
|
||||||
|
```terminal
|
||||||
|
let tx = '0x...'
|
||||||
|
loadScript('makeTest.js')
|
||||||
|
makeTest(tx, { tracer: 'callTracer' })
|
||||||
|
```
|
||||||
48
eth/tracers/internal/tracetest/makeTest.js
Normal file
48
eth/tracers/internal/tracetest/makeTest.js
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
// makeTest generates a test for the configured tracer by running
|
||||||
|
// a prestate reassembled and a call trace run, assembling all the
|
||||||
|
// gathered information into a test case.
|
||||||
|
var makeTest = function(tx, traceConfig) {
|
||||||
|
// Generate the genesis block from the block, transaction and prestate data
|
||||||
|
var block = eth.getBlock(eth.getTransaction(tx).blockHash);
|
||||||
|
var genesis = eth.getBlock(block.parentHash);
|
||||||
|
|
||||||
|
delete genesis.gasUsed;
|
||||||
|
delete genesis.logsBloom;
|
||||||
|
delete genesis.parentHash;
|
||||||
|
delete genesis.receiptsRoot;
|
||||||
|
delete genesis.sha3Uncles;
|
||||||
|
delete genesis.size;
|
||||||
|
delete genesis.transactions;
|
||||||
|
delete genesis.transactionsRoot;
|
||||||
|
delete genesis.uncles;
|
||||||
|
|
||||||
|
genesis.gasLimit = genesis.gasLimit.toString();
|
||||||
|
genesis.number = genesis.number.toString();
|
||||||
|
genesis.timestamp = genesis.timestamp.toString();
|
||||||
|
|
||||||
|
genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer"});
|
||||||
|
for (var key in genesis.alloc) {
|
||||||
|
var nonce = genesis.alloc[key].nonce;
|
||||||
|
if (nonce) {
|
||||||
|
genesis.alloc[key].nonce = nonce.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
genesis.config = admin.nodeInfo.protocols.eth.config;
|
||||||
|
|
||||||
|
// Generate the call trace and produce the test input
|
||||||
|
var result = debug.traceTransaction(tx, traceConfig);
|
||||||
|
delete result.time;
|
||||||
|
|
||||||
|
console.log(JSON.stringify({
|
||||||
|
genesis: genesis,
|
||||||
|
context: {
|
||||||
|
number: block.number.toString(),
|
||||||
|
difficulty: block.difficulty,
|
||||||
|
timestamp: block.timestamp.toString(),
|
||||||
|
gasLimit: block.gasLimit.toString(),
|
||||||
|
miner: block.miner,
|
||||||
|
},
|
||||||
|
input: eth.getRawTransaction(tx),
|
||||||
|
result: result,
|
||||||
|
}, null, 2));
|
||||||
|
}
|
||||||
|
|
@ -9,59 +9,6 @@ import (
|
||||||
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
|
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
|
||||||
)
|
)
|
||||||
|
|
||||||
// To generate a new callTracer test, copy paste the makeTest method below into
|
|
||||||
// a Geth console and call it with a transaction hash you which to export.
|
|
||||||
|
|
||||||
/*
|
|
||||||
// makeTest generates a callTracer test by running a prestate reassembled and a
|
|
||||||
// call trace run, assembling all the gathered information into a test case.
|
|
||||||
var makeTest = function(tx, rewind) {
|
|
||||||
// Generate the genesis block from the block, transaction and prestate data
|
|
||||||
var block = eth.getBlock(eth.getTransaction(tx).blockHash);
|
|
||||||
var genesis = eth.getBlock(block.parentHash);
|
|
||||||
|
|
||||||
delete genesis.gasUsed;
|
|
||||||
delete genesis.logsBloom;
|
|
||||||
delete genesis.parentHash;
|
|
||||||
delete genesis.receiptsRoot;
|
|
||||||
delete genesis.sha3Uncles;
|
|
||||||
delete genesis.size;
|
|
||||||
delete genesis.transactions;
|
|
||||||
delete genesis.transactionsRoot;
|
|
||||||
delete genesis.uncles;
|
|
||||||
|
|
||||||
genesis.gasLimit = genesis.gasLimit.toString();
|
|
||||||
genesis.number = genesis.number.toString();
|
|
||||||
genesis.timestamp = genesis.timestamp.toString();
|
|
||||||
|
|
||||||
genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer", rewind: rewind});
|
|
||||||
for (var key in genesis.alloc) {
|
|
||||||
var nonce = genesis.alloc[key].nonce;
|
|
||||||
if (nonce) {
|
|
||||||
genesis.alloc[key].nonce = nonce.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
genesis.config = admin.nodeInfo.protocols.eth.config;
|
|
||||||
|
|
||||||
// Generate the call trace and produce the test input
|
|
||||||
var result = debug.traceTransaction(tx, {tracer: "callTracer", rewind: rewind});
|
|
||||||
delete result.time;
|
|
||||||
|
|
||||||
console.log(JSON.stringify({
|
|
||||||
genesis: genesis,
|
|
||||||
context: {
|
|
||||||
number: block.number.toString(),
|
|
||||||
difficulty: block.difficulty,
|
|
||||||
timestamp: block.timestamp.toString(),
|
|
||||||
gasLimit: block.gasLimit.toString(),
|
|
||||||
miner: block.miner,
|
|
||||||
},
|
|
||||||
input: eth.getRawTransaction(tx),
|
|
||||||
result: result,
|
|
||||||
}, null, 2));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// camel converts a snake cased input string into a camel cased output.
|
// camel converts a snake cased input string into a camel cased output.
|
||||||
func camel(str string) string {
|
func camel(str string) string {
|
||||||
pieces := strings.Split(str, "_")
|
pieces := strings.Split(str, "_")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue