diff --git a/cli/server/dump_bin.go b/cli/server/dump_bin.go index 08e98b51c..66a5d3e7c 100644 --- a/cli/server/dump_bin.go +++ b/cli/server/dump_bin.go @@ -30,7 +30,7 @@ func dumpBin(ctx *cli.Context) error { count := uint32(ctx.Uint("count")) start := uint32(ctx.Uint("start")) - chain, _, prometheus, pprof, err := InitBCWithMetrics(cfg, log) + chain, prometheus, pprof, err := InitBCWithMetrics(cfg, log) if err != nil { return err } diff --git a/cli/server/server.go b/cli/server/server.go index 5b48aa94b..8edfcd92e 100644 --- a/cli/server/server.go +++ b/cli/server/server.go @@ -141,10 +141,10 @@ func newGraceContext() context.Context { } // InitBCWithMetrics initializes the blockchain with metrics with the given configuration. -func InitBCWithMetrics(cfg config.Config, log *zap.Logger) (*core.Blockchain, storage.Store, *metrics.Service, *metrics.Service, error) { - chain, store, err := initBlockChain(cfg, log) +func InitBCWithMetrics(cfg config.Config, log *zap.Logger) (*core.Blockchain, *metrics.Service, *metrics.Service, error) { + chain, _, err := initBlockChain(cfg, log) if err != nil { - return nil, nil, nil, nil, cli.Exit(err, 1) + return nil, nil, nil, cli.Exit(err, 1) } prometheus := metrics.NewPrometheusService(cfg.ApplicationConfiguration.Prometheus, log) pprof := metrics.NewPprofService(cfg.ApplicationConfiguration.Pprof, log) @@ -152,14 +152,14 @@ func InitBCWithMetrics(cfg config.Config, log *zap.Logger) (*core.Blockchain, st go chain.Run() err = prometheus.Start() if err != nil { - return nil, nil, nil, nil, cli.Exit(fmt.Errorf("failed to start Prometheus service: %w", err), 1) + return nil, nil, nil, cli.Exit(fmt.Errorf("failed to start Prometheus service: %w", err), 1) } err = pprof.Start() if err != nil { - return nil, nil, nil, nil, cli.Exit(fmt.Errorf("failed to start Pprof service: %w", err), 1) + return nil, nil, nil, cli.Exit(fmt.Errorf("failed to start Pprof service: %w", err), 1) } - return chain, store, prometheus, pprof, nil + return chain, prometheus, pprof, nil } func dumpDB(ctx *cli.Context) error { @@ -190,7 +190,7 @@ func dumpDB(ctx *cli.Context) error { defer outStream.Close() writer := io.NewBinWriterFromIO(outStream) - chain, _, prometheus, pprof, err := InitBCWithMetrics(cfg, log) + chain, prometheus, pprof, err := InitBCWithMetrics(cfg, log) if err != nil { return err } @@ -250,7 +250,7 @@ func restoreDB(ctx *cli.Context) error { cfg.ApplicationConfiguration.SaveStorageBatch = true } - chain, _, prometheus, pprof, err := InitBCWithMetrics(cfg, log) + chain, prometheus, pprof, err := InitBCWithMetrics(cfg, log) if err != nil { return err } @@ -471,7 +471,7 @@ func startServer(ctx *cli.Context) error { return cli.Exit(err, 1) } - chain, _, prometheus, pprof, err := InitBCWithMetrics(cfg, log) + chain, prometheus, pprof, err := InitBCWithMetrics(cfg, log) if err != nil { return cli.Exit(err, 1) } diff --git a/cli/server/server_test.go b/cli/server/server_test.go index 3f9bee10b..43672631a 100644 --- a/cli/server/server_test.go +++ b/cli/server/server_test.go @@ -200,11 +200,11 @@ func TestInitBCWithMetrics(t *testing.T) { }) t.Run("bad store", func(t *testing.T) { - _, _, _, _, err = InitBCWithMetrics(config.Config{}, logger) + _, _, _, err = InitBCWithMetrics(config.Config{}, logger) require.Error(t, err) }) - chain, _, prometheus, pprof, err := InitBCWithMetrics(cfg, logger) + chain, prometheus, pprof, err := InitBCWithMetrics(cfg, logger) require.NoError(t, err) t.Cleanup(func() { chain.Close() diff --git a/cli/util/convert.go b/cli/util/convert.go index 121509e38..a29338c78 100644 --- a/cli/util/convert.go +++ b/cli/util/convert.go @@ -189,7 +189,7 @@ func NewCommands() []*cli.Command { }, { Name: "upload-state", - Usage: "Start the node, traverse MPT and upload MPT nodes to the NeoFS container at every StateSyncInterval number of blocks", + Usage: "Start the node, traverse contract storage key-value pairs and upload them to the NeoFS container at every StateSyncInterval number of blocks", UsageText: "neo-go util upload-state --fs-rpc-endpoint [,[...]] --container --state-attribute state --wallet [--wallet-config ] [--address
] [--searchers ] [--retries ] [--debug] [--config-path path] [-p/-m/-t] [--config-file file] [--force-timestamp-logs]", Action: uploadState, Flags: uploadStateFlags, diff --git a/cli/util/upload_state.go b/cli/util/upload_state.go index 3e4b31f4e..926a6f82d 100644 --- a/cli/util/upload_state.go +++ b/cli/util/upload_state.go @@ -9,8 +9,6 @@ import ( "github.com/nspcc-dev/neo-go/cli/options" "github.com/nspcc-dev/neo-go/cli/server" "github.com/nspcc-dev/neo-go/pkg/core" - "github.com/nspcc-dev/neo-go/pkg/core/mpt" - "github.com/nspcc-dev/neo-go/pkg/core/storage" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" gio "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/services/helpers/neofs" @@ -53,7 +51,7 @@ func uploadState(ctx *cli.Context) error { defer func() { _ = logCloser() }() } - chain, store, prometheus, pprof, err := server.InitBCWithMetrics(cfg, log) + chain, prometheus, pprof, err := server.InitBCWithMetrics(cfg, log) if err != nil { return err } @@ -133,7 +131,7 @@ func uploadState(ctx *cli.Context) error { wrt.WriteU32LE(uint32(chain.GetConfig().Magic)) wrt.WriteU32LE(height) wrt.WriteBytes(stateRoot.Root[:]) - err = traverseMPT(stateRoot.Root, store, wrt) + err = traverseMPT(stateRoot.Root, stateModule, wrt) if err != nil { _ = writer.Close() return err @@ -192,15 +190,11 @@ func searchStateIndex(ctx *cli.Context, p neofs.PoolWrapper, containerID cid.ID, } } -func traverseMPT(root util.Uint256, store storage.Store, writer *gio.BinWriter) error { - cache := storage.NewMemCachedStore(store) - billet := mpt.NewBillet(root, mpt.ModeAll, mpt.DummySTTempStoragePrefix, cache) - err := billet.Traverse(func(pathToNode []byte, node mpt.Node, nodeBytes []byte) bool { - writer.WriteVarBytes(nodeBytes) - return writer.Err != nil - }, false) - if err != nil { - return fmt.Errorf("billet traversal error: %w", err) - } - return nil +func traverseMPT(root util.Uint256, stateModule core.StateRoot, writer *gio.BinWriter) error { + stateModule.SeekStates(root, []byte{}, func(k, v []byte) bool { + writer.WriteVarBytes(k) + writer.WriteVarBytes(v) + return writer.Err == nil + }) + return writer.Err }