# End-Block 

Two staking activities are intended to be processed in the application end-block.
 - inform Tendermint of validator set changes
 - process and set atom inflation

# Validator Set Changes

The Tendermint validator set may be updated by state transitions that run at
the end of every block. The Tendermint validator set may be changed by
validators either being revoked due to inactivity/unexpected behaviour (covered
in slashing) or changed in validator power. Determining which validator set
changes must be made occurs during staking transactions (and slashing
transactions) - during end-block the already accounted changes are applied and
the changes cleared

```golang
EndBlock() ValidatorSetChanges
    vsc = GetTendermintUpdates()
    ClearTendermintUpdates()
    return vsc
```

# Inflation

The atom inflation rate is changed once per hour based on the current and
historic bond ratio

```golang
processProvisions():
    hrsPerYr = 8766   // as defined by a julian year of 365.25 days
    
    time = BFTTime()
    if time > pool.InflationLastTime + ProvisionTimeout 
        pool.InflationLastTime = time
        pool.Inflation = nextInflation(hrsPerYr).Round(1000000000)
        
        provisions = pool.Inflation * (pool.TotalSupply / hrsPerYr)
        
        pool.LooseTokens += provisions
        feePool += LooseTokens
        
        setPool(pool)

nextInflation(hrsPerYr rational.Rat):
    if pool.TotalSupply > 0 
        bondedRatio = pool.BondedPool / pool.TotalSupply
    else 
        bondedRation = 0
   
    inflationRateChangePerYear = (1 - bondedRatio / params.GoalBonded) * params.InflationRateChange
    inflationRateChange = inflationRateChangePerYear / hrsPerYr

    inflation = pool.Inflation + inflationRateChange
    if inflation > params.InflationMax then inflation = params.InflationMax
	
    if inflation < params.InflationMin then inflation = params.InflationMin
	
    return inflation 
```

