import { Address } from "../commonTypes";
import { ArcTransactionResult, IContractWrapperFactory } from "../iContractWrapperBase";
import { BigNumber } from "bignumber.js";
import { ContractWrapperBase } from "../contractWrapperBase";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { TxGeneratingFunctionOptions } from "../transactionService";
import { EventFetcherFactory } from "../web3EventService";
export declare class ReputationWrapper extends ContractWrapperBase {
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<ReputationWrapper>;
    Mint: EventFetcherFactory<ReputationMintEventResult>;
    Burn: EventFetcherFactory<ReputationBurnEventResult>;
    /**
     * Mint reputation to the given recipient
     * @param options
     */
    mint(options: ReputationMintOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Remove reputation from the given account.
     * @param options
     */
    burn(options: ReputationBurnOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    getTotalSupply(): Promise<BigNumber>;
    /**
     * Total amount of reputation at the given `blockNumber`.
     */
    getTotalSupplyAt(blockNumber: number): Promise<BigNumber>;
    getBalanceOf(accountAddress: Address): Promise<BigNumber>;
    /**
     * Queries the balance of `accountAddress` at the given `blockNumber`
     * @param accountAddress
     * @param blockNumber
     */
    getBalanceOfAt(accountAddress: Address, blockNumber: number): Promise<BigNumber>;
    protected hydrated(): void;
}
export declare class ReputationFactoryType extends ContractWrapperFactory<ReputationWrapper> {
    deployed(): Promise<ReputationWrapper>;
}
export declare const ReputationFactory: ReputationFactoryType;
export interface ReputationMintOptions {
    /**
     * The token recipient
     */
    recipient: Address;
    /**
     * Amount to mint
     */
    amount: BigNumber;
}
export interface ReputationBurnOptions {
    from: BigNumber;
    /**
     * Amount to mint
     */
    amount: BigNumber;
}
export interface ReputationMintEventResult {
    /**
     * The recipient of reputation
     * indexed
     */
    _to: Address;
    /**
     * Amount minted
     */
    _amount: BigNumber;
}
export interface ReputationBurnEventResult {
    /**
     * Whose reputation was burnt
     * indexed
     */
    _from: Address;
    /**
     * Amount burnt
     */
    _amount: BigNumber;
}
