import BigNumber from "bignumber.js";
import { Address } from "../commonTypes";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ArcTransactionResult, IContractWrapperFactory } from "../iContractWrapperBase";
import { TxGeneratingFunctionOptions } from "../transactionService";
import { Locking4ReputationWrapper } from "./locking4Reputation";
export declare class ExternalLocking4ReputationWrapper extends Locking4ReputationWrapper {
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<ExternalLocking4ReputationWrapper>;
    initialize(options: ExternalLockingInitializeOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    getLockBlocker(options: ExternalLockingClaimOptions): Promise<string | null>;
    /**
     * Claim the MGN tokens and lock them.  Provide `lockerAddress` to claim on their behalf,
     * otherwise claims on behalf of the caller.
     * @param options
     */
    lock(options: ExternalLockingClaimOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * The caller is giving permission to the contract to allow someone else to claim
     * on their behalf.
     */
    register(): Promise<ArcTransactionResult>;
    /**
     * Returns promise of a boolean indicating whether the given address has registered
     * to have their tokens claimed for them (see `register`).
     * @param lockerAddress
     */
    isRegistered(lockerAddress: Address): Promise<boolean>;
    getExternalLockingContract(): Promise<Address>;
    getGetBalanceFuncSignature(): Promise<string>;
    /**
     * Promise of `true` if the given account has already executed a lock
     */
    getAccountHasLocked(lockerAddress: Address): Promise<boolean>;
}
export declare class ExternalLocking4ReputationType extends ContractWrapperFactory<ExternalLocking4ReputationWrapper> {
    deployed(): Promise<ExternalLocking4ReputationWrapper>;
}
export declare const ExternalLocking4ReputationFactory: ExternalLocking4ReputationType;
export interface ExternalLockingInitializeOptions {
    avatarAddress: Address;
    externalLockingContract: Address;
    getBalanceFuncSignature: string;
    lockingEndTime: Date;
    lockingStartTime: Date;
    /**
     * Reputation cannot be redeemed until after this time, even if redeeming has been enabled.
     */
    redeemEnableTime: Date;
    reputationReward: BigNumber | string;
}
export interface ExternalLockingClaimOptions {
    lockerAddress?: Address;
}
