code: func VerifyDAOHeaderExtraData(config *params.ChainConfig, header *types.Header) error {
  	// Short circuit validation if the node doesn't care about the DAO fork
  	if config.DAOForkBlock == nil {
  		return nil
  	}
  	// Make sure the block is within the fork's modified extra-data range
  	limit := new(big.Int).Add(config.DAOForkBlock, params.DAOForkExtraRange)
  	if header.Number.Cmp(config.DAOForkBlock) < 0 || header.Number.Cmp(limit) >= 0 {
  		return nil
  	}
  	// Depending on whether we support or oppose the fork, validate the extra-data contents
  	if config.DAOForkSupport {
  		if !bytes.Equal(header.Extra, params.DAOForkBlockExtra) {
  			return ErrBadProDAOExtra
  		}
  	} else {
  		if bytes.Equal(header.Extra, params.DAOForkBlockExtra) {
  			return ErrBadNoDAOExtra
  		}
  	}
  	// All ok, header has the same extra-data we expect
  	return nil
  }
docs: // VerifyDAOHeaderExtraData validates the extra-data field of a block header to
  // ensure it conforms to DAO hard-fork rules.
  //
  // DAO hard-fork extension to the header validity:
  //   a) if the node is no-fork, do not accept blocks in the [fork, fork+10) range
  //      with the fork specific extra-data set
  //   b) if the node is pro-fork, require blocks in the specific range to have the
  //      unique extra-data set.