From b03c58d165ecd4e60d07d17bb3b067a5abea855a Mon Sep 17 00:00:00 2001 From: Starsquid <108214377+starsquidnodes@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:03:22 +0200 Subject: [PATCH 1/3] Add oracle price telemetry --- x/oracle/keeper/tally.go | 36 ++++++++++++++++++++++++++++++++++++ x/oracle/types/params.go | 8 ++++---- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/x/oracle/keeper/tally.go b/x/oracle/keeper/tally.go index 97134e1e..6e60f0fb 100644 --- a/x/oracle/keeper/tally.go +++ b/x/oracle/keeper/tally.go @@ -1,7 +1,10 @@ package keeper import ( + "github.com/hashicorp/go-metrics" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/Team-Kujira/core/x/oracle/types" @@ -29,9 +32,42 @@ func Tally(_ sdk.Context, spread := weightedMedian.Mul(maxDeviation) spread = math.LegacyMaxDec(spread, standardDeviation) + if pb.Len() == 0 { + return weightedMedian, nil + } + + labels := []metrics.Label{ + telemetry.NewLabel("denom", pb[0].Denom), + } + + telemetry.SetGaugeWithLabels( + []string{"oracle", "median"}, + float32(weightedMedian.MustFloat64()), + labels, + ) + + telemetry.SetGaugeWithLabels( + []string{"oracle", "stddev"}, + float32(standardDeviation.MustFloat64()), + labels, + ) + + telemetry.SetGaugeWithLabels( + []string{"oracle", "spread"}, + float32(spread.MustFloat64()), + labels, + ) + for _, vote := range pb { key := vote.Voter.String() claim := validatorClaimMap[key] + + telemetry.SetGaugeWithLabels( + []string{"oracle", "price"}, + float32(vote.ExchangeRate.MustFloat64()), + append(labels, telemetry.NewLabel("validator", key)), + ) + // Filter ballot winners & abstain voters if (vote.ExchangeRate.GTE(weightedMedian.Sub(spread)) && vote.ExchangeRate.LTE(weightedMedian.Add(spread))) || diff --git a/x/oracle/types/params.go b/x/oracle/types/params.go index 6c628788..a64f5687 100644 --- a/x/oracle/types/params.go +++ b/x/oracle/types/params.go @@ -30,11 +30,11 @@ const ( // Default parameter values var ( - DefaultVoteThreshold = math.LegacyNewDecWithPrec(50, 2) // 50% - DefaultMaxDeviation = math.LegacyNewDecWithPrec(2, 1) // 2% (-1, 1) + DefaultVoteThreshold = math.LegacyNewDecWithPrec(5, 1) // 0.5 (50%) + DefaultMaxDeviation = math.LegacyNewDecWithPrec(2, 2) // 0.02 ( 2%) DefaultRequiredSymbols = []Symbol{} - DefaultSlashFraction = math.LegacyNewDecWithPrec(1, 4) // 0.01% - DefaultMinValidPerWindow = math.LegacyNewDecWithPrec(5, 2) // 5% + DefaultSlashFraction = math.LegacyNewDecWithPrec(1, 4) // 0.0001 (0.01%) + DefaultMinValidPerWindow = math.LegacyNewDecWithPrec(5, 2) // 0.05 (5%) ) var _ paramstypes.ParamSet = &Params{} From 95ab5fd56dc7e87b20de6f1c918f56d58bebfd7e Mon Sep 17 00:00:00 2001 From: Starsquid <108214377+starsquidnodes@users.noreply.github.com> Date: Tue, 30 Jul 2024 15:32:19 +0200 Subject: [PATCH 2/3] Add miss counter telemetry --- x/oracle/keeper/keeper.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index ae76b43c..b13bfb84 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -3,6 +3,8 @@ package keeper import ( "fmt" + "github.com/hashicorp/go-metrics" + gogotypes "github.com/cosmos/gogoproto/types" "cosmossdk.io/errors" @@ -11,6 +13,7 @@ import ( storetypes "cosmossdk.io/store/types" "github.com/Team-Kujira/core/x/oracle/types" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" ) @@ -145,12 +148,24 @@ func (k Keeper) SetMissCounter(ctx sdk.Context, operator sdk.ValAddress, missCou store := ctx.KVStore(k.storeKey) bz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: missCounter}) store.Set(types.GetMissCounterKey(operator), bz) + + telemetry.SetGaugeWithLabels( + []string{"oracle", "miss"}, + float32(missCounter), + []metrics.Label{telemetry.NewLabel("validator", operator.String())}, + ) } // DeleteMissCounter removes miss counter for the validator func (k Keeper) DeleteMissCounter(ctx sdk.Context, operator sdk.ValAddress) { store := ctx.KVStore(k.storeKey) store.Delete(types.GetMissCounterKey(operator)) + + telemetry.SetGaugeWithLabels( + []string{"oracle", "miss"}, + float32(0), + []metrics.Label{telemetry.NewLabel("validator", operator.String())}, + ) } // IterateMissCounters iterates over the miss counters and performs a callback function. From 4fb47b800b62cf974b5b0e7e67ee02422ed83435 Mon Sep 17 00:00:00 2001 From: Starsquid <108214377+starsquidnodes@users.noreply.github.com> Date: Fri, 2 Aug 2024 13:09:07 +0200 Subject: [PATCH 3/3] Move gathereing price telemetry --- x/oracle/abci/proposal.go | 11 +++++++++++ x/oracle/keeper/tally.go | 6 ------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/x/oracle/abci/proposal.go b/x/oracle/abci/proposal.go index 6a43a275..97af8c15 100644 --- a/x/oracle/abci/proposal.go +++ b/x/oracle/abci/proposal.go @@ -13,9 +13,11 @@ import ( "github.com/Team-Kujira/core/x/oracle/types" abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/mempool" "github.com/cosmos/cosmos-sdk/types/module" + "github.com/hashicorp/go-metrics" ) // StakeWeightedPrices defines the structure a proposer should use to calculate @@ -264,6 +266,15 @@ func (h *ProposalHandler) GetBallotByDenom(ctx sdk.Context, ci abci.ExtendedComm tmpPower = 0 } + telemetry.SetGaugeWithLabels( + []string{"oracle", "price"}, + float32(price.MustFloat64()), + []metrics.Label{ + telemetry.NewLabel("denom", base), + telemetry.NewLabel("validator", valAddr.String()), + }, + ) + votes[base] = append(votes[base], types.NewVoteForTally( price, diff --git a/x/oracle/keeper/tally.go b/x/oracle/keeper/tally.go index 6e60f0fb..1762f47a 100644 --- a/x/oracle/keeper/tally.go +++ b/x/oracle/keeper/tally.go @@ -62,12 +62,6 @@ func Tally(_ sdk.Context, key := vote.Voter.String() claim := validatorClaimMap[key] - telemetry.SetGaugeWithLabels( - []string{"oracle", "price"}, - float32(vote.ExchangeRate.MustFloat64()), - append(labels, telemetry.NewLabel("validator", key)), - ) - // Filter ballot winners & abstain voters if (vote.ExchangeRate.GTE(weightedMedian.Sub(spread)) && vote.ExchangeRate.LTE(weightedMedian.Add(spread))) ||