Skip to content

Commit

Permalink
Merge pull request #774 from cybercongress/v4-refactoring
Browse files Browse the repository at this point in the history
General refactoring of v4
  • Loading branch information
cyborgshead authored Sep 16, 2024
2 parents 8fa68a1 + 640aceb commit ce55f46
Show file tree
Hide file tree
Showing 29 changed files with 59 additions and 241 deletions.
165 changes: 1 addition & 164 deletions app/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,10 @@ package app
import (
"encoding/json"
"fmt"
"log"

tmproto "github.com/cometbft/cometbft/proto/tendermint/types"

servertypes "github.com/cosmos/cosmos-sdk/server/types"
sdk "github.com/cosmos/cosmos-sdk/types"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
"github.com/cosmos/cosmos-sdk/x/staking"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)

// ExportAppStateAndValidators exports the state of the application for a genesis
Expand All @@ -24,8 +19,7 @@ func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs
// Tendermint will start InitChain.
height := app.LastBlockHeight() + 1
if forZeroHeight {
height = 0
app.prepForZeroHeightGenesis(ctx, jailAllowedAddrs)
return servertypes.ExportedApp{}, fmt.Errorf("forZeroHeight not supported")
}

genState := app.ModuleManager.ExportGenesisForModules(ctx, app.appCodec, modulesToExport)
Expand All @@ -42,160 +36,3 @@ func (app *App) ExportAppStateAndValidators(forZeroHeight bool, jailAllowedAddrs
ConsensusParams: app.BaseApp.GetConsensusParams(ctx),
}, err
}

// prepare for fresh start at zero height
// NOTE zero height genesis is a temporary feature which will be deprecated
//
// in favour of export at a block height
func (app *App) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddrs []string) {
applyAllowedAddrs := false

// check if there is a allowed address list
if len(jailAllowedAddrs) > 0 {
applyAllowedAddrs = true
}

allowedAddrsMap := make(map[string]bool)

for _, addr := range jailAllowedAddrs {
_, err := sdk.ValAddressFromBech32(addr)
if err != nil {
log.Fatal(err)
}
allowedAddrsMap[addr] = true
}

/* Just to be safe, assert the invariants on current state. */
app.AppKeepers.CrisisKeeper.AssertInvariants(ctx)

/* Handle fee distribution state. */

// withdraw all validator commission
app.AppKeepers.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) {
_, _ = app.AppKeepers.DistrKeeper.WithdrawValidatorCommission(ctx, val.GetOperator())
return false
})

// withdraw all delegator rewards
dels := app.AppKeepers.StakingKeeper.GetAllDelegations(ctx)
for _, delegation := range dels {
valAddr, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress)
if err != nil {
panic(err)
}

delAddr := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)

_, _ = app.AppKeepers.DistrKeeper.WithdrawDelegationRewards(ctx, delAddr, valAddr)
}

// clear validator slash events
app.AppKeepers.DistrKeeper.DeleteAllValidatorSlashEvents(ctx)

// clear validator historical rewards
app.AppKeepers.DistrKeeper.DeleteAllValidatorHistoricalRewards(ctx)

// set context height to zero
height := ctx.BlockHeight()
ctx = ctx.WithBlockHeight(0)

// reinitialize all validators
app.AppKeepers.StakingKeeper.IterateValidators(ctx, func(_ int64, val stakingtypes.ValidatorI) (stop bool) {
// donate any unwithdrawn outstanding reward fraction tokens to the community pool
scraps := app.AppKeepers.DistrKeeper.GetValidatorOutstandingRewardsCoins(ctx, val.GetOperator())
feePool := app.AppKeepers.DistrKeeper.GetFeePool(ctx)
feePool.CommunityPool = feePool.CommunityPool.Add(scraps...)
app.AppKeepers.DistrKeeper.SetFeePool(ctx, feePool)

if err := app.AppKeepers.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()); err != nil {
panic(err)
}
return false
})

// reinitialize all delegations
for _, del := range dels {
valAddr, err := sdk.ValAddressFromBech32(del.ValidatorAddress)
if err != nil {
panic(err)
}
delAddr := sdk.MustAccAddressFromBech32(del.DelegatorAddress)

if err := app.AppKeepers.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr); err != nil {
// never called as BeforeDelegationCreated always returns nil
panic(fmt.Errorf("error while incrementing period: %w", err))
}

if err := app.AppKeepers.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr); err != nil {
// never called as AfterDelegationModified always returns nil
panic(fmt.Errorf("error while creating a new delegation period record: %w", err))
}
}

// reset context height
ctx = ctx.WithBlockHeight(height)

/* Handle staking state. */

