@@ -2,6 +2,7 @@ package cmd
22
33import (
44 "context"
5+ "encoding/hex"
56 "fmt"
67 "log"
78 "time"
@@ -10,11 +11,11 @@ import (
1011 abci "github.com/cometbft/cometbft/abci/types"
1112 "github.com/cosmos/cosmos-sdk/client/tx"
1213 "github.com/cosmos/cosmos-sdk/crypto/hd"
14+ "github.com/cosmos/cosmos-sdk/crypto/keyring"
1315 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
1416 sdk "github.com/cosmos/cosmos-sdk/types"
1517 txtypes "github.com/cosmos/cosmos-sdk/types/tx"
1618 "github.com/cosmos/cosmos-sdk/types/tx/signing"
17- authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
1819 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
1920 "google.golang.org/grpc"
2021)
@@ -34,7 +35,8 @@ type Broadcaster struct {
3435 txService txtypes.ServiceClient
3536
3637 address sdk.AccAddress
37- privKey * secp256k1.PrivKey
38+
39+ kr keyring.Keyring
3840}
3941
4042func NewBroadcaster (enc encoding.Config , grpcConn * grpc.ClientConn ) * Broadcaster {
@@ -48,12 +50,17 @@ func NewBroadcaster(enc encoding.Config, grpcConn *grpc.ClientConn) *Broadcaster
4850 pk := secp256k1.PrivKey {Key : privKey }
4951 signerAddr := sdk .AccAddress (pk .PubKey ().Address ())
5052
53+ kr := keyring .NewInMemory (enc .Codec )
54+ if err := kr .ImportPrivKeyHex (signerAddr .String (), hex .EncodeToString (pk .Bytes ()), pk .Type ()); err != nil {
55+ log .Fatalf ("key import failed" )
56+ }
57+
5158 return & Broadcaster {
5259 enc : enc ,
5360 authService : authtypes .NewQueryClient (grpcConn ),
5461 txService : txtypes .NewServiceClient (grpcConn ),
55- privKey : & pk ,
5662 address : signerAddr ,
63+ kr : kr ,
5764 }
5865}
5966
@@ -76,21 +83,16 @@ func (b *Broadcaster) BroadcastTx(ctx context.Context, msgs ...sdk.Msg) *sdk.TxR
7683 txBuilder .SetGasLimit (gasLimit )
7784 txBuilder .SetFeeAmount (sdk .NewCoins (sdk .NewInt64Coin (denom , feeAmount )))
7885
79- signerData := authsigning.SignerData {
80- Address : b .address .String (),
81- ChainID : chainID ,
82- AccountNumber : acc .AccountNumber ,
83- Sequence : acc .Sequence ,
84- PubKey : b .privKey .PubKey (),
85- }
86-
87- sigv2 , err := tx .SignWithPrivKey (ctx , signing .SignMode_SIGN_MODE_LEGACY_AMINO_JSON , signerData , txBuilder , b .privKey , b .enc .TxConfig , acc .Sequence )
88- if err != nil {
89- log .Fatalf ("sign tx failed: %v" , err )
90- }
86+ factory := tx.Factory {}.
87+ WithKeybase (b .kr ).
88+ WithSignMode (signing .SignMode_SIGN_MODE_DIRECT ).
89+ WithTxConfig (b .enc .TxConfig ).
90+ WithChainID (chainID ).
91+ WithAccountNumber (acc .AccountNumber ).
92+ WithSequence (acc .Sequence )
9193
92- if err := txBuilder . SetSignatures ( sigv2 ); err != nil {
93- log .Fatalf ("set signatures failed : %v" , err )
94+ if err := tx . Sign ( ctx , factory , b . address . String (), txBuilder , false ); err != nil {
95+ log .Fatalf ("failed to sign tx : %v" , err )
9496 }
9597
9698 txBytes , err := b .enc .TxConfig .TxEncoder ()(txBuilder .GetTx ())
0 commit comments