2020-09-27 19:10:05 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"sort"
|
|
|
|
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
)
|
|
|
|
|
2020-09-28 11:35:01 +00:00
|
|
|
// DefaultLotusRepoPath is where the fallback path where to look for a Lotus
|
|
|
|
// client repo. It is expanded with mitchellh/go-homedir, so it'll work with all
|
|
|
|
// OSes despite the Unix twiddle notation.
|
|
|
|
const DefaultLotusRepoPath = "~/.lotus"
|
|
|
|
|
|
|
|
var repoFlag = cli.StringFlag{
|
|
|
|
Name: "repo",
|
|
|
|
EnvVars: []string{"LOTUS_PATH"},
|
|
|
|
Value: DefaultLotusRepoPath,
|
|
|
|
TakesFile: true,
|
|
|
|
}
|
|
|
|
|
2020-09-27 19:10:05 +00:00
|
|
|
func main() {
|
|
|
|
app := &cli.App{
|
|
|
|
Name: "tvx",
|
2020-09-28 16:02:56 +00:00
|
|
|
Description: `tvx is a tool for extracting and executing test vectors. It has three subcommands.
|
2020-09-27 19:10:05 +00:00
|
|
|
|
|
|
|
tvx extract extracts a test vector from a live network. It requires access to
|
2020-09-28 11:27:42 +00:00
|
|
|
a Filecoin client that exposes the standard JSON-RPC API endpoint. Only
|
|
|
|
message class test vectors are supported at this time.
|
2020-09-27 19:10:05 +00:00
|
|
|
|
|
|
|
tvx exec executes test vectors against Lotus. Either you can supply one in a
|
2020-09-28 11:27:42 +00:00
|
|
|
file, or many as an ndjson stdin stream.
|
|
|
|
|
2020-09-28 16:02:56 +00:00
|
|
|
tvx extract-many performs a batch extraction of many messages, supplied in a
|
|
|
|
CSV file. Refer to the help of that subcommand for more info.
|
|
|
|
|
2020-09-28 11:27:42 +00:00
|
|
|
SETTING THE JSON-RPC API ENDPOINT
|
|
|
|
|
2020-09-28 11:35:01 +00:00
|
|
|
You can set the JSON-RPC API endpoint through one of the following methods.
|
2020-09-28 11:27:42 +00:00
|
|
|
|
|
|
|
1. Directly set the API endpoint on the FULLNODE_API_INFO env variable.
|
|
|
|
The format is [token]:multiaddr, where token is optional for commands not
|
|
|
|
accessing privileged operations.
|
|
|
|
|
|
|
|
2. If you're running tvx against a local Lotus client, you can set the REPO
|
|
|
|
env variable to have the API endpoint and token extracted from the repo.
|
2020-09-28 11:35:01 +00:00
|
|
|
Alternatively, you can pass the --repo CLI flag.
|
2020-09-28 11:27:42 +00:00
|
|
|
|
|
|
|
3. Rely on the default fallback, which inspects ~/.lotus and extracts the
|
|
|
|
API endpoint string if the location is a Lotus repo.
|
|
|
|
|
2020-09-28 11:35:01 +00:00
|
|
|
tvx will apply these methods in the same order of precedence they're listed.
|
2020-09-28 11:27:42 +00:00
|
|
|
`,
|
2020-09-27 19:10:05 +00:00
|
|
|
Usage: "tvx is a tool for extracting and executing test vectors",
|
|
|
|
Commands: []*cli.Command{
|
|
|
|
extractCmd,
|
|
|
|
execCmd,
|
2020-09-28 16:02:56 +00:00
|
|
|
extractManyCmd,
|
2020-09-27 19:10:05 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
sort.Sort(cli.CommandsByName(app.Commands))
|
|
|
|
for _, c := range app.Commands {
|
|
|
|
sort.Sort(cli.FlagsByName(c.Flags))
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|