package main import ( "context" "fmt" "os" logging "github.com/ipfs/go-log/v2" "github.com/urfave/cli/v2" "go.opencensus.io/trace" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" lcli "github.com/filecoin-project/lotus/cli" "github.com/filecoin-project/lotus/lib/lotuslog" "github.com/filecoin-project/lotus/lib/tracing" "github.com/filecoin-project/lotus/node/repo" ) var log = logging.Logger("main") const FlagMinerRepo = "miner-repo" // TODO remove after deprecation period const FlagMinerRepoDeprecation = "storagerepo" func main() { lotuslog.SetupLogLevels() local := []*cli.Command{ initCmd, runCmd, stopCmd, lcli.WithCategory("chain", actorCmd), lcli.WithCategory("chain", rewardsCmd), lcli.WithCategory("chain", infoCmd), lcli.WithCategory("market", storageDealsCmd), lcli.WithCategory("market", retrievalDealsCmd), lcli.WithCategory("storage", sectorsCmd), lcli.WithCategory("storage", provingCmd), lcli.WithCategory("storage", storageCmd), lcli.WithCategory("storage", sealingCmd), } jaeger := tracing.SetupJaegerTracing("lotus") defer func() { if jaeger != nil { jaeger.Flush() } }() for _, cmd := range local { cmd := cmd originBefore := cmd.Before cmd.Before = func(cctx *cli.Context) error { trace.UnregisterExporter(jaeger) jaeger = tracing.SetupJaegerTracing("lotus/" + cmd.Name) if originBefore != nil { return originBefore(cctx) } return nil } } app := &cli.App{ Name: "lotus-miner", Usage: "Filecoin decentralized storage network miner", Version: build.UserVersion(), EnableBashCompletion: true, Flags: []cli.Flag{ &cli.StringFlag{ Name: "actor", Value: "", Usage: "specify other actor to check state for (read only)", Aliases: []string{"a"}, }, &cli.StringFlag{ Name: "repo", EnvVars: []string{"LOTUS_PATH"}, Hidden: true, Value: "~/.lotus", // TODO: Consider XDG_DATA_HOME }, &cli.StringFlag{ Name: FlagMinerRepo, Aliases: []string{FlagMinerRepoDeprecation}, EnvVars: []string{"LOTUS_MINER_PATH", "LOTUS_STORAGE_PATH"}, Value: "~/.lotusminer", // TODO: Consider XDG_DATA_HOME Usage: fmt.Sprintf("Specify miner repo path. flag(%s) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON", FlagMinerRepoDeprecation), }, }, Commands: append(local, lcli.CommonCommands...), } app.Setup() app.Metadata["repoType"] = repo.StorageMiner if err := app.Run(os.Args); err != nil { log.Warnf("%+v", err) os.Exit(1) } } func getActorAddress(ctx context.Context, nodeAPI api.StorageMiner, overrideMaddr string) (maddr address.Address, err error) { if overrideMaddr != "" { maddr, err = address.NewFromString(overrideMaddr) if err != nil { return maddr, err } } maddr, err = nodeAPI.ActorAddress(ctx) if err != nil { return maddr, xerrors.Errorf("getting actor address: %w", err) } return maddr, nil }