Skip to content
Merged
2 changes: 1 addition & 1 deletion app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,7 @@ func New(
panic(err)
}

if upgradeInfo.Name == UpgradeNameOracleModule && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
if upgradeInfo.Name == Upgrade104 && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
storeUpgrades := storetypes.StoreUpgrades{
Added: []string{oracletypes.StoreKey},
}
Expand Down
23 changes: 15 additions & 8 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,29 @@ import (
// NOTE: When performing upgrades, make sure to keep / register the handlers
// for both the current (n) and the previous (n-1) upgrade name. There is a bug
// in a missing value in a log statement for which the fix is not released
const UpgradeNameOracleModule = "create-oracle-mod"
const UpgradeOracleStaleIndicator = "upgrade-oracle-stale-indicator"
const IgniteCLIRemovalUpgradeHandler = "ignite-cli-removal-upgrade"
const UpgradeDexDataType = "upgrade-dex-data-type"

// 1.0.2beta upgrades
const Upgrade102 = "1.0.2beta"
const Upgrade102CommitTimeout = "1.0.2beta-commit-timeout"

// 1.0.3beta
const Upgrade103 = "1.0.3beta"

// 1.0.4beta
// this will introduce the oracle module as well
const Upgrade104 = "1.0.4beta"

func (app App) RegisterUpgradeHandlers() {
app.UpgradeKeeper.SetUpgradeHandler(UpgradeNameOracleModule, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
app.UpgradeKeeper.SetUpgradeHandler(Upgrade102, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
})
app.UpgradeKeeper.SetUpgradeHandler(UpgradeOracleStaleIndicator, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
app.UpgradeKeeper.SetUpgradeHandler(Upgrade102CommitTimeout, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
})
app.UpgradeKeeper.SetUpgradeHandler(IgniteCLIRemovalUpgradeHandler, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
app.UpgradeKeeper.SetUpgradeHandler(Upgrade103, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
})
app.UpgradeKeeper.SetUpgradeHandler(UpgradeDexDataType, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
app.UpgradeKeeper.SetUpgradeHandler(Upgrade104, func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
return app.mm.RunMigrations(ctx, app.configurator, fromVM)
})
}
6 changes: 3 additions & 3 deletions proto/oracle/genesis.proto
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ message GenesisState {
repeated FeederDelegation feeder_delegations = 2 [(gogoproto.nullable) = false];
repeated ExchangeRateTuple exchange_rates = 3
[(gogoproto.castrepeated) = "ExchangeRateTuples", (gogoproto.nullable) = false];
repeated MissCounter miss_counters = 4 [(gogoproto.nullable) = false];
repeated PenaltyCounter penalty_counters = 4 [(gogoproto.nullable) = false];
repeated AggregateExchangeRatePrevote aggregate_exchange_rate_prevotes = 5 [(gogoproto.nullable) = false];
repeated AggregateExchangeRateVote aggregate_exchange_rate_votes = 6 [(gogoproto.nullable) = false];
}
Expand All @@ -22,7 +22,7 @@ message FeederDelegation {
string validator_address = 2;
}

message MissCounter {
message PenaltyCounter {
string validator_address = 1;
uint64 miss_counter = 2;
VotePenaltyCounter vote_penalty_counter = 2;
}
5 changes: 5 additions & 0 deletions proto/oracle/oracle.proto
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,8 @@ message OracleTwap {
];
int64 lookbackSeconds = 3;
}

message VotePenaltyCounter {
uint64 miss_count = 1;
uint64 abstain_count = 2;
}
18 changes: 8 additions & 10 deletions proto/oracle/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ service Query {
}

// MissCounter returns oracle miss counter of a validator
rpc MissCounter(QueryMissCounterRequest) returns (QueryMissCounterResponse) {
option (google.api.http).get = "/sei-protocol/sei-chain/oracle/validators/{validator_addr}/miss";
rpc VotePenaltyCounter(QueryVotePenaltyCounterRequest) returns (QueryVotePenaltyCounterResponse) {
option (google.api.http).get = "/sei-protocol/sei-chain/oracle/validators/{validator_addr}/vote_penalty_counter";
}

// AggregatePrevote returns an aggregate prevote of a validator
Expand Down Expand Up @@ -165,20 +165,19 @@ message QueryFeederDelegationResponse {
string feeder_addr = 1;
}

// QueryMissCounterRequest is the request type for the Query/MissCounter RPC method.
message QueryMissCounterRequest {
// QueryVotePenaltyCounterRequest is the request type for the Query/MissCounter RPC method.
message QueryVotePenaltyCounterRequest {
option (gogoproto.equal) = false;
option (gogoproto.goproto_getters) = false;

// validator defines the validator address to query for.
string validator_addr = 1;
}

// QueryMissCounterResponse is response type for the
// Query/MissCounter RPC method.
message QueryMissCounterResponse {
// miss_counter defines the oracle miss counter of a validator
uint64 miss_counter = 1;
// QueryVotePenaltyCounterResponse is response type for the
// Query/VotePenaltyCounter RPC method.
message QueryVotePenaltyCounterResponse {
VotePenaltyCounter vote_penalty_counter = 1;
}

// QueryAggregatePrevoteRequest is the request type for the Query/AggregatePrevote RPC method.
Expand All @@ -195,7 +194,6 @@ message QueryAggregatePrevoteRequest {
message QueryAggregatePrevoteResponse {
// aggregate_prevote defines oracle aggregate prevote submitted by a validator in the current vote period
AggregateExchangeRatePrevote aggregate_prevote = 1 [(gogoproto.nullable) = false];
;
}

// QueryAggregatePrevotesRequest is the request type for the Query/AggregatePrevotes RPC method.
Expand Down
13 changes: 9 additions & 4 deletions x/oracle/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
// Exclude not bonded validator
if validator.IsBonded() {
valAddr := validator.GetOperator()
validatorClaimMap[valAddr.String()] = types.NewClaim(validator.GetConsensusPower(powerReduction), 0, 0, valAddr)
validatorClaimMap[valAddr.String()] = types.NewClaim(validator.GetConsensusPower(powerReduction), 0, 0, 0, valAddr)
i++
}
}
Expand Down Expand Up @@ -96,15 +96,20 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
//---------------------------
// Do miss counting & slashing
for _, claim := range validatorClaimMap {
// Skip abstain & valid voters
// we require validator to have submitted in-range data
// for all assets to not be counted as a miss
if int(claim.WinCount) == totalTargets {
continue
}

if int(claim.WinCount+claim.AbstainCount) == totalTargets {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

quick q, what's claim.WinCount here? any vote count or just correct vote count?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WinCount is the count of votes that the validator made that are within the 1% range of the weighted median. So, if they win count is equal to total targets, that means the validator was in range on all of the targets, if they specifically abstained on some, we expect them to win the ones they didnt abstain to qualify as abstaining instead of miss

// if win count + abstain count == total targets then we increment abstain count instead of miss count
k.IncrementAbstainCount(ctx, claim.Recipient)
continue
}

// Increase miss counter
k.SetMissCounter(ctx, claim.Recipient, k.GetMissCounter(ctx, claim.Recipient)+1)
k.IncrementMissCount(ctx, claim.Recipient)
}

// Clear the ballot
Expand Down Expand Up @@ -134,6 +139,6 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
// Do slash who did miss voting over threshold and
// reset miss counters of all validators at the last block of slash window
if utils.IsPeriodLastBlock(ctx, params.SlashWindow) {
k.SlashAndResetMissCounters(ctx)
k.SlashAndResetCounters(ctx)
}
}
73 changes: 37 additions & 36 deletions x/oracle/abci_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ func TestInvalidVotesSlashing(t *testing.T) {
makeAggregatePrevoteAndVote(t, input, h, 0, sdk.DecCoins{{Denom: utils.MicroAtomDenom, Amount: randomExchangeRate}}, 2)

oracle.EndBlocker(input.Ctx, input.OracleKeeper)
require.Equal(t, i+1, input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, i+1, input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
}

validator := input.StakingKeeper.Validator(input.Ctx, keeper.ValAddrs[1])
Expand Down Expand Up @@ -299,7 +299,7 @@ func TestWhitelistSlashing(t *testing.T) {
makeAggregatePrevoteAndVote(t, input, h, 0, sdk.DecCoins{{Denom: utils.MicroAtomDenom, Amount: randomExchangeRate}}, 2)

oracle.EndBlocker(input.Ctx, input.OracleKeeper)
require.Equal(t, i+1, input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, i+1, input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
}

validator := input.StakingKeeper.Validator(input.Ctx, keeper.ValAddrs[0])
Expand Down Expand Up @@ -333,9 +333,9 @@ func TestNotPassedBallotSlashing(t *testing.T) {
makeAggregatePrevoteAndVote(t, input, h, 0, sdk.DecCoins{{Denom: utils.MicroAtomDenom, Amount: randomExchangeRate}}, 0)

oracle.EndBlocker(input.Ctx, input.OracleKeeper)
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))
}

func TestNotPassedBallotSlashingInvalidVotes(t *testing.T) {
Expand All @@ -360,13 +360,13 @@ func TestNotPassedBallotSlashingInvalidVotes(t *testing.T) {

// 4-7 should be missed due to not voting
// 3 should be missed due to out of bounds
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[6]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[6]))
}

func TestInvalidVoteOnAssetUnderThresholdMisses(t *testing.T) {
Expand Down Expand Up @@ -398,13 +398,13 @@ func TestInvalidVoteOnAssetUnderThresholdMisses(t *testing.T) {
endBlockerHeight := input.Ctx.BlockHeight()

// 6 and 7 should be missed due to not voting on second asset
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[6]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[6]))

input.Ctx = input.Ctx.WithBlockHeight(input.Ctx.BlockHeight() + 1)

Expand Down Expand Up @@ -438,13 +438,13 @@ func TestInvalidVoteOnAssetUnderThresholdMisses(t *testing.T) {

// 4-7 should be missed due to not voting on second asset
// 3 should have missed due to out of bounds value even though it didnt meet voting threshold
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(2), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(2), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[6]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[3]))
require.Equal(t, uint64(1), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[4]))
require.Equal(t, uint64(2), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[5]))
require.Equal(t, uint64(2), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[6]))

