feat(client): use address codec for tx.Sign (#21436)
This commit is contained in:
+9
-4
@@ -126,7 +126,7 @@ func BroadcastTx(clientCtx client.Context, txf Factory, msgs ...sdk.Msg) error {
|
||||
}
|
||||
}
|
||||
|
||||
if err = Sign(clientCtx.CmdContext, txf, clientCtx.FromName, tx, true); err != nil {
|
||||
if err = Sign(clientCtx, txf, clientCtx.FromName, tx, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@ func checkMultipleSigners(tx authsigning.Tx) error {
|
||||
// Signing a transaction with mutltiple signers in the DIRECT mode is not supported and will
|
||||
// return an error.
|
||||
// An error is returned upon failure.
|
||||
func Sign(ctx context.Context, txf Factory, name string, txBuilder client.TxBuilder, overwriteSig bool) error {
|
||||
func Sign(ctx client.Context, txf Factory, name string, txBuilder client.TxBuilder, overwriteSig bool) error {
|
||||
if txf.keybase == nil {
|
||||
return errors.New("keybase must be set prior to signing a transaction")
|
||||
}
|
||||
@@ -273,12 +273,17 @@ func Sign(ctx context.Context, txf Factory, name string, txBuilder client.TxBuil
|
||||
return err
|
||||
}
|
||||
|
||||
addressStr, err := ctx.AddressCodec.BytesToString(pubKey.Address())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
signerData := authsigning.SignerData{
|
||||
ChainID: txf.chainID,
|
||||
AccountNumber: txf.accountNumber,
|
||||
Sequence: txf.sequence,
|
||||
PubKey: pubKey,
|
||||
Address: sdk.AccAddress(pubKey.Address()).String(),
|
||||
Address: addressStr,
|
||||
}
|
||||
|
||||
// For SIGN_MODE_DIRECT, calling SetSignatures calls setSignerInfos on
|
||||
@@ -322,7 +327,7 @@ func Sign(ctx context.Context, txf Factory, name string, txBuilder client.TxBuil
|
||||
return err
|
||||
}
|
||||
|
||||
bytesToSign, err := authsigning.GetSignBytesAdapter(ctx, txf.txConfig.SignModeHandler(), signMode, signerData, txBuilder.GetTx())
|
||||
bytesToSign, err := authsigning.GetSignBytesAdapter(ctx.CmdContext, txf.txConfig.SignModeHandler(), signMode, signerData, txBuilder.GetTx())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+11
-2
@@ -16,6 +16,7 @@ import (
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
|
||||
"github.com/cosmos/cosmos-sdk/codec/testutil"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
@@ -268,6 +269,10 @@ func TestSign(t *testing.T) {
|
||||
txbSimple, err := txfNoKeybase.BuildUnsignedTx(msg2)
|
||||
requireT.NoError(err)
|
||||
|
||||
clientCtx := client.Context{}.
|
||||
WithAddressCodec(addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix())).
|
||||
WithCmdContext(context.TODO())
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
txf Factory
|
||||
@@ -357,7 +362,7 @@ func TestSign(t *testing.T) {
|
||||
var prevSigs []signingtypes.SignatureV2
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err = Sign(context.TODO(), tc.txf, tc.from, tc.txb, tc.overwrite)
|
||||
err = Sign(clientCtx, tc.txf, tc.from, tc.txb, tc.overwrite)
|
||||
if len(tc.expectedPKs) == 0 {
|
||||
requireT.Error(err)
|
||||
} else {
|
||||
@@ -414,7 +419,11 @@ func TestPreprocessHook(t *testing.T) {
|
||||
txb, err := txfDirect.BuildUnsignedTx(msg1, msg2)
|
||||
requireT.NoError(err)
|
||||
|
||||
err = Sign(context.TODO(), txfDirect, from, txb, false)
|
||||
clientCtx := client.Context{}.
|
||||
WithAddressCodec(addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix())).
|
||||
WithCmdContext(context.TODO())
|
||||
|
||||
err = Sign(clientCtx, txfDirect, from, txb, false)
|
||||
requireT.NoError(err)
|
||||
|
||||
// Run preprocessing
|
||||
|
||||
Reference in New Issue
Block a user