Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

feat!: add protection against accidental downgrades #10407

Merged
merged 32 commits into from
Jan 25, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
0f65ae5
add handler check in BeginBlock
aleem1314 Oct 19, 2021
7011976
review changes
aleem1314 Nov 3, 2021
9d8e964
add tests
aleem1314 Nov 3, 2021
6f9780e
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 3, 2021
00aa578
review changes
aleem1314 Nov 3, 2021
bbb6259
Merge branch 'aleem/10318-binary-downgrades' of https://github.com/co…
aleem1314 Nov 3, 2021
7f51fac
review changes
aleem1314 Nov 3, 2021
b023d1a
review changes
aleem1314 Nov 9, 2021
ea8b276
review changes
aleem1314 Nov 9, 2021
0bce20c
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 9, 2021
cac3107
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 10, 2021
512a73c
chore: cleanup
aleem1314 Nov 10, 2021
ad8823b
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 10, 2021
23ccc63
chore: add more tests
aleem1314 Nov 11, 2021
cc9fa0a
Merge branch 'aleem/10318-binary-downgrades' of https://github.com/co…
aleem1314 Nov 11, 2021
cf1251a
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 11, 2021
1e8e047
chore: address review changes
aleem1314 Nov 12, 2021
670e2d6
Merge branch 'aleem/10318-binary-downgrades' of https://github.com/co…
aleem1314 Nov 12, 2021
ecd03d3
chore: cleanup
aleem1314 Nov 12, 2021
16fdc29
Merge branch 'master' of https://github.com/cosmos/cosmos-sdk into al…
aleem1314 Nov 12, 2021
1f7cc72
chore: refactor tests to table tests
aleem1314 Nov 17, 2021
665a108
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 17, 2021
9914bfe
chore: add changelog
aleem1314 Nov 17, 2021
5a2f4ae
chore: fix test
aleem1314 Nov 17, 2021
51d7d21
chore: review changes
aleem1314 Nov 19, 2021
3cb9b82
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Nov 24, 2021
42c72a9
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Jan 10, 2022
97fada7
chore: review changes
aleem1314 Jan 10, 2022
6bae3a7
chore: move downgradeVerified to keeper
aleem1314 Jan 12, 2022
1032b33
Merge branch 'master' into aleem/10318-binary-downgrades
robert-zaremba Jan 19, 2022
42c6ac5
Merge branch 'master' into aleem/10318-binary-downgrades
robert-zaremba Jan 19, 2022
4229034
Merge branch 'master' into aleem/10318-binary-downgrades
aleem1314 Jan 25, 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
9 changes: 9 additions & 0 deletions x/upgrade/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ import (
// skipUpgradeHeightArray is a set of block heights for which the upgrade must be skipped
func BeginBlocker(k keeper.Keeper, ctx sdk.Context, _ abci.RequestBeginBlock) {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)

k.IterateDoneUpgrades(ctx, func(name string, height int64) bool {
if !k.HasHandler(name) {
aleem1314 marked this conversation as resolved.
Show resolved Hide resolved
panic(fmt.Sprintf("upgrade handler is missing for %s upgrade plan", name))
}

return false
})

plan, found := k.GetUpgradePlan(ctx)
if !found {
return
Expand Down
13 changes: 13 additions & 0 deletions x/upgrade/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,19 @@ func (k Keeper) GetUpgradedConsensusState(ctx sdk.Context, lastHeight int64) ([]
return bz, true
}

// IterateDoneUpgrades iterate over all the applied upgrades.
// Callback to get all data, returns true to stop, false to keep reading
func (k Keeper) IterateDoneUpgrades(ctx sdk.Context, cb func(name string, height int64) bool) {
iter := sdk.KVStorePrefixIterator(ctx.KVStore(k.storeKey), []byte{types.DoneByte})
defer iter.Close()

stop := false
for ; iter.Valid() && !stop; iter.Next() {
bz := iter.Value()
stop = cb(string(iter.Key()), int64(binary.BigEndian.Uint64(bz)))
}
}

// GetDoneHeight returns the height at which the given upgrade was executed
func (k Keeper) GetDoneHeight(ctx sdk.Context, name string) int64 {
store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{types.DoneByte})
Expand Down