///
import { PastEventOptions } from 'web3-eth-contract';
import { EventEmitter } from 'events';
import { PrefixedHexString } from 'ethereumjs-util';
import { Block } from '@ethersproject/providers';
import { Address, AmountRequired, ContractInteractor, EventData, LoggerInterface, RegistrarRelayInfo } from '@opengsn/common';
import { TransactionManager } from './TransactionManager';
import { ServerConfigParams } from './ServerConfigParams';
import { TxStoreManager } from './TxStoreManager';
import { Web3MethodsBuilder } from './Web3MethodsBuilder';
export declare class RegistrationManager {
balanceRequired: AmountRequired;
stakeRequired: AmountRequired;
_isSetOwnerCalled: boolean;
_isOwnerSetOnStakeManager: boolean;
_isHubAuthorized: boolean;
_isStakeLocked: boolean;
isInitialized: boolean;
hubAddress: Address;
managerAddress: Address;
workerAddress: Address;
eventEmitter: EventEmitter;
contractInteractor: ContractInteractor;
web3MethodsBuilder: Web3MethodsBuilder;
ownerAddress?: Address;
transactionManager: TransactionManager;
config: ServerConfigParams;
txStoreManager: TxStoreManager;
logger: LoggerInterface;
currentRelayInfo?: RegistrarRelayInfo;
private delayedEvents;
get isHubAuthorized(): boolean;
set isHubAuthorized(newValue: boolean);
get isStakeLocked(): boolean;
set isStakeLocked(newValue: boolean);
constructor(contractInteractor: ContractInteractor, web3methodsBuilder: Web3MethodsBuilder, transactionManager: TransactionManager, txStoreManager: TxStoreManager, eventEmitter: EventEmitter, logger: LoggerInterface, config: ServerConfigParams, managerAddress: Address, workerAddress: Address);
init(lastScannedBlock: number, latestBlock: Block): Promise;
handlePastEvents(hubEventsSinceLastScan: EventData[], lastScannedBlock: number, currentBlock: Block, currentBlockTimestamp: number, forceRegistration: boolean): Promise;
_extractDuePendingEvents(currentBlockTime: number | string): EventData[];
refreshRegistrarRelayInfo(): Promise;
_isRegistrationCorrect(): boolean;
_parseEvent(event: {
events: any[];
name: string;
address: string;
} | null): any;
_handleHubAuthorizedEvent(dlog: EventData): Promise;
_handleHubUnauthorizedEvent(dlog: EventData, currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
_handleStakeWithdrawnEvent(dlog: EventData, currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
/**
* @param withdrawManager - whether to send the relay manager's balance to the owner.
* Note that more than one relay process could be using the same manager account.
* @param currentBlock
*/
withdrawAllFunds(withdrawManager: boolean, currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
refreshBalance(): Promise;
refreshStake(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
addRelayWorker(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
attemptRegistration(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
_sendManagerEthBalanceToOwner(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
_sendWorkersEthBalancesToOwner(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
_sendManagerHubBalanceToOwner(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number, amount?: BN): Promise;
_isWorkerValid(): Promise;
isRegistered(): Promise;
printNotRegisteredMessage(): void;
printEvents(decodedEvents: EventData[], options: PastEventOptions): void;
setOwnerInStakeManager(currentBlockNumber: number, currentBlockHash: string, currentBlockTimestamp: number): Promise;
}