code: func (w *worker) makeCurrent(parent *types.Block, header *types.Header) error {
  	state, err := w.chain.StateAt(parent.Root())
  	if err != nil {
  		return err
  	}
  	env := &environment{
  		signer:    types.NewEIP155Signer(w.chainConfig.ChainID),
  		state:     state,
  		ancestors: mapset.NewSet(),
  		family:    mapset.NewSet(),
  		uncles:    mapset.NewSet(),
  		header:    header,
  	}
  
  	// when 08 is processed ancestors contain 07 (quick block)
  	for _, ancestor := range w.chain.GetBlocksFromHash(parent.Hash(), 7) {
  		for _, uncle := range ancestor.Uncles() {
  			env.family.Add(uncle.Hash())
  		}
  		env.family.Add(ancestor.Hash())
  		env.ancestors.Add(ancestor.Hash())
  	}
  
  	// Keep track of transactions which return errors so they can be removed
  	env.tcount = 0
  	w.current = env
  	return nil
  }
docs: // makeCurrent creates a new environment for the current cycle.