@@ -13,7 +13,7 @@ import (
1313// Note, BroadcastTx is copied from the SDK except it removes a few unnecessary
1414// things like prompting for confirmation and printing the response. Instead,
1515// we return the TxResponse.
16- func BroadcastTx (clientCtx client.Context , txf tx.Factory , msgs ... sdk.Msg ) (* sdk.TxResponse , error ) {
16+ func BroadcastTx (clientCtx client.Context , txf tx.Factory , gasPrice string , msgs ... sdk.Msg ) (* sdk.TxResponse , error ) {
1717 txf , err := prepareFactory (clientCtx , txf )
1818 if err != nil {
1919 return nil , err
@@ -31,6 +31,9 @@ func BroadcastTx(clientCtx client.Context, txf tx.Factory, msgs ...sdk.Msg) (*sd
3131 return nil , err
3232 }
3333
34+ feeAmount , err := calculateFeeAmount (gasPrice , adjusted )
35+ unsignedTx .SetFeeAmount (feeAmount )
36+
3437 unsignedTx .SetFeeGranter (clientCtx .GetFeeGranterAddress ())
3538 // unsignedTx.SetFeePayer(clientCtx.GetFeePayerAddress())
3639
@@ -75,3 +78,19 @@ func prepareFactory(clientCtx client.Context, txf tx.Factory) (tx.Factory, error
7578
7679 return txf , nil
7780}
81+
82+ func calculateFeeAmount (gasPrice string , gas uint64 ) (sdk.Coins , error ) {
83+ var feeAmount sdk.Coins
84+ coins , err := sdk .ParseDecCoins (gasPrice )
85+ if err != nil {
86+ return nil , err
87+ }
88+
89+ for _ , coin := range coins {
90+ intGas := sdk .NewIntFromUint64 (gas )
91+ amount := coin .Amount .Mul (sdk .NewDecFromInt (intGas )).Ceil ().TruncateInt ()
92+
93+ feeAmount = append (feeAmount , sdk .NewCoin (coin .Denom , amount ))
94+ }
95+ return feeAmount , nil
96+ }
0 commit comments