108 lines
2.4 KiB
Go
108 lines
2.4 KiB
Go
package commands
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
|
|
"github.com/tendermint/basecoin/client/commands"
|
|
txcmd "github.com/tendermint/basecoin/client/commands/txs"
|
|
"github.com/tendermint/basecoin/modules/ibc"
|
|
"github.com/tendermint/light-client/certifiers"
|
|
)
|
|
|
|
// RegisterChainTxCmd is CLI command to register a new chain for ibc
|
|
var RegisterChainTxCmd = &cobra.Command{
|
|
Use: "ibc-register",
|
|
Short: "Register a new chain",
|
|
RunE: commands.RequireInit(registerChainTxCmd),
|
|
}
|
|
|
|
// UpdateChainTxCmd is CLI command to update the header for an ibc chain
|
|
var UpdateChainTxCmd = &cobra.Command{
|
|
Use: "ibc-update",
|
|
Short: "Add new header to an existing chain",
|
|
RunE: commands.RequireInit(updateChainTxCmd),
|
|
}
|
|
|
|
// TODO: post packet (query and all that jazz)
|
|
|
|
// TODO: relay!
|
|
|
|
//nolint
|
|
const (
|
|
FlagSeed = "seed"
|
|
)
|
|
|
|
func init() {
|
|
fs1 := RegisterChainTxCmd.Flags()
|
|
fs1.String(FlagSeed, "", "Filename with a seed file")
|
|
|
|
fs2 := UpdateChainTxCmd.Flags()
|
|
fs2.String(FlagSeed, "", "Filename with a seed file")
|
|
}
|
|
|
|
func registerChainTxCmd(cmd *cobra.Command, args []string) error {
|
|
seed, err := readSeed()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx := ibc.RegisterChainTx{seed}.Wrap()
|
|
return txcmd.DoTx(tx)
|
|
}
|
|
|
|
func updateChainTxCmd(cmd *cobra.Command, args []string) error {
|
|
seed, err := readSeed()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tx := ibc.UpdateChainTx{seed}.Wrap()
|
|
return txcmd.DoTx(tx)
|
|
}
|
|
|
|
func readSeed() (seed certifiers.Seed, err error) {
|
|
name := viper.GetString(FlagSeed)
|
|
if name == "" {
|
|
return seed, errors.New("You must specify a seed file")
|
|
}
|
|
|
|
var f *os.File
|
|
f, err = os.Open(name)
|
|
if err != nil {
|
|
return seed, errors.Wrap(err, "Cannot read seed file")
|
|
}
|
|
defer f.Close()
|
|
|
|
// read the file as json into a seed
|
|
j := json.NewDecoder(f)
|
|
err = j.Decode(&seed)
|
|
err = errors.Wrap(err, "Invalid seed file")
|
|
return
|
|
}
|
|
|
|
// func readCreateRoleTxFlags() (tx basecoin.Tx, err error) {
|
|
// role, err := parseRole(viper.GetString(FlagRole))
|
|
// if err != nil {
|
|
// return tx, err
|
|
// }
|
|
|
|
// sigs := viper.GetInt(FlagMinSigs)
|
|
// if sigs < 1 {
|
|
// return tx, errors.Errorf("--%s must be at least 1", FlagMinSigs)
|
|
// }
|
|
|
|
// signers, err := commands.ParseActors(viper.GetString(FlagMembers))
|
|
// if err != nil {
|
|
// return tx, err
|
|
// }
|
|
// if len(signers) == 0 {
|
|
// return tx, errors.New("must specify at least one member")
|
|
// }
|
|
|
|
// tx = roles.NewCreateRoleTx(role, uint32(sigs), signers)
|
|
// return tx, nil
|
|
// }
|