Skip to content

Commit 400161d

Browse files
committed
Add delegation to our staking override
We need delegation for voting to work. Also: 1. Don't send an ValidatorUpdate for validators with zero power (when they are removed). 2. Compute totalBonded manually, since we don't do bonding either.
1 parent 4f35f6a commit 400161d

File tree

5 files changed

+41
-6
lines changed

5 files changed

+41
-6
lines changed

x/group/keeper/msg_server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var _ group.MsgServer = Keeper{}
2424

2525
// TODO: Revisit this once we have proper gas fee framework.
2626
// Tracking issues https://github.com/cosmos/cosmos-sdk/issues/9054, https://github.com/cosmos/cosmos-sdk/discussions/9072
27-
const gasCostPerIteration = uint64(20)
27+
const gasCostPerIteration = uint64(0)
2828

2929
func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (*group.MsgCreateGroupResponse, error) {
3030
if _, err := k.accKeeper.AddressCodec().StringToBytes(msg.Admin); err != nil {

x/group/keeper/proposal_executor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func ensureMsgAuthZ(msgs []sdk.Msg, groupPolicyAcc sdk.AccAddress, cdc codec.Cod
7676

7777
for _, acct := range signers {
7878
if !bytes.Equal(groupPolicyAcc, acct) {
79-
return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "msg does not have group policy authorization; expected %s, got %s", groupPolicyAcc.String(), acct)
79+
return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "msg does not have group policy authorization; expected %x, got %x", groupPolicyAcc.Bytes(), acct)
8080
}
8181
}
8282
}

x/staking/keeper/abci.go

+4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ func (k *Keeper) EndBlocker(ctx context.Context) ([]abci.ValidatorUpdate, error)
2727
updates := make([]abci.ValidatorUpdate, 0, len(allValidators))
2828
for _, validator := range allValidators {
2929
update := validator.ABCIValidatorUpdate(math.NewInt(1))
30+
if update.Power == 0 {
31+
k.Logger(ctx).Info("Validator has no power, skipping update", "validator", update)
32+
continue
33+
}
3034
updates = append(updates, update)
3135
k.Logger(ctx).Info("UpdateValidator:", "pubKey", update.PubKey, "power", update.Power)
3236
}

x/staking/keeper/compute.go

+26-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func (k Keeper) SetComputeValidators(ctx context.Context, computeResults []Compu
1818
server := NewMsgServerImpl(&k)
1919
logger := k.Logger(ctx)
2020
resultsMap := make(map[string]ComputeResult)
21+
totalBonded := 0
2122
for _, result := range computeResults {
2223
resultsMap[result.ValidatorPubKey.String()] = result
2324
}
@@ -54,11 +55,20 @@ func (k Keeper) SetComputeValidators(ctx context.Context, computeResults []Compu
5455
if err != nil {
5556
return nil, err
5657
}
58+
err = k.delegateResult(ctx, computeResult, validator.OperatorAddress)
59+
if err != nil {
60+
return nil, err
61+
}
62+
totalBonded += int(computeResult.Power)
5763
} else {
5864
logger.Info("Removing validator", "operator", validator.GetOperator(), "power", computeResult.Power)
5965
// update to new power
6066
validator.Tokens = math.NewInt(0)
6167
err := k.SetValidator(ctx, validator)
68+
k.RemoveDelegation(ctx, types.Delegation{
69+
DelegatorAddress: computeResult.OperatorAddress,
70+
ValidatorAddress: validator.OperatorAddress,
71+
})
6272
if err != nil {
6373
return nil, err
6474
}
@@ -69,16 +79,31 @@ func (k Keeper) SetComputeValidators(ctx context.Context, computeResults []Compu
6979
for _, computeResult := range computeResults {
7080
if _, ok := validatorsAlreadyExisting[computeResult.ValidatorPubKey.String()]; !ok {
7181
logger.Info("Creating validator", "power", computeResult, "operator", computeResult.OperatorAddress)
72-
_, err := k.createValidator(ctx, computeResult, server)
82+
newVal, err := k.createValidator(ctx, computeResult, server)
7383
if err != nil {
7484
logger.Error("Error creating validator", "error", err.Error())
7585
return nil, err
7686
}
87+
err = k.delegateResult(ctx, computeResult, newVal.OperatorAddress)
88+
if err != nil {
89+
logger.Error("Error delegating result", "error", err.Error())
90+
return nil, err
91+
}
92+
totalBonded += int(computeResult.Power)
7793
}
7894
}
7995
return k.GetAllValidators(ctx)
8096
}
8197

98+
func (k Keeper) delegateResult(ctx context.Context, computeResult ComputeResult, validatorAddress string) error {
99+
delegation := types.Delegation{
100+
DelegatorAddress: computeResult.OperatorAddress,
101+
ValidatorAddress: validatorAddress,
102+
}
103+
delegation.Shares = math.LegacyNewDec(computeResult.Power)
104+
return k.SetDelegation(ctx, delegation)
105+
}
106+
82107
func (k Keeper) createValidator(ctx context.Context, computeResult ComputeResult, server types.MsgServer) (*types.Validator, error) {
83108
logger := k.Logger(ctx)
84109
s := computeResult.ValidatorPubKey.Address().String()

x/staking/keeper/pool.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,18 @@ func (k Keeper) burnNotBondedTokens(ctx context.Context, amt math.Int) error {
7777

7878
// TotalBondedTokens total staking tokens supply which is bonded
7979
func (k Keeper) TotalBondedTokens(ctx context.Context) (math.Int, error) {
80-
bondedPool := k.GetBondedPool(ctx)
81-
bondDenom, err := k.BondDenom(ctx)
80+
// PoC OVERRIDE: We don't deal with bonded tokens in banks (no deposit), just validator tokens
81+
validators, err := k.GetAllValidators(ctx)
8282
if err != nil {
8383
return math.ZeroInt(), err
8484
}
85-
return k.bankKeeper.GetBalance(ctx, bondedPool.GetAddress(), bondDenom).Amount, nil
85+
totalBonded := math.ZeroInt()
86+
for _, validator := range validators {
87+
if validator.IsBonded() {
88+
totalBonded = totalBonded.Add(validator.GetTokens())
89+
}
90+
}
91+
return totalBonded, nil
8692
}
8793

8894
// StakingTokenSupply staking tokens from the total supply

0 commit comments

Comments
 (0)