code: func (c *Chain) Start() {
  	c.logger.Infof("Starting Raft node")
  
  	if err := c.configureComm(); err != nil {
  		c.logger.Errorf("Failed to start chain, aborting: +%v", err)
  		close(c.doneC)
  		return
  	}
  
  	isJoin := c.support.Height() > 1
  	isMigration := false
  	if isJoin {
  		isMigration = c.detectMigration()
  	}
  	c.Node.start(c.fresh, isJoin, isMigration)
  
  	close(c.startC)
  	close(c.errorC)
  
  	go c.gc()
  	go c.serveRequest()
  
  	es := c.newEvictionSuspector()
  
  	interval := DefaultLeaderlessCheckInterval
  	if c.opts.LeaderCheckInterval != 0 {
  		interval = c.opts.LeaderCheckInterval
  	}
  
  	c.periodicChecker = &PeriodicCheck{
  		Logger:        c.logger,
  		Report:        es.confirmSuspicion,
  		CheckInterval: interval,
  		Condition:     c.suspectEviction,
  	}
  	c.periodicChecker.Run()
  }
docs: // Start instructs the orderer to begin serving the chain and keep it current.