code: func (s *ChainService) Start() error {
  	// Already started?
  	if atomic.AddInt32(&s.started, 1) != 1 {
  		return nil
  	}
  
  	// Start the address manager and block manager, both of which are
  	// needed by peers.
  	s.addrManager.Start()
  	s.blockManager.Start()
  	s.blockSubscriptionMgr.Start()
  
  	s.utxoScanner.Start()
  
  	if err := s.broadcaster.Start(); err != nil {
  		return fmt.Errorf("unable to start transaction broadcaster: %v",
  			err)
  	}
  
  	go s.connManager.Start()
  
  	// Start the peer handler which in turn starts the address and block
  	// managers.
  	s.wg.Add(1)
  	go s.peerHandler()
  
  	return nil
  }
docs: // Start begins connecting to peers and syncing the blockchain.