code: async def get_delta_json(
              self,
              rr_delta_builder: Callable[['HolderProver', str, int, int, dict], Awaitable[Tuple[str, int]]],
              fro: int,
              to: int) -> (str, int):
          
  
          LOGGER.debug(
              'RevoCacheEntry.get_delta_json >>> rr_delta_builder: %s, fro: %s, to: %s',
              rr_delta_builder.__name__,
              fro,
              to)
  
          rv = await self._get_update(rr_delta_builder, fro, to, True)
          LOGGER.debug('RevoCacheEntry.get_delta_json <<< %s', rv)
          return rv
docs: Get rev reg delta json, and its timestamp on the distributed ledger,
          from cached rev reg delta frames list or distributed ledger,
          updating cache as necessary.
  
          Raise BadRevStateTime if caller asks for a delta to the future.
  
          On return of any previously existing rev reg delta frame, always update its query time beforehand.
  
          :param rr_delta_builder: callback to build rev reg delta if need be (specify anchor instance's
              _build_rr_delta())
          :param fro: least time (epoch seconds) of interest; lower-bounds 'to' on frame housing return data
          :param to: greatest time (epoch seconds) of interest; upper-bounds returned revocation delta timestamp
          :return: rev reg delta json and ledger timestamp (epoch seconds)