@@ -78,6 +78,12 @@ func NewInterfaceRegistry() types.InterfaceRegistry {
7878 return registry
7979}
8080
81+ // NewTxConfig initializes new Cosmos TxConfig with certain signModes enabled.
82+ func NewTxConfig (signModes []signingtypes.SignMode ) client.TxConfig {
83+ marshaler , _ := createInjectiveProtoCodec ()
84+ return tx .NewTxConfig (marshaler , signModes )
85+ }
86+
8187// NewClientContext creates a new Cosmos Client context, where chainID
8288// corresponds to Cosmos chain ID, fromSpec is either name of the key, or bech32-address
8389// of the Cosmos account. Keyring is required to contain the specified key.
@@ -86,7 +92,51 @@ func NewClientContext(
8692) (client.Context , error ) {
8793 clientCtx := client.Context {}
8894
89- interfaceRegistry := NewInterfaceRegistry ()
95+ marshaler , interfaceRegistry := createInjectiveProtoCodec ()
96+
97+ encodingConfig := EncodingConfig {
98+ InterfaceRegistry : interfaceRegistry ,
99+ Marshaler : marshaler ,
100+ TxConfig : tx .NewTxConfig (marshaler , []signingtypes.SignMode {
101+ signingtypes .SignMode_SIGN_MODE_DIRECT ,
102+ }),
103+ }
104+
105+ var keyInfo keyring.Record
106+
107+ if kb != nil {
108+ addr , err := cosmostypes .AccAddressFromBech32 (fromSpec )
109+ if err == nil {
110+ record , err := kb .KeyByAddress (addr )
111+ if err != nil {
112+ err = errors .Wrapf (err , "failed to load key info by address %s" , addr .String ())
113+ return clientCtx , err
114+ }
115+ keyInfo = * record
116+ } else {
117+ // failed to parse Bech32, is it a name?
118+ record , err := kb .Key (fromSpec )
119+ if err != nil {
120+ err = errors .Wrapf (err , "no key in keyring for name: %s" , fromSpec )
121+ return clientCtx , err
122+ }
123+ keyInfo = * record
124+ }
125+ }
126+
127+ clientCtx = newContext (
128+ chainId ,
129+ encodingConfig ,
130+ kb ,
131+ keyInfo ,
132+ )
133+
134+ return clientCtx , nil
135+ }
136+
137+ func createInjectiveProtoCodec () (injectiveCodec * codec.ProtoCodec , interfaceRegistry types.InterfaceRegistry ) {
138+ interfaceRegistry = NewInterfaceRegistry ()
139+
90140 keyscodec .RegisterInterfaces (interfaceRegistry )
91141 std .RegisterInterfaces (interfaceRegistry )
92142 exchange .RegisterInterfaces (interfaceRegistry )
@@ -131,45 +181,9 @@ func NewClientContext(
131181 ibcconnectiontypes .RegisterInterfaces (interfaceRegistry )
132182 ibctransfertypes .RegisterInterfaces (interfaceRegistry )
133183
134- marshaler := codec .NewProtoCodec (interfaceRegistry )
135- encodingConfig := EncodingConfig {
136- InterfaceRegistry : interfaceRegistry ,
137- Marshaler : marshaler ,
138- TxConfig : tx .NewTxConfig (marshaler , []signingtypes.SignMode {
139- signingtypes .SignMode_SIGN_MODE_DIRECT ,
140- }),
141- }
142-
143- var keyInfo keyring.Record
144-
145- if kb != nil {
146- addr , err := cosmostypes .AccAddressFromBech32 (fromSpec )
147- if err == nil {
148- record , err := kb .KeyByAddress (addr )
149- if err != nil {
150- err = errors .Wrapf (err , "failed to load key info by address %s" , addr .String ())
151- return clientCtx , err
152- }
153- keyInfo = * record
154- } else {
155- // failed to parse Bech32, is it a name?
156- record , err := kb .Key (fromSpec )
157- if err != nil {
158- err = errors .Wrapf (err , "no key in keyring for name: %s" , fromSpec )
159- return clientCtx , err
160- }
161- keyInfo = * record
162- }
163- }
164-
165- clientCtx = newContext (
166- chainId ,
167- encodingConfig ,
168- kb ,
169- keyInfo ,
170- )
184+ injectiveCodec = codec .NewProtoCodec (interfaceRegistry )
171185
172- return clientCtx , nil
186+ return injectiveCodec , interfaceRegistry
173187}
174188
175189type EncodingConfig struct {
0 commit comments