fix: make rosetta's gas prices for default fee suggestion optional (#11857)

This commit is contained in:
Geoff Lee 2022-05-03 22:49:33 +09:00 committed by GitHub
parent 78618dbfa0
commit 84050ecd71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 29 deletions

View File

@ -415,7 +415,7 @@ func (c *Client) ConstructionMetadataFromOptions(ctx context.Context, options ma
}
if constructionOptions.GasPrice == "" {
denom := c.config.DenomToSuggest
constructionOptions.GasPrice = c.config.SuggestPrices.AmountOf(denom).String() + denom
constructionOptions.GasPrice = c.config.GasPrices.AmountOf(denom).String() + denom
}
}
@ -424,9 +424,8 @@ func (c *Client) ConstructionMetadataFromOptions(ctx context.Context, options ma
if err != nil {
return nil, err
}
// check gasPrice is in the list
if !c.config.SuggestPrices.AmountOf(gasPrice.Denom).IsPositive() {
return nil, crgerrs.ErrBadArgument
if !gasPrice.IsPositive() {
return nil, crgerrs.WrapError(crgerrs.ErrBadArgument, "gas price must be positive")
}
}

View File

@ -37,7 +37,7 @@ const (
// DenomToSuggest defines the default denom for fee suggestion
DenomToSuggest = "uatom"
// DefaultPrices defines the default list of prices to suggest
DefaultPrices = "0.0uatom"
DefaultPrices = "1uatom,1stake"
)
// configuration flags
@ -83,8 +83,8 @@ type Config struct {
GasToSuggest int
// DenomToSuggest defines the default denom for fee suggestion
DenomToSuggest string
// SuggestPrices defines the gas prices for fee suggestion
SuggestPrices sdk.DecCoins
// GasPrices defines the gas prices for fee suggestion
GasPrices sdk.DecCoins
// Codec overrides the default data and construction api client codecs
Codec *codec.ProtoCodec
// InterfaceRegistry overrides the default data and construction api interface registry
@ -120,17 +120,19 @@ func (c *Config) validate() error {
return fmt.Errorf("network not provided")
}
if c.GasToSuggest <= 0 {
c.GasToSuggest = clientflags.DefaultGasLimit
return fmt.Errorf("gas to suggest must be positive")
}
found := false
for i := 0; i < c.SuggestPrices.Len(); i++ {
if c.SuggestPrices.GetDenomByIndex(i) == c.DenomToSuggest {
found = true
break
if c.EnableFeeSuggestion {
found := false
for i := 0; i < c.GasPrices.Len(); i++ {
if c.GasPrices.GetDenomByIndex(i) == c.DenomToSuggest {
found = true
break
}
}
if !found {
return fmt.Errorf("default suggest denom is not found in prices to suggest")
}
}
if !found {
return fmt.Errorf("default suggest denom is not found in minimum-gas-prices")
}
// these are optional but it must be online
@ -187,21 +189,25 @@ func FromFlags(flags *pflag.FlagSet) (*Config, error) {
if err != nil {
return nil, err
}
suggestGas, err := flags.GetInt(FlagGasToSuggest)
gasToSuggest, err := flags.GetInt(FlagGasToSuggest)
if err != nil {
return nil, err
}
suggestDenom, err := flags.GetString(FlagDenomToSuggest)
denomToSuggest, err := flags.GetString(FlagDenomToSuggest)
if err != nil {
return nil, err
}
suggestPrices, err := flags.GetString(FlagPricesToSuggest)
if err != nil {
return nil, err
}
prices, err := sdk.ParseDecCoins(suggestPrices)
if err != nil {
return nil, err
var prices sdk.DecCoins
if enableDefaultFeeSuggestion {
pricesToSuggest, err := flags.GetString(FlagPricesToSuggest)
if err != nil {
return nil, err
}
prices, err = sdk.ParseDecCoins(pricesToSuggest)
if err != nil {
return nil, err
}
}
conf := &Config{
@ -213,9 +219,9 @@ func FromFlags(flags *pflag.FlagSet) (*Config, error) {
Retries: retries,
Offline: offline,
EnableFeeSuggestion: enableDefaultFeeSuggestion,
GasToSuggest: suggestGas,
DenomToSuggest: suggestDenom,
SuggestPrices: prices,
GasToSuggest: gasToSuggest,
DenomToSuggest: denomToSuggest,
GasPrices: prices,
}
err = conf.validate()
if err != nil {

View File

@ -420,7 +420,7 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
Offline: offlineMode,
GasToSuggest: config.Rosetta.GasToSuggest,
EnableFeeSuggestion: config.Rosetta.EnableFeeSuggestion,
SuggestPrices: minGasPrices.Sort(),
GasPrices: minGasPrices.Sort(),
Codec: clientCtx.Codec.(*codec.ProtoCodec),
InterfaceRegistry: clientCtx.InterfaceRegistry,
}