Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat: Update oracle endblocker for historic # #1580

Merged
merged 20 commits into from
Nov 23, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
f071cec
Update oracle endblocker for historic #
rbajollari Nov 11, 2022
1869ba0
Stamp prices and set median after updating exchange rate
rbajollari Nov 13, 2022
4b46f4b
Empty-Commit
rbajollari Nov 14, 2022
a79b457
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 15, 2022
75b832c
Update endblocker based on keeper updates
rbajollari Nov 15, 2022
ee9c854
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 16, 2022
e30263d
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 17, 2022
ba20509
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 17, 2022
d15b5b0
Integrate keeper and param changes
rbajollari Nov 17, 2022
c939a47
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 17, 2022
180ee65
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 18, 2022
879271b
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 21, 2022
c3de8b6
Fix comment
rbajollari Nov 21, 2022
c779eb7
Comment out median calc and setting in endblocker
rbajollari Nov 21, 2022
68671c5
Make historacle keeper methods only called in experimental mode in or…
rbajollari Nov 21, 2022
3bef9b1
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 21, 2022
61a730f
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 22, 2022
1b3ba2a
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 22, 2022
02d813c
Add abci_test
rbajollari Nov 22, 2022
26ce029
Merge branch 'main' into ryan/historacle-endblocker
rbajollari Nov 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions x/oracle/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) error {
}

k.ClearExchangeRates(ctx)
// // Clear median and median deviations
// if isPeriodLastBlock(ctx, params.MedianPeriod) {
// for _, v := range params.HistoricAcceptList {
// denom := v.String()
// k.DeleteMedian(ctx, denom)
// k.DeleteMedianDeviation(ctx, denom)
// }
// }

// NOTE: it filters out inactive or jailed validators
ballotDenomSlice := k.OrganizeBallotByDenom(ctx, validatorClaimMap)
Expand All @@ -56,6 +64,16 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) error {
if err = k.SetExchangeRateWithEvent(ctx, ballotDenom.Denom, exchangeRate); err != nil {
return err
}

// Stamp rate every stamp period if asset is set to have historic stats tracked
if isPeriodLastBlock(ctx, params.StampPeriod) && params.HistoricAcceptList.Contains(ballotDenom.Denom) {
k.AddHistoricPrice(ctx, ballotDenom.Denom, exchangeRate)
}

// // Set median price every median period if asset is set to have historic stats tracked
// if isPeriodLastBlock(ctx, params.MedianPeriod) && params.HistoricAcceptList.Contains(ballotDenom.Denom) {
// k.CalcAndSetMedian(ctx, ballotDenom.Denom)
// }
}

// update miss counting & slashing
Expand Down Expand Up @@ -91,6 +109,14 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) error {
k.SlashAndResetMissCounters(ctx)
}

// Prune historic prices every prune period
if isPeriodLastBlock(ctx, params.PrunePeriod) {
pruneBlock := uint64(ctx.BlockHeight()) - params.PrunePeriod
for _, v := range params.HistoricAcceptList {
k.DeleteHistoricPrice(ctx, v.String(), pruneBlock)

Check warning

Code scanning / CodeQL

Panic in BeginBock or EndBlock consensus methods

Possible panics in BeginBock- or EndBlock-related consensus methods could cause a chain halt
}
}

return nil
}

Expand Down
5 changes: 2 additions & 3 deletions x/oracle/keeper/historic_price.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,7 @@ func (k Keeper) DeleteHistoricPrice(
store.Delete(types.KeyHistoricPrice(denom, blockNum))
}

// DeleteMedian deletes a given denom's median price in the last prune
// period since a given block.
// DeleteMedian deletes a given denom's median price.
func (k Keeper) DeleteMedian(
ctx sdk.Context,
denom string,
Expand All @@ -211,7 +210,7 @@ func (k Keeper) DeleteMedian(
}

// DeleteMedianDeviation deletes a given denom's standard deviation around
// its median price in the last prune period since a given block.
// its median price.
func (k Keeper) DeleteMedianDeviation(
ctx sdk.Context,
denom string,
Expand Down
11 changes: 6 additions & 5 deletions x/oracle/keeper/historic_price_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@ func (s *IntegrationTestSuite) TestSetHistoracle#() {
s.Require().NoError(err)
s.Require().Equal(rate, sdk.OneDec())

// add multiple historic prices to store
// add multiple historic prices to store and set median each time
exchangeRates := []string{"1.0", "1.2", "1.1", "1.4"}
for _, exchangeRate := range exchangeRates {
app.OracleKeeper.AddHistoricPrice(ctx, displayDenom, sdk.MustNewDecFromStr(exchangeRate))

for i, exchangeRate := range exchangeRates {
// update blockheight
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + int64(i))

app.OracleKeeper.AddHistoricPrice(ctx, displayDenom, sdk.MustNewDecFromStr(exchangeRate))
app.OracleKeeper.CalcAndSetMedian(ctx, displayDenom)
}

// set and check median and median standard deviation
Expand Down
4 changes: 4 additions & 0 deletions x/oracle/types/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,10 @@ func (p Params) Validate() error {
return fmt.Errorf("oracle parameter MedianPeriod must be greater than or equal with StampPeriod")
}

if p.StampPeriod%p.VotePeriod != 0 || p.MedianPeriod%p.VotePeriod != 0 || p.PrunePeriod%p.VotePeriod != 0 {
return fmt.Errorf("oracle parameters StampPeriod, MedianPeriod, and PrunePeriod must be exact multiples of VotePeiod")
}

for _, denom := range p.AcceptList {
if len(denom.BaseDenom) == 0 {
return fmt.Errorf("oracle parameter AcceptList Denom must have BaseDenom")
Expand Down
29 changes: 21 additions & 8 deletions x/oracle/types/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,21 +241,34 @@ func TestParamsEqual(t *testing.T) {
err = p10.Validate()
require.Error(t, err)

// empty name
// StampPeriod, MedianPeriod, PrunePeriod are multiples of VotePeriod
p11 := DefaultParams()
p11.AcceptList[0].BaseDenom = ""
p11.AcceptList[0].SymbolDenom = "ATOM"
p11.StampPeriod = 10
p11.VotePeriod = 3
err = p11.Validate()
require.Error(t, err)
p11.MedianPeriod = 10
err = p11.Validate()
require.Error(t, err)
p11.PrunePeriod = 10
err = p11.Validate()
require.Error(t, err)

// empty
// empty name
p12 := DefaultParams()
p12.AcceptList[0].BaseDenom = "uatom"
p12.AcceptList[0].SymbolDenom = ""
p12.AcceptList[0].BaseDenom = ""
p12.AcceptList[0].SymbolDenom = "ATOM"
err = p12.Validate()
require.Error(t, err)

// empty
p13 := DefaultParams()
require.NotNil(t, p13.ParamSetPairs())
require.NotNil(t, p13.String())
p13.AcceptList[0].BaseDenom = "uatom"
p13.AcceptList[0].SymbolDenom = ""
err = p13.Validate()
require.Error(t, err)

p14 := DefaultParams()
require.NotNil(t, p14.ParamSetPairs())
require.NotNil(t, p14.String())
}