code: func newKeysHandler(store mock.GlobalStorer) http.HandlerFunc {
  	return func(w http.ResponseWriter, r *http.Request) {
  		q := r.URL.Query()
  		node := q.Get("node")
  		start, limit := listingPage(q)
  
  		var keys mock.Keys
  		if node == "" {
  			var err error
  			keys, err = store.Keys(common.Hex2Bytes(start), limit)
  			if err != nil {
  				log.Error("chunk explorer: keys handler: get keys", "start", start, "err", err)
  				jsonStatusResponse(w, http.StatusInternalServerError)
  				return
  			}
  		} else {
  			var err error
  			keys, err = store.NodeKeys(common.HexToAddress(node), common.Hex2Bytes(start), limit)
  			if err != nil {
  				log.Error("chunk explorer: keys handler: get node keys", "node", node, "start", start, "err", err)
  				jsonStatusResponse(w, http.StatusInternalServerError)
  				return
  			}
  		}
  		ks := make([]string, len(keys.Keys))
  		for i, k := range keys.Keys {
  			ks[i] = common.Bytes2Hex(k)
  		}
  		data, err := json.Marshal(KeysResponse{
  			Keys: ks,
  			Next: common.Bytes2Hex(keys.Next),
  		})
  		if err != nil {
  			log.Error("chunk explorer: keys handler: json marshal", "err", err)
  			jsonStatusResponse(w, http.StatusInternalServerError)
  			return
  		}
  		w.Header().Set("Content-Type", jsonContentType)
  		_, err = io.Copy(w, bytes.NewReader(data))
  		if err != nil {
  			log.Error("chunk explorer: keys handler: write response", "err", err)
  		}
  	}
  }
docs: // newKeysHandler returns a new handler that serves
  // requests for Key global store method.
  // HTTP response body will be JSON-encoded KeysResponse.