code: func (c *Client) ListKeys(keyPrefix string) (keyval.BytesKeyIterator, error) {
  	boltLogger.Debugf("ListKeys: %q", keyPrefix)
  
  	var keys []string
  	err := c.db.View(func(tx *bolt.Tx) error {
  		c := tx.Bucket(rootBucket).Cursor()
  		prefix := []byte(keyPrefix)
  
  		for k, _ := c.Seek(prefix); k != nil && bytes.HasPrefix(k, prefix); k, _ = c.Next() {
  			boltLogger.Debugf(" listing key: %q", string(k))
  			keys = append(keys, string(k))
  		}
  
  		return nil
  	})
  
  	return &bytesKeyIterator{len: len(keys), keys: keys}, err
  }
docs: // ListKeys returns iterator with keys for given key prefix