Skip to content

Commit 431d51e

Browse files
yzbyzb@example.cn
yzb
and
yzb@example.cn
authored
feature: native trace (#19)
Co-authored-by: yzb@example.cn <yzb@example.cn>
1 parent a406dac commit 431d51e

File tree

214 files changed

+7889
-2051
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+7889
-2051
lines changed

accounts/keystore/watch.go

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
//go:build (darwin && !ios && cgo) || freebsd || (linux && !arm64) || netbsd || solaris
1817
// +build darwin,!ios,cgo freebsd linux,!arm64 netbsd solaris
1918

2019
package keystore

accounts/keystore/watch_fallback.go

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
//go:build (darwin && !cgo) || ios || (linux && arm64) || windows || (!darwin && !freebsd && !linux && !netbsd && !solaris)
1817
// +build darwin,!cgo ios linux,arm64 windows !darwin,!freebsd,!linux,!netbsd,!solaris
1918

2019
// This is the fallback implementation of directory watching.

build/ci.go

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
//go:build none
1817
// +build none
1918

2019
/*

build/update-license.go

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
//go:build none
1817
// +build none
1918

2019
/*

cmd/evm/disasm.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func disasmCmd(ctx *cli.Context) error {
4646
case ctx.GlobalIsSet(InputFlag.Name):
4747
in = ctx.GlobalString(InputFlag.Name)
4848
default:
49-
return errors.New("Missing filename or --input value")
49+
return errors.New("missing filename or --input value")
5050
}
5151

5252
code := strings.TrimSpace(in)

cmd/evm/internal/t8ntool/execution.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ type stEnvMarshaling struct {
8282
// Apply applies a set of transactions to a pre-state
8383
func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
8484
txs types.Transactions, miningReward int64,
85-
getTracerFn func(txIndex int, txHash common.Hash) (tracer vm.Tracer, err error)) (*state.StateDB, *ExecutionResult, error) {
85+
getTracerFn func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error)) (*state.StateDB, *ExecutionResult, error) {
8686

8787
// Capture errors for BLOCKHASH operation, if we haven't been supplied the
8888
// required blockhashes
@@ -223,7 +223,9 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
223223
statedb.AddBalance(pre.Env.Coinbase, minerReward)
224224
}
225225
// Commit block
226-
root, _, err := statedb.Commit(chainConfig.IsEIP158(vmContext.BlockNumber))
226+
statedb.Finalise(chainConfig.IsEIP158(vmContext.BlockNumber))
227+
statedb.AccountsIntermediateRoot()
228+
root, _, err := statedb.Commit(nil)
227229
if err != nil {
228230
fmt.Fprintf(os.Stderr, "Could not commit state: %v", err)
229231
return nil, nil, NewError(ErrorEVM, fmt.Errorf("could not commit state: %v", err))
@@ -252,7 +254,9 @@ func MakePreState(db ethdb.Database, accounts core.GenesisAlloc) *state.StateDB
252254
}
253255
}
254256
// Commit and re-open to start with a clean state.
255-
root, _, _ := statedb.Commit(false)
257+
statedb.Finalise(false)
258+
statedb.AccountsIntermediateRoot()
259+
root, _, _ := statedb.Commit(nil)
256260
statedb, _ = state.New(root, sdb, nil)
257261
return statedb
258262
}

cmd/evm/internal/t8ntool/flags.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ var (
3030
Name: "trace",
3131
Usage: "Output full trace logs to files <txhash>.jsonl",
3232
}
33-
TraceDisableMemoryFlag = cli.BoolFlag{
33+
TraceDisableMemoryFlag = cli.BoolTFlag{
3434
Name: "trace.nomemory",
3535
Usage: "Disable full memory dump in traces",
3636
}
3737
TraceDisableStackFlag = cli.BoolFlag{
3838
Name: "trace.nostack",
3939
Usage: "Disable stack output in traces",
4040
}
41-
TraceDisableReturnDataFlag = cli.BoolFlag{
41+
TraceDisableReturnDataFlag = cli.BoolTFlag{
4242
Name: "trace.noreturndata",
4343
Usage: "Disable return data output in traces",
4444
}

cmd/evm/internal/t8ntool/transition.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ func Main(ctx *cli.Context) error {
8181

8282
var (
8383
err error
84-
tracer vm.Tracer
84+
tracer vm.EVMLogger
8585
baseDir = ""
8686
)
87-
var getTracer func(txIndex int, txHash common.Hash) (vm.Tracer, error)
87+
var getTracer func(txIndex int, txHash common.Hash) (vm.EVMLogger, error)
8888

8989
// If user specified a basedir, make sure it exists
9090
if ctx.IsSet(OutputBasedir.Name) {
@@ -99,10 +99,10 @@ func Main(ctx *cli.Context) error {
9999
if ctx.Bool(TraceFlag.Name) {
100100
// Configure the EVM logger
101101
logConfig := &vm.LogConfig{
102-
DisableStack: ctx.Bool(TraceDisableStackFlag.Name),
103-
DisableMemory: ctx.Bool(TraceDisableMemoryFlag.Name),
104-
DisableReturnData: ctx.Bool(TraceDisableReturnDataFlag.Name),
105-
Debug: true,
102+
DisableStack: ctx.Bool(TraceDisableStackFlag.Name),
103+
EnableMemory: !ctx.Bool(TraceDisableMemoryFlag.Name),
104+
EnableReturnData: !ctx.Bool(TraceDisableReturnDataFlag.Name),
105+
Debug: true,
106106
}
107107
var prevFile *os.File
108108
// This one closes the last file
@@ -111,7 +111,7 @@ func Main(ctx *cli.Context) error {
111111
prevFile.Close()
112112
}
113113
}()
114-
getTracer = func(txIndex int, txHash common.Hash) (vm.Tracer, error) {
114+
getTracer = func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) {
115115
if prevFile != nil {
116116
prevFile.Close()
117117
}
@@ -123,7 +123,7 @@ func Main(ctx *cli.Context) error {
123123
return vm.NewJSONLogger(logConfig, traceFile), nil
124124
}
125125
} else {
126-
getTracer = func(txIndex int, txHash common.Hash) (tracer vm.Tracer, err error) {
126+
getTracer = func(txIndex int, txHash common.Hash) (tracer vm.EVMLogger, err error) {
127127
return nil, nil
128128
}
129129
}

cmd/evm/main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ var (
113113
Name: "receiver",
114114
Usage: "The transaction receiver (execution context)",
115115
}
116-
DisableMemoryFlag = cli.BoolFlag{
116+
DisableMemoryFlag = cli.BoolTFlag{
117117
Name: "nomemory",
118118
Usage: "disable memory output",
119119
}
@@ -125,9 +125,9 @@ var (
125125
Name: "nostorage",
126126
Usage: "disable storage output",
127127
}
128-
DisableReturnDataFlag = cli.BoolFlag{
128+
DisableReturnDataFlag = cli.BoolTFlag{
129129
Name: "noreturndata",
130-
Usage: "disable return data output",
130+
Usage: "enable return data output",
131131
}
132132
EVMInterpreterFlag = cli.StringFlag{
133133
Name: "vm.evm",

cmd/evm/runner.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ func runCmd(ctx *cli.Context) error {
108108
glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name)))
109109
log.Root().SetHandler(glogger)
110110
logconfig := &vm.LogConfig{
111-
DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name),
112-
DisableStack: ctx.GlobalBool(DisableStackFlag.Name),
113-
DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name),
114-
DisableReturnData: ctx.GlobalBool(DisableReturnDataFlag.Name),
115-
Debug: ctx.GlobalBool(DebugFlag.Name),
111+
EnableMemory: !ctx.GlobalBool(DisableMemoryFlag.Name),
112+
DisableStack: ctx.GlobalBool(DisableStackFlag.Name),
113+
DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name),
114+
EnableReturnData: !ctx.GlobalBool(DisableReturnDataFlag.Name),
115+
Debug: ctx.GlobalBool(DebugFlag.Name),
116116
}
117117

118118
var (
119-
tracer vm.Tracer
119+
tracer vm.EVMLogger
120120
debugLogger *vm.StructLogger
121121
statedb *state.StateDB
122122
chainConfig *params.ChainConfig
@@ -268,7 +268,9 @@ func runCmd(ctx *cli.Context) error {
268268
output, leftOverGas, stats, err := timedExec(bench, execFunc)
269269

270270
if ctx.GlobalBool(DumpFlag.Name) {
271-
statedb.Commit(true)
271+
statedb.Finalise(true)
272+
statedb.AccountsIntermediateRoot()
273+
statedb.Commit(nil)
272274
statedb.IntermediateRoot(true)
273275
fmt.Println(string(statedb.Dump(false, false, true)))
274276
}

cmd/evm/staterunner.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ func stateTestCmd(ctx *cli.Context) error {
5959

6060
// Configure the EVM logger
6161
config := &vm.LogConfig{
62-
DisableMemory: ctx.GlobalBool(DisableMemoryFlag.Name),
63-
DisableStack: ctx.GlobalBool(DisableStackFlag.Name),
64-
DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name),
65-
DisableReturnData: ctx.GlobalBool(DisableReturnDataFlag.Name),
62+
EnableMemory: !ctx.GlobalBool(DisableMemoryFlag.Name),
63+
DisableStack: ctx.GlobalBool(DisableStackFlag.Name),
64+
DisableStorage: ctx.GlobalBool(DisableStorageFlag.Name),
65+
EnableReturnData: !ctx.GlobalBool(DisableReturnDataFlag.Name),
6666
}
6767
var (
68-
tracer vm.Tracer
68+
tracer vm.EVMLogger
6969
debugger *vm.StructLogger
7070
)
7171
switch {
@@ -101,7 +101,8 @@ func stateTestCmd(ctx *cli.Context) error {
101101
_, state, err := test.Run(st, cfg, false)
102102
// print state root for evmlab tracing
103103
if ctx.GlobalBool(MachineFlag.Name) && state != nil {
104-
fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%x\"}\n", state.IntermediateRoot(false))
104+
root := state.IntermediateRoot(false)
105+
fmt.Fprintf(os.Stderr, "{\"stateRoot\": \"%x\"}\n", root)
105106
}
106107
if err != nil {
107108
// Test failed, mark as so and dump any state to aid debugging

cmd/geth/chaincmd.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ func importPreimages(ctx *cli.Context) error {
458458
stack, _ := makeConfigNode(ctx)
459459
defer stack.Close()
460460

461-
db := utils.MakeChainDatabase(ctx, stack, false)
461+
db := utils.MakeChainDatabase(ctx, stack, false, false)
462462
start := time.Now()
463463

464464
if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil {
@@ -477,7 +477,7 @@ func exportPreimages(ctx *cli.Context) error {
477477
stack, _ := makeConfigNode(ctx)
478478
defer stack.Close()
479479

480-
db := utils.MakeChainDatabase(ctx, stack, true)
480+
db := utils.MakeChainDatabase(ctx, stack, true, false)
481481
start := time.Now()
482482

483483
if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil {
@@ -491,7 +491,7 @@ func dump(ctx *cli.Context) error {
491491
stack, _ := makeConfigNode(ctx)
492492
defer stack.Close()
493493

494-
db := utils.MakeChainDatabase(ctx, stack, true)
494+
db := utils.MakeChainDatabase(ctx, stack, true, false)
495495
for _, arg := range ctx.Args() {
496496
var header *types.Header
497497
if hashish(arg) {

cmd/geth/dbcmd.go

+27-7
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Remove blockchain and state databases`,
6262
dbPutCmd,
6363
dbGetSlotsCmd,
6464
dbDumpFreezerIndex,
65+
ancientInspectCmd,
6566
},
6667
}
6768
dbInspectCmd = cli.Command{
@@ -195,6 +196,16 @@ WARNING: This is a low-level operation which may cause database corruption!`,
195196
},
196197
Description: "This command displays information about the freezer index.",
197198
}
199+
ancientInspectCmd = cli.Command{
200+
Action: utils.MigrateFlags(ancientInspect),
201+
Name: "inspect-reserved-oldest-blocks",
202+
Flags: []cli.Flag{
203+
utils.DataDirFlag,
204+
},
205+
Usage: "Inspect the ancientStore information",
206+
Description: `This commands will read current offset from kvdb, which is the current offset and starting BlockNumber
207+
of ancientStore, will also displays the reserved number of blocks in ancientStore `,
208+
}
198209
)
199210

200211
func removeDB(ctx *cli.Context) error {
@@ -282,12 +293,21 @@ func inspect(ctx *cli.Context) error {
282293
stack, _ := makeConfigNode(ctx)
283294
defer stack.Close()
284295

285-
db := utils.MakeChainDatabase(ctx, stack, true)
296+
db := utils.MakeChainDatabase(ctx, stack, true, false)
286297
defer db.Close()
287298

288299
return rawdb.InspectDatabase(db, prefix, start)
289300
}
290301

302+
func ancientInspect(ctx *cli.Context) error {
303+
stack, _ := makeConfigNode(ctx)
304+
defer stack.Close()
305+
306+
db := utils.MakeChainDatabase(ctx, stack, true, true)
307+
defer db.Close()
308+
return rawdb.AncientInspect(db)
309+
}
310+
291311
func showLeveldbStats(db ethdb.Stater) {
292312
if stats, err := db.Stat("leveldb.stats"); err != nil {
293313
log.Warn("Failed to read database stats", "error", err)
@@ -305,7 +325,7 @@ func dbStats(ctx *cli.Context) error {
305325
stack, _ := makeConfigNode(ctx)
306326
defer stack.Close()
307327

308-
db := utils.MakeChainDatabase(ctx, stack, true)
328+
db := utils.MakeChainDatabase(ctx, stack, true, false)
309329
defer db.Close()
310330

311331
showLeveldbStats(db)
@@ -316,7 +336,7 @@ func dbCompact(ctx *cli.Context) error {
316336
stack, _ := makeConfigNode(ctx)
317337
defer stack.Close()
318338

319-
db := utils.MakeChainDatabase(ctx, stack, false)
339+
db := utils.MakeChainDatabase(ctx, stack, false, false)
320340
defer db.Close()
321341

322342
log.Info("Stats before compaction")
@@ -340,7 +360,7 @@ func dbGet(ctx *cli.Context) error {
340360
stack, _ := makeConfigNode(ctx)
341361
defer stack.Close()
342362

343-
db := utils.MakeChainDatabase(ctx, stack, true)
363+
db := utils.MakeChainDatabase(ctx, stack, true, false)
344364
defer db.Close()
345365

346366
key, err := hexutil.Decode(ctx.Args().Get(0))
@@ -365,7 +385,7 @@ func dbDelete(ctx *cli.Context) error {
365385
stack, _ := makeConfigNode(ctx)
366386
defer stack.Close()
367387

368-
db := utils.MakeChainDatabase(ctx, stack, false)
388+
db := utils.MakeChainDatabase(ctx, stack, false, false)
369389
defer db.Close()
370390

371391
key, err := hexutil.Decode(ctx.Args().Get(0))
@@ -392,7 +412,7 @@ func dbPut(ctx *cli.Context) error {
392412
stack, _ := makeConfigNode(ctx)
393413
defer stack.Close()
394414

395-
db := utils.MakeChainDatabase(ctx, stack, false)
415+
db := utils.MakeChainDatabase(ctx, stack, false, false)
396416
defer db.Close()
397417

398418
var (
@@ -426,7 +446,7 @@ func dbDumpTrie(ctx *cli.Context) error {
426446
stack, _ := makeConfigNode(ctx)
427447
defer stack.Close()
428448

429-
db := utils.MakeChainDatabase(ctx, stack, true)
449+
db := utils.MakeChainDatabase(ctx, stack, true, false)
430450
defer db.Close()
431451
var (
432452
root []byte

cmd/geth/main.go

+9
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ import (
3939
"github.com/ethereum/go-ethereum/log"
4040
"github.com/ethereum/go-ethereum/metrics"
4141
"github.com/ethereum/go-ethereum/node"
42+
43+
// Force-load the tracer engines to trigger registration
44+
_ "github.com/ethereum/go-ethereum/eth/tracers/js"
45+
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
46+
4247
"gopkg.in/urfave/cli.v1"
4348
)
4449

@@ -67,6 +72,7 @@ var (
6772
utils.DirectBroadcastFlag,
6873
utils.DisableSnapProtocolFlag,
6974
utils.DiffSyncFlag,
75+
utils.PipeCommitFlag,
7076
utils.RangeLimitFlag,
7177
utils.USBFlag,
7278
utils.SmartCardDaemonPathFlag,
@@ -90,6 +96,7 @@ var (
9096
utils.TxPoolAccountQueueFlag,
9197
utils.TxPoolGlobalQueueFlag,
9298
utils.TxPoolLifetimeFlag,
99+
utils.TxPoolReannounceTimeFlag,
93100
utils.SyncModeFlag,
94101
utils.ExitWhenSyncedFlag,
95102
utils.GCModeFlag,
@@ -159,6 +166,8 @@ var (
159166
utils.MinerNotifyFullFlag,
160167
configFileFlag,
161168
utils.CatalystFlag,
169+
utils.BlockAmountReserved,
170+
utils.CheckSnapshotWithMPT,
162171
}
163172

164173
rpcFlags = []cli.Flag{

0 commit comments

Comments
 (0)