# Hooks ## Create or modify delegation distribution - triggered-by: `staking.MsgDelegate`, `staking.MsgBeginRedelegate`, `staking.MsgUndelegate` The pool of a new delegator bond will be 0 for the height at which the bond was added, or the withdrawal has taken place. This is achieved by setting `DelegationDistInfo.WithdrawalHeight` to the height of the triggering transaction. ## Commission rate change - triggered-by: `staking.MsgEditValidator` If a validator changes its commission rate, all commission on fees must be simultaneously withdrawn using the transaction `TxWithdrawValidator`. Additionally the change and associated height must be recorded in a `ValidatorUpdate` state record. ## Change in Validator State - triggered-by: `staking.Slash`, `staking.UpdateValidator` Whenever a validator is slashed or enters/leaves the validator group all of the validator entitled reward tokens must be simultaneously withdrawn from `Global.Pool` and added to `ValidatorDistInfo.Pool`.