forked from cerc-io/plugeth
eth/tracers: add native flatCallTracer (aka parity style tracer) (#26377)
Adds support for a native call tracer with the Parity format, which outputs call frames in a flat array. This tracer accepts the following options: - `convertParityErrors: true` will convert error messages to match those of Parity - `includePrecompiles: true` will report all calls to precompiles. The default matches Parity's behavior where CALL and STATICCALLs to precompiles are excluded Incompatibilities with Parity include: - Parity removes the result object in case of failure. This behavior is maintained with the exception of reverts. Revert output usually contains useful information, i.e. Solidity revert reason. - The `gasUsed` field accounts for intrinsic gas (e.g. 21000 for simple transfers) and refunds unlike Parity - Block rewards are not reported Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
This commit is contained in:
parent
c155c8e179
commit
2ad150d986
@ -295,9 +295,10 @@ func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed
|
||||
for i, tx := range task.block.Transactions() {
|
||||
msg, _ := tx.AsMessage(signer, task.block.BaseFee())
|
||||
txctx := &Context{
|
||||
BlockHash: task.block.Hash(),
|
||||
TxIndex: i,
|
||||
TxHash: tx.Hash(),
|
||||
BlockHash: task.block.Hash(),
|
||||
BlockNumber: task.block.Number(),
|
||||
TxIndex: i,
|
||||
TxHash: tx.Hash(),
|
||||
}
|
||||
res, err := api.traceTx(ctx, msg, txctx, blockCtx, task.statedb, config)
|
||||
if err != nil {
|
||||
@ -629,9 +630,10 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac
|
||||
// Generate the next state snapshot fast without tracing
|
||||
msg, _ := tx.AsMessage(signer, block.BaseFee())
|
||||
txctx := &Context{
|
||||
BlockHash: blockHash,
|
||||
TxIndex: i,
|
||||
TxHash: tx.Hash(),
|
||||
BlockHash: blockHash,
|
||||
BlockNumber: block.Number(),
|
||||
TxIndex: i,
|
||||
TxHash: tx.Hash(),
|
||||
}
|
||||
res, err := api.traceTx(ctx, msg, txctx, blockCtx, statedb, config)
|
||||
if err != nil {
|
||||
@ -671,9 +673,10 @@ func (api *API) traceBlockParallel(ctx context.Context, block *types.Block, stat
|
||||
for task := range jobs {
|
||||
msg, _ := txs[task.index].AsMessage(signer, block.BaseFee())
|
||||
txctx := &Context{
|
||||
BlockHash: blockHash,
|
||||
TxIndex: task.index,
|
||||
TxHash: txs[task.index].Hash(),
|
||||
BlockHash: blockHash,
|
||||
BlockNumber: block.Number(),
|
||||
TxIndex: task.index,
|
||||
TxHash: txs[task.index].Hash(),
|
||||
}
|
||||
res, err := api.traceTx(ctx, msg, txctx, blockCtx, task.statedb, config)
|
||||
if err != nil {
|
||||
@ -874,9 +877,10 @@ func (api *API) TraceTransaction(ctx context.Context, hash common.Hash, config *
|
||||
defer release()
|
||||
|
||||
txctx := &Context{
|
||||
BlockHash: blockHash,
|
||||
TxIndex: int(index),
|
||||
TxHash: hash,
|
||||
BlockHash: blockHash,
|
||||
BlockNumber: block.Number(),
|
||||
TxIndex: int(index),
|
||||
TxHash: hash,
|
||||
}
|
||||
return api.traceTx(ctx, msg, txctx, vmctx, statedb, config)
|
||||
}
|
||||
|
213
eth/tracers/internal/tracetest/flat_calltrace_test.go
Normal file
213
eth/tracers/internal/tracetest/flat_calltrace_test.go
Normal file
@ -0,0 +1,213 @@
|
||||
package tracetest
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
"github.com/ethereum/go-ethereum/core/rawdb"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/core/vm"
|
||||
"github.com/ethereum/go-ethereum/rlp"
|
||||
"github.com/ethereum/go-ethereum/tests"
|
||||
|
||||
// Force-load the native, to trigger registration
|
||||
"github.com/ethereum/go-ethereum/eth/tracers"
|
||||
)
|
||||
|
||||
// flatCallTrace is the result of a callTracerParity run.
|
||||
type flatCallTrace struct {
|
||||
Action flatCallTraceAction `json:"action"`
|
||||
BlockHash common.Hash `json:"-"`
|
||||
BlockNumber uint64 `json:"-"`
|
||||
Error string `json:"error,omitempty"`
|
||||
Result flatCallTraceResult `json:"result,omitempty"`
|
||||
Subtraces int `json:"subtraces"`
|
||||
TraceAddress []int `json:"traceAddress"`
|
||||
TransactionHash common.Hash `json:"-"`
|
||||
TransactionPosition uint64 `json:"-"`
|
||||
Type string `json:"type"`
|
||||
Time string `json:"-"`
|
||||
}
|
||||
|
||||
type flatCallTraceAction struct {
|
||||
Author common.Address `json:"author,omitempty"`
|
||||
RewardType string `json:"rewardType,omitempty"`
|
||||
SelfDestructed common.Address `json:"address,omitempty"`
|
||||
Balance hexutil.Big `json:"balance,omitempty"`
|
||||
CallType string `json:"callType,omitempty"`
|
||||
CreationMethod string `json:"creationMethod,omitempty"`
|
||||
From common.Address `json:"from,omitempty"`
|
||||
Gas hexutil.Uint64 `json:"gas,omitempty"`
|
||||
Init hexutil.Bytes `json:"init,omitempty"`
|
||||
Input hexutil.Bytes `json:"input,omitempty"`
|
||||
RefundAddress common.Address `json:"refundAddress,omitempty"`
|
||||
To common.Address `json:"to,omitempty"`
|
||||
Value hexutil.Big `json:"value,omitempty"`
|
||||
}
|
||||
|
||||
type flatCallTraceResult struct {
|
||||
Address common.Address `json:"address,omitempty"`
|
||||
Code hexutil.Bytes `json:"code,omitempty"`
|
||||
GasUsed hexutil.Uint64 `json:"gasUsed,omitempty"`
|
||||
Output hexutil.Bytes `json:"output,omitempty"`
|
||||
}
|
||||
|
||||
// flatCallTracerTest defines a single test to check the call tracer against.
|
||||
type flatCallTracerTest struct {
|
||||
Genesis core.Genesis `json:"genesis"`
|
||||
Context callContext `json:"context"`
|
||||
Input string `json:"input"`
|
||||
TracerConfig json.RawMessage `json:"tracerConfig"`
|
||||
Result []flatCallTrace `json:"result"`
|
||||
}
|
||||
|
||||
func flatCallTracerTestRunner(tracerName string, filename string, dirPath string, t testing.TB) error {
|
||||
// Call tracer test found, read if from disk
|
||||
blob, err := os.ReadFile(filepath.Join("testdata", dirPath, filename))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read testcase: %v", err)
|
||||
}
|
||||
test := new(flatCallTracerTest)
|
||||
if err := json.Unmarshal(blob, test); err != nil {
|
||||
return fmt.Errorf("failed to parse testcase: %v", err)
|
||||
}
|
||||
// Configure a blockchain with the given prestate
|
||||
tx := new(types.Transaction)
|
||||
if err := rlp.DecodeBytes(common.FromHex(test.Input), tx); err != nil {
|
||||
return fmt.Errorf("failed to parse testcase input: %v", err)
|
||||
}
|
||||
signer := types.MakeSigner(test.Genesis.Config, new(big.Int).SetUint64(uint64(test.Context.Number)))
|
||||
origin, _ := signer.Sender(tx)
|
||||
txContext := vm.TxContext{
|
||||
Origin: origin,
|
||||
GasPrice: tx.GasPrice(),
|
||||
}
|
||||
context := vm.BlockContext{
|
||||
CanTransfer: core.CanTransfer,
|
||||
Transfer: core.Transfer,
|
||||
Coinbase: test.Context.Miner,
|
||||
BlockNumber: new(big.Int).SetUint64(uint64(test.Context.Number)),
|
||||
Time: uint64(test.Context.Time),
|
||||
Difficulty: (*big.Int)(test.Context.Difficulty),
|
||||
GasLimit: uint64(test.Context.GasLimit),
|
||||
}
|
||||
_, statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc, false)
|
||||
|
||||
// Create the tracer, the EVM environment and run it
|
||||
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create call tracer: %v", err)
|
||||
}
|
||||
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer})
|
||||
|
||||
msg, err := tx.AsMessage(signer, nil)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to prepare transaction for tracing: %v", err)
|
||||
}
|
||||
st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas()))
|
||||
|
||||
if _, err = st.TransitionDb(); err != nil {
|
||||
return fmt.Errorf("failed to execute transaction: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve the trace result and compare against the etalon
|
||||
res, err := tracer.GetResult()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to retrieve trace result: %v", err)
|
||||
}
|
||||
ret := new([]flatCallTrace)
|
||||
if err := json.Unmarshal(res, ret); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal trace result: %v", err)
|
||||
}
|
||||
if !jsonEqualFlat(ret, test.Result) {
|
||||
t.Logf("tracer name: %s", tracerName)
|
||||
|
||||
// uncomment this for easier debugging
|
||||
// have, _ := json.MarshalIndent(ret, "", " ")
|
||||
// want, _ := json.MarshalIndent(test.Result, "", " ")
|
||||
// t.Logf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want))
|
||||
|
||||
// uncomment this for harder debugging <3 meowsbits
|
||||
// lines := deep.Equal(ret, test.Result)
|
||||
// for _, l := range lines {
|
||||
// t.Logf("%s", l)
|
||||
// t.FailNow()
|
||||
// }
|
||||
|
||||
t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Iterates over all the input-output datasets in the tracer parity test harness and
|
||||
// runs the Native tracer against them.
|
||||
func TestFlatCallTracerNative(t *testing.T) {
|
||||
testFlatCallTracer("flatCallTracer", "call_tracer_flat", t)
|
||||
}
|
||||
|
||||
func testFlatCallTracer(tracerName string, dirPath string, t *testing.T) {
|
||||
files, err := os.ReadDir(filepath.Join("testdata", dirPath))
|
||||
if err != nil {
|
||||
t.Fatalf("failed to retrieve tracer test suite: %v", err)
|
||||
}
|
||||
for _, file := range files {
|
||||
if !strings.HasSuffix(file.Name(), ".json") {
|
||||
continue
|
||||
}
|
||||
file := file // capture range variable
|
||||
t.Run(camel(strings.TrimSuffix(file.Name(), ".json")), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
err := flatCallTracerTestRunner(tracerName, file.Name(), dirPath, t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// jsonEqual is similar to reflect.DeepEqual, but does a 'bounce' via json prior to
|
||||
// comparison
|
||||
func jsonEqualFlat(x, y interface{}) bool {
|
||||
xTrace := new([]flatCallTrace)
|
||||
yTrace := new([]flatCallTrace)
|
||||
if xj, err := json.Marshal(x); err == nil {
|
||||
json.Unmarshal(xj, xTrace)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
if yj, err := json.Marshal(y); err == nil {
|
||||
json.Unmarshal(yj, yTrace)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
return reflect.DeepEqual(xTrace, yTrace)
|
||||
}
|
||||
|
||||
func BenchmarkFlatCallTracer(b *testing.B) {
|
||||
files, err := filepath.Glob("testdata/call_tracer_flat/*.json")
|
||||
if err != nil {
|
||||
b.Fatalf("failed to read testdata: %v", err)
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
filename := strings.TrimPrefix(file, "testdata/call_tracer_flat/")
|
||||
b.Run(camel(strings.TrimSuffix(filename, ".json")), func(b *testing.B) {
|
||||
for n := 0; n < b.N; n++ {
|
||||
err := flatCallTracerTestRunner("flatCallTracer", filename, "call_tracer_flat", b)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
64
eth/tracers/internal/tracetest/testdata/call_tracer_flat/big_slow.json
vendored
Normal file
64
eth/tracers/internal/tracetest/testdata/call_tracer_flat/big_slow.json
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "50486697699375",
|
||||
"extraData": "0xd783010406844765746887676f312e362e32856c696e7578",
|
||||
"gasLimit": "4788482",
|
||||
"hash": "0xf6bbc5bbe34d5c93fd5b4712cd498d1026b8b0f586efefe7fe30231ed6b8a1a5",
|
||||
"miner": "0xbcdfc35b86bedf72f0cda046a3c16829a2ef41d1",
|
||||
"mixHash": "0xabca93555584c0463ee5c212251dd002bb3a93a157e06614276f93de53d4fdb8",
|
||||
"nonce": "0xa64136fcb9c2d4ca",
|
||||
"number": "1719576",
|
||||
"stateRoot": "0xab5eec2177a92d633e282936af66c46e24cfa8f2fdc2b8155f33885f483d06f3",
|
||||
"timestamp": "1466150166",
|
||||
"totalDifficulty": "28295412423546970038",
|
||||
"alloc": {
|
||||
"0xf8bda96b67036ee48107f2a0695ea673479dda56": {
|
||||
"balance": "0x1529e844f9ecdeec",
|
||||
"nonce": "33",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 1,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 3000000,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 1150000,
|
||||
"byzantiumBlock": 8772000,
|
||||
"constantinopleBlock": 9573000,
|
||||
"petersburgBlock": 10500839,
|
||||
"istanbulBlock": 10500839
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1719577",
|
||||
"difficulty": "50486697732143",
|
||||
"timestamp": "1466150178",
|
||||
"gasLimit": "4788484",
|
||||
"miner": "0x2a65aca4d5fc5b5c859090a6c34d164135398226"
|
||||
},
|
||||
"input": "0xf874218504a817c800832318608080a35b620186a05a131560135760016020526000565b600080601f600039601f565b6000f31ba0575fa000a1f06659a7b6d3c7877601519a4997f04293f0dfa0eee6d8cd840c77a04c52ce50719ee2ff7a0c5753f4ee69c0340666f582dbb5148845a354ca726e4a",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"from": "0xf8bda96b67036ee48107f2a0695ea673479dda56",
|
||||
"gas": "0x22410c",
|
||||
"init": "0x5b620186a05a131560135760016020526000565b600080601f600039601f565b6000f3",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockNumber": 1719577,
|
||||
"result": {
|
||||
"address": "0xb2e6a2546c45889427757171ab05b8b438525b42",
|
||||
"code": "0x",
|
||||
"gasUsed": "0x219202"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [],
|
||||
"type": "create"
|
||||
}
|
||||
]
|
||||
}
|
74
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_fail_hide.json
vendored
Normal file
74
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_fail_hide.json
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4671584",
|
||||
"extraData": "0xd683010b05846765746886676f312e3133856c696e7578",
|
||||
"gasLimit": "9435026",
|
||||
"hash": "0x755bd54de4b2f5a7a589a10d69888b4ead48a6311d5d69f2f69ca85ec35fbe0b",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"mixHash": "0x3a44525624571c31344ba57780f7664098fe7cbeafe532bcdee76a23fc474ba0",
|
||||
"nonce": "0x6dca647c00c72bbf",
|
||||
"number": "1555278",
|
||||
"stateRoot": "0x5f56d8323ee384b0c8d1de49d63e150e17283eea813483698362bc0ec9e0242a",
|
||||
"timestamp": "1590795319",
|
||||
"totalDifficulty": "2242614315030",
|
||||
"alloc": {
|
||||
"0x0000000000000000000000000000000000000004": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x62436e941792f02a5fb1",
|
||||
"nonce": "265356",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555279",
|
||||
"difficulty": "4669303",
|
||||
"timestamp": "1590795340",
|
||||
"gasLimit": "9444238",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf86f83040c8c843b9aca0083019f7880809b60206000600060006013600462030d40f26002556000516000550081a2a086ad228c89ad9664287b12a5602a635a803506904f4ce39795990ac4f945cd57a025b30ea8042d773f6c5b13d7cc1b3979f9f10ee674410b6a2112ce840d0302dc",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x60206000600060006013600462030d40f260025560005160005500"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0xf3bc",
|
||||
"code": "0x",
|
||||
"address": "0x5f8a7e007172ba80afbff1b15f800eb0b260f224"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 74,
|
||||
"transactionHash": "0x5ef60b27ac971c22a7d484e546e50093ca62300c8986d165154e47773764b6a4",
|
||||
"blockNumber": 1555279,
|
||||
"blockHash": "0xd6c98d1b87dfa92a210d99bad2873adaf0c9e51fe43addc63fd9cca03a5c6f46",
|
||||
"time": "209.346µs"
|
||||
}
|
||||
]
|
||||
}
|
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_oog.json
vendored
Normal file
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_oog.json
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4671584",
|
||||
"extraData": "0xd883010b05846765746888676f312e31342e33856c696e7578",
|
||||
"gasLimit": "9425823",
|
||||
"hash": "0x27dd7d052dbc8a29cc5b9487e1e41d842e7a643fcaea4964caa22b834964acaf",
|
||||
"miner": "0x73f26d124436b0791169d63a3af29c2ae47765a3",
|
||||
"mixHash": "0xb4a050624f5d147fdf02857cbfd55da3ddc1451743acc5c163861584589c3034",
|
||||
"nonce": "0x3c255875b17e0573",
|
||||
"number": "1555277",
|
||||
"stateRoot": "0x6290d79215a2eebc25d5e456b35876c6d78ffc1ea47bdd70e375ebb3cf325620",
|
||||
"timestamp": "1590795308",
|
||||
"totalDifficulty": "2242609643446",
|
||||
"alloc": {
|
||||
"0x0000000000000000000000000000000000000001": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x624329308610ab365fb1",
|
||||
"nonce": "265194",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555278",
|
||||
"difficulty": "4671584",
|
||||
"timestamp": "1590795319",
|
||||
"gasLimit": "9435026",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf8ee83040bea843b9aca008301a7588080b8997f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549606052602060806080600060006001610bb7f260025560a060020a6080510660005560005432146001550081a1a05b9a162d84bfe84faa7c176e21c26c0083645d4dd0d566547b7be2c2da0b4259a05b37ff12a4c27634cb0da6008d9b69726d415ff4694f9bc38c7806eb1fb60ae9",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549606052602060806080600060006001610bb7f260025560a060020a60805106600055600054321460015500"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0xf3e9",
|
||||
"code": "0x",
|
||||
"address": "0x568c19ecb14b87e4aec29b4d2d700a3ad3fd0613"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 141,
|
||||
"transactionHash": "0x1592cbda0d928b8d18eed98857942b91ade32d088e55b8bf63418917cb0231f1",
|
||||
"blockNumber": 1555278,
|
||||
"blockHash": "0x755bd54de4b2f5a7a589a10d69888b4ead48a6311d5d69f2f69ca85ec35fbe0b",
|
||||
"time": "300.9µs"
|
||||
},
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0x568c19ecb14b87e4aec29b4d2d700a3ad3fd0613",
|
||||
"to": "0x0000000000000000000000000000000000000001",
|
||||
"value": "0x0",
|
||||
"gas": "0xbb7",
|
||||
"input": "0x18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c000000000000000000000000000000000000000000000000000000000000001c73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549",
|
||||
"callType": "callcode"
|
||||
},
|
||||
"error": "out of gas",
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 141,
|
||||
"transactionHash": "0x1592cbda0d928b8d18eed98857942b91ade32d088e55b8bf63418917cb0231f1",
|
||||
"blockNumber": 1555278,
|
||||
"blockHash": "0x755bd54de4b2f5a7a589a10d69888b4ead48a6311d5d69f2f69ca85ec35fbe0b"
|
||||
}
|
||||
]
|
||||
}
|
90
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_throw.json
vendored
Normal file
90
eth/tracers/internal/tracetest/testdata/call_tracer_flat/callcode_precompiled_throw.json
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4683014",
|
||||
"extraData": "0x537465762d63676574682d76312e31312e34",
|
||||
"gasLimit": "9435044",
|
||||
"hash": "0x3452ca5005cb73cd60dfa488a7b124251168e564491f80eb66765e79d78cfd95",
|
||||
"miner": "0x415aa6292d1db797a467b22139704956c030e62f",
|
||||
"mixHash": "0x6037612618507ae70c74a72bc2580253662971db959cfbc06d3f8527d4d01575",
|
||||
"nonce": "0x314fc90dee5e39a2",
|
||||
"number": "1555274",
|
||||
"stateRoot": "0x795751f3f96a5de1fd3944ddd78cbfe4ef10491e1086be47609869a30929d0e5",
|
||||
"timestamp": "1590795228",
|
||||
"totalDifficulty": "2242595605834",
|
||||
"alloc": {
|
||||
"0x0000000000000000000000000000000000000009": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x6242e3ccf48e66425fb1",
|
||||
"nonce": "264981",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555275",
|
||||
"difficulty": "4683014",
|
||||
"timestamp": "1590795244",
|
||||
"gasLimit": "9444256",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf87a83040b15843b9aca008301a0348080a636600060003760406103e8366000600060095af26001556103e851600255610408516003550081a1a0dd883fbbb489b640dadc8c1bf151767155228d0a1321f687f070f35f14374b05a02dd0ccb16a8de39bc8ee61381bbbbb54f0ab18422afd7b03c6163da1f5023934",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x36600060003760406103e8366000600060095af26001556103e8516002556104085160035500"
|
||||
},
|
||||
"error": "out of gas",
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 117,
|
||||
"transactionHash": "0x7fe4dec901e1a62c1a1d96b8267bb9ff9dc1f75def43aa45b998743455eff8f9",
|
||||
"blockNumber": 1555275,
|
||||
"blockHash": "0x80945caaff2fc67253cbb0217d2e5a307afde943929e97d8b36e58b88cbb02fd",
|
||||
"time": "332.877µs"
|
||||
},
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0x8832ef498070145c3a5b30f47fbca71fd7b1de9f",
|
||||
"to": "0x0000000000000000000000000000000000000009",
|
||||
"value": "0x0",
|
||||
"gas": "0xc897",
|
||||
"input": "0x",
|
||||
"callType": "callcode"
|
||||
},
|
||||
"error": "invalid input length",
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 117,
|
||||
"transactionHash": "0x7fe4dec901e1a62c1a1d96b8267bb9ff9dc1f75def43aa45b998743455eff8f9",
|
||||
"blockNumber": 1555275,
|
||||
"blockHash": "0x80945caaff2fc67253cbb0217d2e5a307afde943929e97d8b36e58b88cbb02fd"
|
||||
}
|
||||
]
|
||||
}
|
67
eth/tracers/internal/tracetest/testdata/call_tracer_flat/create.json
vendored
Normal file
67
eth/tracers/internal/tracetest/testdata/call_tracer_flat/create.json
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
{
|
||||
"context": {
|
||||
"difficulty": "3755480783",
|
||||
"gasLimit": "5401723",
|
||||
"miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511",
|
||||
"number": "2294702",
|
||||
"timestamp": "1513676146"
|
||||
},
|
||||
"genesis": {
|
||||
"alloc": {
|
||||
"0x13e4acefe6a6700604929946e70e6443e4e73447": {
|
||||
"balance": "0xcf3e0938579f000",
|
||||
"code": "0x",
|
||||
"nonce": "9",
|
||||
"storage": {}
|
||||
},
|
||||
"0x7dc9c9730689ff0b0fd506c67db815f12d90a448": {
|
||||
"balance": "0x0",
|
||||
"code": "0x",
|
||||
"nonce": "0",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"byzantiumBlock": 1700000,
|
||||
"chainId": 3,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 10,
|
||||
"eip158Block": 10,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0
|
||||
},
|
||||
"difficulty": "3757315409",
|
||||
"extraData": "0x566961425443",
|
||||
"gasLimit": "5406414",
|
||||
"hash": "0xae107f592eebdd9ff8d6ba00363676096e6afb0e1007a7d3d0af88173077378d",
|
||||
"miner": "0xd049bfd667cb46aa3ef5df0da3e57db3be39e511",
|
||||
"mixHash": "0xc927aa05a38bc3de864e95c33b3ae559d3f39c4ccd51cef6f113f9c50ba0caf1",
|
||||
"nonce": "0x93363bbd2c95f410",
|
||||
"number": "2294701",
|
||||
"stateRoot": "0x6b6737d5bde8058990483e915866bd1578014baeff57bd5e4ed228a2bfad635c",
|
||||
"timestamp": "1513676127",
|
||||
"totalDifficulty": "7160808139332585"
|
||||
},
|
||||
"input": "0xf907ef098504e3b29200830897be8080b9079c606060405260405160208061077c83398101604052808051906020019091905050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561007d57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006101000a81548160ff02191690831515021790555050610653806101296000396000f300606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029000000000000000000000000c65e620a3a55451316168d57e268f5702ef56a1129a01060f46676a5dff6f407f0f51eb6f37f5c8c54e238c70221e18e65fc29d3ea65a0557b01c50ff4ffaac8ed6e5d31237a4ecbac843ab1bfe8bb0165a0060df7c54f",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"from": "0x13e4acefe6a6700604929946e70e6443e4e73447",
|
||||
"gas": "0x5e106",
|
||||
"init": "0x606060405260405160208061077c83398101604052808051906020019091905050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561007d57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006101000a81548160ff02191690831515021790555050610653806101296000396000f300606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029000000000000000000000000c65e620a3a55451316168d57e268f5702ef56a11",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockNumber": 2294702,
|
||||
"result": {
|
||||
"address": "0x7dc9c9730689ff0b0fd506c67db815f12d90a448",
|
||||
"code": "0x606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029",
|
||||
"gasUsed": "0x897be"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [],
|
||||
"type": "create"
|
||||
}
|
||||
]
|
||||
}
|
635
eth/tracers/internal/tracetest/testdata/call_tracer_flat/deep_calls.json
vendored
Normal file
635
eth/tracers/internal/tracetest/testdata/call_tracer_flat/deep_calls.json
vendored
Normal file
File diff suppressed because one or more lines are too long
120
eth/tracers/internal/tracetest/testdata/call_tracer_flat/delegatecall.json
vendored
Normal file
120
eth/tracers/internal/tracetest/testdata/call_tracer_flat/delegatecall.json
vendored
Normal file
File diff suppressed because one or more lines are too long
103
eth/tracers/internal/tracetest/testdata/call_tracer_flat/delegatecall_parent_value.json
vendored
Normal file
103
eth/tracers/internal/tracetest/testdata/call_tracer_flat/delegatecall_parent_value.json
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
{
|
||||
"genesis": {
|
||||
"number": "566098",
|
||||
"hash": "0xba134562590a59291892395a29c5088899c2c64d720135dad88f7f076cf55f5f",
|
||||
"nonce": "0x4b281be9594e3eb3",
|
||||
"mixHash": "0xdb4ec386166d9c0dc9ba147755ecbb87af9f0a22563cbda02c799efa4e29db6e",
|
||||
"stateRoot": "0xfc01993ad96a8fb8790a093cea4f505f8db1b0e1143c5f57bb1d173db0baa9e3",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"difficulty": "1926740",
|
||||
"totalDifficulty": "482216286599",
|
||||
"extraData": "0xd883010906846765746888676f312e31332e35856c696e7578",
|
||||
"gasLimit": "19388354",
|
||||
"timestamp": "1577558314",
|
||||
"alloc": {
|
||||
"0x6ab9dd83108698b9ca8d03af3c7eb91c0e54c3fc": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0xcbd5b9b25d1c38c2aad",
|
||||
"nonce": "134969",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x91765918420bcb5ad22ee0997abed04056705798": {
|
||||
"balance": "0x0",
|
||||
"nonce": "1",
|
||||
"code": "0x366000803760206000366000736ab9dd83108698b9ca8d03af3c7eb91c0e54c3fc60325a03f41560015760206000f3",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "566099",
|
||||
"difficulty": "1927680",
|
||||
"timestamp": "1577558317",
|
||||
"gasLimit": "19369422",
|
||||
"miner": "0x774c398d763161f55b66a646f17edda4addad2ca"
|
||||
},
|
||||
"input": "0xf87983020f3985746a52880083015f909491765918420bcb5ad22ee0997abed04056705798888ac7230489e80000884e45375a4741394181a1a04b7260723fd02830754916b3bdf1537b6a851a7ae27c7e9296cfe1fc8275ec08a049d32158988eb717d61b4503b27c7583037c067daba1eb56f4bdfafc1b0045f6",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"gas": "0x10b68",
|
||||
"input": "0x4e45375a47413941",
|
||||
"to": "0x91765918420bcb5ad22ee0997abed04056705798",
|
||||
"value": "0x8ac7230489e80000"
|
||||
},
|
||||
"blockHash": "0xb05cc5c8f11df2b5d53ced342ee79e2805785f04c2f40add4539f27bd349f74e",
|
||||
"blockNumber": 566099,
|
||||
"result": {
|
||||
"gasUsed": "0x5721",
|
||||
"output": "0x4e45375a47413941000000000000000000000000000000000000000000000000"
|
||||
},
|
||||
"subtraces": 1,
|
||||
"traceAddress": [],
|
||||
"transactionHash": "0x6e26dffe2f66186f03a2c36a16a4cd9724d07622c83746f1e35f988515713d4b",
|
||||
"transactionPosition": 10,
|
||||
"type": "call"
|
||||
},
|
||||
{
|
||||
"action": {
|
||||
"callType": "delegatecall",
|
||||
"from": "0x91765918420bcb5ad22ee0997abed04056705798",
|
||||
"gas": "0x10463",
|
||||
"input": "0x4e45375a47413941",
|
||||
"to": "0x6ab9dd83108698b9ca8d03af3c7eb91c0e54c3fc",
|
||||
"value": "0x8ac7230489e80000"
|
||||
},
|
||||
"blockHash": "0xb05cc5c8f11df2b5d53ced342ee79e2805785f04c2f40add4539f27bd349f74e",
|
||||
"blockNumber": 566099,
|
||||
"result": {
|
||||
"gasUsed": "0x0",
|
||||
"output": "0x"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"transactionHash": "0x6e26dffe2f66186f03a2c36a16a4cd9724d07622c83746f1e35f988515713d4b",
|
||||
"transactionPosition": 10,
|
||||
"type": "call"
|
||||
}
|
||||
]
|
||||
}
|
95
eth/tracers/internal/tracetest/testdata/call_tracer_flat/gas.json
vendored
Normal file
95
eth/tracers/internal/tracetest/testdata/call_tracer_flat/gas.json
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4683014",
|
||||
"extraData": "0x537465762d63676574682d76312e31312e34",
|
||||
"gasLimit": "9435044",
|
||||
"hash": "0x3452ca5005cb73cd60dfa488a7b124251168e564491f80eb66765e79d78cfd95",
|
||||
"miner": "0x415aa6292d1db797a467b22139704956c030e62f",
|
||||
"mixHash": "0x6037612618507ae70c74a72bc2580253662971db959cfbc06d3f8527d4d01575",
|
||||
"nonce": "0x314fc90dee5e39a2",
|
||||
"number": "1555274",
|
||||
"stateRoot": "0x795751f3f96a5de1fd3944ddd78cbfe4ef10491e1086be47609869a30929d0e5",
|
||||
"timestamp": "1590795228",
|
||||
"totalDifficulty": "2242595605834",
|
||||
"alloc": {
|
||||
"0x0000000000000000000000000000000000000001": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x6242e3ccf48e66425fb1",
|
||||
"nonce": "264882",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555275",
|
||||
"difficulty": "4683014",
|
||||
"timestamp": "1590795244",
|
||||
"gasLimit": "9444256",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf9011583040ab2843b9aca008301a9c88080b8c0601b565b6000555b005b630badf00d6003565b63c001f00d6003565b7319e7e376e7c213b7e7e7e46cc70a5dd086daff2a7f22ae6da6b482f9b1b19b0b897c3fd43884180a1c5ee361e1107a1bc635649dda600052601b603f537f16433dce375ce6dc8151d3f0a22728bc4a1d9fd6ed39dfd18b4609331937367f6040527f306964c0cf5d74f04129fdc60b54d35b596dde1bf89ad92cb4123318f4c0e40060605260206080607f60006000600161fffff2156007576080511460125760095681a1a07682fc43dbe1fb13c6474f5e70e121c826dd996168d8bb1d8ca7a63470127b46a00a25b308ba417b7770899e8f98a3f0c14aa9bf7db0edacfe4e78d00dbbd3c31e",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x601b565b6000555b005b630badf00d6003565b63c001f00d6003565b7319e7e376e7c213b7e7e7e46cc70a5dd086daff2a7f22ae6da6b482f9b1b19b0b897c3fd43884180a1c5ee361e1107a1bc635649dda600052601b603f537f16433dce375ce6dc8151d3f0a22728bc4a1d9fd6ed39dfd18b4609331937367f6040527f306964c0cf5d74f04129fdc60b54d35b596dde1bf89ad92cb4123318f4c0e40060605260206080607f60006000600161fffff21560075760805114601257600956"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x137e5",
|
||||
"code": "0x",
|
||||
"address": "0x1a05d76017ca02010533a470e05e8925a0380d8f"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 18,
|
||||
"transactionHash": "0xc1c42a325856d513523aec464811923b2e2926f54015c7ba37877064cf889803",
|
||||
"blockNumber": 1555275,
|
||||
"blockHash": "0x80945caaff2fc67253cbb0217d2e5a307afde943929e97d8b36e58b88cbb02fd",
|
||||
"time": "453.925µs"
|
||||
},
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0x1a05d76017ca02010533a470e05e8925a0380d8f",
|
||||
"to": "0x0000000000000000000000000000000000000001",
|
||||
"value": "0x0",
|
||||
"gas": "0xc8c6",
|
||||
"input": "0x22ae6da6b482f9b1b19b0b897c3fd43884180a1c5ee361e1107a1bc635649dda000000000000000000000000000000000000000000000000000000000000001b16433dce375ce6dc8151d3f0a22728bc4a1d9fd6ed39dfd18b4609331937367f306964c0cf5d74f04129fdc60b54d35b596dde1bf89ad92cb4123318f4c0e4",
|
||||
"callType": "callcode"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0xbb8",
|
||||
"output": "0x00000000000000000000000019e7e376e7c213b7e7e7e46cc70a5dd086daff2a"
|
||||
},
|
||||
"traceAddress": [0],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 18,
|
||||
"transactionHash": "0xc1c42a325856d513523aec464811923b2e2926f54015c7ba37877064cf889803",
|
||||
"blockNumber": 1555275,
|
||||
"blockHash": "0x80945caaff2fc67253cbb0217d2e5a307afde943929e97d8b36e58b88cbb02fd"
|
||||
}
|
||||
]
|
||||
}
|
832
eth/tracers/internal/tracetest/testdata/call_tracer_flat/include_precompiled.json
vendored
Normal file
832
eth/tracers/internal/tracetest/testdata/call_tracer_flat/include_precompiled.json
vendored
Normal file
File diff suppressed because one or more lines are too long
88
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_create_oog_outer_throw.json
vendored
Normal file
88
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_create_oog_outer_throw.json
vendored
Normal file
File diff suppressed because one or more lines are too long
72
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_instafail.json
vendored
Normal file
72
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_instafail.json
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "117067574",
|
||||
"extraData": "0xd783010502846765746887676f312e372e33856c696e7578",
|
||||
"gasLimit": "4712380",
|
||||
"hash": "0xe05db05eeb3f288041ecb10a787df121c0ed69499355716e17c307de313a4486",
|
||||
"miner": "0x0c062b329265c965deef1eede55183b3acb8f611",
|
||||
"mixHash": "0xb669ae39118a53d2c65fd3b1e1d3850dd3f8c6842030698ed846a2762d68b61d",
|
||||
"nonce": "0x2b469722b8e28c45",
|
||||
"number": "24973",
|
||||
"stateRoot": "0x532a5c3f75453a696428db078e32ae283c85cb97e4d8560dbdf022adac6df369",
|
||||
"timestamp": "1479891145",
|
||||
"totalDifficulty": "1892250259406",
|
||||
"alloc": {
|
||||
"0x6c06b16512b332e6cd8293a2974872674716ce18": {
|
||||
"balance": "0x0",
|
||||
"nonce": "1",
|
||||
"code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e1a7d4d146036575b6000565b34600057604e60048080359060200190919050506050565b005b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051809050600060405180830381858888f19350505050505b5056",
|
||||
"storage": {}
|
||||
},
|
||||
"0x66fdfd05e46126a07465ad24e40cc0597bc1ef31": {
|
||||
"balance": "0x229ebbb36c3e0f20",
|
||||
"nonce": "3",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 3,
|
||||
"homesteadBlock": 0,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 10,
|
||||
"eip158Block": 10,
|
||||
"byzantiumBlock": 1700000,
|
||||
"constantinopleBlock": 4230000,
|
||||
"petersburgBlock": 4939394,
|
||||
"istanbulBlock": 6485846,
|
||||
"muirGlacierBlock": 7117117,
|
||||
"ethash": {}
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "24974",
|
||||
"difficulty": "117067574",
|
||||
"timestamp": "1479891162",
|
||||
"gasLimit": "4712388",
|
||||
"miner": "0xc822ef32e6d26e170b70cf761e204c1806265914"
|
||||
},
|
||||
"input": "0xf889038504a81557008301f97e946c06b16512b332e6cd8293a2974872674716ce1880a42e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b1600002aa0e2a6558040c5d72bc59f2fb62a38993a314c849cd22fb393018d2c5af3112095a01bdb6d7ba32263ccc2ecc880d38c49d9f0c5a72d8b7908e3122b31356d349745",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0x66fdfd05e46126a07465ad24e40cc0597bc1ef31",
|
||||
"gas": "0x1a466",
|
||||
"input": "0x2e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b160000",
|
||||
"to": "0x6c06b16512b332e6cd8293a2974872674716ce18",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockNumber": 24974,
|
||||
"result": {
|
||||
"gasUsed": "0x72de",
|
||||
"output": "0x"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [],
|
||||
"type": "call"
|
||||
}
|
||||
]
|
||||
}
|
219
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_precompiled_wrong_gas.json
vendored
Normal file
219
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_precompiled_wrong_gas.json
vendored
Normal file
File diff suppressed because one or more lines are too long
95
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_throw_outer_revert.json
vendored
Normal file
95
eth/tracers/internal/tracetest/testdata/call_tracer_flat/inner_throw_outer_revert.json
vendored
Normal file
File diff suppressed because one or more lines are too long
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create.json
vendored
Normal file
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create.json
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "1808543",
|
||||
"extraData": "0xd883010906846765746888676f312e31332e35856c696e7578",
|
||||
"gasLimit": "4875092",
|
||||
"hash": "0x3851fdc18bd5f2314cf0c90439356f9a1fe157d7fb06c20e20b77954da903671",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"mixHash": "0x3d4e702d6058acf94c9547560f05536d45d515bd4f9014564ec41b5b4ff9578b",
|
||||
"nonce": "0x1695153e7b16c1e7",
|
||||
"number": "555461",
|
||||
"stateRoot": "0xba8272acd0dfeb5f04376328e8bfc5b276b177697000c204a060f6f7b629ae32",
|
||||
"timestamp": "1577423350",
|
||||
"totalDifficulty": "462222992438",
|
||||
"alloc": {
|
||||
"0xcf5b3467dfa45cdc8e5358a7a1ba4deb02e5faed": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x16c102a3b09c02abdace",
|
||||
"nonce": "19049",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "555462",
|
||||
"difficulty": "1808543",
|
||||
"timestamp": "1577423360",
|
||||
"gasLimit": "4873701",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf90451824a6985746a52880083053e908080b903fb60606040525b60405161015b806102a0833901809050604051809103906000f0600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b610247806100596000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900480632ef9db1314610044578063e37678761461007157610042565b005b61005b6004803590602001803590602001506100ad565b6040518082815260200191505060405180910390f35b61008860048035906020018035906020015061008a565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000600060008484604051808381526020018281526020019250505060405180910390209150610120600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f6164640000000000000000000000000000000000000000000000000000000000846101e3565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681868660405180807f616464000000000000000000000000000000000000000000000000000000000081526020015060200184815260200183815260200182815260200193505050506000604051808303816000866161da5a03f191505050600060005060008281526020019081526020016000206000505492506101db565b505092915050565b60004340848484604051808581526020018473ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200194505050505060405180910390209050610240565b9392505050566060604052610148806100136000396000f30060606040526000357c010000000000000000000000000000000000000000000000000000000090048063471407e614610044578063e37678761461007757610042565b005b6100616004803590602001803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b61008e600480359060200180359060200150610090565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000818301905080506100c684826100d5565b8090506100ce565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16828260405180807f7265676973746572496e74000000000000000000000000000000000000000000815260200150602001838152602001828152602001925050506000604051808303816000866161da5a03f1915050505b50505681a1a0b9a85df655d3b6aa081e52d8c3db52c50c2bf97d9d993a980113b2262649c125a00d51e63880ca8ef4705914a71e7ff906834a9cdcff0cbd063ff4e43a5905890d",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0x3951c",
|
||||
"init": "0x60606040525b60405161015b806102a0833901809050604051809103906000f0600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b610247806100596000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900480632ef9db1314610044578063e37678761461007157610042565b005b61005b6004803590602001803590602001506100ad565b6040518082815260200191505060405180910390f35b61008860048035906020018035906020015061008a565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000600060008484604051808381526020018281526020019250505060405180910390209150610120600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f6164640000000000000000000000000000000000000000000000000000000000846101e3565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681868660405180807f616464000000000000000000000000000000000000000000000000000000000081526020015060200184815260200183815260200182815260200193505050506000604051808303816000866161da5a03f191505050600060005060008281526020019081526020016000206000505492506101db565b505092915050565b60004340848484604051808581526020018473ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200194505050505060405180910390209050610240565b9392505050566060604052610148806100136000396000f30060606040526000357c010000000000000000000000000000000000000000000000000000000090048063471407e614610044578063e37678761461007757610042565b005b6100616004803590602001803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b61008e600480359060200180359060200150610090565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000818301905080506100c684826100d5565b8090506100ce565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16828260405180807f7265676973746572496e74000000000000000000000000000000000000000000815260200150602001838152602001828152602001925050506000604051808303816000866161da5a03f1915050505b505056"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x53e90",
|
||||
"code": "0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632ef9db1314610044578063e37678761461007157610042565b005b61005b6004803590602001803590602001506100ad565b6040518082815260200191505060405180910390f35b61008860048035906020018035906020015061008a565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000600060008484604051808381526020018281526020019250505060405180910390209150610120600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f6164640000000000000000000000000000000000000000000000000000000000846101e3565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681868660405180807f616464000000000000000000000000000000000000000000000000000000000081526020015060200184815260200183815260200182815260200193505050506000604051808303816000866161da5a03f191505050600060005060008281526020019081526020016000206000505492506101db565b505092915050565b60004340848484604051808581526020018473ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200194505050505060405180910390209050610240565b939250505056",
|
||||
"address": "0x9db7a1baf185a865ffee3824946ccd8958191e5e"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 23,
|
||||
"transactionHash": "0xe267552ce8437a5bc7081385c99f912de5723ad34b958db215dbc41abd5f6c03",
|
||||
"blockNumber": 555462,
|
||||
"blockHash": "0x38bba9e3965b57205097ea5ec53fc403cf3941bec2e4c933faae244de5ca4ba1",
|
||||
"time": "1.147715ms"
|
||||
},
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x9db7a1baf185a865ffee3824946ccd8958191e5e",
|
||||
"value": "0x0",
|
||||
"gas": "0x30b34",
|
||||
"init": "0x6060604052610148806100136000396000f30060606040526000357c010000000000000000000000000000000000000000000000000000000090048063471407e614610044578063e37678761461007757610042565b005b6100616004803590602001803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b61008e600480359060200180359060200150610090565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000818301905080506100c684826100d5565b8090506100ce565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16828260405180807f7265676973746572496e74000000000000000000000000000000000000000000815260200150602001838152602001828152602001925050506000604051808303816000866161da5a03f1915050505b505056"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x1009d",
|
||||
"code": "0x60606040526000357c010000000000000000000000000000000000000000000000000000000090048063471407e614610044578063e37678761461007757610042565b005b6100616004803590602001803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b61008e600480359060200180359060200150610090565b005b8060006000506000848152602001908152602001600020600050819055505b5050565b6000818301905080506100c684826100d5565b8090506100ce565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff16828260405180807f7265676973746572496e74000000000000000000000000000000000000000000815260200150602001838152602001828152602001925050506000604051808303816000866161da5a03f1915050505b505056",
|
||||
"address": "0xcf5b3467dfa45cdc8e5358a7a1ba4deb02e5faed"
|
||||
},
|
||||
"traceAddress": [0],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 23,
|
||||
"transactionHash": "0xe267552ce8437a5bc7081385c99f912de5723ad34b958db215dbc41abd5f6c03",
|
||||
"blockNumber": 555462,
|
||||
"blockHash": "0x38bba9e3965b57205097ea5ec53fc403cf3941bec2e4c933faae244de5ca4ba1"
|
||||
}
|
||||
]
|
||||
}
|
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create2_action_gas.json
vendored
Normal file
94
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create2_action_gas.json
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4635413",
|
||||
"extraData": "0xd683010b05846765746886676f312e3133856c696e7578",
|
||||
"gasLimit": "9289294",
|
||||
"hash": "0x359775cf1a2ae2400e26ec68bf33bcfe38b7979c76b7e616f42c4ca7e7605e39",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"mixHash": "0x4b2a0ef121a9c7d732fa0fbd4166a0e1041d2da2b8cb677c61edabf8b7183b64",
|
||||
"nonce": "0x2a8a64ad9757be55",
|
||||
"number": "1555160",
|
||||
"stateRoot": "0x95067c12148e2362fcd4a89df286ff0b1739ef097a40ca42ae7f698af9a9d913",
|
||||
"timestamp": "1590793999",
|
||||
"totalDifficulty": "2242063623471",
|
||||
"alloc": {
|
||||
"0x8785e369f0ef0a4e5c5a5f929680427dc75273a5": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x623145b285b3f551fa3f",
|
||||
"nonce": "260617",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555161",
|
||||
"difficulty": "4633150",
|
||||
"timestamp": "1590794020",
|
||||
"gasLimit": "9298364",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf85e8303fa09843b9aca0083019ed880808a6000600060006000f50081a2a0485ea410e210740eef8e6f6de11c530f46f8da80eecb02afbb6c5f61749ac015a068d72f1b0f1d3cb4e214d5def79b49a73e6ee91db2df83499a54c656c144600f",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf6c",
|
||||
"init": "0x6000600060006000f500"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x14c78",
|
||||
"code": "0x",
|
||||
"address": "0x2e8eded627eead210cb6143eb39ef7a3e44e4f00"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 31,
|
||||
"transactionHash": "0x1257b698c5833c54ce786734087002b097275abc3877af082b5c2a538e894a41",
|
||||
"blockNumber": 1555161,
|
||||
"blockHash": "0xb0793dd508dd106a19794b8ce1dfc0ff8d98c76aab61bf32a11799854149a171",
|
||||
"time": "889.048µs"
|
||||
},
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x2e8eded627eead210cb6143eb39ef7a3e44e4f00",
|
||||
"value": "0x0",
|
||||
"gas": "0x5117",
|
||||
"init": "0x"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x0",
|
||||
"code": "0x",
|
||||
"address": "0x8785e369f0ef0a4e5c5a5f929680427dc75273a5"
|
||||
},
|
||||
"traceAddress": [0],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 31,
|
||||
"transactionHash": "0x1257b698c5833c54ce786734087002b097275abc3877af082b5c2a538e894a41",
|
||||
"blockNumber": 1555161,
|
||||
"blockHash": "0xb0793dd508dd106a19794b8ce1dfc0ff8d98c76aab61bf32a11799854149a171"
|
||||
}
|
||||
]
|
||||
}
|
90
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create_action_gas.json
vendored
Normal file
90
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create_action_gas.json
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4639933",
|
||||
"extraData": "0xd883010b05846765746888676f312e31342e33856c696e7578",
|
||||
"gasLimit": "9280188",
|
||||
"hash": "0x9a5f3a98eb1c60f6e3f450658a9cea190157e7021d04f927b752ad6482cf9194",
|
||||
"miner": "0x73f26d124436b0791169d63a3af29c2ae47765a3",
|
||||
"mixHash": "0x6b6f8fcaa54b8565c4c1ae7cf0a020e938a53007f4561e758b17bc05c9044d78",
|
||||
"nonce": "0x773aba50dc51b462",
|
||||
"number": "1555169",
|
||||
"stateRoot": "0xc4b9703de3e59ff795baae2c3afa010cf039c37244a7a6af7f3f491a10601348",
|
||||
"timestamp": "1590794111",
|
||||
"totalDifficulty": "2242105342155",
|
||||
"alloc": {
|
||||
"0x5ac5599fc9df172c89ee7ec55ad9104ccbfed40d": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x62325b40cbbd0915c4b9",
|
||||
"nonce": "260875",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555170",
|
||||
"difficulty": "4642198",
|
||||
"timestamp": "1590794112",
|
||||
"gasLimit": "9289249",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf8658303fb0b843b9aca0083019ee48080915a600055600060006000f0505a6001550081a2a01a7deb3a16d967b766459ef486b00656c6581e5ad58968184a33701e27e0eb8aa07162ccdfe2018d64360a605310a62c399dd586c7282dd42a88c54f02f51d451f",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x5a600055600060006000f0505a60015500"
|
||||
},
|
||||
"error": "out of gas",
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 63,
|
||||
"transactionHash": "0x60e881fae3884657b5430925c5d0053535b45cce0b8188f2a6be1feee8bcc650",
|
||||
"blockNumber": 1555170,
|
||||
"blockHash": "0xea46fbf941d51bf1e4180fbf26d22fda3896f49c7f371d109c226de95dd7b02e",
|
||||
"time": "952.736µs"
|
||||
},
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x9c5cfe45b15eaff4ad617af4250189e26024a4f8",
|
||||
"value": "0x0",
|
||||
"gas": "0x3cb",
|
||||
"init": "0x"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x0",
|
||||
"code": "0x",
|
||||
"address": "0x5ac5599fc9df172c89ee7ec55ad9104ccbfed40d"
|
||||
},
|
||||
"traceAddress": [0],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 63,
|
||||
"transactionHash": "0x60e881fae3884657b5430925c5d0053535b45cce0b8188f2a6be1feee8bcc650",
|
||||
"blockNumber": 1555170,
|
||||
"blockHash": "0xea46fbf941d51bf1e4180fbf26d22fda3896f49c7f371d109c226de95dd7b02e"
|
||||
}
|
||||
]
|
||||
}
|
81
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create_inerror.json
vendored
Normal file
81
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_create_inerror.json
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "3244991",
|
||||
"extraData": "0x",
|
||||
"gasLimit": "7968787",
|
||||
"hash": "0x62bbf18c203068a8793af8d8360d054f95a63bc62b87ade550861ed490af3f15",
|
||||
"miner": "0x9f2659ffe7b3b467e46dcec3623392cf51635079",
|
||||
"mixHash": "0xc8dec711fd1e03972b6a279a09dc0cd29c5171b60f42c4ce37c7c51ff445f776",
|
||||
"nonce": "0x40b1bbcc25ddb804",
|
||||
"number": "839246",
|
||||
"stateRoot": "0x4bb3b02ec70b837651233957fb61a6ea3fc6a4244c1f55df7a713c154829ec0a",
|
||||
"timestamp": "1581179375",
|
||||
"totalDifficulty": "1023985623933",
|
||||
"alloc": {
|
||||
"0x76554b33410b6d90b7dc889bfed0451ad195f27e": {
|
||||
"balance": "0x0",
|
||||
"nonce": "1",
|
||||
"code": "0x6080604052348015600f57600080fd5b506004361060505760003560e01c8063391521f414605557806355313dea14605d5780636d3d14161460655780638da5cb5b14606d578063b9d1e5aa1460b5575b600080fd5b605b60bd565b005b606360c8565b005b606b60ca565b005b607360cf565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60bb60f4565b005b6020610123600af050565b005b600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565bfefea165627a7a723058202094d5aa5dbbd493e9a2c64c50b62eba4b109b2a12d2bb73a5d0d54982651fc80029",
|
||||
"storage": {}
|
||||
},
|
||||
"0xed69ab7145a9bae7152406d062c077c6ecc6ae18": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0xa3b31cbd5168d3c99756660d4b7625d679e12573": {
|
||||
"balance": "0x569bc6535d3083fce",
|
||||
"nonce": "26",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "839247",
|
||||
"difficulty": "3213311",
|
||||
"timestamp": "1581179571",
|
||||
"gasLimit": "7961006",
|
||||
"miner": "0x9f2659ffe7b3b467e46dcec3623392cf51635079"
|
||||
},
|
||||
"input": "0xf86a1a8509502f9000830334509476554b33410b6d90b7dc889bfed0451ad195f27e8084391521f481a2a02e4ff0d171a860c8c7de2283978e2f225f9ba3ed4dec446b773c6b2d73ef22dea02a6a517528b491cb71b204f534db11a1c8059035f54d5bae347d1cab536bde2c",
|
||||
"result": [
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0xa3b31cbd5168d3c99756660d4b7625d679e12573",
|
||||
"to": "0x76554b33410b6d90b7dc889bfed0451ad195f27e",
|
||||
"value": "0x0",
|
||||
"gas": "0x2e138",
|
||||
"input": "0x391521f4",
|
||||
"callType": "call"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0xd0b5",
|
||||
"output": "0x"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 26,
|
||||
"transactionHash": "0xcb1090fa85d2a3da8326b75333e92b3dca89963c895d9c981bfdaa64643135e4",
|
||||
"blockNumber": 839247,
|
||||
"blockHash": "0xce7ff7d84ca97f0f89d6065e2c12409a795c9f607cdb14aef0713cad5d7e311c",
|
||||
"time": "182.267µs"
|
||||
}
|
||||
]
|
||||
}
|
189
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_pointer_issue.json
vendored
Normal file
189
eth/tracers/internal/tracetest/testdata/call_tracer_flat/nested_pointer_issue.json
vendored
Normal file
File diff suppressed because one or more lines are too long
68
eth/tracers/internal/tracetest/testdata/call_tracer_flat/oog.json
vendored
Normal file
68
eth/tracers/internal/tracetest/testdata/call_tracer_flat/oog.json
vendored
Normal file
File diff suppressed because one or more lines are too long
71
eth/tracers/internal/tracetest/testdata/call_tracer_flat/option_convert_parity_errors.json
vendored
Normal file
71
eth/tracers/internal/tracetest/testdata/call_tracer_flat/option_convert_parity_errors.json
vendored
Normal file
File diff suppressed because one or more lines are too long
111
eth/tracers/internal/tracetest/testdata/call_tracer_flat/result_output.json
vendored
Normal file
111
eth/tracers/internal/tracetest/testdata/call_tracer_flat/result_output.json
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "1911202",
|
||||
"extraData": "0xd883010906846765746888676f312e31332e35856c696e7578",
|
||||
"gasLimit": "7842876",
|
||||
"hash": "0x4d7bc82e0d56307094378e1a8fbfa6260986f621de95b5fe68a95248b3ba8efe",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"mixHash": "0xc102ad52677c391edab82cc895ca7a7e9fff3eed4fa966ecf7fb61ec1e84bb6b",
|
||||
"nonce": "0x39f5b074e3437f3f",
|
||||
"number": "553415",
|
||||
"stateRoot": "0x8f89e79109c19fa00e72b400502448540dc4773ad92dddd341dbba20c710a3b5",
|
||||
"timestamp": "1577396195",
|
||||
"totalDifficulty": "458361299240",
|
||||
"alloc": {
|
||||
"0x531f76bad925f6a925474996c7d738c1008045f6": {
|
||||
"balance": "0x0",
|
||||
"nonce": "1",
|
||||
"code": "0x6060604052361561008a576000357c01000000000000000000000000000000000000000000000000000000009004806301cb3b20146102bf57806329dcb0cf146102cc57806338af3eed146102ed5780636e66f6e9146103245780637a3a0e841461035b5780637b3e5e7b1461037c578063a035b1fe1461039d578063dc0d3dff146103be5761008a565b6102bd5b60003490506040604051908101604052803381526020018281526020015060066000506006600050805480919060010190908154818355818115116101365760020281600202836000526020600020918201910161013591906100ec565b808211156101315760006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160005060009055506001016100ec565b5090565b5b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390b98a11336004600050548404604051837c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750505060405151507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf633826001604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b50565b005b6102ca6004506104c8565b005b6102d760045061043a565b6040518082815260200191505060405180910390f35b6102f8600450610402565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61032f60045061044c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610366600450610428565b6040518082815260200191505060405180910390f35b610387600450610431565b6040518082815260200191505060405180910390f35b6103a8600450610443565b6040518082815260200191505060405180910390f35b6103cf600480359060200150610472565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000505481565b60026000505481565b60036000505481565b60046000505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066000508181548110156100025790600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160005054905082565b6000600360005054421015156107d8576001600050546002600050541015156105cf57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000600260005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600050546000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a161079d565b7fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf66000600b600060405180848152602001838152602001828152602001935050505060405180910390a1600090505b60066000505481101561079c57600660005081815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000600660005083815481101561000257906000526020600020906002020160005060010160005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6600660005082815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006600050838154811015610002579060005260206000209060020201600050600101600050546000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b806001019050805061061e565b5b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b5056",
|
||||
"storage": {
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0xf652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0xf652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000b49180d443dc4ca6028de0031ac09337891fd8ce",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000"
|
||||
}
|
||||
},
|
||||
"0xb49180d443dc4ca6028de0031ac09337891fd8ce": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x193e9986e2e3f0c58988",
|
||||
"nonce": "2585",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "553416",
|
||||
"difficulty": "1909336",
|
||||
"timestamp": "1577396224",
|
||||
"gasLimit": "7835218",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf870820a1985e8d4a5100083040b2894531f76bad925f6a925474996c7d738c1008045f6880de0b6b3a76400008081a2a08693170f040d9501b831b404d9e40fba040c5aef4b8974aedc20b3844aea7c32a0476861058ff9b8030c58bcba8be320acc855e4694a633c493fb50fbdb9455489",
|
||||
"result": [
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"to": "0x531f76bad925f6a925474996c7d738c1008045f6",
|
||||
"value": "0xde0b6b3a7640000",
|
||||
"gas": "0x3b920",
|
||||
"input": "0x",
|
||||
"callType": "call"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x19c3e",
|
||||
"output": "0x"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 5,
|
||||
"transactionHash": "0x04d2029a5cbbed30969cdc0a2ca9e9fc6b719e323af0802b52466f07ee0ecada",
|
||||
"blockNumber": 553416,
|
||||
"blockHash": "0x8df024322173d225a09681d35edeaa528aca60743a11a70f854c158862bf5282",
|
||||
"time": "617.42µs"
|
||||
},
|
||||
{
|
||||
"type": "call",
|
||||
"action": {
|
||||
"from": "0x531f76bad925f6a925474996c7d738c1008045f6",
|
||||
"to": "0xb49180d443dc4ca6028de0031ac09337891fd8ce",
|
||||
"value": "0x0",
|
||||
"gas": "0x2164e",
|
||||
"input": "0x90b98a11000000000000000000000000877bd459c9b7d8576b44e59e09d076c25946f4430000000000000000000000000000000000000000000000000000000000000001",
|
||||
"callType": "call"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x0",
|
||||
"output": "0x"
|
||||
},
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 5,
|
||||
"transactionHash": "0x04d2029a5cbbed30969cdc0a2ca9e9fc6b719e323af0802b52466f07ee0ecada",
|
||||
"blockNumber": 553416,
|
||||
"blockHash": "0x8df024322173d225a09681d35edeaa528aca60743a11a70f854c158862bf5282"
|
||||
}
|
||||
]
|
||||
}
|
68
eth/tracers/internal/tracetest/testdata/call_tracer_flat/revert.json
vendored
Normal file
68
eth/tracers/internal/tracetest/testdata/call_tracer_flat/revert.json
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
{
|
||||
"context": {
|
||||
"difficulty": "3665057456",
|
||||
"gasLimit": "5232723",
|
||||
"miner": "0xf4d8e706cfb25c0decbbdd4d2e2cc10c66376a3f",
|
||||
"number": "2294501",
|
||||
"timestamp": "1513673601"
|
||||
},
|
||||
"genesis": {
|
||||
"alloc": {
|
||||
"0x0f6cef2b7fbb504782e35aa82a2207e816a2b7a9": {
|
||||
"balance": "0x2a3fc32bcc019283",
|
||||
"code": "0x",
|
||||
"nonce": "10",
|
||||
"storage": {}
|
||||
},
|
||||
"0xabbcd5b340c80b5f1c0545c04c987b87310296ae": {
|
||||
"balance": "0x0",
|
||||
"code": "0x606060405236156100755763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632d0335ab811461007a578063548db174146100ab5780637f649783146100fc578063b092145e1461014d578063c3f44c0a14610186578063c47cf5de14610203575b600080fd5b341561008557600080fd5b610099600160a060020a0360043516610270565b60405190815260200160405180910390f35b34156100b657600080fd5b6100fa600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061028f95505050505050565b005b341561010757600080fd5b6100fa600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061029e95505050505050565b005b341561015857600080fd5b610172600160a060020a03600435811690602435166102ad565b604051901515815260200160405180910390f35b341561019157600080fd5b6100fa6004803560ff1690602480359160443591606435600160a060020a0316919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506102cd915050565b005b341561020e57600080fd5b61025460046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061056a95505050505050565b604051600160a060020a03909116815260200160405180910390f35b600160a060020a0381166000908152602081905260409020545b919050565b61029a816000610594565b5b50565b61029a816001610594565b5b50565b600160209081526000928352604080842090915290825290205460ff1681565b60008080600160a060020a038416158061030d5750600160a060020a038085166000908152600160209081526040808320339094168352929052205460ff165b151561031857600080fd5b6103218561056a565b600160a060020a038116600090815260208190526040808220549295507f19000000000000000000000000000000000000000000000000000000000000009230918891908b908b90517fff000000000000000000000000000000000000000000000000000000000000008089168252871660018201526c01000000000000000000000000600160a060020a038088168202600284015286811682026016840152602a8301869052841602604a820152605e810182805190602001908083835b6020831061040057805182525b601f1990920191602091820191016103e0565b6001836020036101000a0380198251168184511617909252505050919091019850604097505050505050505051809103902091506001828a8a8a6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561049957600080fd5b5050602060405103519050600160a060020a03838116908216146104bc57600080fd5b600160a060020a0380841660009081526020819052604090819020805460010190559087169086905180828051906020019080838360005b8381101561050d5780820151818401525b6020016104f4565b50505050905090810190601f16801561053a5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050151561055e57600080fd5b5b505050505050505050565b600060248251101561057e5750600061028a565b600160a060020a0360248301511690505b919050565b60005b825181101561060157600160a060020a033316600090815260016020526040812083918584815181106105c657fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790555b600101610597565b5b5050505600a165627a7a723058200027e8b695e9d2dea9f3629519022a69f3a1d23055ce86406e686ea54f31ee9c0029",
|
||||
"nonce": "1",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"byzantiumBlock": 1700000,
|
||||
"chainId": 3,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 10,
|
||||
"eip158Block": 10,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0
|
||||
},
|
||||
"difficulty": "3672229776",
|
||||
"extraData": "0x4554482e45544846414e532e4f52472d4641313738394444",
|
||||
"gasLimit": "5227619",
|
||||
"hash": "0xa07b3d6c6bf63f5f981016db9f2d1d93033833f2c17e8bf7209e85f1faf08076",
|
||||
"miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3",
|
||||
"mixHash": "0x806e151ce2817be922e93e8d5921fa0f0d0fd213d6b2b9a3fa17458e74a163d0",
|
||||
"nonce": "0xbc5d43adc2c30c7d",
|
||||
"number": "2294500",
|
||||
"stateRoot": "0xca645b335888352ef9d8b1ef083e9019648180b259026572e3139717270de97d",
|
||||
"timestamp": "1513673552",
|
||||
"totalDifficulty": "7160066586979149"
|
||||
},
|
||||
"input": "0xf9018b0a8505d21dba00832dc6c094abbcd5b340c80b5f1c0545c04c987b87310296ae80b9012473b40a5c000000000000000000000000400de2e016bda6577407dfc379faba9899bc73ef0000000000000000000000002cc31912b2b0f3075a87b3640923d45a26cef3ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d79d8e6c7265636f76657279416464726573730000000000000000000000000000000000000000000000000000000000383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988000000000000000000000000000000000000000000000000000000000000000000000000000000001ba0fd659d76a4edbd2a823e324c93f78ad6803b30ff4a9c8bce71ba82798975c70ca06571eecc0b765688ec6c78942c5ee8b585e00988c0141b518287e9be919bc48a",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0x0f6cef2b7fbb504782e35aa82a2207e816a2b7a9",
|
||||
"gas": "0x2d55e8",
|
||||
"input": "0x73b40a5c000000000000000000000000400de2e016bda6577407dfc379faba9899bc73ef0000000000000000000000002cc31912b2b0f3075a87b3640923d45a26cef3ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d79d8e6c7265636f76657279416464726573730000000000000000000000000000000000000000000000000000000000383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988383e3ec32dc0f66d8fe60dbdc2f6815bdf73a98800000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"to": "0xabbcd5b340c80b5f1c0545c04c987b87310296ae",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockNumber": 2294501,
|
||||
"error": "execution reverted",
|
||||
"result": {
|
||||
"gasUsed": "0x719b"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [],
|
||||
"type": "call"
|
||||
}
|
||||
]
|
||||
}
|
74
eth/tracers/internal/tracetest/testdata/call_tracer_flat/revert_reason.json
vendored
Normal file
74
eth/tracers/internal/tracetest/testdata/call_tracer_flat/revert_reason.json
vendored
Normal file
File diff suppressed because one or more lines are too long
91
eth/tracers/internal/tracetest/testdata/call_tracer_flat/selfdestruct.json
vendored
Normal file
91
eth/tracers/internal/tracetest/testdata/call_tracer_flat/selfdestruct.json
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4628640",
|
||||
"extraData": "0xd883010b05846765746888676f312e31342e33856c696e7578",
|
||||
"gasLimit": "9244120",
|
||||
"hash": "0x5a1f551897cc91265225b0453136ad8c7eef1c1c8b06139da4f2e6e710c1f4df",
|
||||
"miner": "0x73f26d124436b0791169d63a3af29c2ae47765a3",
|
||||
"mixHash": "0xd6735e63f8937fe0c5491e0d5836ec28467363be7ada5a2f979f9d107e2c831e",
|
||||
"nonce": "0x7c35e34d2e328d7d",
|
||||
"number": "1555145",
|
||||
"stateRoot": "0x565873b05f71b98595133e37a52d79c3476ce820c05ebedaddd35541b0e894a3",
|
||||
"timestamp": "1590793819",
|
||||
"totalDifficulty": "2241994078605",
|
||||
"alloc": {
|
||||
"0x119f569a45e9d0089d51d7f9529f5ea9bf5785e2": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x622e8fced69d43eb8d97",
|
||||
"nonce": "260140",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555146",
|
||||
"difficulty": "4630900",
|
||||
"timestamp": "1590793820",
|
||||
"gasLimit": "9253146",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf8628303f82c843b9aca0083019ecc80808e605a600053600160006001f0ff0081a2a077f539ae2a58746bbfa6370fc423f946870efa32753d697d3729d361a428623aa0384ef9a5650d6630f5c1ddef616bffa5fc72a95a9314361d0918de066aa4475a",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xcf08",
|
||||
"init": "0x605a600053600160006001f0ff00"
|
||||
},
|
||||
"result": {
|
||||
"gasUsed": "0x102a1",
|
||||
"code": "0x",
|
||||
"address": "0x1d99a1a3efa9181f540f9e24fa6e4e08eb7844ca"
|
||||
},
|
||||
"traceAddress": [],
|
||||
"subtraces": 1,
|
||||
"transactionPosition": 14,
|
||||
"transactionHash": "0xdd76f02407e2f8329303ba688e111cae4f7008ad0d14d6e42c5698424ea36d79",
|
||||
"blockNumber": 1555146,
|
||||
"blockHash": "0xafb4f1dd27b9054c805acb81a88ed04384788cb31d84164c21874935c81e5c7e",
|
||||
"time": "187.145µs"
|
||||
},
|
||||
{
|
||||
"type": "suicide",
|
||||
"action": {
|
||||
"address": "0x1d99a1a3efa9181f540f9e24fa6e4e08eb7844ca",
|
||||
"refundAddress": "0x0000000000000000000000000000000000000000",
|
||||
"balance": "0x0"
|
||||
},
|
||||
"result": null,
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 14,
|
||||
"transactionHash": "0xdd76f02407e2f8329303ba688e111cae4f7008ad0d14d6e42c5698424ea36d79",
|
||||
"blockNumber": 1555146,
|
||||
"blockHash": "0xafb4f1dd27b9054c805acb81a88ed04384788cb31d84164c21874935c81e5c7e"
|
||||
}
|
||||
]
|
||||
}
|
97
eth/tracers/internal/tracetest/testdata/call_tracer_flat/simple.json
vendored
Normal file
97
eth/tracers/internal/tracetest/testdata/call_tracer_flat/simple.json
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
{
|
||||
"context": {
|
||||
"difficulty": "3502894804",
|
||||
"gasLimit": "4722976",
|
||||
"miner": "0x1585936b53834b021f68cc13eeefdec2efc8e724",
|
||||
"number": "2289806",
|
||||
"timestamp": "1513601314"
|
||||
},
|
||||
"genesis": {
|
||||
"alloc": {
|
||||
"0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": {
|
||||
"balance": "0x0",
|
||||
"code": "0x",
|
||||
"nonce": "22",
|
||||
"storage": {}
|
||||
},
|
||||
"0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": {
|
||||
"balance": "0x4d87094125a369d9bd5",
|
||||
"code": "0x606060405236156100935763ffffffff60e060020a60003504166311ee8382811461009c57806313af4035146100be5780631f5e8f4c146100ee57806324daddc5146101125780634921a91a1461013b57806363e4bff414610157578063764978f91461017f578063893d20e8146101a1578063ba40aaa1146101cd578063cebc9a82146101f4578063e177246e14610216575b61009a5b5b565b005b34156100a457fe5b6100ac61023d565b60408051918252519081900360200190f35b34156100c657fe5b6100da600160a060020a0360043516610244565b604080519115158252519081900360200190f35b34156100f657fe5b6100da610307565b604080519115158252519081900360200190f35b341561011a57fe5b6100da6004351515610318565b604080519115158252519081900360200190f35b6100da6103d6565b604080519115158252519081900360200190f35b6100da600160a060020a0360043516610420565b604080519115158252519081900360200190f35b341561018757fe5b6100ac61046c565b60408051918252519081900360200190f35b34156101a957fe5b6101b1610473565b60408051600160a060020a039092168252519081900360200190f35b34156101d557fe5b6100da600435610483565b604080519115158252519081900360200190f35b34156101fc57fe5b6100ac61050d565b60408051918252519081900360200190f35b341561021e57fe5b6100da600435610514565b604080519115158252519081900360200190f35b6003545b90565b60006000610250610473565b600160a060020a031633600160a060020a03161415156102705760006000fd5b600160a060020a03831615156102865760006000fd5b50600054600160a060020a0390811690831681146102fb57604051600160a060020a0380851691908316907ffcf23a92150d56e85e3a3d33b357493246e55783095eb6a733eb8439ffc752c890600090a360008054600160a060020a031916600160a060020a03851617905560019150610300565b600091505b5b50919050565b60005460a060020a900460ff165b90565b60006000610324610473565b600160a060020a031633600160a060020a03161415156103445760006000fd5b5060005460a060020a900460ff16801515831515146102fb576000546040805160a060020a90920460ff1615158252841515602083015280517fe6cd46a119083b86efc6884b970bfa30c1708f53ba57b86716f15b2f4551a9539281900390910190a16000805460a060020a60ff02191660a060020a8515150217905560019150610300565b600091505b5b50919050565b60006103e0610307565b801561040557506103ef610473565b600160a060020a031633600160a060020a031614155b156104105760006000fd5b610419336105a0565b90505b5b90565b600061042a610307565b801561044f5750610439610473565b600160a060020a031633600160a060020a031614155b1561045a5760006000fd5b610463826105a0565b90505b5b919050565b6001545b90565b600054600160a060020a03165b90565b6000600061048f610473565b600160a060020a031633600160a060020a03161415156104af5760006000fd5b506001548281146102fb57604080518281526020810185905281517f79a3746dde45672c9e8ab3644b8bb9c399a103da2dc94b56ba09777330a83509929181900390910190a160018381559150610300565b600091505b5b50919050565b6002545b90565b60006000610520610473565b600160a060020a031633600160a060020a03161415156105405760006000fd5b506002548281146102fb57604080518281526020810185905281517ff6991a728965fedd6e927fdf16bdad42d8995970b4b31b8a2bf88767516e2494929181900390910190a1600283905560019150610300565b600091505b5b50919050565b60006000426105ad61023d565b116102fb576105c46105bd61050d565b4201610652565b6105cc61046c565b604051909150600160a060020a038416908290600081818185876187965a03f1925050501561063d57604080518281529051600160a060020a038516917f9bca65ce52fdef8a470977b51f247a2295123a4807dfa9e502edf0d30722da3b919081900360200190a260019150610300565b6102fb42610652565b5b600091505b50919050565b60038190555b505600a165627a7a72305820f3c973c8b7ed1f62000b6701bd5b708469e19d0f1d73fde378a56c07fd0b19090029",
|
||||
"nonce": "1",
|
||||
"storage": {
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000001b436ba50d378d4bbc8660d312a13df6af6e89dfb",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000006f05b59d3b20000",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000003c",
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b834"
|
||||
}
|
||||
},
|
||||
"0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": {
|
||||
"balance": "0x1780d77678137ac1b775",
|
||||
"code": "0x",
|
||||
"nonce": "29072",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"byzantiumBlock": 1700000,
|
||||
"chainId": 3,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 10,
|
||||
"eip158Block": 10,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0
|
||||
},
|
||||
"difficulty": "3509749784",
|
||||
"extraData": "0x4554482e45544846414e532e4f52472d4641313738394444",
|
||||
"gasLimit": "4727564",
|
||||
"hash": "0x609948ac3bd3c00b7736b933248891d6c901ee28f066241bddb28f4e00a9f440",
|
||||
"miner": "0xbbf5029fd710d227630c8b7d338051b8e76d50b3",
|
||||
"mixHash": "0xb131e4507c93c7377de00e7c271bf409ec7492767142ff0f45c882f8068c2ada",
|
||||
"nonce": "0x4eb12e19c16d43da",
|
||||
"number": "2289805",
|
||||
"stateRoot": "0xc7f10f352bff82fac3c2999d3085093d12652e19c7fd32591de49dc5d91b4f1f",
|
||||
"timestamp": "1513601261",
|
||||
"totalDifficulty": "7143276353481064"
|
||||
},
|
||||
"input": "0xf88b8271908506fc23ac0083015f90943b873a919aa0512d5a0f09e6dcceaa4a6727fafe80a463e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c52aa0bdce0b59e8761854e857fe64015f06dd08a4fbb7624f6094893a79a72e6ad6bea01d9dde033cff7bb235a3163f348a6d7ab8d6b52bc0963a95b91612e40ca766a4",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0xb436ba50d378d4bbc8660d312a13df6af6e89dfb",
|
||||
"gas": "0x10738",
|
||||
"input": "0x63e4bff40000000000000000000000000024f658a46fbb89d8ac105e98d7ac7cbbaf27c5",
|
||||
"to": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockNumber": 2289806,
|
||||
"result": {
|
||||
"gasUsed": "0x9751",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
|
||||
},
|
||||
"subtraces": 1,
|
||||
"traceAddress": [],
|
||||
"type": "call"
|
||||
},
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe",
|
||||
"gas": "0x6d05",
|
||||
"input": "0x",
|
||||
"to": "0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5",
|
||||
"value": "0x6f05b59d3b20000"
|
||||
},
|
||||
"blockNumber": 0,
|
||||
"result": {
|
||||
"gasUsed": "0x0",
|
||||
"output": "0x"
|
||||
},
|
||||
"subtraces": 0,
|
||||
"traceAddress": [0],
|
||||
"type": "call"
|
||||
}
|
||||
]
|
||||
}
|
70
eth/tracers/internal/tracetest/testdata/call_tracer_flat/skip_no_balance_error.json
vendored
Normal file
70
eth/tracers/internal/tracetest/testdata/call_tracer_flat/skip_no_balance_error.json
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"genesis": {
|
||||
"difficulty": "4673862",
|
||||
"extraData": "0xd683010b05846765746886676f312e3133856c696e7578",
|
||||
"gasLimit": "9471919",
|
||||
"hash": "0x7f072150c5905c214966e3432d418910badcdbe510aceaac295b1d7059cc0ffc",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"mixHash": "0x113ced8fedb939fdc862008da7bdddde726f997c0e6dfba0e55613994757b489",
|
||||
"nonce": "0x0f411a2e5552c5b7",
|
||||
"number": "1555284",
|
||||
"stateRoot": "0x9fe125b361b72d5479b24ad9be9964b74228c73a2dfb0065060a79b4a6dfaa1e",
|
||||
"timestamp": "1590795374",
|
||||
"totalDifficulty": "2242642335405",
|
||||
"alloc": {
|
||||
"0xe85df1413eebe1b191c26260e19783a274a6b041": {
|
||||
"balance": "0x0",
|
||||
"nonce": "0",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x6244c985ef1e48e84531",
|
||||
"nonce": "265775",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "1555285",
|
||||
"difficulty": "4676144",
|
||||
"timestamp": "1590795378",
|
||||
"gasLimit": "9481167",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf9014083040e2f843b9aca008301aab08080b8eb7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5547f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000037f05581a2a09db45e7846f193471f6d897fb6ff58b7ec41a9c6f63d10aca47d821c365981cba052ec320875625e16141a1a9e8b7993de863698fb699f93ae2cab26149bbb144f",
|
||||
"result": [
|
||||
{
|
||||
"type": "create",
|
||||
"action": {
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"value": "0x0",
|
||||
"gas": "0xd550",
|
||||
"init": "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5547f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000037f055"
|
||||
},
|
||||
"error": "out of gas",
|
||||
"traceAddress": [],
|
||||
"subtraces": 0,
|
||||
"transactionPosition": 16,
|
||||
"transactionHash": "0x384487e5ae8d2997aece8e28403d393cb9752425e6de358891bed981c5af1c05",
|
||||
"blockNumber": 1555285,
|
||||
"blockHash": "0x93231d8e9662adb4c5c703583a92c7b3112cd5448f43ab4fa1f0f00a0183ed3f",
|
||||
"time": "665.278µs"
|
||||
}
|
||||
]
|
||||
}
|
83
eth/tracers/internal/tracetest/testdata/call_tracer_flat/staticcall_precompiled.json
vendored
Normal file
83
eth/tracers/internal/tracetest/testdata/call_tracer_flat/staticcall_precompiled.json
vendored
Normal file
File diff suppressed because one or more lines are too long
92
eth/tracers/internal/tracetest/testdata/call_tracer_flat/suicide.json
vendored
Normal file
92
eth/tracers/internal/tracetest/testdata/call_tracer_flat/suicide.json
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
{
|
||||
"genesis": {
|
||||
"number": "553153",
|
||||
"hash": "0x88bde20840880a1f3fba92121912a3cc0d3b26d76e4d914fbd85fc2e43da3b3f",
|
||||
"nonce": "0x7be554ffe4b82fc2",
|
||||
"mixHash": "0xf73d2ff3c16599c3b8a24b9ebde6c09583b5ee3f747d3cd37845d564f4c8d87a",
|
||||
"stateRoot": "0x40b5f53d610108947688a04fb68838ff9c0aa0dd6e54156b682537192171ff5c",
|
||||
"miner": "0x774c398d763161f55b66a646f17edda4addad2ca",
|
||||
"difficulty": "1928226",
|
||||
"totalDifficulty": "457857582215",
|
||||
"extraData": "0xd983010907846765746888676f312e31332e358664617277696e",
|
||||
"gasLimit": "7999473",
|
||||
"timestamp": "1577392669",
|
||||
"alloc": {
|
||||
"0x877bd459c9b7d8576b44e59e09d076c25946f443": {
|
||||
"balance": "0x19bb4ac611ca7a1fc881",
|
||||
"nonce": "701",
|
||||
"code": "0x",
|
||||
"storage": {}
|
||||
},
|
||||
"0x8ee79c5b3f6e1d214d2c4fcf7ea4092a32e26e91": {
|
||||
"balance": "0x0",
|
||||
"nonce": "1",
|
||||
"code": "0x60606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b514610044578063cfae32171461005157610042565b005b61004f6004506100ca565b005b61005c60045061015e565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561015b57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60206040519081016040528060008152602001506001600050805480601f016020809104026020016040519081016040528092919081815260200182805480156101cd57820191906000526020600020905b8154815290600101906020018083116101b057829003601f168201915b505050505090506101d9565b9056",
|
||||
"storage": {
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"chainId": 63,
|
||||
"daoForkSupport": true,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"ethash": {},
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 301243,
|
||||
"petersburgBlock": 999983,
|
||||
"istanbulBlock": 999983
|
||||
}
|
||||
},
|
||||
"context": {
|
||||
"number": "553154",
|
||||
"difficulty": "1929167",
|
||||
"timestamp": "1577392670",
|
||||
"gasLimit": "8000000",
|
||||
"miner": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"input": "0xf86c8202bd850ee6b280008344aa20948ee79c5b3f6e1d214d2c4fcf7ea4092a32e26e91808441c0e1b581a2a03f95ca5cdf7fd727630341c4c6aa1b64ccd9949bd9ecc72cfdd7ce17a2013a69a06d34795ef7fb0108a6dbee4ae0a1bdc48dcd2a4ee53bb6a33d45515af07bb9a8",
|
||||
"result": [
|
||||
{
|
||||
"action": {
|
||||
"callType": "call",
|
||||
"from": "0x877bd459c9b7d8576b44e59e09d076c25946f443",
|
||||
"gas": "0x445708",
|
||||
"input": "0x41c0e1b5",
|
||||
"to": "0x8ee79c5b3f6e1d214d2c4fcf7ea4092a32e26e91",
|
||||
"value": "0x0"
|
||||
},
|
||||
"blockHash": "0xf641c3b0f82b07cd3a528adb9927dd83eeb4f1682e2bd523ed36888e0d82c9a9",
|
||||
"blockNumber": 553154,
|
||||
"result": {
|
||||
"gasUsed": "0x347a",
|
||||
"output": "0x"
|
||||
},
|
||||
"subtraces": 1,
|
||||
"traceAddress": [],
|
||||
"transactionHash": "0x6af0a5c3188ffacae4d340d4a17e14fdb5a54187683a80ef241bde248189882b",
|
||||
"transactionPosition": 15,
|
||||
"type": "call"
|
||||
},
|
||||
{
|
||||
"action": {
|
||||
"address": "0x8ee79c5b3f6e1d214d2c4fcf7ea4092a32e26e91",
|
||||
"balance": "0x0",
|
||||
"refundAddress": "0x877bd459c9b7d8576b44e59e09d076c25946f443"
|
||||
},
|
||||
"blockHash": "0xf641c3b0f82b07cd3a528adb9927dd83eeb4f1682e2bd523ed36888e0d82c9a9",
|
||||
"blockNumber": 553154,
|
||||
"subtraces": 0,
|
||||
"traceAddress": [
|
||||
0
|
||||
],
|
||||
"transactionHash": "0x6af0a5c3188ffacae4d340d4a17e14fdb5a54187683a80ef241bde248189882b",
|
||||
"transactionPosition": 15,
|
||||
"type": "suicide"
|
||||
}
|
||||
]
|
||||
}
|
70
eth/tracers/internal/tracetest/testdata/call_tracer_flat/throw.json
vendored
Normal file
70
eth/tracers/internal/tracetest/testdata/call_tracer_flat/throw.json
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -240,6 +240,7 @@ func (t *callTracer) GetResult() (json.RawMessage, error) {
|
||||
if len(t.callstack) != 1 {
|
||||
return nil, errors.New("incorrect number of top-level calls")
|
||||
}
|
||||
|
||||
res, err := json.Marshal(t.callstack[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
379
eth/tracers/native/call_flat.go
Normal file
379
eth/tracers/native/call_flat.go
Normal file
@ -0,0 +1,379 @@
|
||||
// Copyright 2022 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package native
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"strings"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
"github.com/ethereum/go-ethereum/core/vm"
|
||||
"github.com/ethereum/go-ethereum/eth/tracers"
|
||||
)
|
||||
|
||||
//go:generate go run github.com/fjl/gencodec -type flatCallAction -field-override flatCallActionMarshaling -out gen_flatcallaction_json.go
|
||||
//go:generate go run github.com/fjl/gencodec -type flatCallResult -field-override flatCallResultMarshaling -out gen_flatcallresult_json.go
|
||||
|
||||
func init() {
|
||||
tracers.DefaultDirectory.Register("flatCallTracer", newFlatCallTracer, false)
|
||||
}
|
||||
|
||||
var parityErrorMapping = map[string]string{
|
||||
"contract creation code storage out of gas": "Out of gas",
|
||||
"out of gas": "Out of gas",
|
||||
"gas uint64 overflow": "Out of gas",
|
||||
"max code size exceeded": "Out of gas",
|
||||
"invalid jump destination": "Bad jump destination",
|
||||
"execution reverted": "Reverted",
|
||||
"return data out of bounds": "Out of bounds",
|
||||
"stack limit reached 1024 (1023)": "Out of stack",
|
||||
"precompiled failed": "Built-in failed",
|
||||
"invalid input length": "Built-in failed",
|
||||
}
|
||||
|
||||
var parityErrorMappingStartingWith = map[string]string{
|
||||
"invalid opcode:": "Bad instruction",
|
||||
"stack underflow": "Stack underflow",
|
||||
}
|
||||
|
||||
// flatCallFrame is a standalone callframe.
|
||||
type flatCallFrame struct {
|
||||
Action flatCallAction `json:"action"`
|
||||
BlockHash *common.Hash `json:"blockHash"`
|
||||
BlockNumber uint64 `json:"blockNumber"`
|
||||
Error string `json:"error,omitempty"`
|
||||
Result *flatCallResult `json:"result,omitempty"`
|
||||
Subtraces int `json:"subtraces"`
|
||||
TraceAddress []int `json:"traceAddress"`
|
||||
TransactionHash *common.Hash `json:"transactionHash"`
|
||||
TransactionPosition uint64 `json:"transactionPosition"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
|
||||
type flatCallAction struct {
|
||||
Author *common.Address `json:"author,omitempty"`
|
||||
RewardType string `json:"rewardType,omitempty"`
|
||||
SelfDestructed *common.Address `json:"address,omitempty"`
|
||||
Balance *big.Int `json:"balance,omitempty"`
|
||||
CallType string `json:"callType,omitempty"`
|
||||
CreationMethod string `json:"creationMethod,omitempty"`
|
||||
From *common.Address `json:"from,omitempty"`
|
||||
Gas *uint64 `json:"gas,omitempty"`
|
||||
Init *[]byte `json:"init,omitempty"`
|
||||
Input *[]byte `json:"input,omitempty"`
|
||||
RefundAddress *common.Address `json:"refundAddress,omitempty"`
|
||||
To *common.Address `json:"to,omitempty"`
|
||||
Value *big.Int `json:"value,omitempty"`
|
||||
}
|
||||
|
||||
type flatCallActionMarshaling struct {
|
||||
Balance *hexutil.Big
|
||||
Gas *hexutil.Uint64
|
||||
Init *hexutil.Bytes
|
||||
Input *hexutil.Bytes
|
||||
Value *hexutil.Big
|
||||
}
|
||||
|
||||
type flatCallResult struct {
|
||||
Address *common.Address `json:"address,omitempty"`
|
||||
Code *[]byte `json:"code,omitempty"`
|
||||
GasUsed *uint64 `json:"gasUsed,omitempty"`
|
||||
Output *[]byte `json:"output,omitempty"`
|
||||
}
|
||||
|
||||
type flatCallResultMarshaling struct {
|
||||
Code *hexutil.Bytes
|
||||
GasUsed *hexutil.Uint64
|
||||
Output *hexutil.Bytes
|
||||
}
|
||||
|
||||
// flatCallTracer reports call frame information of a tx in a flat format, i.e.
|
||||
// as opposed to the nested format of `callTracer`.
|
||||
type flatCallTracer struct {
|
||||
tracer *callTracer
|
||||
config flatCallTracerConfig
|
||||
ctx *tracers.Context // Holds tracer context data
|
||||
reason error // Textual reason for the interruption
|
||||
activePrecompiles []common.Address // Updated on CaptureStart based on given rules
|
||||
}
|
||||
|
||||
type flatCallTracerConfig struct {
|
||||
ConvertParityErrors bool `json:"convertParityErrors"` // If true, call tracer converts errors to parity format
|
||||
IncludePrecompiles bool `json:"includePrecompiles"` // If true, call tracer includes calls to precompiled contracts
|
||||
}
|
||||
|
||||
// newFlatCallTracer returns a new flatCallTracer.
|
||||
func newFlatCallTracer(ctx *tracers.Context, cfg json.RawMessage) (tracers.Tracer, error) {
|
||||
var config flatCallTracerConfig
|
||||
if cfg != nil {
|
||||
if err := json.Unmarshal(cfg, &config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
tracer, err := tracers.DefaultDirectory.New("callTracer", ctx, cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t, ok := tracer.(*callTracer)
|
||||
if !ok {
|
||||
return nil, errors.New("internal error: embedded tracer has wrong type")
|
||||
}
|
||||
|
||||
return &flatCallTracer{tracer: t, ctx: ctx, config: config}, nil
|
||||
}
|
||||
|
||||
// CaptureStart implements the EVMLogger interface to initialize the tracing operation.
|
||||
func (t *flatCallTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) {
|
||||
t.tracer.CaptureStart(env, from, to, create, input, gas, value)
|
||||
// Update list of precompiles based on current block
|
||||
rules := env.ChainConfig().Rules(env.Context.BlockNumber, env.Context.Random != nil, env.Context.Time)
|
||||
t.activePrecompiles = vm.ActivePrecompiles(rules)
|
||||
}
|
||||
|
||||
// CaptureEnd is called after the call finishes to finalize the tracing.
|
||||
func (t *flatCallTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {
|
||||
t.tracer.CaptureEnd(output, gasUsed, err)
|
||||
}
|
||||
|
||||
// CaptureState implements the EVMLogger interface to trace a single step of VM execution.
|
||||
func (t *flatCallTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) {
|
||||
t.tracer.CaptureState(pc, op, gas, cost, scope, rData, depth, err)
|
||||
}
|
||||
|
||||
// CaptureFault implements the EVMLogger interface to trace an execution fault.
|
||||
func (t *flatCallTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) {
|
||||
t.tracer.CaptureFault(pc, op, gas, cost, scope, depth, err)
|
||||
}
|
||||
|
||||
// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct).
|
||||
func (t *flatCallTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) {
|
||||
t.tracer.CaptureEnter(typ, from, to, input, gas, value)
|
||||
|
||||
// Child calls must have a value, even if it's zero.
|
||||
// Practically speaking, only STATICCALL has nil value. Set it to zero.
|
||||
if t.tracer.callstack[len(t.tracer.callstack)-1].Value == nil && value == nil {
|
||||
t.tracer.callstack[len(t.tracer.callstack)-1].Value = big.NewInt(0)
|
||||
}
|
||||
}
|
||||
|
||||
// CaptureExit is called when EVM exits a scope, even if the scope didn't
|
||||
// execute any code.
|
||||
func (t *flatCallTracer) CaptureExit(output []byte, gasUsed uint64, err error) {
|
||||
t.tracer.CaptureExit(output, gasUsed, err)
|
||||
|
||||
// Parity traces don't include CALL/STATICCALLs to precompiles.
|
||||
// By default we remove them from the callstack.
|
||||
if t.config.IncludePrecompiles {
|
||||
return
|
||||
}
|
||||
var (
|
||||
// call has been nested in parent
|
||||
parent = t.tracer.callstack[len(t.tracer.callstack)-1]
|
||||
call = parent.Calls[len(parent.Calls)-1]
|
||||
typ = call.Type
|
||||
to = call.To
|
||||
)
|
||||
if typ == vm.CALL || typ == vm.STATICCALL {
|
||||
if t.isPrecompiled(to) {
|
||||
t.tracer.callstack[len(t.tracer.callstack)-1].Calls = parent.Calls[:len(parent.Calls)-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (t *flatCallTracer) CaptureTxStart(gasLimit uint64) {
|
||||
t.tracer.CaptureTxStart(gasLimit)
|
||||
}
|
||||
|
||||
func (t *flatCallTracer) CaptureTxEnd(restGas uint64) {
|
||||
t.tracer.CaptureTxEnd(restGas)
|
||||
}
|
||||
|
||||
// GetResult returns an empty json object.
|
||||
func (t *flatCallTracer) GetResult() (json.RawMessage, error) {
|
||||
if len(t.tracer.callstack) < 1 {
|
||||
return nil, errors.New("invalid number of calls")
|
||||
}
|
||||
|
||||
flat, err := flatFromNested(&t.tracer.callstack[0], []int{}, t.config.ConvertParityErrors, t.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res, err := json.Marshal(flat)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return res, t.reason
|
||||
}
|
||||
|
||||
// Stop terminates execution of the tracer at the first opportune moment.
|
||||
func (t *flatCallTracer) Stop(err error) {
|
||||
t.tracer.Stop(err)
|
||||
}
|
||||
|
||||
// isPrecompiled returns whether the addr is a precompile.
|
||||
func (t *flatCallTracer) isPrecompiled(addr common.Address) bool {
|
||||
for _, p := range t.activePrecompiles {
|
||||
if p == addr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func flatFromNested(input *callFrame, traceAddress []int, convertErrs bool, ctx *tracers.Context) (output []flatCallFrame, err error) {
|
||||
var frame *flatCallFrame
|
||||
switch input.Type {
|
||||
case vm.CREATE, vm.CREATE2:
|
||||
frame = newFlatCreate(input)
|
||||
case vm.SELFDESTRUCT:
|
||||
frame = newFlatSuicide(input)
|
||||
case vm.CALL, vm.STATICCALL, vm.CALLCODE, vm.DELEGATECALL:
|
||||
frame = newFlatCall(input)
|
||||
default:
|
||||
return nil, fmt.Errorf("unrecognized call frame type: %s", input.Type)
|
||||
}
|
||||
|
||||
frame.TraceAddress = traceAddress
|
||||
frame.Error = input.Error
|
||||
frame.Subtraces = len(input.Calls)
|
||||
fillCallFrameFromContext(frame, ctx)
|
||||
if convertErrs {
|
||||
convertErrorToParity(frame)
|
||||
}
|
||||
|
||||
// Revert output contains useful information (revert reason).
|
||||
// Otherwise discard result.
|
||||
if input.Error != "" && input.Error != vm.ErrExecutionReverted.Error() {
|
||||
frame.Result = nil
|
||||
}
|
||||
|
||||
output = append(output, *frame)
|
||||
if len(input.Calls) > 0 {
|
||||
for i, childCall := range input.Calls {
|
||||
childAddr := childTraceAddress(traceAddress, i)
|
||||
childCallCopy := childCall
|
||||
flat, err := flatFromNested(&childCallCopy, childAddr, convertErrs, ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
output = append(output, flat...)
|
||||
}
|
||||
}
|
||||
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func newFlatCreate(input *callFrame) *flatCallFrame {
|
||||
var (
|
||||
actionInit = input.Input[:]
|
||||
resultCode = input.Output[:]
|
||||
)
|
||||
|
||||
return &flatCallFrame{
|
||||
Type: strings.ToLower(vm.CREATE.String()),
|
||||
Action: flatCallAction{
|
||||
From: &input.From,
|
||||
Gas: &input.Gas,
|
||||
Value: input.Value,
|
||||
Init: &actionInit,
|
||||
},
|
||||
Result: &flatCallResult{
|
||||
GasUsed: &input.GasUsed,
|
||||
Address: &input.To,
|
||||
Code: &resultCode,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func newFlatCall(input *callFrame) *flatCallFrame {
|
||||
var (
|
||||
actionInput = input.Input[:]
|
||||
resultOutput = input.Output[:]
|
||||
)
|
||||
|
||||
return &flatCallFrame{
|
||||
Type: strings.ToLower(vm.CALL.String()),
|
||||
Action: flatCallAction{
|
||||
From: &input.From,
|
||||
To: &input.To,
|
||||
Gas: &input.Gas,
|
||||
Value: input.Value,
|
||||
CallType: strings.ToLower(input.Type.String()),
|
||||
Input: &actionInput,
|
||||
},
|
||||
Result: &flatCallResult{
|
||||
GasUsed: &input.GasUsed,
|
||||
Output: &resultOutput,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func newFlatSuicide(input *callFrame) *flatCallFrame {
|
||||
return &flatCallFrame{
|
||||
Type: "suicide",
|
||||
Action: flatCallAction{
|
||||
SelfDestructed: &input.From,
|
||||
Balance: input.Value,
|
||||
RefundAddress: &input.To,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func fillCallFrameFromContext(callFrame *flatCallFrame, ctx *tracers.Context) {
|
||||
if ctx == nil {
|
||||
return
|
||||
}
|
||||
if ctx.BlockHash != (common.Hash{}) {
|
||||
callFrame.BlockHash = &ctx.BlockHash
|
||||
}
|
||||
if ctx.BlockNumber != nil {
|
||||
callFrame.BlockNumber = ctx.BlockNumber.Uint64()
|
||||
}
|
||||
if ctx.TxHash != (common.Hash{}) {
|
||||
callFrame.TransactionHash = &ctx.TxHash
|
||||
}
|
||||
callFrame.TransactionPosition = uint64(ctx.TxIndex)
|
||||
}
|
||||
|
||||
func convertErrorToParity(call *flatCallFrame) {
|
||||
if call.Error == "" {
|
||||
return
|
||||
}
|
||||
|
||||
if parityError, ok := parityErrorMapping[call.Error]; ok {
|
||||
call.Error = parityError
|
||||
} else {
|
||||
for gethError, parityError := range parityErrorMappingStartingWith {
|
||||
if strings.HasPrefix(call.Error, gethError) {
|
||||
call.Error = parityError
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func childTraceAddress(a []int, i int) []int {
|
||||
child := make([]int, 0, len(a)+1)
|
||||
child = append(child, a...)
|
||||
child = append(child, i)
|
||||
return child
|
||||
}
|
110
eth/tracers/native/gen_flatcallaction_json.go
Normal file
110
eth/tracers/native/gen_flatcallaction_json.go
Normal file
@ -0,0 +1,110 @@
|
||||
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
|
||||
|
||||
package native
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
)
|
||||
|
||||
var _ = (*flatCallActionMarshaling)(nil)
|
||||
|
||||
// MarshalJSON marshals as JSON.
|
||||
func (f flatCallAction) MarshalJSON() ([]byte, error) {
|
||||
type flatCallAction struct {
|
||||
Author *common.Address `json:"author,omitempty"`
|
||||
RewardType string `json:"rewardType,omitempty"`
|
||||
SelfDestructed *common.Address `json:"address,omitempty"`
|
||||
Balance *hexutil.Big `json:"balance,omitempty"`
|
||||
CallType string `json:"callType,omitempty"`
|
||||
CreationMethod string `json:"creationMethod,omitempty"`
|
||||
From *common.Address `json:"from,omitempty"`
|
||||
Gas *hexutil.Uint64 `json:"gas,omitempty"`
|
||||
Init *hexutil.Bytes `json:"init,omitempty"`
|
||||
Input *hexutil.Bytes `json:"input,omitempty"`
|
||||
RefundAddress *common.Address `json:"refundAddress,omitempty"`
|
||||
To *common.Address `json:"to,omitempty"`
|
||||
Value *hexutil.Big `json:"value,omitempty"`
|
||||
}
|
||||
var enc flatCallAction
|
||||
enc.Author = f.Author
|
||||
enc.RewardType = f.RewardType
|
||||
enc.SelfDestructed = f.SelfDestructed
|
||||
enc.Balance = (*hexutil.Big)(f.Balance)
|
||||
enc.CallType = f.CallType
|
||||
enc.CreationMethod = f.CreationMethod
|
||||
enc.From = f.From
|
||||
enc.Gas = (*hexutil.Uint64)(f.Gas)
|
||||
enc.Init = (*hexutil.Bytes)(f.Init)
|
||||
enc.Input = (*hexutil.Bytes)(f.Input)
|
||||
enc.RefundAddress = f.RefundAddress
|
||||
enc.To = f.To
|
||||
enc.Value = (*hexutil.Big)(f.Value)
|
||||
return json.Marshal(&enc)
|
||||
}
|
||||
|
||||
// UnmarshalJSON unmarshals from JSON.
|
||||
func (f *flatCallAction) UnmarshalJSON(input []byte) error {
|
||||
type flatCallAction struct {
|
||||
Author *common.Address `json:"author,omitempty"`
|
||||
RewardType *string `json:"rewardType,omitempty"`
|
||||
SelfDestructed *common.Address `json:"address,omitempty"`
|
||||
Balance *hexutil.Big `json:"balance,omitempty"`
|
||||
CallType *string `json:"callType,omitempty"`
|
||||
CreationMethod *string `json:"creationMethod,omitempty"`
|
||||
From *common.Address `json:"from,omitempty"`
|
||||
Gas *hexutil.Uint64 `json:"gas,omitempty"`
|
||||
Init *hexutil.Bytes `json:"init,omitempty"`
|
||||
Input *hexutil.Bytes `json:"input,omitempty"`
|
||||
RefundAddress *common.Address `json:"refundAddress,omitempty"`
|
||||
To *common.Address `json:"to,omitempty"`
|
||||
Value *hexutil.Big `json:"value,omitempty"`
|
||||
}
|
||||
var dec flatCallAction
|
||||
if err := json.Unmarshal(input, &dec); err != nil {
|
||||
return err
|
||||
}
|
||||
if dec.Author != nil {
|
||||
f.Author = dec.Author
|
||||
}
|
||||
if dec.RewardType != nil {
|
||||
f.RewardType = *dec.RewardType
|
||||
}
|
||||
if dec.SelfDestructed != nil {
|
||||
f.SelfDestructed = dec.SelfDestructed
|
||||
}
|
||||
if dec.Balance != nil {
|
||||
f.Balance = (*big.Int)(dec.Balance)
|
||||
}
|
||||
if dec.CallType != nil {
|
||||
f.CallType = *dec.CallType
|
||||
}
|
||||
if dec.CreationMethod != nil {
|
||||
f.CreationMethod = *dec.CreationMethod
|
||||
}
|
||||
if dec.From != nil {
|
||||
f.From = dec.From
|
||||
}
|
||||
if dec.Gas != nil {
|
||||
f.Gas = (*uint64)(dec.Gas)
|
||||
}
|
||||
if dec.Init != nil {
|
||||
f.Init = (*[]byte)(dec.Init)
|
||||
}
|
||||
if dec.Input != nil {
|
||||
f.Input = (*[]byte)(dec.Input)
|
||||
}
|
||||
if dec.RefundAddress != nil {
|
||||
f.RefundAddress = dec.RefundAddress
|
||||
}
|
||||
if dec.To != nil {
|
||||
f.To = dec.To
|
||||
}
|
||||
if dec.Value != nil {
|
||||
f.Value = (*big.Int)(dec.Value)
|
||||
}
|
||||
return nil
|
||||
}
|
55
eth/tracers/native/gen_flatcallresult_json.go
Normal file
55
eth/tracers/native/gen_flatcallresult_json.go
Normal file
@ -0,0 +1,55 @@
|
||||
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
|
||||
|
||||
package native
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
)
|
||||
|
||||
var _ = (*flatCallResultMarshaling)(nil)
|
||||
|
||||
// MarshalJSON marshals as JSON.
|
||||
func (f flatCallResult) MarshalJSON() ([]byte, error) {
|
||||
type flatCallResult struct {
|
||||
Address *common.Address `json:"address,omitempty"`
|
||||
Code *hexutil.Bytes `json:"code,omitempty"`
|
||||
GasUsed *hexutil.Uint64 `json:"gasUsed,omitempty"`
|
||||
Output *hexutil.Bytes `json:"output,omitempty"`
|
||||
}
|
||||
var enc flatCallResult
|
||||
enc.Address = f.Address
|
||||
enc.Code = (*hexutil.Bytes)(f.Code)
|
||||
enc.GasUsed = (*hexutil.Uint64)(f.GasUsed)
|
||||
enc.Output = (*hexutil.Bytes)(f.Output)
|
||||
return json.Marshal(&enc)
|
||||
}
|
||||
|
||||
// UnmarshalJSON unmarshals from JSON.
|
||||
func (f *flatCallResult) UnmarshalJSON(input []byte) error {
|
||||
type flatCallResult struct {
|
||||
Address *common.Address `json:"address,omitempty"`
|
||||
Code *hexutil.Bytes `json:"code,omitempty"`
|
||||
GasUsed *hexutil.Uint64 `json:"gasUsed,omitempty"`
|
||||
Output *hexutil.Bytes `json:"output,omitempty"`
|
||||
}
|
||||
var dec flatCallResult
|
||||
if err := json.Unmarshal(input, &dec); err != nil {
|
||||
return err
|
||||
}
|
||||
if dec.Address != nil {
|
||||
f.Address = dec.Address
|
||||
}
|
||||
if dec.Code != nil {
|
||||
f.Code = (*[]byte)(dec.Code)
|
||||
}
|
||||
if dec.GasUsed != nil {
|
||||
f.GasUsed = (*uint64)(dec.GasUsed)
|
||||
}
|
||||
if dec.Output != nil {
|
||||
f.Output = (*[]byte)(dec.Output)
|
||||
}
|
||||
return nil
|
||||
}
|
@ -19,6 +19,7 @@ package tracers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"math/big"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/vm"
|
||||
@ -27,9 +28,10 @@ import (
|
||||
// Context contains some contextual infos for a transaction execution that is not
|
||||
// available from within the EVM object.
|
||||
type Context struct {
|
||||
BlockHash common.Hash // Hash of the block the tx is contained within (zero if dangling tx or call)
|
||||
TxIndex int // Index of the transaction within a block (zero if dangling tx or call)
|
||||
TxHash common.Hash // Hash of the transaction being traced (zero if dangling call)
|
||||
BlockHash common.Hash // Hash of the block the tx is contained within (zero if dangling tx or call)
|
||||
BlockNumber *big.Int // Number of the block the tx is contained within (zero if dangling tx or call)
|
||||
TxIndex int // Index of the transaction within a block (zero if dangling tx or call)
|
||||
TxHash common.Hash // Hash of the transaction being traced (zero if dangling call)
|
||||
}
|
||||
|
||||
// Tracer interface extends vm.EVMLogger and additionally
|
||||
|
Loading…
Reference in New Issue
Block a user