// iterate through redelegations, reset creation height
app.AppKeepers.StakingKeeper.IterateRedelegations(ctx, func(_ int64, red stakingtypes.Redelegation) (stop bool) {
for i := range red.Entries {
red.Entries[i].CreationHeight = 0
}
app.AppKeepers.StakingKeeper.SetRedelegation(ctx, red)
return false
})

// iterate through unbonding delegations, reset creation height
app.AppKeepers.StakingKeeper.IterateUnbondingDelegations(ctx, func(_ int64, ubd stakingtypes.UnbondingDelegation) (stop bool) {
for i := range ubd.Entries {
ubd.Entries[i].CreationHeight = 0
}
app.AppKeepers.StakingKeeper.SetUnbondingDelegation(ctx, ubd)
return false
})

// Iterate through validators by power descending, reset bond heights, and
// update bond intra-tx counters.
store := ctx.KVStore(app.AppKeepers.GetKey(stakingtypes.StoreKey))
iter := sdk.KVStoreReversePrefixIterator(store, stakingtypes.ValidatorsKey)
counter := int16(0)

for ; iter.Valid(); iter.Next() {
addr := sdk.ValAddress(stakingtypes.AddressFromValidatorsKey(iter.Key()))
validator, found := app.AppKeepers.StakingKeeper.GetValidator(ctx, addr)
if !found {
panic("expected validator, not found")
}

validator.UnbondingHeight = 0
if applyAllowedAddrs && !allowedAddrsMap[addr.String()] {
validator.Jailed = true
}

app.AppKeepers.StakingKeeper.SetValidator(ctx, validator)
counter++
}

if err := iter.Close(); err != nil {
app.Logger().Error("error while closing the key-value store reverse prefix iterator: ", err)
return
}

_, err := app.AppKeepers.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
if err != nil {
log.Fatal(err)
}

/* Handle slashing state. */

// reset start height on signing infos
app.AppKeepers.SlashingKeeper.IterateValidatorSigningInfos(
ctx,
func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) {
info.StartHeight = 0
app.AppKeepers.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info)
return false
},
)
}
4 changes: 0 additions & 4 deletions x/bandwidth/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ func (AppModule) Name() string { return types.ModuleName }

func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}

func (am AppModule) QuerierRoute() string {
return types.QuerierRoute
}

func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterQueryServer(cfg.QueryServer(), am.bm)
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(*am.bm))
Expand Down
2 changes: 1 addition & 1 deletion x/bandwidth/spec/02_state.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ sdk.Uint64ToBigEndian(value) // where value is total current supply of mvolt (ui
- Block bandwidth: `0x02 | sdk.Uint64ToBigEndian(blockNumber) -> sdk.Uint64ToBigEndian(value)`
- Last bandwidth price: `0x00 | []byte("lastBandwidthPrice") -> ProtocolBuffer(Price)`
- Desirable bandwidth: `0x00 | []byte("desirableBandwidth") -> sdk.Uint64ToBigEndian(value)`
- ModuleName, StoreKey, QuerierRoute: `bandwidth`
- ModuleName, StoreKey: `bandwidth`
7 changes: 3 additions & 4 deletions x/bandwidth/types/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import (
)

const (
ModuleName = "bandwidth"
StoreKey = ModuleName
QuerierRoute = ModuleName
TStoreKey = "transient_bandwidth"
ModuleName = "bandwidth"
StoreKey = ModuleName
TStoreKey = "transient_bandwidth"
)

var (
Expand Down
4 changes: 0 additions & 4 deletions x/clock/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,6 @@ func NewAppModule(
}
}

func (a AppModule) QuerierRoute() string {
return types.QuerierRoute
}

func (a AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(a.keeper))
types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQuerier(a.keeper))
Expand Down
2 changes: 0 additions & 2 deletions x/clock/types/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,4 @@ const (
RouterKey = ModuleName

StoreKey = ModuleName

QuerierRoute = ModuleName
)
2 changes: 0 additions & 2 deletions x/cyberbank/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@ func (AppModule) Name() string { return types.ModuleName }

func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}

func (AppModule) QuerierRoute() string { return "" }

func (AppModule) RegisterServices(_ module.Configurator) {}

func (am AppModule) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, _ json.RawMessage) []abci.ValidatorUpdate {
Expand Down
4 changes: 0 additions & 4 deletions x/dmn/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,6 @@ func (AppModule) Name() string { return types.ModuleName }

func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}

func (AppModule) QuerierRoute() string {
return types.QuerierRoute
}

func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))
types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
Expand Down
7 changes: 3 additions & 4 deletions x/dmn/types/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ package types
import sdk "github.com/cosmos/cosmos-sdk/types"

