code: func (tab *Table) doRefresh(done chan struct{}) {
  	defer close(done)
  
  	// Load nodes from the database and insert
  	// them. This should yield a few previously seen nodes that are
  	// (hopefully) still alive.
  	tab.loadSeedNodes()
  
  	// Run self lookup to discover new neighbor nodes.
  	tab.net.lookupSelf()
  
  	// The Kademlia paper specifies that the bucket refresh should
  	// perform a lookup in the least recently used bucket. We cannot
  	// adhere to this because the findnode target is a 512bit value
  	// (not hash-sized) and it is not easily possible to generate a
  	// sha3 preimage that falls into a chosen bucket.
  	// We perform a few lookups with a random target instead.
  	for i := 0; i < 3; i++ {
  		tab.net.lookupRandom()
  	}
  }
docs: // doRefresh performs a lookup for a random target to keep buckets
  // full. seed nodes are inserted if the table is empty (initial
  // bootstrap or discarded faulty peers).