input.Ctx = input.Ctx.WithBlockHeight(input.Ctx.BlockHeight() + 1)

Expand Down Expand Up @@ -488,13 +488,14 @@ func TestAbstainSlashing(t *testing.T) {
makeAggregatePrevoteAndVote(t, input, h, 0, sdk.DecCoins{{Denom: utils.MicroAtomDenom, Amount: randomExchangeRate}}, 2)

oracle.EndBlocker(input.Ctx, input.OracleKeeper)
require.Equal(t, uint64(i+1%limit), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(i+1%limit), input.OracleKeeper.GetAbstainCount(input.Ctx, keeper.ValAddrs[1]))
}

input.Ctx = input.Ctx.WithBlockHeight(votePeriodsPerWindow - 1)
oracle.EndBlocker(input.Ctx, input.OracleKeeper)
validator := input.StakingKeeper.Validator(input.Ctx, keeper.ValAddrs[1])
require.Equal(t, sdk.OneDec().Sub(slashFraction).MulInt(stakingAmt).TruncateInt(), validator.GetBondedTokens())
require.False(t, validator.IsJailed())
}

func TestVoteTargets(t *testing.T) {
Expand All @@ -514,9 +515,9 @@ func TestVoteTargets(t *testing.T) {
oracle.EndBlocker(input.Ctx, input.OracleKeeper)

// no missing current
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))

