cosmos-sdk/x
Sai Kumar 5bde3686c4
feat: Cancel unbonding delegation entry (#10885)
## Description


Closes: #577

This pull request contains `Canceling unbonding delegation entry` and `delegate back to previous validator`

### `Msg` Service
```protobuf=
package cosmos.staking.v1beta1;

service Msg {
    // CancelUnbondingDelegation
    rpc CancelUnbondingDelegation(MsgCancelUnbondingDelegation) returns (MsgCancelUnbondingDelegationResponse);
}

// MsgCancelUnbondingDelegation
message MsgCancelUnbondingDelegation {
  option (gogoproto.equal)           = false;
  option (gogoproto.goproto_getters) = false;

  string                   delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  string                   validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  cosmos.base.v1beta1.Coin amount            = 3 [(gogoproto.nullable) = false];
  // creation_height is the height which the unbonding took place.
  int64 creation_height = 4;
}

// MsgCancelUnbondingDelegationResponse
message MsgCancelUnbondingDelegationResponse{
}
```

### `Msg` Method Implementation
```go=
func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) {
    /*
    // checking the unbonding delegation at creation_height 
         // get the unbonding delegations of delegatorAddress 
        if ubdEntry balance is equal to msg.Amount 
            remove the entry from ubd  
        else 
            update the specific entry with new balance
                
        if len(ubd.Entries) == 0 {
            k.RemoveUnbondingDelegation(ctx, ubd)
        } else {
            k.SetUnbondingDelegation(ctx, ubd)
        }
    */
    

    // update the delegation back to validator 
    // get validator
        validator, found := k.GetValidator(ctx, valAddr)
        if !found {
            return nil, types.ErrNoValidatorFound
        }

        // delegate the unbonding amount to validator back
        _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false)
        if err != nil {
            return nil, err
        }
    
    
        _, err := ms.Keeper.CancelUnbondingDelegation(ctx,delegatorAddress,validatorAddress,amount,creation_height)
        if err != nil {
            return nil, err 
        }


        return &types.MsgCancelUnbondingDelegationResponse{}, nil
}
```

#### `cli tx` Method
```bash=
simd tx staking cancel-unbond [validator-address] [amount] [creation_height] --from [user] --chain-id [chain-id]
Example: 
simd tx staking cancel-unbond cosmosvaloper1mqtyv4qux68r26mql2hjhgrvz72snjwpulq22m 100000stake 10280 --from test1 --chain-id test-chain
```

---

### Author Checklist

*All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.*

I have...

- [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] added `!` to the type prefix if API or client breaking change
- [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting))
- [ ] provided a link to the relevant issue or specification
- [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules)
- [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing)
- [ ] added a changelog entry to `CHANGELOG.md`
- [ ] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [ ] updated the relevant documentation or specification
- [ ] reviewed "Files changed" and left comments if necessary
- [ ] confirmed all CI checks have passed

### Reviewers Checklist

*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*

I have...

- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed 
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)
2022-04-05 10:01:13 +00:00
..
auth feat: EIP191 sign mode (#11533) 2022-04-05 08:43:59 +00:00
authz chore: (x/authz) add test case for same grantee granter (#11509) 2022-04-05 06:34:11 +00:00
bank refactor: Small clarifications to authz docs and one error description (#11506) 2022-04-03 09:50:51 +00:00
capability docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
crisis fix: RegisterLegacyAminoCodec should error if Msg name is >39 chars (#11349) 2022-03-16 13:21:00 +00:00
distribution feat: EIP191 sign mode (#11533) 2022-04-05 08:43:59 +00:00
epoching docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00
evidence fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
feegrant fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
genutil fix: Improve gentx validation & error messages (#11500) 2022-03-31 20:13:33 +00:00
gov docs: x/gov state machine inline comments changes (#11498) 2022-03-31 04:49:40 +00:00
group fix(cli): Group SubmitProposal CLI not working properly (#11521) 2022-04-04 10:11:02 +00:00
mint fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
nft fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
params fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
simulation chore: bump TM to v0.35.0 release candidate (#10210) 2021-11-16 11:24:38 -08:00
slashing fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
staking feat: Cancel unbonding delegation entry (#10885) 2022-04-05 10:01:13 +00:00
upgrade fix: dockerfile for building proto (#11452) 2022-03-25 12:35:09 +00:00
README.md docs: Improve markdownlint configuration (#11104) 2022-02-10 12:07:01 +00:00

List of Modules

Here are some production-grade modules that can be used in Cosmos SDK applications, along with their respective documentation:

  • Auth - Authentication of accounts and transactions for Cosmos SDK applications.
  • Authz - Authorization for accounts to perform actions on behalf of other accounts.
  • Bank - Token transfer functionalities.
  • Capability - Object capability implementation.
  • Crisis - Halting the blockchain under certain circumstances (e.g. if an invariant is broken).
  • Distribution - Fee distribution, and staking token provision distribution.
  • Epoching - Allows modules to queue messages for execution at a certain block height.
  • Evidence - Evidence handling for double signing, misbehaviour, etc.
  • Feegrant - Grant fee allowances for executing transactions.
  • Governance - On-chain proposals and voting.
  • Mint - Creation of new units of staking token.
  • Params - Globally available parameter store.
  • Slashing - Validator punishment mechanisms.
  • Staking - Proof-of-Stake layer for public blockchains.
  • Upgrade - Software upgrades handling and coordination.

To learn more about the process of building modules, visit the building modules reference documentation.

IBC

The IBC module for the SDK has moved to its own repository.