code: func accumulateRewards(config *params.ChainConfig, state *state.StateDB, header *types.Header, uncles []*types.Header) {
  	// Select the correct block reward based on chain progression
  	blockReward := FrontierBlockReward
  	if config.IsByzantium(header.Number) {
  		blockReward = ByzantiumBlockReward
  	}
  	if config.IsConstantinople(header.Number) {
  		blockReward = ConstantinopleBlockReward
  	}
  	// Accumulate the rewards for the miner and any included uncles
  	reward := new(big.Int).Set(blockReward)
  	r := new(big.Int)
  	for _, uncle := range uncles {
  		r.Add(uncle.Number, big8)
  		r.Sub(r, header.Number)
  		r.Mul(r, blockReward)
  		r.Div(r, big8)
  		state.AddBalance(uncle.Coinbase, r)
  
  		r.Div(blockReward, big32)
  		reward.Add(reward, r)
  	}
  	state.AddBalance(header.Coinbase, reward)
  }
docs: // AccumulateRewards credits the coinbase of the given block with the mining
  // reward. The total reward consists of the static block reward and rewards for
  // included uncles. The coinbase of each uncle block is also rewarded.