// vote targets are {KRW, SDR}
require.Equal(t, []string{utils.MicroAtomDenom}, input.OracleKeeper.GetVoteTargets(input.Ctx))
Expand All @@ -535,9 +536,9 @@ func TestVoteTargets(t *testing.T) {

oracle.EndBlocker(input.Ctx, input.OracleKeeper)

require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))

// SDR must be deleted
require.Equal(t, []string{utils.MicroAtomDenom}, input.OracleKeeper.GetVoteTargets(input.Ctx))
Expand All @@ -555,9 +556,9 @@ func TestVoteTargets(t *testing.T) {

oracle.EndBlocker(input.Ctx, input.OracleKeeper)

require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCounter(input.Ctx, keeper.ValAddrs[2]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[0]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[1]))
require.Equal(t, uint64(0), input.OracleKeeper.GetMissCount(input.Ctx, keeper.ValAddrs[2]))

_, err = input.OracleKeeper.GetVoteTarget(input.Ctx, utils.MicroAtomDenom)
require.NoError(t, err)
Expand Down
18 changes: 9 additions & 9 deletions x/oracle/client/cli/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func GetQueryCmd() *cobra.Command {
GetCmdQueryActives(),
GetCmdQueryParams(),
GetCmdQueryFeederDelegation(),
GetCmdQueryMissCounter(),
GetCmdQueryVotePenaltyCounter(),
GetCmdQueryAggregatePrevote(),
GetCmdQueryAggregateVote(),
GetCmdQueryVoteTargets(),
Expand Down Expand Up @@ -259,16 +259,16 @@ $ terrad query oracle feeder terravaloper...
return cmd
}

// GetCmdQueryMissCounter implements the query miss counter of the validator command
func GetCmdQueryMissCounter() *cobra.Command {
// GetCmdQueryVotePenaltyCounter implements the query vote penalty counter of the validator command
func GetCmdQueryVotePenaltyCounter() *cobra.Command {
cmd := &cobra.Command{
Use: "miss [validator]",
Use: "vote-penalty-counter [validator]",
Args: cobra.ExactArgs(1),
Short: "Query the # of the miss count",
Short: "Query the # of the miss count and abstain count",
Long: strings.TrimSpace(`
Query the # of vote periods missed in this oracle slash window.
Query the # of vote periods missed and abstained in this oracle slash window.

$ terrad query oracle miss terravaloper...
$ seid query oracle miss seivaloper...
`),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
Expand All @@ -283,9 +283,9 @@ $ terrad query oracle miss terravaloper...
return err
}

res, err := queryClient.MissCounter(
res, err := queryClient.VotePenaltyCounter(
context.Background(),
&types.QueryMissCounterRequest{ValidatorAddr: validator.String()},
&types.QueryVotePenaltyCounterRequest{ValidatorAddr: validator.String()},
)
if err != nil {
return err
Expand Down
Loading