feat(client): use address codec for tx.Sign (#21436)

This commit is contained in:
Julien Robert
2024-08-28 08:14:36 +00:00
committed by GitHub
parent 4c796d2ae1
commit 01abf4fbf9
8 changed files with 44 additions and 28 deletions
+9 -4
View File
@@ -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
View File
@@ -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