Skip to content

Commit

Permalink
Address @alexanderbez comments
Browse files Browse the repository at this point in the history
  • Loading branch information
Alessio Treglia committed Sep 6, 2018
1 parent 7e80ec7 commit ff48cd2
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 49 deletions.
60 changes: 30 additions & 30 deletions x/auth/client/cli/sign.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,26 +50,10 @@ func makeSignCmd(cdc *amino.Codec, decoder auth.AccountDecoder) func(cmd *cobra.
}

name := viper.GetString(client.FlagName)
keybase, err := keys.GetKeyBase()
if err != nil {
return
}
info, err := keybase.Get(name)
if err != nil {
return
}

cliCtx := context.NewCLIContext().WithCodec(cdc).WithAccountDecoder(decoder)
acc, err := cliCtx.GetAccount(sdk.AccAddress(info.GetPubKey().Address()))
if err != nil {
return err
}
txCtx := authctx.NewTxContextFromCLI()

passphrase, err := keys.GetPassphrase(name)
if err != nil {
return err
}
newTx, err := signStdTx(stdTx, name, passphrase, acc)
newTx, err := signStdTx(txCtx, cliCtx, name, stdTx)
if err != nil {
return err
}
Expand All @@ -82,21 +66,37 @@ func makeSignCmd(cdc *amino.Codec, decoder auth.AccountDecoder) func(cmd *cobra.
}
}

func signStdTx(stdTx auth.StdTx, name, passphrase string, acc auth.Account) (signedStdTx auth.StdTx, err error) {
stdSignature, err := authctx.MakeSignature(name, passphrase, auth.StdSignMsg{
ChainID: viper.GetString(client.FlagChainID),
AccountNumber: acc.GetAccountNumber(),
Sequence: acc.GetSequence(),
Fee: stdTx.Fee,
Msgs: stdTx.GetMsgs(),
Memo: stdTx.GetMemo(),
})
func signStdTx(txCtx authctx.TxContext, cliCtx context.CLIContext, name string, stdTx auth.StdTx) (auth.StdTx, error) {
var signedStdTx auth.StdTx
keybase, err := keys.GetKeyBase()
if err != nil {
return
return signedStdTx, err
}
info, err := keybase.Get(name)
if err != nil {
return signedStdTx, err
}
addr := info.GetPubKey().Address()
if txCtx.AccountNumber == 0 {
accNum, err := cliCtx.GetAccountNumber(addr)
if err != nil {
return signedStdTx, err
}
txCtx = txCtx.WithAccountNumber(accNum)
}
if txCtx.Sequence == 0 {
accSeq, err := cliCtx.GetAccountSequence(addr)
if err != nil {
return signedStdTx, err
}
txCtx = txCtx.WithSequence(accSeq)
}

signedStdTx = authctx.SignStdTx(stdTx, stdSignature, viper.GetBool(flagOverwriteSigs))
return
passphrase, err := keys.GetPassphrase(name)
if err != nil {
return signedStdTx, err
}
return txCtx.SignStdTx(name, passphrase, stdTx, viper.GetBool(flagOverwriteSigs))
}

func printSignatures(stdTx auth.StdTx) {
Expand Down
37 changes: 25 additions & 12 deletions x/auth/client/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,31 @@ func (ctx TxContext) BuildWithPubKey(name string, msgs []sdk.Msg) ([]byte, error
return ctx.Codec.MarshalBinary(auth.NewStdTx(msg.Msgs, msg.Fee, sigs, msg.Memo))
}

// SignStdTx appends a signature to a StdTx and returns a copy of a it. If append
// is false, it replaces the signatures already attached with the new signature.
func (ctx TxContext) SignStdTx(name, passphrase string, stdTx auth.StdTx, appendSig bool) (signedStdTx auth.StdTx, err error) {
stdSignature, err := MakeSignature(name, passphrase, auth.StdSignMsg{
ChainID: ctx.ChainID,
AccountNumber: ctx.AccountNumber,
Sequence: ctx.Sequence,
Fee: stdTx.Fee,
Msgs: stdTx.GetMsgs(),
Memo: stdTx.GetMemo(),
})
if err != nil {
return
}

sigs := stdTx.GetSignatures()
if len(sigs) == 0 || !appendSig {
sigs = []auth.StdSignature{stdSignature}
} else {
sigs = append(sigs, stdSignature)
}
signedStdTx = auth.NewStdTx(stdTx.GetMsgs(), stdTx.Fee, sigs, stdTx.GetMemo())
return
}

// MakeSignature builds a StdSignature given key name, passphrase, and a StdSignMsg.
func MakeSignature(name, passphrase string, msg auth.StdSignMsg) (sig auth.StdSignature, err error) {
keybase, err := keys.GetKeyBase()
Expand All @@ -182,15 +207,3 @@ func MakeSignature(name, passphrase string, msg auth.StdSignMsg) (sig auth.StdSi
Signature: sigBytes,
}, nil
}

// SignStdTx attach a signature to a StdTx and returns a copy of a it. If overwriteSigs is true,
// it replaces the signatures already attached if there's any with the given signature.
func SignStdTx(stdTx auth.StdTx, stdSignature auth.StdSignature, overwriteSigs bool) auth.StdTx {
sigs := stdTx.GetSignatures()
if len(sigs) == 0 || overwriteSigs {
sigs = []auth.StdSignature{stdSignature}
} else {
sigs = append(sigs, stdSignature)
}
return auth.NewStdTx(stdTx.GetMsgs(), stdTx.Fee, sigs, stdTx.GetMemo())
}
11 changes: 4 additions & 7 deletions x/auth/client/rest/sign.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,17 @@ func SignTxRequestHandlerFn(cdc *wire.Codec, cliCtx context.CLIContext) http.Han
return
}

sig, err := authctx.MakeSignature(m.LocalAccountName, m.Password, auth.StdSignMsg{
txCtx := authctx.TxContext{
ChainID: m.ChainID,
AccountNumber: m.AccountNumber,
Sequence: m.Sequence,
Fee: m.Tx.Fee,
Msgs: m.Tx.GetMsgs(),
Memo: m.Tx.GetMemo(),
})
}
signedTx, err := txCtx.SignStdTx(m.LocalAccountName, m.Password, m.Tx, false)
if err != nil {
utils.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
return
}

output, err := wire.MarshalJSONIndent(cdc, authctx.SignStdTx(m.Tx, sig, false))
output, err := wire.MarshalJSONIndent(cdc, signedTx)
if err != nil {
utils.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
return
Expand Down

0 comments on commit ff48cd2

Please sign in to comment.