import BigNumber from "bignumber.js";
import { Address, Hash } from "../commonTypes";
import { ContractWrapperBase } from "../contractWrapperBase";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ArcTransactionResult, IContractWrapperFactory } from "../iContractWrapperBase";
import { TxGeneratingFunctionOptions } from "../transactionService";
import { EventFetcherFactory } from "../web3EventService";
import { StandardTokenWrapper } from "./standardToken";
export declare class Auction4ReputationWrapper extends ContractWrapperBase {
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<Auction4ReputationWrapper>;
    Bid: EventFetcherFactory<Auction4ReputationBidEventResult>;
    Redeem: EventFetcherFactory<Auction4ReputationRedeemEventResult>;
    initialize(options: Auction4ReputationInitializeOptions): Promise<ArcTransactionResult>;
    redeem(options: Auction4ReputationRedeemOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Returns reason why can't bid, else null if can bid
     */
    getBidBlocker(options: Auction4ReputationBidOptions): Promise<string | null>;
    /**
     * Bid on behalf of the current account
     * @param options
     */
    bid(options: Auction4ReputationBidOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * transfer bidded tokens to the wallet
     * @param options
     */
    transferToWallet(options?: TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * get promise of the amount bid on the given auction.
     * @param bidderAddress
     * @param auctionId
     */
    getBid(bidderAddress: Address, auctionId: number): Promise<BigNumber>;
    /**
     * Get a promise of the first date/time when anything can be redeemed
     */
    getRedeemEnableTime(): Promise<Date>;
    /**
     * Get a promise of the total reputation rewardable across all the auctions
     */
    getReputationReward(): Promise<BigNumber>;
    getReputationRewardLeft(): Promise<BigNumber>;
    getAuctionsEndTime(): Promise<Date>;
    getAuctionsStartTime(): Promise<Date>;
    getNumberOfAuctions(): Promise<number>;
    /**
     * Get a promise of  the reputation reward of a single auction
     */
    auctionReputationReward(): Promise<BigNumber>;
    /**
     * Get a promise of the number of seconds in a single auction
     */
    getAuctionPeriod(): Promise<number>;
    getToken(): Promise<StandardTokenWrapper>;
    getWallet(): Promise<Address>;
    getAvatar(): Promise<Address>;
    /**
     * Get a promise of the total amount bid for a given auction.
     */
    getAuctionTotalBid(auctionId: number): Promise<BigNumber>;
    protected hydrated(): void;
    private validateAuctionId;
}
export declare class Auction4ReputationType extends ContractWrapperFactory<Auction4ReputationWrapper> {
    deployed(): Promise<Auction4ReputationWrapper>;
}
export declare const Auction4ReputationFactory: Auction4ReputationType;
export interface Auction4ReputationRedeemEventResult {
    /**
     * indexed
     */
    _lockingId: Hash;
    /**
     * indexed
     */
    _beneficiary: Address;
    /**
     * in Wei
     */
    _amount: BigNumber;
}
export interface Auction4ReputationReleaseEventResult {
    /**
     * indexed
     */
    _lockingId: Hash;
    /**
     * indexed
     */
    _beneficiary: Address;
    /**
     * in Wei
     */
    _amount: BigNumber;
}
export interface Auction4ReputationInitializeOptions {
    avatarAddress: Address;
    auctionsEndTime: Date;
    auctionsStartTime: Date;
    numberOfAuctions: number;
    /**
     * Reputation cannot be redeemed until after this time, even if redeeming has been enabled.
     */
    redeemEnableTime: Date;
    reputationReward: BigNumber | string;
    tokenAddress: Address;
    walletAddress: Address;
}
export interface Auction4ReputationRedeemOptions {
    /**
     * 0-based index of the auction.
     */
    auctionId: number;
    beneficiaryAddress: Address;
}
export interface Auction4ReputationBidOptions {
    amount: BigNumber | string;
}
export interface Auction4ReputationBidEventResult {
    _amount: BigNumber;
    /**
     * 0-based index of the auction.
     * indexed
     */
    _auctionId: BigNumber;
    /**
     * indexed
     */
    _bidder: Address;
}
export interface Auction4ReputationRedeemEventResult {
    _amount: BigNumber;
    /**
     * 0-based index of the auction.
     * indexed
     */
    _auctionId: BigNumber;
    /**
     * indexed
     */
    _beneficiary: Address;
}
