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

Include Amount in Complete Unbonding/Redelegation Events #5597

Merged
merged 6 commits into from
Jan 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ balances or a single balance by denom when the `denom` query parameter is presen

### Improvements

* (modules) [\#5597](https://github.com/cosmos/cosmos-sdk/pull/5597) Add `amount` event attribute to the `complete_unbonding`
and `complete_redelegation` events that reflect the total balances of the completed unbondings and redelegations
respectively.
* (types) [\#5581](https://github.com/cosmos/cosmos-sdk/pull/5581) Add convenience functions {,Must}Bech32ifyAddressBytes.
* (staking) [\#5584](https://github.com/cosmos/cosmos-sdk/pull/5584) Add util function `ToTmValidator` that converts a `staking.Validator` type to `*tmtypes.Validator`.
* (client) [\#5585](https://github.com/cosmos/cosmos-sdk/pull/5585) IBC additions:
Expand Down
59 changes: 45 additions & 14 deletions x/staking/keeper/delegation.go
Original file line number Diff line number Diff line change
Expand Up @@ -660,14 +660,17 @@ func (k Keeper) Undelegate(
return completionTime, nil
}

// CompleteUnbonding completes the unbonding of all mature entries in the
// retrieved unbonding delegation object.
func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error {
// CompleteUnbondingWithAmount completes the unbonding of all mature entries in
// the retrieved unbonding delegation object and returns the total unbonding
// balance or an error upon failure.
func (k Keeper) CompleteUnbondingWithAmount(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (sdk.Coins, error) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Introducing a new function instead of replacing the old as we want to get this into the next 0.37 and 0.38 point releases.

ubd, found := k.GetUnbondingDelegation(ctx, delAddr, valAddr)
if !found {
return types.ErrNoUnbondingDelegation
return nil, types.ErrNoUnbondingDelegation
}

bondDenom := k.GetParams(ctx).BondDenom
balances := sdk.NewCoins()
ctxTime := ctx.BlockHeader().Time

// loop through all the entries and complete unbonding mature entries
Expand All @@ -679,11 +682,15 @@ func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAd

// track undelegation only when remaining or truncated shares are non-zero
if !entry.Balance.IsZero() {
amt := sdk.NewCoins(sdk.NewCoin(k.GetParams(ctx).BondDenom, entry.Balance))
err := k.supplyKeeper.UndelegateCoinsFromModuleToAccount(ctx, types.NotBondedPoolName, ubd.DelegatorAddress, amt)
amt := sdk.NewCoin(bondDenom, entry.Balance)
err := k.supplyKeeper.UndelegateCoinsFromModuleToAccount(
ctx, types.NotBondedPoolName, ubd.DelegatorAddress, sdk.NewCoins(amt),
)
if err != nil {
return err
return nil, err
}

balances = balances.Add(amt)
}
}
}
Expand All @@ -695,7 +702,14 @@ func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAd
k.SetUnbondingDelegation(ctx, ubd)
}

return nil
return balances, nil
}

// CompleteUnbonding performs the same logic as CompleteUnbondingWithAmount except
// it does not return the total unbonding amount.
func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error {
_, err := k.CompleteUnbondingWithAmount(ctx, delAddr, valAddr)
return err
}

// begin unbonding / redelegation; create a redelegation record
Expand Down Expand Up @@ -755,17 +769,20 @@ func (k Keeper) BeginRedelegation(
return completionTime, nil
}

// CompleteRedelegation completes the unbonding of all mature entries in the
// retrieved unbonding delegation object.
func (k Keeper) CompleteRedelegation(
// CompleteRedelegationWithAmount completes the redelegations of all mature entries in the
// retrieved redelegation object and returns the total redelegation (initial)
// balance or an error upon failure.
func (k Keeper) CompleteRedelegationWithAmount(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Introducing a new function instead of replacing the old as we want to get this into the next 0.37 and 0.38 point releases.

ctx sdk.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress,
) error {
) (sdk.Coins, error) {

red, found := k.GetRedelegation(ctx, delAddr, valSrcAddr, valDstAddr)
if !found {
return types.ErrNoRedelegation
return nil, types.ErrNoRedelegation
}

bondDenom := k.GetParams(ctx).BondDenom
balances := sdk.NewCoins()
ctxTime := ctx.BlockHeader().Time

// loop through all the entries and complete mature redelegation entries
Expand All @@ -774,6 +791,10 @@ func (k Keeper) CompleteRedelegation(
if entry.IsMature(ctxTime) {
red.RemoveEntry(int64(i))
i--

if !entry.InitialBalance.IsZero() {
balances = balances.Add(sdk.NewCoin(bondDenom, entry.InitialBalance))
}
}
}

Expand All @@ -784,7 +805,17 @@ func (k Keeper) CompleteRedelegation(
k.SetRedelegation(ctx, red)
}

return nil
return balances, nil
}

// CompleteRedelegation performs the same logic as CompleteRedelegationWithAmount
// except it does not return the total redelegation amount.
func (k Keeper) CompleteRedelegation(
ctx sdk.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress,
) error {

_, err := k.CompleteRedelegationWithAmount(ctx, delAddr, valSrcAddr, valDstAddr)
return err
}

// ValidateUnbondAmount validates that a given unbond or redelegation amount is
Expand Down
12 changes: 9 additions & 3 deletions x/staking/keeper/val_state_change.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ func (k Keeper) BlockValidatorUpdates(ctx sdk.Context) []abci.ValidatorUpdate {
// Remove all mature unbonding delegations from the ubd queue.
matureUnbonds := k.DequeueAllMatureUBDQueue(ctx, ctx.BlockHeader().Time)
for _, dvPair := range matureUnbonds {
err := k.CompleteUnbonding(ctx, dvPair.DelegatorAddress, dvPair.ValidatorAddress)
balances, err := k.CompleteUnbondingWithAmount(ctx, dvPair.DelegatorAddress, dvPair.ValidatorAddress)
if err != nil {
continue
}

ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeCompleteUnbonding,
sdk.NewAttribute(sdk.AttributeKeyAmount, balances.String()),
sdk.NewAttribute(types.AttributeKeyValidator, dvPair.ValidatorAddress.String()),
sdk.NewAttribute(types.AttributeKeyDelegator, dvPair.DelegatorAddress.String()),
),
Expand All @@ -48,15 +49,20 @@ func (k Keeper) BlockValidatorUpdates(ctx sdk.Context) []abci.ValidatorUpdate {
// Remove all mature redelegations from the red queue.
matureRedelegations := k.DequeueAllMatureRedelegationQueue(ctx, ctx.BlockHeader().Time)
for _, dvvTriplet := range matureRedelegations {
err := k.CompleteRedelegation(ctx, dvvTriplet.DelegatorAddress,
dvvTriplet.ValidatorSrcAddress, dvvTriplet.ValidatorDstAddress)
balances, err := k.CompleteRedelegationWithAmount(
ctx,
dvvTriplet.DelegatorAddress,
dvvTriplet.ValidatorSrcAddress,
dvvTriplet.ValidatorDstAddress,
)
if err != nil {
continue
}

ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeCompleteRedelegation,
sdk.NewAttribute(sdk.AttributeKeyAmount, balances.String()),
sdk.NewAttribute(types.AttributeKeyDelegator, dvvTriplet.DelegatorAddress.String()),
sdk.NewAttribute(types.AttributeKeySrcValidator, dvvTriplet.ValidatorSrcAddress.String()),
sdk.NewAttribute(types.AttributeKeyDstValidator, dvvTriplet.ValidatorDstAddress.String()),
Expand Down
26 changes: 14 additions & 12 deletions x/staking/spec/07_events.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,22 @@ The staking module emits the following events:

## EndBlocker

| Type | Attribute Key | Attribute Value |
|-----------------------|-----------------------|-----------------------|
| complete_unbonding | validator | {validatorAddress} |
| complete_unbonding | delegator | {delegatorAddress} |
| complete_redelegation | source_validator | {srcValidatorAddress} |
| complete_redelegation | destination_validator | {dstValidatorAddress} |
| complete_redelegation | delegator | {delegatorAddress} |
| Type | Attribute Key | Attribute Value |
| --------------------- | --------------------- | ------------------------- |
| complete_unbonding | amount | {totalUnbondingAmount} |
| complete_unbonding | validator | {validatorAddress} |
| complete_unbonding | delegator | {delegatorAddress} |
| complete_redelegation | amount | {totalRedelegationAmount} |
| complete_redelegation | source_validator | {srcValidatorAddress} |
| complete_redelegation | destination_validator | {dstValidatorAddress} |
| complete_redelegation | delegator | {delegatorAddress} |

## Handlers

### MsgCreateValidator

| Type | Attribute Key | Attribute Value |
|------------------|---------------|--------------------|
| ---------------- | ------------- | ------------------ |
| create_validator | validator | {validatorAddress} |
| create_validator | amount | {delegationAmount} |
| message | module | staking |
Expand All @@ -31,7 +33,7 @@ The staking module emits the following events:
### MsgEditValidator

| Type | Attribute Key | Attribute Value |
|----------------|---------------------|---------------------|
| -------------- | ------------------- | ------------------- |
| edit_validator | commission_rate | {commissionRate} |
| edit_validator | min_self_delegation | {minSelfDelegation} |
| message | module | staking |
Expand All @@ -41,7 +43,7 @@ The staking module emits the following events:
### MsgDelegate

| Type | Attribute Key | Attribute Value |
|----------|---------------|--------------------|
| -------- | ------------- | ------------------ |
| delegate | validator | {validatorAddress} |
| delegate | amount | {delegationAmount} |
| message | module | staking |
Expand All @@ -51,7 +53,7 @@ The staking module emits the following events:
### MsgUndelegate

| Type | Attribute Key | Attribute Value |
|---------|---------------------|--------------------|
| ------- | ------------------- | ------------------ |
| unbond | validator | {validatorAddress} |
| unbond | amount | {unbondAmount} |
| unbond | completion_time [0] | {completionTime} |
Expand All @@ -64,7 +66,7 @@ The staking module emits the following events:
### MsgBeginRedelegate

| Type | Attribute Key | Attribute Value |
|------------|-----------------------|-----------------------|
| ---------- | --------------------- | --------------------- |
| redelegate | source_validator | {srcValidatorAddress} |
| redelegate | destination_validator | {dstValidatorAddress} |
| redelegate | amount | {unbondAmount} |
Expand Down