code: func (s *GlobalStore) KeyNodes(key []byte, startAddr *common.Address, limit int) (nodes mock.Nodes, err error) {
  	s.mu.RLock()
  	defer s.mu.RUnlock()
  
  	var i int
  	if startAddr != nil {
  		i, _ = s.keyNodeIndex(key, *startAddr)
  	}
  	total := len(s.keyNodes[string(key)])
  	max := maxIndex(i, limit, total)
  	nodes.Addrs = make([]common.Address, 0, max-i)
  	for ; i < max; i++ {
  		nodes.Addrs = append(nodes.Addrs, s.keyNodes[string(key)][i])
  	}
  	if total > max {
  		nodes.Next = &s.keyNodes[string(key)][max]
  	}
  	return nodes, nil
  }
docs: // KeyNodes returns a paginated list of nodes that contain a particular key.