-
Notifications
You must be signed in to change notification settings - Fork 271
/
addr_converter.go
45 lines (41 loc) · 1.52 KB
/
addr_converter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package cmd
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/spf13/cobra"
)
// addrConversionCmd returns a command that converts between celestia1xxx and
// celestiavaloper1xxx addresses.
func addrConversionCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "addr-conversion [celestia address]",
Short: "Convert between celestia1xxx address and validator operator address celestiavaloper1xxx",
Long: `Reads a celestia1xxx or celestiavaloper1xxx address and converts it to the other type.`,
Example: "celestia-appd addr-conversion celestia1grvklux2yjsln7ztk6slv538396qatckqhs86z\n" +
"celestia-appd addr-conversion celestiavaloper1grvklux2yjsln7ztk6slv538396qatck9gj7vy\n",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
converted, err := convertAccountValidatorAddress(args[0])
if err != nil {
return err
}
_, err = cmd.OutOrStdout().Write([]byte(converted + "\n"))
if err != nil {
return err
}
return nil
},
}
return cmd
}
// convertAccountValidatorAddress converts an account address into a valoper
// address, or a valoper address into an account address.
func convertAccountValidatorAddress(original string) (string, error) {
if accAddr, err := sdk.AccAddressFromBech32(original); err == nil {
return sdk.ValAddress(accAddr.Bytes()).String(), nil
}
if valAddr, err := sdk.ValAddressFromBech32(original); err == nil {
return sdk.AccAddress(valAddr.Bytes()).String(), nil
}
return "", fmt.Errorf("invalid address: %s", original)
}