mirror of https://github.com/ethereum/go-ethereum
eth/tracers: add diffMode to prestateTracer (#25422)
Backwards compatibility warning: The result will from now on omit empty fields instead of including a zero value (e.g. no more `balance: '0x'`). The prestateTracer will now take an option `diffMode: bool`. In this mode the tracer will output the pre state and post data for the modified parts of state. Read-only accesses will be completely omitted. Creations (be it account or slot) will be signified by omission in the `pre` list and inclusion in `post`. Whereas deletion (be it account or slot) will be signified by inclusion in `pre` and omission in `post` list. Signed-off-by: Delweng <delweng@gmail.com>pull/25939/head
parent
e14164d516
commit
5d52a35931
@ -0,0 +1,144 @@ |
||||
// Copyright 2021 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 tracetest |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"math/big" |
||||
"os" |
||||
"path/filepath" |
||||
"strings" |
||||
"testing" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
"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/eth/tracers" |
||||
"github.com/ethereum/go-ethereum/rlp" |
||||
"github.com/ethereum/go-ethereum/tests" |
||||
) |
||||
|
||||
// prestateTrace is the result of a prestateTrace run.
|
||||
type prestateTrace = map[common.Address]*account |
||||
type account struct { |
||||
Balance string `json:"balance,omitempty"` |
||||
Nonce uint64 `json:"nonce,omitempty"` |
||||
Code string `json:"code,omitempty"` |
||||
Storage map[common.Hash]common.Hash `json:"storage,omitempty"` |
||||
} |
||||
type prePostStateTrace struct { |
||||
Pre prestateTrace `json:"pre"` |
||||
Post prestateTrace `json:"post"` |
||||
} |
||||
|
||||
// prestateTraceTest defines a single test to check the stateDiff tracer against.
|
||||
type prestateTraceTest struct { |
||||
Genesis *core.Genesis `json:"genesis"` |
||||
Context *callContext `json:"context"` |
||||
Input string `json:"input"` |
||||
TracerConfig json.RawMessage `json:"tracerConfig"` |
||||
Result interface{} `json:"result"` |
||||
} |
||||
|
||||
func TestPrestateTracer(t *testing.T) { |
||||
testPrestateDiffTracer("prestateTracer", "prestate_tracer", t, func() interface{} { return new(prestateTrace) }) |
||||
} |
||||
|
||||
func TestPrestateWithDiffModeTracer(t *testing.T) { |
||||
testPrestateDiffTracer("prestateTracer", "prestate_tracer_with_diff_mode", t, func() interface{} { return new(prePostStateTrace) }) |
||||
} |
||||
|
||||
func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T, typeBuilder func() interface{}) { |
||||
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() |
||||
|
||||
var ( |
||||
test = new(prestateTraceTest) |
||||
tx = new(types.Transaction) |
||||
) |
||||
// Call tracer test found, read if from disk
|
||||
if blob, err := os.ReadFile(filepath.Join("testdata", dirPath, file.Name())); err != nil { |
||||
t.Fatalf("failed to read testcase: %v", err) |
||||
} else if err := json.Unmarshal(blob, test); err != nil { |
||||
t.Fatalf("failed to parse testcase: %v", err) |
||||
} |
||||
if err := rlp.DecodeBytes(common.FromHex(test.Input), tx); err != nil { |
||||
t.Fatalf("failed to parse testcase input: %v", err) |
||||
} |
||||
// Configure a blockchain with the given prestate
|
||||
var ( |
||||
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: new(big.Int).SetUint64(uint64(test.Context.Time)), |
||||
Difficulty: (*big.Int)(test.Context.Difficulty), |
||||
GasLimit: uint64(test.Context.GasLimit), |
||||
} |
||||
_, statedb = tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc, false) |
||||
) |
||||
tracer, err := tracers.New(tracerName, new(tracers.Context), test.TracerConfig) |
||||
if err != nil { |
||||
t.Fatalf("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 { |
||||
t.Fatalf("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 { |
||||
t.Fatalf("failed to execute transaction: %v", err) |
||||
} |
||||
// Retrieve the trace result and compare against the etalon
|
||||
res, err := tracer.GetResult() |
||||
if err != nil { |
||||
t.Fatalf("failed to retrieve trace result: %v", err) |
||||
} |
||||
ret := typeBuilder() |
||||
if err := json.Unmarshal(res, ret); err != nil { |
||||
t.Fatalf("failed to unmarshal trace result: %v", err) |
||||
} |
||||
|
||||
if !jsonEqual(ret, test.Result, typeBuilder(), typeBuilder()) { |
||||
// uncomment this for easier debugging
|
||||
// have, _ := json.MarshalIndent(ret, "", " ")
|
||||
// want, _ := json.MarshalIndent(test.Result, "", " ")
|
||||
// t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want))
|
||||
t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result) |
||||
} |
||||
}) |
||||
} |
||||
} |
@ -0,0 +1,84 @@ |
||||
{ |
||||
"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": { |
||||
"0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { |
||||
"balance": "0x0", |
||||
"nonce": 22 |
||||
}, |
||||
"0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { |
||||
"balance": "0x4d87094125a369d9bd5", |
||||
"nonce": 1, |
||||
"code": "0x606060405236156100935763ffffffff60e060020a60003504166311ee8382811461009c57806313af4035146100be5780631f5e8f4c146100ee57806324daddc5146101125780634921a91a1461013b57806363e4bff414610157578063764978f91461017f578063893d20e8146101a1578063ba40aaa1146101cd578063cebc9a82146101f4578063e177246e14610216575b61009a5b5b565b005b34156100a457fe5b6100ac61023d565b60408051918252519081900360200190f35b34156100c657fe5b6100da600160a060020a0360043516610244565b604080519115158252519081900360200190f35b34156100f657fe5b6100da610307565b604080519115158252519081900360200190f35b341561011a57fe5b6100da6004351515610318565b604080519115158252519081900360200190f35b6100da6103d6565b604080519115158252519081900360200190f35b6100da600160a060020a0360043516610420565b604080519115158252519081900360200190f35b341561018757fe5b6100ac61046c565b60408051918252519081900360200190f35b34156101a957fe5b6101b1610473565b60408051600160a060020a039092168252519081900360200190f35b34156101d557fe5b6100da600435610483565b604080519115158252519081900360200190f35b34156101fc57fe5b6100ac61050d565b60408051918252519081900360200190f35b341561021e57fe5b6100da600435610514565b604080519115158252519081900360200190f35b6003545b90565b60006000610250610473565b600160a060020a031633600160a060020a03161415156102705760006000fd5b600160a060020a03831615156102865760006000fd5b50600054600160a060020a0390811690831681146102fb57604051600160a060020a0380851691908316907ffcf23a92150d56e85e3a3d33b357493246e55783095eb6a733eb8439ffc752c890600090a360008054600160a060020a031916600160a060020a03851617905560019150610300565b600091505b5b50919050565b60005460a060020a900460ff165b90565b60006000610324610473565b600160a060020a031633600160a060020a03161415156103445760006000fd5b5060005460a060020a900460ff16801515831515146102fb576000546040805160a060020a90920460ff1615158252841515602083015280517fe6cd46a119083b86efc6884b970bfa30c1708f53ba57b86716f15b2f4551a9539281900390910190a16000805460a060020a60ff02191660a060020a8515150217905560019150610300565b600091505b5b50919050565b60006103e0610307565b801561040557506103ef610473565b600160a060020a031633600160a060020a031614155b156104105760006000fd5b610419336105a0565b90505b5b90565b600061042a610307565b801561044f5750610439610473565b600160a060020a031633600160a060020a031614155b1561045a5760006000fd5b610463826105a0565b90505b5b919050565b6001545b90565b600054600160a060020a03165b90565b6000600061048f610473565b600160a060020a031633600160a060020a03161415156104af5760006000fd5b506001548281146102fb57604080518281526020810185905281517f79a3746dde45672c9e8ab3644b8bb9c399a103da2dc94b56ba09777330a83509929181900390910190a160018381559150610300565b600091505b5b50919050565b6002545b90565b60006000610520610473565b600160a060020a031633600160a060020a03161415156105405760006000fd5b506002548281146102fb57604080518281526020810185905281517ff6991a728965fedd6e927fdf16bdad42d8995970b4b31b8a2bf88767516e2494929181900390910190a1600283905560019150610300565b600091505b5b50919050565b60006000426105ad61023d565b116102fb576105c46105bd61050d565b4201610652565b6105cc61046c565b604051909150600160a060020a038416908290600081818185876187965a03f1925050501561063d57604080518281529051600160a060020a038516917f9bca65ce52fdef8a470977b51f247a2295123a4807dfa9e502edf0d30722da3b919081900360200190a260019150610300565b6102fb42610652565b5b600091505b50919050565b60038190555b505600a165627a7a72305820f3c973c8b7ed1f62000b6701bd5b708469e19d0f1d73fde378a56c07fd0b19090029", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000001b436ba50d378d4bbc8660d312a13df6af6e89dfb", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000006f05b59d3b20000", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000003c", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b834" |
||||
} |
||||
}, |
||||
"0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { |
||||
"balance": "0x1780d77678137ac1b775", |
||||
"nonce": 29072 |
||||
}, |
||||
"0x1585936b53834b021f68cc13eeefdec2efc8e724": { |
||||
"balance": "0x0", |
||||
"nonce": 0 |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,102 @@ |
||||
{ |
||||
"genesis": { |
||||
"difficulty": "13756228101629", |
||||
"extraData": "0xd983010302844765746887676f312e342e328777696e646f7773", |
||||
"gasLimit": "3141592", |
||||
"hash": "0x58b7a87b6ba10b46b4e251d64ebc3d9822dd82218eaf24dff6796f6f1f687251", |
||||
"miner": "0xf8b483dba2c3b7176a3da549ad41a48bb3121069", |
||||
"mixHash": "0x5984b9a316116bd890e6e5f4c52d655184b0d7aa74821e1382d7760f9803c1dd", |
||||
"nonce": "0xea4bb4997242c681", |
||||
"number": "1061221", |
||||
"stateRoot": "0x5402c04d481414248d824c3b61e924e0c9307adbc9fbaae774a74cce30a4163d", |
||||
"timestamp": "1456458069", |
||||
"totalDifficulty": "7930751135586064334", |
||||
"alloc": { |
||||
"0x2a65aca4d5fc5b5c859090a6c34d164135398226": { |
||||
"balance": "0x9fb6b81e112638b886", |
||||
"nonce": "217865", |
||||
"code": "0x" |
||||
}, |
||||
"0xf0c5cef39b17c213cfe090a46b8c7760ffb7928a": { |
||||
"balance": "0x15b6828e22bb12188", |
||||
"nonce": "747", |
||||
"code": "0x" |
||||
} |
||||
}, |
||||
"config": { |
||||
"chainId": 1, |
||||
"homesteadBlock": 1150000, |
||||
"daoForkBlock": 1920000, |
||||
"daoForkSupport": true, |
||||
"eip150Block": 2463000, |
||||
"eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0", |
||||
"eip155Block": 2675000, |
||||
"eip158Block": 2675000, |
||||
"byzantiumBlock": 4370000, |
||||
"constantinopleBlock": 7280000, |
||||
"petersburgBlock": 7280000, |
||||
"istanbulBlock": 9069000, |
||||
"muirGlacierBlock": 9200000, |
||||
"berlinBlock": 12244000, |
||||
"londonBlock": 12965000, |
||||
"arrowGlacierBlock": 13773000, |
||||
"grayGlacierBlock": 15050000, |
||||
"ethash": {} |
||||
} |
||||
}, |
||||
"context": { |
||||
"number": "1061222", |
||||
"difficulty": "13749511193633", |
||||
"timestamp": "1456458097", |
||||
"gasLimit": "3141592", |
||||
"miner": "0x2a65aca4d5fc5b5c859090a6c34d164135398226" |
||||
}, |
||||
"input": "0xf905498202eb850ba43b7400830f42408080b904f460606040526040516102b43803806102b48339016040526060805160600190602001505b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b806001600050908051906020019082805482825590600052602060002090601f01602090048101928215609e579182015b82811115609d5782518260005055916020019190600101906081565b5b50905060c5919060a9565b8082111560c1576000818150600090555060010160a9565b5090565b50505b506101dc806100d86000396000f30060606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b514610044578063cfae32171461005157610042565b005b61004f6004506100ca565b005b61005c60045061015e565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561015b57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60206040519081016040528060008152602001506001600050805480601f016020809104026020016040519081016040528092919081815260200182805480156101cd57820191906000526020600020905b8154815290600101906020018083116101b057829003601f168201915b505050505090506101d9565b9056000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001ee7b225f6964223a225a473466784a7245323639384866623839222c22666f726d5f736f75726365223a22434c54523031222c22636f6d6d69746d656e745f64617465223a22222c22626f72726f7765725f6e616d65223a22222c22626f72726f7765725f616464726573735f6c696e6531223a22222c22626f72726f7765725f616464726573735f6c696e6532223a22222c22626f72726f7765725f636f6e74616374223a22222c22626f72726f7765725f7374617465223a22222c22626f72726f7765725f74797065223a22222c2270726f70657274795f61646472657373223a22222c226c6f616e5f616d6f756e745f7772697474656e223a22222c226c6f616e5f616d6f756e74223a22222c224c54565f7772697474656e223a22222c224c5456223a22222c2244534352223a22222c2270726f70657274795f74797065223a22222c2270726f70657274795f6465736372697074696f6e223a22222c226c656e646572223a22222c2267756172616e746f7273223a22222c226c696d69746564223a22222c226361705f616d6f756e74223a22222c226361705f70657263656e745f7772697474656e223a22222c226361705f70657263656e74616765223a22222c227465726d5f7772697474656e223a22222c227465726d223a22222c22657874656e64223a22227d0000000000000000000000000000000000001ba027d54712289af34f0ec0f06092745104d68e5801cd17097bc1104111f855258da070ec9f1c942d9bedf89f9660a684d3bb8cd9c2ac7f6dd883cb3e26a193180244", |
||||
"tracerConfig": { |
||||
"diffMode": true |
||||
}, |
||||
"result": { |
||||
"pre": { |
||||
"0x2a65aca4d5fc5b5c859090a6c34d164135398226": { |
||||
"balance": "0x9fb6b81e112638b886", |
||||
"nonce": 217865 |
||||
}, |
||||
"0xf0c5cef39b17c213cfe090a46b8c7760ffb7928a": { |
||||
"balance": "0x15b6828e22bb12188", |
||||
"nonce": 747 |
||||
} |
||||
}, |
||||
"post": { |
||||
"0x2a65aca4d5fc5b5c859090a6c34d164135398226": { |
||||
"balance": "0x9fb71abdd2621d8886" |
||||
}, |
||||
"0x40f2f445da6c9047554683fb382fba6769717116": { |
||||
"code": "0x60606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b514610044578063cfae32171461005157610042565b005b61004f6004506100ca565b005b61005c60045061015e565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561015b57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60206040519081016040528060008152602001506001600050805480601f016020809104026020016040519081016040528092919081815260200182805480156101cd57820191906000526020600020905b8154815290600101906020018083116101b057829003601f168201915b505050505090506101d9565b9056", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f0c5cef39b17c213cfe090a46b8c7760ffb7928a", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000000000000001ee", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x7b225f6964223a225a473466784a7245323639384866623839222c22666f726d", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x5f736f75726365223a22434c54523031222c22636f6d6d69746d656e745f6461", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8": "0x7465223a22222c22626f72726f7765725f6e616d65223a22222c22626f72726f", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9": "0x7765725f616464726573735f6c696e6531223a22222c22626f72726f7765725f", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa": "0x616464726573735f6c696e6532223a22222c22626f72726f7765725f636f6e74", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb": "0x616374223a22222c22626f72726f7765725f7374617465223a22222c22626f72", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc": "0x726f7765725f74797065223a22222c2270726f70657274795f61646472657373", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfd": "0x223a22222c226c6f616e5f616d6f756e745f7772697474656e223a22222c226c", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfe": "0x6f616e5f616d6f756e74223a22222c224c54565f7772697474656e223a22222c", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cff": "0x224c5456223a22222c2244534352223a22222c2270726f70657274795f747970", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d00": "0x65223a22222c2270726f70657274795f6465736372697074696f6e223a22222c", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d01": "0x226c656e646572223a22222c2267756172616e746f7273223a22222c226c696d", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d02": "0x69746564223a22222c226361705f616d6f756e74223a22222c226361705f7065", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d03": "0x7263656e745f7772697474656e223a22222c226361705f70657263656e746167", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d04": "0x65223a22222c227465726d5f7772697474656e223a22222c227465726d223a22", |
||||
"0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d05": "0x222c22657874656e64223a22227d000000000000000000000000000000000000" |
||||
} |
||||
}, |
||||
"0xf0c5cef39b17c213cfe090a46b8c7760ffb7928a": { |
||||
"balance": "0x15b058920efcc5188", |
||||
"nonce": 748 |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,104 @@ |
||||
{ |
||||
"genesis": { |
||||
"difficulty": "6217248151198", |
||||
"extraData": "0xd783010103844765746887676f312e342e32856c696e7578", |
||||
"gasLimit": "3141592", |
||||
"hash": "0xe8bff55fe3e61936ef321cf3afaeb1ba2f7234e1e89535fa8ae39963caebe9c3", |
||||
"miner": "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5", |
||||
"mixHash": "0x03da00d5a15a064e5ebddf53cd0aaeb9a8aff0f40c0fb031a74f463d11ec83b8", |
||||
"nonce": "0x6575fe08c4167044", |
||||
"number": "243825", |
||||
"stateRoot": "0x47182fe2e6e740b8a76f82fe5c527d6ad548f805274f21792cf4047235b24fbf", |
||||
"timestamp": "1442424328", |
||||
"totalDifficulty": "1035061827427752845", |
||||
"alloc": { |
||||
"0x082d4cdf07f386ffa9258f52a5c49db4ac321ec6": { |
||||
"balance": "0xc820f93200f4000", |
||||
"nonce": "0x5E", |
||||
"code": "0x" |
||||
}, |
||||
"0x332b656504f4eabb44c8617a42af37461a34e9dc": { |
||||
"balance": "0x11faea4f35e5af80000", |
||||
"code": "0x", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000000" |
||||
} |
||||
}, |
||||
"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5": { |
||||
"balance": "0xbf681825be002ac452", |
||||
"nonce": "0x70FA", |
||||
"code": "0x" |
||||
}, |
||||
"0x82effbaaaf28614e55b2ba440fb198e0e5789b0f": { |
||||
"balance": "0xb3d0ac5cb94df6f6b0", |
||||
"nonce": "0x1", |
||||
"code": "0x" |
||||
} |
||||
}, |
||||
"config": { |
||||
"chainId": 1, |
||||
"homesteadBlock": 1150000, |
||||
"daoForkBlock": 1920000, |
||||
"daoForkSupport": true, |
||||
"eip150Block": 2463000, |
||||
"eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0", |
||||
"eip155Block": 2675000, |
||||
"eip158Block": 2675000, |
||||
"byzantiumBlock": 4370000, |
||||
"constantinopleBlock": 7280000, |
||||
"petersburgBlock": 7280000, |
||||
"istanbulBlock": 9069000, |
||||
"muirGlacierBlock": 9200000, |
||||
"berlinBlock": 12244000, |
||||
"londonBlock": 12965000, |
||||
"arrowGlacierBlock": 13773000, |
||||
"grayGlacierBlock": 15050000, |
||||
"ethash": {} |
||||
} |
||||
}, |
||||
"context": { |
||||
"number": "243826", |
||||
"difficulty": "6214212385501", |
||||
"timestamp": "1442424353", |
||||
"gasLimit": "3141592", |
||||
"miner": "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5" |
||||
}, |
||||
"input": "0xf8e85e850ba43b7400830f42408080b89660606040527382effbaaaf28614e55b2ba440fb198e0e5789b0f600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600a80608c6000396000f30060606040526008565b001ca0340b21661e5bb85a46319a15f33a362e5c0f02faa7cdbf9c5808b2134da968eaa0226e6788f8c20e211d436ab7f6298ef32fa4c23a509eeeaac0880d115c17bc3f", |
||||
"tracerConfig": { |
||||
"diffMode": true |
||||
}, |
||||
"result": { |
||||
"pre": { |
||||
"0x082d4cdf07f386ffa9258f52a5c49db4ac321ec6": { |
||||
"balance": "0xc820f93200f4000", |
||||
"nonce": 94 |
||||
}, |
||||
"0x332b656504f4eabb44c8617a42af37461a34e9dc": { |
||||
"balance": "0x11faea4f35e5af80000", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000000" |
||||
} |
||||
}, |
||||
"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5": { |
||||
"balance": "0xbf681825be002ac452", |
||||
"nonce": 28922 |
||||
}, |
||||
"0x82effbaaaf28614e55b2ba440fb198e0e5789b0f": { |
||||
"balance": "0xb3d0ac5cb94df6f6b0", |
||||
"nonce": 1 |
||||
} |
||||
}, |
||||
"post": { |
||||
"0x082d4cdf07f386ffa9258f52a5c49db4ac321ec6": { |
||||
"balance": "0xc7d4d88af8b4c00", |
||||
"nonce": 95 |
||||
}, |
||||
"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5": { |
||||
"balance": "0xbf681ce7c870aeb852" |
||||
}, |
||||
"0x82effbaaaf28614e55b2ba440fb198e0e5789b0f": { |
||||
"balance": "0x1d37f515017a8eef6b0" |
||||
} |
||||
} |
||||
} |
||||
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,106 @@ |
||||
{ |
||||
"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", |
||||
"tracerConfig": { |
||||
"diffMode": true |
||||
}, |
||||
"result": { |
||||
"pre": { |
||||
"0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { |
||||
"balance": "0x0", |
||||
"nonce": 22 |
||||
}, |
||||
"0x1585936b53834b021f68cc13eeefdec2efc8e724": { |
||||
"balance": "0x0" |
||||
}, |
||||
"0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { |
||||
"balance": "0x4d87094125a369d9bd5", |
||||
"nonce": 1, |
||||
"code": "0x606060405236156100935763ffffffff60e060020a60003504166311ee8382811461009c57806313af4035146100be5780631f5e8f4c146100ee57806324daddc5146101125780634921a91a1461013b57806363e4bff414610157578063764978f91461017f578063893d20e8146101a1578063ba40aaa1146101cd578063cebc9a82146101f4578063e177246e14610216575b61009a5b5b565b005b34156100a457fe5b6100ac61023d565b60408051918252519081900360200190f35b34156100c657fe5b6100da600160a060020a0360043516610244565b604080519115158252519081900360200190f35b34156100f657fe5b6100da610307565b604080519115158252519081900360200190f35b341561011a57fe5b6100da6004351515610318565b604080519115158252519081900360200190f35b6100da6103d6565b604080519115158252519081900360200190f35b6100da600160a060020a0360043516610420565b604080519115158252519081900360200190f35b341561018757fe5b6100ac61046c565b60408051918252519081900360200190f35b34156101a957fe5b6101b1610473565b60408051600160a060020a039092168252519081900360200190f35b34156101d557fe5b6100da600435610483565b604080519115158252519081900360200190f35b34156101fc57fe5b6100ac61050d565b60408051918252519081900360200190f35b341561021e57fe5b6100da600435610514565b604080519115158252519081900360200190f35b6003545b90565b60006000610250610473565b600160a060020a031633600160a060020a03161415156102705760006000fd5b600160a060020a03831615156102865760006000fd5b50600054600160a060020a0390811690831681146102fb57604051600160a060020a0380851691908316907ffcf23a92150d56e85e3a3d33b357493246e55783095eb6a733eb8439ffc752c890600090a360008054600160a060020a031916600160a060020a03851617905560019150610300565b600091505b5b50919050565b60005460a060020a900460ff165b90565b60006000610324610473565b600160a060020a031633600160a060020a03161415156103445760006000fd5b5060005460a060020a900460ff16801515831515146102fb576000546040805160a060020a90920460ff1615158252841515602083015280517fe6cd46a119083b86efc6884b970bfa30c1708f53ba57b86716f15b2f4551a9539281900390910190a16000805460a060020a60ff02191660a060020a8515150217905560019150610300565b600091505b5b50919050565b60006103e0610307565b801561040557506103ef610473565b600160a060020a031633600160a060020a031614155b156104105760006000fd5b610419336105a0565b90505b5b90565b600061042a610307565b801561044f5750610439610473565b600160a060020a031633600160a060020a031614155b1561045a5760006000fd5b610463826105a0565b90505b5b919050565b6001545b90565b600054600160a060020a03165b90565b6000600061048f610473565b600160a060020a031633600160a060020a03161415156104af5760006000fd5b506001548281146102fb57604080518281526020810185905281517f79a3746dde45672c9e8ab3644b8bb9c399a103da2dc94b56ba09777330a83509929181900390910190a160018381559150610300565b600091505b5b50919050565b6002545b90565b60006000610520610473565b600160a060020a031633600160a060020a03161415156105405760006000fd5b506002548281146102fb57604080518281526020810185905281517ff6991a728965fedd6e927fdf16bdad42d8995970b4b31b8a2bf88767516e2494929181900390910190a1600283905560019150610300565b600091505b5b50919050565b60006000426105ad61023d565b116102fb576105c46105bd61050d565b4201610652565b6105cc61046c565b604051909150600160a060020a038416908290600081818185876187965a03f1925050501561063d57604080518281529051600160a060020a038516917f9bca65ce52fdef8a470977b51f247a2295123a4807dfa9e502edf0d30722da3b919081900360200190a260019150610300565b6102fb42610652565b5b600091505b50919050565b60038190555b505600a165627a7a72305820f3c973c8b7ed1f62000b6701bd5b708469e19d0f1d73fde378a56c07fd0b19090029", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000001b436ba50d378d4bbc8660d312a13df6af6e89dfb", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000006f05b59d3b20000", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": "0x000000000000000000000000000000000000000000000000000000000000003c", |
||||
"0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b834" |
||||
} |
||||
}, |
||||
"0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { |
||||
"balance": "0x1780d77678137ac1b775", |
||||
"nonce": 29072 |
||||
} |
||||
}, |
||||
"post": { |
||||
"0x0024f658a46fbb89d8ac105e98d7ac7cbbaf27c5": { |
||||
"balance": "0x6f05b59d3b20000" |
||||
}, |
||||
"0x1585936b53834b021f68cc13eeefdec2efc8e724": { |
||||
"balance": "0x420eed1bd6c00" |
||||
}, |
||||
"0x3b873a919aa0512d5a0f09e6dcceaa4a6727fafe": { |
||||
"balance": "0x4d869a3b70062eb9bd5", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000003": "0x000000000000000000000000000000000000000000000000000000005a37b95e" |
||||
} |
||||
}, |
||||
"0xb436ba50d378d4bbc8660d312a13df6af6e89dfb": { |
||||
"balance": "0x1780d7725724a9044b75", |
||||
"nonce": 29073 |
||||
} |
||||
} |
||||
} |
||||
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1,90 @@ |
||||
package tracetest |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"reflect" |
||||
"strings" |
||||
"unicode" |
||||
|
||||
// Force-load native and js pacakges, to trigger registration
|
||||
_ "github.com/ethereum/go-ethereum/eth/tracers/js" |
||||
_ "github.com/ethereum/go-ethereum/eth/tracers/native" |
||||
) |
||||
|
||||
// To generate a new callTracer test, copy paste the makeTest method below into
|
||||
// a Geth console and call it with a transaction hash you which to export.
|
||||
|
||||
/* |
||||
// makeTest generates a callTracer test by running a prestate reassembled and a
|
||||
// call trace run, assembling all the gathered information into a test case.
|
||||
var makeTest = function(tx, rewind) { |
||||
// Generate the genesis block from the block, transaction and prestate data
|
||||
var block = eth.getBlock(eth.getTransaction(tx).blockHash); |
||||
var genesis = eth.getBlock(block.parentHash); |
||||
|
||||
delete genesis.gasUsed; |
||||
delete genesis.logsBloom; |
||||
delete genesis.parentHash; |
||||
delete genesis.receiptsRoot; |
||||
delete genesis.sha3Uncles; |
||||
delete genesis.size; |
||||
delete genesis.transactions; |
||||
delete genesis.transactionsRoot; |
||||
delete genesis.uncles; |
||||
|
||||
genesis.gasLimit = genesis.gasLimit.toString(); |
||||
genesis.number = genesis.number.toString(); |
||||
genesis.timestamp = genesis.timestamp.toString(); |
||||
|
||||
genesis.alloc = debug.traceTransaction(tx, {tracer: "prestateTracer", rewind: rewind}); |
||||
for (var key in genesis.alloc) { |
||||
var nonce = genesis.alloc[key].nonce; |
||||
if (nonce) { |
||||
genesis.alloc[key].nonce = nonce.toString(); |
||||
} |
||||
} |
||||
genesis.config = admin.nodeInfo.protocols.eth.config; |
||||
|
||||
// Generate the call trace and produce the test input
|
||||
var result = debug.traceTransaction(tx, {tracer: "callTracer", rewind: rewind}); |
||||
delete result.time; |
||||
|
||||
console.log(JSON.stringify({ |
||||
genesis: genesis, |
||||
context: { |
||||
number: block.number.toString(), |
||||
difficulty: block.difficulty, |
||||
timestamp: block.timestamp.toString(), |
||||
gasLimit: block.gasLimit.toString(), |
||||
miner: block.miner, |
||||
}, |
||||
input: eth.getRawTransaction(tx), |
||||
result: result, |
||||
}, null, 2)); |
||||
} |
||||
*/ |
||||
|
||||
// jsonEqual is similar to reflect.DeepEqual, but does a 'bounce' via json prior to
|
||||
// comparison
|
||||
func jsonEqual(xi, yi, xt, yt interface{}) bool { |
||||
if xj, err := json.Marshal(xi); err == nil { |
||||
json.Unmarshal(xj, xt) |
||||
} else { |
||||
return false |
||||
} |
||||
if yj, err := json.Marshal(yi); err == nil { |
||||
json.Unmarshal(yj, yt) |
||||
} else { |
||||
return false |
||||
} |
||||
return reflect.DeepEqual(xt, yt) |
||||
} |
||||
|
||||
// camel converts a snake cased input string into a camel cased output.
|
||||
func camel(str string) string { |
||||
pieces := strings.Split(str, "_") |
||||
for i := 1; i < len(pieces); i++ { |
||||
pieces[i] = string(unicode.ToUpper(rune(pieces[i][0]))) + pieces[i][1:] |
||||
} |
||||
return strings.Join(pieces, "") |
||||
} |
Loading…
Reference in new issue