code: def archive(base_dir: str) -> int:
          
  
          LOGGER.debug('archive >>> base_dir: %s', base_dir)
  
          rv = int(time())
          timestamp_dir = join(base_dir, str(rv))
          makedirs(timestamp_dir, exist_ok=True)
  
          with SCHEMA_CACHE.lock:
              with open(join(timestamp_dir, 'schema'), 'w') as archive:
                  print(json.dumps(SCHEMA_CACHE.schemata()), file=archive)
  
          with CRED_DEF_CACHE.lock:
              with open(join(timestamp_dir, 'cred_def'), 'w') as archive:
                  print(json.dumps(CRED_DEF_CACHE), file=archive)
  
          with REVO_CACHE.lock:
              with open(join(timestamp_dir, 'revocation'), 'w') as archive:
                  revo_cache_dict = {}
                  for rr_id in REVO_CACHE:
                      revo_cache_dict[rr_id] = {
                          'rev_reg_def': REVO_CACHE[rr_id].rev_reg_def,
                          'rr_delta_frames': [vars(f) for f in REVO_CACHE[rr_id].rr_delta_frames],
                          'rr_state_frames': [vars(f) for f in REVO_CACHE[rr_id].rr_state_frames]
                      }
                  print(json.dumps(revo_cache_dict), file=archive)
  
          LOGGER.debug('archive <<< %s', rv)
          return rv
docs: Archive schema, cred def, revocation caches to disk as json.
  
          :param base_dir: archive base directory
          :return: timestamp (epoch seconds) used as subdirectory