code: func (h *Hive) Start(server *p2p.Server) error {
  	log.Info("Starting hive", "baseaddr", fmt.Sprintf("%x", h.BaseAddr()[:4]))
  	// if state store is specified, load peers to prepopulate the overlay address book
  	if h.Store != nil {
  		log.Info("Detected an existing store. trying to load peers")
  		if err := h.loadPeers(); err != nil {
  			log.Error(fmt.Sprintf("%08x hive encoutered an error trying to load peers", h.BaseAddr()[:4]))
  			return err
  		}
  	}
  	// assigns the p2p.Server#AddPeer function to connect to peers
  	h.addPeer = server.AddPeer
  	// ticker to keep the hive alive
  	h.ticker = time.NewTicker(h.KeepAliveInterval)
  	// this loop is doing bootstrapping and maintains a healthy table
  	go h.connect()
  	return nil
  }
docs: // Start stars the hive, receives p2p.Server only at startup
  // server is used to connect to a peer based on its NodeID or enode URL
  // these are called on the p2p.Server which runs on the node