Skip to content

Instantly share code, notes, and snippets.

View zeroFruit's full-sized avatar
🎯
Focusing

JooHyung Kim zeroFruit

🎯
Focusing
View GitHub Profile
@zeroFruit
zeroFruit / upgrade.proto
Created July 5, 2022 00:31
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade
// SoftwareUpgradeProposal is a gov Content type for initiating a software
// upgrade.
message SoftwareUpgradeProposal {
string title = 1;
string description = 2;
Plan plan = 3 [(gogoproto.nullable) = false];
}
// Plan specifies information about a planned upgrade and when it should occur.
message Plan {
@zeroFruit
zeroFruit / abci.go
Created July 5, 2022 00:35
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - x/gov
// EndBlocker called every block, process inflation, update validator set.
func EndBlocker(ctx sdk.Context, keeper keeper.Keeper) {
keeper.IterateActiveProposalsQueue(ctx, ctx.BlockHeader().Time, func(proposal types.Proposal) bool {
passes, burnDeposits, tallyResults := keeper.Tally(ctx, proposal)
...
if passes {
handler := keeper.Router().GetRoute(proposal.ProposalRoute())
cacheCtx, writeCache := ctx.CacheContext()
err := handler(cacheCtx, proposal.GetContent())
@zeroFruit
zeroFruit / app.go
Created July 5, 2022 00:40
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - NewSimApp x/gov handler
func NewSimApp(...) *SimApp {
...
// register the proposal types
govRouter := govtypes.NewRouter()
govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler).
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper))
govKeeper := govkeeper.NewKeeper(
appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
&stakingKeeper, govRouter,
@zeroFruit
zeroFruit / handler.go
Last active July 5, 2022 00:56
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - UpgradeHandler
// UpgradeHandler specifies the type of function that is called when an upgrade
// is applied.
//
// `fromVM` is a VersionMap of moduleName to fromVersion (unit64), where
// fromVersion denotes the version from which we should migrate the module, the
// target version being the module's latest version in the return VersionMap,
// let's call it `toVM`.
//
// `fromVM` is retrieved from x/upgrade's store, whereas `toVM` is chosen
// arbitrarily by the app developer (and persisted to x/upgrade's store right
@zeroFruit
zeroFruit / module.go
Created July 5, 2022 00:57
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - VersionMap
// VersionMap is a map of moduleName -> version
type VersionMap map[string]uint64
@zeroFruit
zeroFruit / module.go
Created July 5, 2022 01:01
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - x/upgrade
func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {
BeginBlocker(am.keeper, ctx, req)
}
func BeginBlocker(k keeper.Keeper, ctx sdk.Context, _ abci.RequestBeginBlock) {
plan, found := k.GetUpgradePlan(ctx)
...
if !found {
return
}
@zeroFruit
zeroFruit / Application upgrade file tree.txt
Created July 5, 2022 01:03
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - Application upgrade file tree
. # application project root
β”œβ”€β”€ app
β”‚ β”œβ”€β”€ upgrades
β”‚ β”‚ β”œβ”€β”€ v2
β”‚ β”‚ β”‚ β”œβ”€β”€ constants.go
β”‚ β”‚ β”‚ └── upgrades.go
β”‚ β”‚ └── ...
β”‚ β”œβ”€β”€ app.go
β”‚ └── upgrades.go
└── ...
@zeroFruit
zeroFruit / constants.go
Created July 5, 2022 01:04
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - UpgradeHandler constants
package v2 // constants.go
const (
UpgradeName = "v2.0.0"
...
)
@zeroFruit
zeroFruit / handler.go
Created July 5, 2022 01:05
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - UpgradeHandler
package v2 // upgrades.go
func CreateUpgradeHandler(
mm *module.Manager,
configurator module.Configurator,
...
) upgradetypes.UpgradeHandler {
return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
...
@zeroFruit
zeroFruit / upgrades.go
Created July 5, 2022 01:06
Cosmos Dev Series: Cosmos-SDK-based Blockchain Upgrade - app upgrades
package app // upgrades.go
func (app *App) setupUpgradeHandlers(
configurator module.Configurator,
...
) {
app.UpgradeKeeper.SetUpgradeHandler(
v2.UpgradeName,
v2.CreateUpgradeHandler(app.mm, configurator, ...),
)