diff --git a/cmd/goal/account.go b/cmd/goal/account.go index 7d20af38f3..ccc37f227f 100644 --- a/cmd/goal/account.go +++ b/cmd/goal/account.go @@ -59,7 +59,7 @@ var ( partKeyOutDir string partKeyFile string partKeyDeleteInput bool - listpartkeyCompat bool + partkeyCompat bool importDefault bool mnemonic string dumpOutFile string @@ -167,7 +167,10 @@ func init() { installParticipationKeyCmd.Flags().BoolVar(&partKeyDeleteInput, "delete-input", false, "Acknowledge that installpartkey will delete the input key file") // listpartkey flags - listParticipationKeysCmd.Flags().BoolVarP(&listpartkeyCompat, "compatibility", "c", false, "Print output in compatibility mode. This option will be removed in a future release, please use REST API for tooling.") + listParticipationKeysCmd.Flags().BoolVarP(&partkeyCompat, "compatibility", "c", false, "Print output in compatibility mode. This option will be removed in a future release, please use REST API for tooling.") + + // partkeyinfo flags + partkeyInfoCmd.Flags().BoolVarP(&partkeyCompat, "compatibility", "c", false, "Print output in compatibility mode. This option will be removed in a future release, please use REST API for tooling.") // import flags importCmd.Flags().BoolVarP(&importDefault, "default", "f", false, "Set this account as the default one") @@ -1069,6 +1072,7 @@ func uintToStr(number uint64) string { // legacyListParticipationKeysCommand prints key information in the same // format as earlier versions of goal. Some users are using this information // in scripts and need some extra time to migrate to the REST API. +// DEPRECATED func legacyListParticipationKeysCommand() { dataDir := ensureSingleDataDir() @@ -1118,7 +1122,7 @@ var listParticipationKeysCmd = &cobra.Command{ Long: `List all participation keys tracked by algod along with summary of additional information. For detailed key information use 'partkeyinfo'.`, Args: validateNoPosArgsFn, Run: func(cmd *cobra.Command, args []string) { - if listpartkeyCompat { + if partkeyCompat { legacyListParticipationKeysCommand() return } @@ -1364,12 +1368,57 @@ func strOrNA(value *uint64) string { return uintToStr(*value) } +// legacyPartkeyInfoCommand prints key information in the same +// format as earlier versions of goal. Some users are using this information +// in scripts and need some extra time to migrate to alternatives. +// DEPRECATED +func legacyPartkeyInfoCommand() { + type partkeyInfo struct { + _struct struct{} `codec:",omitempty,omitemptyarray"` + Address string `codec:"acct"` + FirstValid basics.Round `codec:"first"` + LastValid basics.Round `codec:"last"` + VoteID crypto.OneTimeSignatureVerifier `codec:"vote"` + SelectionID crypto.VRFVerifier `codec:"sel"` + VoteKeyDilution uint64 `codec:"voteKD"` + } + + onDataDirs(func(dataDir string) { + fmt.Printf("Dumping participation key info from %s...\n", dataDir) + client := ensureGoalClient(dataDir, libgoal.DynamicClient) + + // Make sure we don't already have a partkey valid for (or after) specified roundLastValid + parts, err := client.ListParticipationKeyFiles() + if err != nil { + reportErrorf(errorRequestFail, err) + } + + for filename, part := range parts { + fmt.Println("------------------------------------------------------------------") + info := partkeyInfo{ + Address: part.Address().String(), + FirstValid: part.FirstValid, + LastValid: part.LastValid, + VoteID: part.VotingSecrets().OneTimeSignatureVerifier, + SelectionID: part.VRFSecrets().PK, + VoteKeyDilution: part.KeyDilution, + } + infoString := protocol.EncodeJSON(&info) + fmt.Printf("File: %s\n%s\n", filename, string(infoString)) + } + }) +} + var partkeyInfoCmd = &cobra.Command{ Use: "partkeyinfo", Short: "Output details about all available part keys", Long: `Output details about all available part keys in the specified data directory(ies), such as key validity period.`, Args: validateNoPosArgsFn, Run: func(cmd *cobra.Command, args []string) { + if partkeyCompat { + legacyPartkeyInfoCommand() + return + } onDataDirs(func(dataDir string) { fmt.Printf("Dumping participation key info from %s...\n", dataDir)