code: func (net *Network) startWithSnapshots(id enode.ID, snapshots map[string][]byte) error {
  	net.lock.Lock()
  	defer net.lock.Unlock()
  
  	node := net.getNode(id)
  	if node == nil {
  		return fmt.Errorf("node %v does not exist", id)
  	}
  	if node.Up() {
  		return fmt.Errorf("node %v already up", id)
  	}
  	log.Trace("Starting node", "id", id, "adapter", net.nodeAdapter.Name())
  	if err := node.Start(snapshots); err != nil {
  		log.Warn("Node startup failed", "id", id, "err", err)
  		return err
  	}
  	node.SetUp(true)
  	log.Info("Started node", "id", id)
  	ev := NewEvent(node)
  	net.events.Send(ev)
  
  	// subscribe to peer events
  	client, err := node.Client()
  	if err != nil {
  		return fmt.Errorf("error getting rpc client  for node %v: %s", id, err)
  	}
  	events := make(chan *p2p.PeerEvent)
  	sub, err := client.Subscribe(context.Background(), "admin", events, "peerEvents")
  	if err != nil {
  		return fmt.Errorf("error getting peer events for node %v: %s", id, err)
  	}
  	go net.watchPeerEvents(id, events, sub)
  	return nil
  }
docs: // startWithSnapshots starts the node with the given ID using the give
  // snapshots