Encaptulate Get Passphrase Logic in Builder

This commit is contained in:
Yukai Tu
2018-03-24 23:14:18 -07:00
parent 2d45058352
commit 96d9c55172
6 changed files with 21 additions and 48 deletions
+13 -1
View File
@@ -124,7 +124,12 @@ func SignAndBuild(name, passphrase string, msg sdk.Msg, cdc *wire.Codec) ([]byte
} }
// sign and build the transaction from the msg // sign and build the transaction from the msg
func SignBuildBroadcast(name string, passphrase string, msg sdk.Msg, cdc *wire.Codec) (*ctypes.ResultBroadcastTxCommit, error) { func SignBuildBroadcast(name string, msg sdk.Msg, cdc *wire.Codec) (*ctypes.ResultBroadcastTxCommit, error) {
passphrase, err := GetPassphraseFromStdin(name)
if err != nil {
return nil, err
}
txBytes, err := SignAndBuild(name, passphrase, msg, cdc) txBytes, err := SignAndBuild(name, passphrase, msg, cdc)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -132,3 +137,10 @@ func SignBuildBroadcast(name string, passphrase string, msg sdk.Msg, cdc *wire.C
return BroadcastTx(txBytes) return BroadcastTx(txBytes)
} }
// get passphrase from std input
func GetPassphraseFromStdin(name string) (pass string, err error) {
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
return client.GetPassword(prompt, buf)
}
+2 -18
View File
@@ -36,16 +36,8 @@ func QuizTxCmd(cdc *wire.Codec) *cobra.Command {
// get account name // get account name
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
// get password
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return err
}
// build and sign the transaction, then broadcast to Tendermint // build and sign the transaction, then broadcast to Tendermint
res, err := builder.SignBuildBroadcast(name, passphrase, msg, cdc) res, err := builder.SignBuildBroadcast(name, msg, cdc)
if err != nil { if err != nil {
return err return err
} }
@@ -75,19 +67,11 @@ func SetTrendTxCmd(cdc *wire.Codec) *cobra.Command {
// get account name // get account name
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
// get password
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return err
}
// create the message // create the message
msg := cool.NewSetTrendMsg(from, args[0]) msg := cool.NewSetTrendMsg(from, args[0])
// build and sign the transaction, then broadcast to Tendermint // build and sign the transaction, then broadcast to Tendermint
res, err := builder.SignBuildBroadcast(name, passphrase, msg, cdc) res, err := builder.SignBuildBroadcast(name, msg, cdc)
if err != nil { if err != nil {
return err return err
} }
+1 -9
View File
@@ -62,19 +62,11 @@ func (c Commander) sendTxCmd(cmd *cobra.Command, args []string) error {
// get account name // get account name
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
// get password
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return err
}
// build message // build message
msg := BuildMsg(from, to, coins) msg := BuildMsg(from, to, coins)
// build and sign the transaction, then broadcast to Tendermint // build and sign the transaction, then broadcast to Tendermint
res, err := builder.SignBuildBroadcast(name, passphrase, msg, c.Cdc) res, err := builder.SignBuildBroadcast(name, msg, c.Cdc)
if err != nil { if err != nil {
return err return err
} }
+1 -7
View File
@@ -53,14 +53,8 @@ func (c sendCommander) sendIBCTransfer(cmd *cobra.Command, args []string) error
// get password // get password
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
buf := client.BufferStdin()
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return err
}
res, err := builder.SignBuildBroadcast(name, passphrase, msg, c.cdc) res, err := builder.SignBuildBroadcast(name, msg, c.cdc)
if err != nil { if err != nil {
return err return err
} }
+3 -5
View File
@@ -27,7 +27,7 @@ const (
type relayCommander struct { type relayCommander struct {
cdc *wire.Codec cdc *wire.Codec
address sdk.Address address sdk.Address
decoder sdk.AccountDecoder decoder sdk.AccountDecoder
mainStore string mainStore string
ibcStore string ibcStore string
} }
@@ -35,7 +35,7 @@ type relayCommander struct {
func IBCRelayCmd(cdc *wire.Codec) *cobra.Command { func IBCRelayCmd(cdc *wire.Codec) *cobra.Command {
cmdr := relayCommander{ cmdr := relayCommander{
cdc: cdc, cdc: cdc,
decoder: authcmd.GetAccountDecoder(cdc), decoder: authcmd.GetAccountDecoder(cdc),
ibcStore: "ibc", ibcStore: "ibc",
mainStore: "main", mainStore: "main",
} }
@@ -80,9 +80,7 @@ func (c relayCommander) runIBCRelay(cmd *cobra.Command, args []string) {
func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) { func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode string) {
// get password // get password
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
buf := client.BufferStdin() passphrase, err := builder.GetPassphraseFromStdin(name)
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil { if err != nil {
panic(err) panic(err)
} }
+1 -8
View File
@@ -94,14 +94,7 @@ func (co commander) unbondTxCmd(cmd *cobra.Command, args []string) error {
func (co commander) sendMsg(msg sdk.Msg) error { func (co commander) sendMsg(msg sdk.Msg) error {
name := viper.GetString(client.FlagName) name := viper.GetString(client.FlagName)
buf := client.BufferStdin() res, err := builder.SignBuildBroadcast(name, msg, co.cdc)
prompt := fmt.Sprintf("Password to sign with '%s':", name)
passphrase, err := client.GetPassword(prompt, buf)
if err != nil {
return err
}
res, err := builder.SignBuildBroadcast(name, passphrase, msg, co.cdc)
if err != nil { if err != nil {
return err return err
} }