2019-07-18 23:16:23 +00:00
package main
import (
2020-07-03 17:35:20 +00:00
"context"
2020-07-10 12:18:09 +00:00
"fmt"
2019-07-18 23:16:23 +00:00
2021-07-13 10:19:55 +00:00
"github.com/fatih/color"
2021-07-27 13:25:28 +00:00
cliutil "github.com/filecoin-project/lotus/cli/util"
2020-01-08 19:10:57 +00:00
logging "github.com/ipfs/go-log/v2"
2020-06-02 18:12:53 +00:00
"github.com/urfave/cli/v2"
2019-07-26 19:01:02 +00:00
"go.opencensus.io/trace"
2020-07-03 17:35:20 +00:00
"golang.org/x/xerrors"
2019-07-18 23:16:23 +00:00
2020-07-03 17:35:20 +00:00
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/api"
2019-10-18 04:47:41 +00:00
"github.com/filecoin-project/lotus/build"
lcli "github.com/filecoin-project/lotus/cli"
2020-01-08 13:49:34 +00:00
"github.com/filecoin-project/lotus/lib/lotuslog"
2020-02-22 11:36:22 +00:00
"github.com/filecoin-project/lotus/lib/tracing"
2019-12-09 12:36:56 +00:00
"github.com/filecoin-project/lotus/node/repo"
2019-07-18 23:16:23 +00:00
)
var log = logging . Logger ( "main" )
2020-07-08 10:38:59 +00:00
const FlagMinerRepo = "miner-repo"
2020-07-17 13:18:40 +00:00
2020-07-10 12:18:09 +00:00
// TODO remove after deprecation period
const FlagMinerRepoDeprecation = "storagerepo"
2019-07-23 21:50:52 +00:00
2019-07-18 23:16:23 +00:00
func main ( ) {
2021-03-05 21:01:20 +00:00
api . RunningNodeType = api . NodeMiner
2020-09-08 18:54:37 +00:00
2020-01-08 13:49:34 +00:00
lotuslog . SetupLogLevels ( )
2019-10-29 19:51:44 +00:00
2019-07-18 23:16:23 +00:00
local := [ ] * cli . Command {
2020-02-08 00:18:14 +00:00
initCmd ,
runCmd ,
2020-06-02 19:31:21 +00:00
stopCmd ,
2020-08-17 03:51:04 +00:00
configCmd ,
2020-10-01 11:58:26 +00:00
backupCmd ,
2020-07-21 17:19:47 +00:00
lcli . WithCategory ( "chain" , actorCmd ) ,
lcli . WithCategory ( "chain" , infoCmd ) ,
lcli . WithCategory ( "market" , storageDealsCmd ) ,
lcli . WithCategory ( "market" , retrievalDealsCmd ) ,
2020-08-20 08:18:05 +00:00
lcli . WithCategory ( "market" , dataTransfersCmd ) ,
2020-07-21 17:19:47 +00:00
lcli . WithCategory ( "storage" , sectorsCmd ) ,
lcli . WithCategory ( "storage" , provingCmd ) ,
lcli . WithCategory ( "storage" , storageCmd ) ,
2020-07-21 18:07:49 +00:00
lcli . WithCategory ( "storage" , sealingCmd ) ,
2020-07-27 17:59:30 +00:00
lcli . WithCategory ( "retrieval" , piecesCmd ) ,
2019-07-18 23:16:23 +00:00
}
2019-07-26 19:01:02 +00:00
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 )
2021-07-13 10:19:55 +00:00
if cctx . IsSet ( "color" ) {
color . NoColor = ! cctx . Bool ( "color" )
}
2019-07-26 19:01:02 +00:00
if originBefore != nil {
return originBefore ( cctx )
}
2021-07-13 10:19:55 +00:00
2019-07-26 19:01:02 +00:00
return nil
}
}
2019-07-18 23:16:23 +00:00
app := & cli . App {
2021-07-29 11:54:23 +00:00
Name : "lotus-miner" ,
Usage : "Filecoin decentralized storage network miner" ,
Version : build . UserVersion ( ) ,
EnableBashCompletion : true ,
2019-07-18 23:16:23 +00:00
Flags : [ ] cli . Flag {
2020-07-02 16:48:39 +00:00
& cli . StringFlag {
2020-07-03 17:45:21 +00:00
Name : "actor" ,
Value : "" ,
Usage : "specify other actor to check state for (read only)" ,
Aliases : [ ] string { "a" } ,
2020-07-02 16:48:39 +00:00
} ,
2020-07-14 12:31:15 +00:00
& cli . BoolFlag {
2021-07-13 10:19:55 +00:00
// examined in the Before above
2021-07-08 08:44:13 +00:00
Name : "color" ,
2021-07-13 10:19:55 +00:00
Usage : "use color in display output" ,
2021-07-08 08:44:13 +00:00
DefaultText : "depends on output being a TTY" ,
2020-07-14 12:31:15 +00:00
} ,
2019-07-18 23:16:23 +00:00
& cli . StringFlag {
Name : "repo" ,
EnvVars : [ ] string { "LOTUS_PATH" } ,
Hidden : true ,
Value : "~/.lotus" , // TODO: Consider XDG_DATA_HOME
} ,
& cli . StringFlag {
2020-07-08 10:38:59 +00:00
Name : FlagMinerRepo ,
2020-07-10 12:18:09 +00:00
Aliases : [ ] string { FlagMinerRepoDeprecation } ,
EnvVars : [ ] string { "LOTUS_MINER_PATH" , "LOTUS_STORAGE_PATH" } ,
2020-07-08 10:53:04 +00:00
Value : "~/.lotusminer" , // TODO: Consider XDG_DATA_HOME
2020-07-10 12:18:09 +00:00
Usage : fmt . Sprintf ( "Specify miner repo path. flag(%s) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON" , FlagMinerRepoDeprecation ) ,
2019-07-18 23:16:23 +00:00
} ,
2021-07-29 11:37:29 +00:00
& cli . BoolFlag {
Name : "call-on-markets" ,
Usage : "(experimental; may be removed) call this command against a markets node; use only with common commands like net, auth, pprof, etc. whose target may be ambiguous" ,
} ,
2021-07-27 19:46:02 +00:00
cliutil . FlagVeryVerbose ,
2019-07-18 23:16:23 +00:00
} ,
2021-07-29 11:54:23 +00:00
Commands : append ( local , lcli . CommonCommands ... ) ,
2021-07-29 11:37:29 +00:00
Before : func ( c * cli . Context ) error {
// this command is explicitly called on markets, inform
// common commands by overriding the repoType.
if c . Bool ( "call-on-markets" ) {
c . App . Metadata [ "repoType" ] = repo . Markets
}
return nil
} ,
2019-07-18 23:16:23 +00:00
}
2019-12-09 12:36:56 +00:00
app . Setup ( )
app . Metadata [ "repoType" ] = repo . StorageMiner
2020-07-23 18:41:53 +00:00
lcli . RunApp ( app )
2019-07-18 23:16:23 +00:00
}
2020-07-03 17:35:20 +00:00
2021-03-28 05:21:09 +00:00
func getActorAddress ( ctx context . Context , cctx * cli . Context ) ( maddr address . Address , err error ) {
if cctx . IsSet ( "actor" ) {
maddr , err = address . NewFromString ( cctx . String ( "actor" ) )
2020-07-03 17:35:20 +00:00
if err != nil {
return maddr , err
}
2020-07-14 12:31:15 +00:00
return
2020-07-03 17:35:20 +00:00
}
2021-03-28 05:21:09 +00:00
nodeAPI , closer , err := lcli . GetStorageMinerAPI ( cctx )
if err != nil {
return address . Undef , err
}
defer closer ( )
2020-07-03 17:49:21 +00:00
maddr , err = nodeAPI . ActorAddress ( ctx )
2020-07-03 17:35:20 +00:00
if err != nil {
return maddr , xerrors . Errorf ( "getting actor address: %w" , err )
}
return maddr , nil
}