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

def rpc_getinfo(self, **con_info):
        """
        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
        """
        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