const (
ModuleName = "dmn"
StoreKey = ModuleName
RouterKey = ModuleName
QuerierRoute = ModuleName
ModuleName = "dmn"
StoreKey = ModuleName
RouterKey = ModuleName
)

var (
Expand Down
1 change: 1 addition & 0 deletions x/graph/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ func InitGenesis(
if err != nil {
return err
}

return
}

Expand Down
9 changes: 9 additions & 0 deletions x/graph/keeper/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,17 @@ func (i *IndexKeeper) LoadFromReader(ctx sdk.Context, reader io.Reader) (err err
return err
}
compactLink := types.UnmarshalBinaryLink(linkBytes)

i.GraphKeeper.neudeg[compactLink.Account] += 1
i.GraphKeeper.rankNeudeg[compactLink.Account] += 1

i.GraphKeeper.SaveLink(ctx, compactLink)
i.PutLink(ctx, compactLink)
}

for acc, links := range i.GraphKeeper.neudeg {
i.GraphKeeper.SaveNeudeg(ctx, acc, links)
}

return
}
6 changes: 6 additions & 0 deletions x/graph/keeper/neudeg.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ func (gk *GraphKeeper) LoadNeudeg(rankCtx sdk.Context, freshCtx sdk.Context) {
iterator.Close()
}

// NOTE: used when load from exported graph with links
func (gk GraphKeeper) SaveNeudeg(ctx sdk.Context, accNumber uint64, neudeg uint64) {
store := ctx.KVStore(gk.key)
store.Set(types.NeudegStoreKey(accNumber), sdk.Uint64ToBigEndian(neudeg))
}

func (gk GraphKeeper) IncrementNeudeg(ctx sdk.Context, accNumber uint64) {
store := ctx.KVStore(gk.key)
neudeg := gk.GetNeudeg(ctx, accNumber) + 1
Expand Down
5 changes: 1 addition & 4 deletions x/graph/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,13 @@ func (AppModule) Name() string { return types.ModuleName }

func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {}

func (am AppModule) QuerierRoute() string {
return types.QuerierRoute
}

func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.gk, am.ik, am.ak, am.bk, am.bm))
types.RegisterQueryServer(cfg.QueryServer(), am.gk)
}

func (am AppModule) InitGenesis(ctx sdk.Context, _ codec.JSONCodec, _ json.RawMessage) []abci.ValidatorUpdate {
_ = keeper.InitGenesis(ctx, *am.gk, am.ik)
return []abci.ValidatorUpdate{}
}

Expand Down
7 changes: 3 additions & 4 deletions x/graph/types/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import (
)

const (
ModuleName = "graph"
RouterKey = ModuleName
StoreKey = ModuleName
QuerierRoute = ModuleName
ModuleName = "graph"
RouterKey = ModuleName
StoreKey = ModuleName

TStoreKey = "transient_index"
)
Expand Down
4 changes: 3 additions & 1 deletion x/grid/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ func InitGenesis(ctx sdk.Context, k Keeper, data types.GenesisState) {

func ExportGenesis(ctx sdk.Context, k Keeper) *types.GenesisState {
params := k.GetParams(ctx)
routes := k.GetAllRoutes(ctx)
//routes := k.GetAllRoutes(ctx)
// Create an empty slice of types.Route
var routes []types.Route

return types.NewGenesisState(params, routes)
}
19 changes: 17 additions & 2 deletions x/grid/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"fmt"

storetypes "github.com/cosmos/cosmos-sdk/store/types"

"github.com/cometbft/cometbft/libs/log"
Expand Down Expand Up @@ -263,14 +262,30 @@ func (k Keeper) GetAllRoutes(ctx sdk.Context) (routes []types.Route) {
return routes
}

// Deprecated: enable after debug with empty routes
func (k Keeper) IterateAllRoutes(ctx sdk.Context, cb func(route types.Route) (stop bool)) {
store := ctx.KVStore(k.storeKey)

iterator := sdk.KVStorePrefixIterator(store, types.RouteKey)
defer iterator.Close()

for ; iterator.Valid(); iterator.Next() {
route := types.MustUnmarshalRoute(k.cdc, iterator.Value())
route, err := types.UnmarshalRoute(k.cdc, iterator.Value())
if err != nil {
// TODO fix empty case
//"grid" : {
// "routes" : [{
// "destination" : "",
// "value" : [],
// "source" : "",
// "name" : ""
// }],
// "params" : {
// "max_routes" : 16
// }
//}
break
}
if cb(route) {
break
}
Expand Down
Loading

0 comments on commit ce55f46

Please sign in to comment.