import * as Shardus from '../shardus/shardus-types';
import Profiler from '../utils/profiler';
import Crypto from '../crypto';
import Logger from '../logger';
import StateManager from '.';
import { AccountHashCache, AccountHashCacheMain3, CycleShardData, AccountHashCacheHistory, AccountHashCacheList } from './state-manager-types';
import { Logger as Log4jsLogger } from 'log4js';
declare class AccountCache {
    app: Shardus.App;
    crypto: Crypto;
    config: Shardus.StrictServerConfiguration;
    profiler: Profiler;
    logger: Logger;
    mainLogger: Log4jsLogger;
    fatalLogger: Log4jsLogger;
    shardLogger: Log4jsLogger;
    statsLogger: Log4jsLogger;
    accountsHashCache3: AccountHashCacheMain3;
    cacheUpdateQueue: AccountHashCacheList;
    statemanager_fatal: (key: string, log: string) => void;
    stateManager: StateManager;
    constructor(stateManager: StateManager, profiler: Profiler, app: Shardus.App, logger: Logger, crypto: Crypto, config: Shardus.StrictServerConfiguration);
    resetAccountCache(): void;
    /**
       * updateAccountHash
       * This takes an accountID, hash, timestamp and cycle and updates the cache.
       *   if this is for a future cycle then the data goes into queue to get processed later in buildPartitionHashesForNode
          METHOD 3
          More simple than method 2, but higher perf and some critical feature advantages over method 1 like the history working list and queue
       */
    updateAccountHash(accountId: string, accountHash: string, timestamp: number, cycle: number): void;
    hasAccount(accountId: string): boolean;
    getAccountHash(accountId: string): AccountHashCache;
    sortByTimestampIdAsc(first: any, second: any): number;
    processCacheUpdates(cycleShardData: CycleShardData): void;
    getAccountDebugObject(id: string): AccountHashCacheHistory;
    getDebugStats(): [number, number];
    getAccountHashHistoryItem(accountID: string): AccountHashCacheHistory;
}
export default AccountCache;
