code: def rpc_getinfo(self, **con_info):
          
          conf = get_blockstack_opts()
          info = self.get_bitcoind_info()
          cinfo = self.get_consensus_info()
          reply = {}
          reply['last_block_seen'] = info['blocks']
  
          reply['consensus'] = cinfo['consensus_hash']
          reply['server_version'] = "%s" % VERSION
          reply['last_block_processed'] = cinfo['block_height']
          reply['server_alive'] = True
          reply['indexing'] = config.is_indexing(self.working_dir)
  
          # this is a bit janky, but the logic is as follows:
          # * BLOCKSTACK_TESTNET_ACTIVE means that we've explicitly set an alternative magic bytes, so we should report this.
          # * BLOCKSTACK_PUBLIC_TESTNET means that we're on the default hosted testnet (e.g. testnet.blockstack.org)
          # * BLOCKSTACK_TEST or BLOCKSTACK_TESTNET usually means we're running inside an integration test
          if BLOCKSTACK_TESTNET_ACTIVE:
              reply['testnet'] = MAGIC_BYTES
  
          elif BLOCKSTACK_PUBLIC_TESTNET:
              reply['testnet'] = 'hosted'
  
          elif BLOCKSTACK_TEST or BLOCKSTACK_TESTNET:
              reply['testnet'] = True
  
          else:
              reply['testnet'] = False
  
          reply['first_block'] = FIRST_BLOCK_MAINNET
  
          if conf.get('atlas', False):
              # return zonefile inv length
              reply['zonefile_count'] = atlas_get_num_zonefiles()
  
          if self.is_stale():
              reply['stale'] = True
              reply['warning'] = 'Daemon is behind the chain tip.  Do not rely on it for fresh information.'
  
          return reply
docs: Get information from the running server:
          * last_block_seen: the last block height seen
          * consensus: the consensus hash for that block
          * server_version: the server version
          * last_block_processed: the last block processed
          * server_alive: True
          * [optional] zonefile_count: the number of zonefiles known