Skip to content

Commit

Permalink
initial
Browse files Browse the repository at this point in the history
  • Loading branch information
Reecepbcups committed Apr 14, 2024
1 parent f3ebd75 commit e31eb07
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 77 deletions.
1 change: 0 additions & 1 deletion keeper/poa.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,6 @@ func (k Keeper) AcceptNewValidator(ctx context.Context, operatingAddress string,
return err
}

// TODO: keep or remove since this is done in the endblocker now
if err := k.stakingKeeper.SetNewValidatorByPowerIndex(ctx, val); err != nil {
return err
}
Expand Down
166 changes: 90 additions & 76 deletions module/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,39 +26,57 @@ func (am AppModule) BeginBlocker(ctx context.Context) error {
return err
}

if len(valUpdates) != 0 {
vals, err := am.keeper.GetStakingKeeper().GetAllValidators(ctx)
if err != nil {
return err
}
// if len(valUpdates) != 0 {
vals, err := am.keeper.GetStakingKeeper().GetAllValidators(ctx)
if err != nil {
return err
}

for _, val := range vals {
valBz, err := sdk.ValAddressFromBech32(val.OperatorAddress)
if err != nil {
// TODO: Do we want to run this all the time, or with only val updates of != 0?
for _, val := range vals {
// valBz, err := sdk.ValAddressFromBech32(val.OperatorAddress)
// if err != nil {
// return err
// }

if val.IsJailed() {
// This fixes: "failed to apply block; error commit failed for application: changing validator set: duplicate entry"
// This is why we require poa to be before staking in the SetOrderBeginBlocker array
if err := am.keeper.GetStakingKeeper().DeleteValidatorByPowerIndex(ctx, val); err != nil {
return err
}

if val.Status == stakingtypes.Bonded {
lastPower, err := am.keeper.GetStakingKeeper().GetLastValidatorPower(ctx, valBz)
if err != nil {
return err
}

// This fixes: "failed to apply block; error commit failed for application: changing validator set: duplicate entry"
// This is why we require poa to be before staking in the SetOrderBeginBlocker array
if err := am.keeper.GetStakingKeeper().DeleteValidatorByPowerIndex(ctx, val); err != nil {
return err
}

if err := am.keeper.GetStakingKeeper().SetLastValidatorPower(ctx, valBz, lastPower); err != nil {
return err
}

if err := am.keeper.GetStakingKeeper().SetValidatorByPowerIndex(ctx, val); err != nil {
return err
}
// TODO: empty set issues on jail
} else if val.Status == stakingtypes.Bonded && len(valUpdates) > 0 {
if err := am.keeper.GetStakingKeeper().DeleteValidatorByPowerIndex(ctx, val); err != nil {
return err
}
}
// }

// if val.Status == stakingtypes.Bonded {
// lastPower, err := am.keeper.GetStakingKeeper().GetLastValidatorPower(ctx, valBz)
// if err != nil {
// return err
// }

// // This fixes: "failed to apply block; error commit failed for application: changing validator set: duplicate entry"
// // This is why we require poa to be before staking in the SetOrderBeginBlocker array
// if err := am.keeper.GetStakingKeeper().DeleteValidatorByPowerIndex(ctx, val); err != nil {
// return err
// }

// if err := am.keeper.GetStakingKeeper().SetLastValidatorPower(ctx, valBz, lastPower); err != nil {
// return err
// }

// // `SetValidatorByPowerIndex` would forever persist if you do not DeleteValidatorByPowerIndex first.
// // This is used as reference for any future code written as a reminder.
// // Instead, staking handles it for us :)
// // if err := am.keeper.GetStakingKeeper().SetValidatorByPowerIndex(ctx, val); err != nil {
// // return err
// // }
// }
// }
}

return nil
Expand All @@ -70,59 +88,59 @@ func (am AppModule) EndBlocker(ctx context.Context) error {
sdkCtx := sdk.UnwrapSDKContext(ctx)
defer telemetry.ModuleMeasureSince(poa.ModuleName, sdkCtx.BlockTime(), telemetry.MetricKeyEndBlocker)

vals, err := am.keeper.GetStakingKeeper().GetAllValidators(ctx)
if err != nil {
return err
}
// vals, err := am.keeper.GetStakingKeeper().GetAllValidators(ctx)
// if err != nil {
// return err
// }

valUpdates, err := am.keeper.GetStakingKeeper().GetValidatorUpdates(ctx)
if err != nil {
return err
}

for _, valUpdate := range valUpdates {
am.keeper.Logger().Info("ValUpdate Before", "pubkey", valUpdate.PubKey.String(), "power", valUpdate.Power)
am.keeper.Logger().Info("POA EndBlocker ValUpdate", "pubkey", valUpdate.PubKey.String(), "power", valUpdate.Power)
}

for _, v := range vals {
valAddr, err := sdk.ValAddressFromBech32(v.OperatorAddress)
if err != nil {
return err
}

switch v.GetStatus() {
case stakingtypes.Unbonding:
continue
case stakingtypes.Unbonded:
// if the validator is unbonded (above case), delete the last validator power. (H+2)
if err := am.keeper.GetStakingKeeper().DeleteLastValidatorPower(ctx, valAddr); err != nil {
return err
}

case stakingtypes.Unspecified, stakingtypes.Bonded:
if !v.DelegatorShares.IsZero() {
// TODO: new val cache still needed?
// if the validator is freshly created, then perform the validator update.
isNewVal, err := am.keeper.NewValidatorsCache.Has(ctx, v.GetOperator())
if err != nil {
return err
}

// power, err := am.keeper.GetStakingKeeper().GetLastValidatorPower(ctx, valAddr)
// if err != nil {
// return err
// }

if isNewVal {
am.keeper.Logger().Info("New Validator", "operator", v.GetOperator(), "bonded_tokens", v.GetBondedTokens())
if err := am.keeper.NewValidatorsCache.Remove(ctx, v.GetOperator()); err != nil {
return err
}
}
}
continue
}
}
// for _, v := range vals {
// valAddr, err := sdk.ValAddressFromBech32(v.OperatorAddress)
// if err != nil {
// return err
// }

// switch v.GetStatus() {
// case stakingtypes.Unbonding:
// continue
// case stakingtypes.Unbonded:
// // if the validator is unbonded (above case), delete the last validator power. (H+2)
// if err := am.keeper.GetStakingKeeper().DeleteLastValidatorPower(ctx, valAddr); err != nil {
// return err
// }

// case stakingtypes.Unspecified, stakingtypes.Bonded:
// if !v.DelegatorShares.IsZero() {
// // TODO: new val cache still needed?
// // if the validator is freshly created, then perform the validator update.
// isNewVal, err := am.keeper.NewValidatorsCache.Has(ctx, v.GetOperator())
// if err != nil {
// return err
// }

// // power, err := am.keeper.GetStakingKeeper().GetLastValidatorPower(ctx, valAddr)
// // if err != nil {
// // return err
// // }

// if isNewVal {
// am.keeper.Logger().Info("New Validator", "operator", v.GetOperator(), "bonded_tokens", v.GetBondedTokens())
// if err := am.keeper.NewValidatorsCache.Remove(ctx, v.GetOperator()); err != nil {
// return err
// }
// }
// }
// continue
// }
// }

if sdkCtx.BlockHeight() > 1 {
// non gentx messages reset the cached block powers for IBC validations.
Expand All @@ -135,10 +153,6 @@ func (am AppModule) EndBlocker(ctx context.Context) error {
}
}

for _, valUpdate := range valUpdates {
am.keeper.Logger().Info("ValUpdate After", "pubkey", valUpdate.PubKey.String(), "power", valUpdate.Power)
}

return err
}

Expand Down

0 comments on commit e31eb07

Please sign in to comment.