From 3893eae2ed50b3fc0b830db770495dc943c084a0 Mon Sep 17 00:00:00 2001 From: audtlr24 Date: Mon, 19 Dec 2022 10:28:53 +0900 Subject: [PATCH 1/2] feat: add extra commission rate flags to genoracle cmd --- cmd/panacead/cmd/genoracle.go | 48 ++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/cmd/panacead/cmd/genoracle.go b/cmd/panacead/cmd/genoracle.go index 43bd0dc5..f56bf80b 100644 --- a/cmd/panacead/cmd/genoracle.go +++ b/cmd/panacead/cmd/genoracle.go @@ -25,9 +25,11 @@ const ( flagOracleRemoteReport = "oracle-remote-report" flagOraclePublicKeyPath = "oracle-public-key-path" - flagOracleAccount = "oracle-account" - flagOracleEndpoint = "oracle-endpoint" - flagOracleCommRate = "oracle-commission-rate" + flagOracleAccount = "oracle-account" + flagOracleEndpoint = "oracle-endpoint" + flagOracleCommRate = "oracle-commission-rate" + flagOracleCommMaxRate = "oracle-commission-max-rate" + flagOracleCommMaxChangeRate = "oracle-commission-max-change-rate" ) type OraclePubKeyInfo struct { @@ -99,6 +101,8 @@ func AddGenesisOracleCmd(defaultNodeHome string) *cobra.Command { cmd.Flags().String(flagOracleAccount, "", "address or keyName") cmd.Flags().String(flagOracleEndpoint, "", "oracle's endpoint") cmd.Flags().String(flagOracleCommRate, "", "oracle's commission rate") + cmd.Flags().String(flagOracleCommMaxRate, "", "oracle's commission max rate") + cmd.Flags().String(flagOracleCommMaxChangeRate, "", "oracle's commission max change rate") cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") flags.AddQueryFlagsToCmd(cmd) @@ -156,6 +160,20 @@ func setOracle(cmd *cobra.Command, genState *oracletypes.GenesisState) error { return fmt.Errorf("failed to get oracle endpoint: %w", err) } + commMaxRateStr, err := cmd.Flags().GetString(flagOracleCommMaxRate) + if err != nil { + return fmt.Errorf("failed to get oracle commission max rate: %w", err) + } + + commMaxRate, err := sdk.NewDecFromStr(commMaxRateStr) + if err != nil { + return fmt.Errorf("inavlid commission max rate: %w", err) + } + + if commMaxRate.IsNegative() || commMaxRate.GT(sdk.OneDec()) { + return fmt.Errorf("oracle max commission rate should be between 0 and 1") + } + commRateStr, err := cmd.Flags().GetString(flagOracleCommRate) if err != nil { return fmt.Errorf("failed to get oracle commission rate: %w", err) @@ -166,15 +184,27 @@ func setOracle(cmd *cobra.Command, genState *oracletypes.GenesisState) error { return fmt.Errorf("inavlid commission rate: %w", err) } - if commRate.IsNegative() || commRate.GT(sdk.OneDec()) { - return fmt.Errorf("oracle commission rate should be between 0 and 1") + if commRate.IsNegative() || commRate.GT(commMaxRate) { + return fmt.Errorf("oracle commission rate should be between 0 and commission max rate") + } + + commMaxChangeRateStr, err := cmd.Flags().GetString(flagOracleCommMaxChangeRate) + if err != nil { + return fmt.Errorf("failed to get oracle commission max change rate: %w", err) + } + + commMaxChangeRate, err := sdk.NewDecFromStr(commMaxChangeRateStr) + if err != nil { + return fmt.Errorf("inavlid commission max change rate: %w", err) } genState.Oracles = append(genState.Oracles, oracletypes.Oracle{ - UniqueId: uniqueID, - OracleAddress: oracleAccAddr.String(), - Endpoint: endpoint, - OracleCommissionRate: commRate, + UniqueId: uniqueID, + OracleAddress: oracleAccAddr.String(), + Endpoint: endpoint, + OracleCommissionRate: commRate, + OracleCommissionMaxRate: commMaxRate, + OracleCommissionMaxChangeRate: commMaxChangeRate, }) return nil From 69d27c75f7cf393e430b29dbd37d7d1a4b9906bd Mon Sep 17 00:00:00 2001 From: audtlr24 Date: Mon, 19 Dec 2022 11:50:42 +0900 Subject: [PATCH 2/2] fix --- cmd/panacead/cmd/genoracle.go | 28 ++++++++++++---------------- x/oracle/types/oracle.go | 10 ++++------ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/cmd/panacead/cmd/genoracle.go b/cmd/panacead/cmd/genoracle.go index f56bf80b..f3802256 100644 --- a/cmd/panacead/cmd/genoracle.go +++ b/cmd/panacead/cmd/genoracle.go @@ -76,6 +76,10 @@ func AddGenesisOracleCmd(defaultNodeHome string) *cobra.Command { return fmt.Errorf("failed to set oracle params: %w", err) } + if err := oracleGenState.Validate(); err != nil { + return err + } + oracleGenStateBz, err := cdc.MarshalJSON(oracleGenState) if err != nil { return fmt.Errorf("failed to marshal oracle genesis state: %w", err) @@ -160,20 +164,6 @@ func setOracle(cmd *cobra.Command, genState *oracletypes.GenesisState) error { return fmt.Errorf("failed to get oracle endpoint: %w", err) } - commMaxRateStr, err := cmd.Flags().GetString(flagOracleCommMaxRate) - if err != nil { - return fmt.Errorf("failed to get oracle commission max rate: %w", err) - } - - commMaxRate, err := sdk.NewDecFromStr(commMaxRateStr) - if err != nil { - return fmt.Errorf("inavlid commission max rate: %w", err) - } - - if commMaxRate.IsNegative() || commMaxRate.GT(sdk.OneDec()) { - return fmt.Errorf("oracle max commission rate should be between 0 and 1") - } - commRateStr, err := cmd.Flags().GetString(flagOracleCommRate) if err != nil { return fmt.Errorf("failed to get oracle commission rate: %w", err) @@ -184,8 +174,14 @@ func setOracle(cmd *cobra.Command, genState *oracletypes.GenesisState) error { return fmt.Errorf("inavlid commission rate: %w", err) } - if commRate.IsNegative() || commRate.GT(commMaxRate) { - return fmt.Errorf("oracle commission rate should be between 0 and commission max rate") + commMaxRateStr, err := cmd.Flags().GetString(flagOracleCommMaxRate) + if err != nil { + return fmt.Errorf("failed to get oracle commission max rate: %w", err) + } + + commMaxRate, err := sdk.NewDecFromStr(commMaxRateStr) + if err != nil { + return fmt.Errorf("inavlid commission max rate: %w", err) } commMaxChangeRateStr, err := cmd.Flags().GetString(flagOracleCommMaxChangeRate) diff --git a/x/oracle/types/oracle.go b/x/oracle/types/oracle.go index 6e315eda..59491a44 100644 --- a/x/oracle/types/oracle.go +++ b/x/oracle/types/oracle.go @@ -28,17 +28,15 @@ func (m *Oracle) ValidateBasic() error { if len(m.UniqueId) == 0 { return fmt.Errorf("uniqueID is empty") } - if len(m.Endpoint) == 0 { - return fmt.Errorf("endpoint is empty") - } - if m.OracleCommissionRate.LT(sdk.ZeroDec()) || m.OracleCommissionRate.GT(sdk.OneDec()) { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "oracleCommissionRate must be between 0 and 1") - } if m.OracleCommissionMaxRate.LT(sdk.ZeroDec()) || m.OracleCommissionMaxRate.GT(sdk.OneDec()) { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "OracleCommissionMaxRate must be between 0 and 1") } + if m.OracleCommissionRate.LT(sdk.ZeroDec()) || m.OracleCommissionRate.GT(m.OracleCommissionMaxRate) { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "oracleCommissionRate must be between 0 and OracleCommissionMaxRate") + } + if m.OracleCommissionMaxChangeRate.LT(sdk.ZeroDec()) || m.OracleCommissionMaxChangeRate.GT(sdk.OneDec()) { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "OracleCommissionMaxChangeRate must be between 0 and 1") }