import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from 'ethers';
import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi';
import type { Listener, Provider } from '@ethersproject/providers';
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common';
export interface PoolTogetherV3CommunityPrizePoolInterface extends utils.Interface {
    functions: {
        'VERSION()': FunctionFragment;
        'accountedBalance()': FunctionFragment;
        'award(address,uint256,address)': FunctionFragment;
        'awardBalance()': FunctionFragment;
        'awardExternalERC20(address,address,uint256)': FunctionFragment;
        'awardExternalERC721(address,address,uint256[])': FunctionFragment;
        'balance()': FunctionFragment;
        'balanceOfCredit(address,address)': FunctionFragment;
        'beforeTokenTransfer(address,address,uint256)': FunctionFragment;
        'calculateEarlyExitFee(address,address,uint256)': FunctionFragment;
        'calculateReserveFee(uint256)': FunctionFragment;
        'canAwardExternal(address)': FunctionFragment;
        'captureAwardBalance()': FunctionFragment;
        'compLikeDelegate(address,address)': FunctionFragment;
        'creditPlanOf(address)': FunctionFragment;
        'depositTo(address,uint256,address,address)': FunctionFragment;
        'estimateCreditAccrualTime(address,uint256,uint256)': FunctionFragment;
        'initialize(address,address[],uint256)': FunctionFragment;
        'isControlled(address)': FunctionFragment;
        'liquidityCap()': FunctionFragment;
        'maxExitFeeMantissa()': FunctionFragment;
        'onERC721Received(address,address,uint256,bytes)': FunctionFragment;
        'owner()': FunctionFragment;
        'prizeStrategy()': FunctionFragment;
        'renounceOwnership()': FunctionFragment;
        'reserveRegistry()': FunctionFragment;
        'reserveTotalSupply()': FunctionFragment;
        'setCreditPlanOf(address,uint128,uint128)': FunctionFragment;
        'setLiquidityCap(uint256)': FunctionFragment;
        'setPrizeStrategy(address)': FunctionFragment;
        'token()': FunctionFragment;
        'tokens()': FunctionFragment;
        'transferExternalERC20(address,address,uint256)': FunctionFragment;
        'transferOwnership(address)': FunctionFragment;
        'withdrawInstantlyFrom(address,uint256,address,uint256)': FunctionFragment;
        'withdrawReserve(address)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'VERSION' | 'accountedBalance' | 'award' | 'awardBalance' | 'awardExternalERC20' | 'awardExternalERC721' | 'balance' | 'balanceOfCredit' | 'beforeTokenTransfer' | 'calculateEarlyExitFee' | 'calculateReserveFee' | 'canAwardExternal' | 'captureAwardBalance' | 'compLikeDelegate' | 'creditPlanOf' | 'depositTo' | 'estimateCreditAccrualTime' | 'initialize' | 'isControlled' | 'liquidityCap' | 'maxExitFeeMantissa' | 'onERC721Received' | 'owner' | 'prizeStrategy' | 'renounceOwnership' | 'reserveRegistry' | 'reserveTotalSupply' | 'setCreditPlanOf' | 'setLiquidityCap' | 'setPrizeStrategy' | 'token' | 'tokens' | 'transferExternalERC20' | 'transferOwnership' | 'withdrawInstantlyFrom' | 'withdrawReserve'): FunctionFragment;
    encodeFunctionData(functionFragment: 'VERSION', values?: undefined): string;
    encodeFunctionData(functionFragment: 'accountedBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'award', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'awardBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'awardExternalERC20', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'awardExternalERC721', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>[]]): string;
    encodeFunctionData(functionFragment: 'balance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'balanceOfCredit', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'beforeTokenTransfer', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'calculateEarlyExitFee', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'calculateReserveFee', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'canAwardExternal', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'captureAwardBalance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'compLikeDelegate', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'creditPlanOf', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'depositTo', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'estimateCreditAccrualTime', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue<string>, PromiseOrValue<string>[], PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'isControlled', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'liquidityCap', values?: undefined): string;
    encodeFunctionData(functionFragment: 'maxExitFeeMantissa', values?: undefined): string;
    encodeFunctionData(functionFragment: 'onERC721Received', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'prizeStrategy', values?: undefined): string;
    encodeFunctionData(functionFragment: 'renounceOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'reserveRegistry', values?: undefined): string;
    encodeFunctionData(functionFragment: 'reserveTotalSupply', values?: undefined): string;
    encodeFunctionData(functionFragment: 'setCreditPlanOf', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'setLiquidityCap', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'setPrizeStrategy', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'token', values?: undefined): string;
    encodeFunctionData(functionFragment: 'tokens', values?: undefined): string;
    encodeFunctionData(functionFragment: 'transferExternalERC20', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'withdrawInstantlyFrom', values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'withdrawReserve', values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: 'VERSION', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'accountedBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'award', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardExternalERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'awardExternalERC721', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'balance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'balanceOfCredit', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'beforeTokenTransfer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'calculateEarlyExitFee', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'calculateReserveFee', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'canAwardExternal', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'captureAwardBalance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'compLikeDelegate', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'creditPlanOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositTo', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'estimateCreditAccrualTime', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'isControlled', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'liquidityCap', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'maxExitFeeMantissa', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'onERC721Received', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'prizeStrategy', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'renounceOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'reserveRegistry', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'reserveTotalSupply', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setCreditPlanOf', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setLiquidityCap', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setPrizeStrategy', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'token', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tokens', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferExternalERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawInstantlyFrom', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawReserve', data: BytesLike): Result;
    events: {
        'AwardCaptured(uint256)': EventFragment;
        'Awarded(address,address,uint256)': EventFragment;
        'AwardedExternalERC20(address,address,uint256)': EventFragment;
        'AwardedExternalERC721(address,address,uint256[])': EventFragment;
        'ControlledTokenAdded(address)': EventFragment;
        'CreditBurned(address,address,uint256)': EventFragment;
        'CreditMinted(address,address,uint256)': EventFragment;
        'CreditPlanSet(address,uint128,uint128)': EventFragment;
        'Deposited(address,address,address,uint256,address)': EventFragment;
        'ErrorAwardingExternalERC721(bytes)': EventFragment;
        'Initialized(address,uint256)': EventFragment;
        'InstantWithdrawal(address,address,address,uint256,uint256,uint256)': EventFragment;
        'LiquidityCapSet(uint256)': EventFragment;
        'OwnershipTransferred(address,address)': EventFragment;
        'PrizeStrategySet(address)': EventFragment;
        'ReserveFeeCaptured(uint256)': EventFragment;
        'ReserveWithdrawal(address,uint256)': EventFragment;
        'TransferredExternalERC20(address,address,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'AwardCaptured'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Awarded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AwardedExternalERC20'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AwardedExternalERC721'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ControlledTokenAdded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditBurned'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditMinted'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'CreditPlanSet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Deposited'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ErrorAwardingExternalERC721'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Initialized'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'InstantWithdrawal'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'LiquidityCapSet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'PrizeStrategySet'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ReserveFeeCaptured'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'ReserveWithdrawal'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TransferredExternalERC20'): EventFragment;
}
export interface AwardCapturedEventObject {
    amount: BigNumber;
}
export declare type AwardCapturedEvent = TypedEvent<[BigNumber], AwardCapturedEventObject>;
export declare type AwardCapturedEventFilter = TypedEventFilter<AwardCapturedEvent>;
export interface AwardedEventObject {
    winner: string;
    token: string;
    amount: BigNumber;
}
export declare type AwardedEvent = TypedEvent<[string, string, BigNumber], AwardedEventObject>;
export declare type AwardedEventFilter = TypedEventFilter<AwardedEvent>;
export interface AwardedExternalERC20EventObject {
    winner: string;
    token: string;
    amount: BigNumber;
}
export declare type AwardedExternalERC20Event = TypedEvent<[string, string, BigNumber], AwardedExternalERC20EventObject>;
export declare type AwardedExternalERC20EventFilter = TypedEventFilter<AwardedExternalERC20Event>;
export interface AwardedExternalERC721EventObject {
    winner: string;
    token: string;
    tokenIds: BigNumber[];
}
export declare type AwardedExternalERC721Event = TypedEvent<[string, string, BigNumber[]], AwardedExternalERC721EventObject>;
export declare type AwardedExternalERC721EventFilter = TypedEventFilter<AwardedExternalERC721Event>;
export interface ControlledTokenAddedEventObject {
    token: string;
}
export declare type ControlledTokenAddedEvent = TypedEvent<[string], ControlledTokenAddedEventObject>;
export declare type ControlledTokenAddedEventFilter = TypedEventFilter<ControlledTokenAddedEvent>;
export interface CreditBurnedEventObject {
    user: string;
    token: string;
    amount: BigNumber;
}
export declare type CreditBurnedEvent = TypedEvent<[string, string, BigNumber], CreditBurnedEventObject>;
export declare type CreditBurnedEventFilter = TypedEventFilter<CreditBurnedEvent>;
export interface CreditMintedEventObject {
    user: string;
    token: string;
    amount: BigNumber;
}
export declare type CreditMintedEvent = TypedEvent<[string, string, BigNumber], CreditMintedEventObject>;
export declare type CreditMintedEventFilter = TypedEventFilter<CreditMintedEvent>;
export interface CreditPlanSetEventObject {
    token: string;
    creditLimitMantissa: BigNumber;
    creditRateMantissa: BigNumber;
}
export declare type CreditPlanSetEvent = TypedEvent<[string, BigNumber, BigNumber], CreditPlanSetEventObject>;
export declare type CreditPlanSetEventFilter = TypedEventFilter<CreditPlanSetEvent>;
export interface DepositedEventObject {
    operator: string;
    to: string;
    token: string;
    amount: BigNumber;
    referrer: string;
}
export declare type DepositedEvent = TypedEvent<[string, string, string, BigNumber, string], DepositedEventObject>;
export declare type DepositedEventFilter = TypedEventFilter<DepositedEvent>;
export interface ErrorAwardingExternalERC721EventObject {
    error: string;
}
export declare type ErrorAwardingExternalERC721Event = TypedEvent<[string], ErrorAwardingExternalERC721EventObject>;
export declare type ErrorAwardingExternalERC721EventFilter = TypedEventFilter<ErrorAwardingExternalERC721Event>;
export interface InitializedEventObject {
    reserveRegistry: string;
    maxExitFeeMantissa: BigNumber;
}
export declare type InitializedEvent = TypedEvent<[string, BigNumber], InitializedEventObject>;
export declare type InitializedEventFilter = TypedEventFilter<InitializedEvent>;
export interface InstantWithdrawalEventObject {
    operator: string;
    from: string;
    token: string;
    amount: BigNumber;
    redeemed: BigNumber;
    exitFee: BigNumber;
}
export declare type InstantWithdrawalEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber,
    BigNumber
], InstantWithdrawalEventObject>;
export declare type InstantWithdrawalEventFilter = TypedEventFilter<InstantWithdrawalEvent>;
export interface LiquidityCapSetEventObject {
    liquidityCap: BigNumber;
}
export declare type LiquidityCapSetEvent = TypedEvent<[BigNumber], LiquidityCapSetEventObject>;
export declare type LiquidityCapSetEventFilter = TypedEventFilter<LiquidityCapSetEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export declare type OwnershipTransferredEvent = TypedEvent<[string, string], OwnershipTransferredEventObject>;
export declare type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface PrizeStrategySetEventObject {
    prizeStrategy: string;
}
export declare type PrizeStrategySetEvent = TypedEvent<[string], PrizeStrategySetEventObject>;
export declare type PrizeStrategySetEventFilter = TypedEventFilter<PrizeStrategySetEvent>;
export interface ReserveFeeCapturedEventObject {
    amount: BigNumber;
}
export declare type ReserveFeeCapturedEvent = TypedEvent<[BigNumber], ReserveFeeCapturedEventObject>;
export declare type ReserveFeeCapturedEventFilter = TypedEventFilter<ReserveFeeCapturedEvent>;
export interface ReserveWithdrawalEventObject {
    to: string;
    amount: BigNumber;
}
export declare type ReserveWithdrawalEvent = TypedEvent<[string, BigNumber], ReserveWithdrawalEventObject>;
export declare type ReserveWithdrawalEventFilter = TypedEventFilter<ReserveWithdrawalEvent>;
export interface TransferredExternalERC20EventObject {
    to: string;
    token: string;
    amount: BigNumber;
}
export declare type TransferredExternalERC20Event = TypedEvent<[
    string,
    string,
    BigNumber
], TransferredExternalERC20EventObject>;
export declare type TransferredExternalERC20EventFilter = TypedEventFilter<TransferredExternalERC20Event>;
export interface PoolTogetherV3CommunityPrizePool extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PoolTogetherV3CommunityPrizePoolInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        VERSION(overrides?: CallOverrides): Promise<[string]>;
        accountedBalance(overrides?: CallOverrides): Promise<[BigNumber]>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        awardBalance(overrides?: CallOverrides): Promise<[BigNumber]>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        compLikeDelegate(compLike: PromiseOrValue<string>, to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            creditLimitMantissa: BigNumber;
            creditRateMantissa: BigNumber;
        }>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber] & {
            durationSeconds: BigNumber;
        }>;
        initialize(_reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        isControlled(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        liquidityCap(overrides?: CallOverrides): Promise<[BigNumber]>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<[BigNumber]>;
        onERC721Received(operator: PromiseOrValue<string>, from: PromiseOrValue<string>, tokenId: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        prizeStrategy(overrides?: CallOverrides): Promise<[string]>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        reserveRegistry(overrides?: CallOverrides): Promise<[string]>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        token(overrides?: CallOverrides): Promise<[string]>;
        tokens(overrides?: CallOverrides): Promise<[string[]]>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    VERSION(overrides?: CallOverrides): Promise<string>;
    accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
    award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
    awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    balance(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    captureAwardBalance(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    compLikeDelegate(compLike: PromiseOrValue<string>, to: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
        BigNumber,
        BigNumber
    ] & {
        creditLimitMantissa: BigNumber;
        creditRateMantissa: BigNumber;
    }>;
    depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    initialize(_reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    isControlled(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
    maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
    onERC721Received(operator: PromiseOrValue<string>, from: PromiseOrValue<string>, tokenId: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    owner(overrides?: CallOverrides): Promise<string>;
    prizeStrategy(overrides?: CallOverrides): Promise<string>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    reserveRegistry(overrides?: CallOverrides): Promise<string>;
    reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
    setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    token(overrides?: CallOverrides): Promise<string>;
    tokens(overrides?: CallOverrides): Promise<string[]>;
    transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        VERSION(overrides?: CallOverrides): Promise<string>;
        accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: CallOverrides): Promise<void>;
        balance(overrides?: CallOverrides): Promise<BigNumber>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber, BigNumber] & {
            exitFee: BigNumber;
            burnedCredit: BigNumber;
        }>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        captureAwardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        compLikeDelegate(compLike: PromiseOrValue<string>, to: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            BigNumber,
            BigNumber
        ] & {
            creditLimitMantissa: BigNumber;
            creditRateMantissa: BigNumber;
        }>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        isControlled(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
        onERC721Received(operator: PromiseOrValue<string>, from: PromiseOrValue<string>, tokenId: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
        owner(overrides?: CallOverrides): Promise<string>;
        prizeStrategy(overrides?: CallOverrides): Promise<string>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        reserveRegistry(overrides?: CallOverrides): Promise<string>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        token(overrides?: CallOverrides): Promise<string>;
        tokens(overrides?: CallOverrides): Promise<string[]>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    filters: {
        'AwardCaptured(uint256)'(amount?: null): AwardCapturedEventFilter;
        AwardCaptured(amount?: null): AwardCapturedEventFilter;
        'Awarded(address,address,uint256)'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedEventFilter;
        Awarded(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedEventFilter;
        'AwardedExternalERC20(address,address,uint256)'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedExternalERC20EventFilter;
        AwardedExternalERC20(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): AwardedExternalERC20EventFilter;
        'AwardedExternalERC721(address,address,uint256[])'(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenIds?: null): AwardedExternalERC721EventFilter;
        AwardedExternalERC721(winner?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenIds?: null): AwardedExternalERC721EventFilter;
        'ControlledTokenAdded(address)'(token?: PromiseOrValue<string> | null): ControlledTokenAddedEventFilter;
        ControlledTokenAdded(token?: PromiseOrValue<string> | null): ControlledTokenAddedEventFilter;
        'CreditBurned(address,address,uint256)'(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditBurnedEventFilter;
        CreditBurned(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditBurnedEventFilter;
        'CreditMinted(address,address,uint256)'(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditMintedEventFilter;
        CreditMinted(user?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): CreditMintedEventFilter;
        'CreditPlanSet(address,uint128,uint128)'(token?: null, creditLimitMantissa?: null, creditRateMantissa?: null): CreditPlanSetEventFilter;
        CreditPlanSet(token?: null, creditLimitMantissa?: null, creditRateMantissa?: null): CreditPlanSetEventFilter;
        'Deposited(address,address,address,uint256,address)'(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, referrer?: null): DepositedEventFilter;
        Deposited(operator?: PromiseOrValue<string> | null, to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, referrer?: null): DepositedEventFilter;
        'ErrorAwardingExternalERC721(bytes)'(error?: null): ErrorAwardingExternalERC721EventFilter;
        ErrorAwardingExternalERC721(error?: null): ErrorAwardingExternalERC721EventFilter;
        'Initialized(address,uint256)'(reserveRegistry?: null, maxExitFeeMantissa?: null): InitializedEventFilter;
        Initialized(reserveRegistry?: null, maxExitFeeMantissa?: null): InitializedEventFilter;
        'InstantWithdrawal(address,address,address,uint256,uint256,uint256)'(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, redeemed?: null, exitFee?: null): InstantWithdrawalEventFilter;
        InstantWithdrawal(operator?: PromiseOrValue<string> | null, from?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, redeemed?: null, exitFee?: null): InstantWithdrawalEventFilter;
        'LiquidityCapSet(uint256)'(liquidityCap?: null): LiquidityCapSetEventFilter;
        LiquidityCapSet(liquidityCap?: null): LiquidityCapSetEventFilter;
        'OwnershipTransferred(address,address)'(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        'PrizeStrategySet(address)'(prizeStrategy?: PromiseOrValue<string> | null): PrizeStrategySetEventFilter;
        PrizeStrategySet(prizeStrategy?: PromiseOrValue<string> | null): PrizeStrategySetEventFilter;
        'ReserveFeeCaptured(uint256)'(amount?: null): ReserveFeeCapturedEventFilter;
        ReserveFeeCaptured(amount?: null): ReserveFeeCapturedEventFilter;
        'ReserveWithdrawal(address,uint256)'(to?: PromiseOrValue<string> | null, amount?: null): ReserveWithdrawalEventFilter;
        ReserveWithdrawal(to?: PromiseOrValue<string> | null, amount?: null): ReserveWithdrawalEventFilter;
        'TransferredExternalERC20(address,address,uint256)'(to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TransferredExternalERC20EventFilter;
        TransferredExternalERC20(to?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): TransferredExternalERC20EventFilter;
    };
    estimateGas: {
        VERSION(overrides?: CallOverrides): Promise<BigNumber>;
        accountedBalance(overrides?: CallOverrides): Promise<BigNumber>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        awardBalance(overrides?: CallOverrides): Promise<BigNumber>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        compLikeDelegate(compLike: PromiseOrValue<string>, to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        isControlled(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        liquidityCap(overrides?: CallOverrides): Promise<BigNumber>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<BigNumber>;
        onERC721Received(operator: PromiseOrValue<string>, from: PromiseOrValue<string>, tokenId: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        prizeStrategy(overrides?: CallOverrides): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        reserveRegistry(overrides?: CallOverrides): Promise<BigNumber>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        token(overrides?: CallOverrides): Promise<BigNumber>;
        tokens(overrides?: CallOverrides): Promise<BigNumber>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        VERSION(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        accountedBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        award(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        awardBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        awardExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        awardExternalERC721(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, tokenIds: PromiseOrValue<BigNumberish>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        balance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        balanceOfCredit(user: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        calculateEarlyExitFee(from: PromiseOrValue<string>, controlledToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        calculateReserveFee(amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        canAwardExternal(_externalToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        captureAwardBalance(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        compLikeDelegate(compLike: PromiseOrValue<string>, to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        creditPlanOf(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        depositTo(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        estimateCreditAccrualTime(_controlledToken: PromiseOrValue<string>, _principal: PromiseOrValue<BigNumberish>, _interest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(_reserveRegistry: PromiseOrValue<string>, _controlledTokens: PromiseOrValue<string>[], _maxExitFeeMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        isControlled(controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        liquidityCap(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        maxExitFeeMantissa(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        onERC721Received(operator: PromiseOrValue<string>, from: PromiseOrValue<string>, tokenId: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        prizeStrategy(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        reserveRegistry(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        reserveTotalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        setCreditPlanOf(_controlledToken: PromiseOrValue<string>, _creditRateMantissa: PromiseOrValue<BigNumberish>, _creditLimitMantissa: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setLiquidityCap(_liquidityCap: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setPrizeStrategy(_prizeStrategy: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        token(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tokens(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferExternalERC20(to: PromiseOrValue<string>, externalToken: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawInstantlyFrom(from: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, maximumExitFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawReserve(to: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
