import { BigNumber } from "bignumber.js";
import { Address } from "../commonTypes";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ArcTransactionResult, IContractWrapperFactory } from "../iContractWrapperBase";
import { TxGeneratingFunctionOptions } from "../transactionService";
import { Erc20ApproveOptions, Erc20TransferFromOptions, Erc20TransferOptions, Erc20Wrapper } from "./erc20";
import { BurnableTokenBurnOptions, IBurnableTokenWrapper } from "./iBurnableToken";
import { ApproveAndCallOptions, ChangeApprovalAndCallOptions, IErc827TokenWrapper, TransferAndCallOptions, TransferFromAndCallOptions } from "./iErc827Token";
export declare class DaoTokenWrapper extends Erc20Wrapper
/**
 * In Arc, DAOToken multiply inherits from MintableToken, BurnableToken and ERC827Token.
 * Such a structure not being feasible here, we instead inherit from MintableToken and
 * flatten in the implementations of BurnableToken and ERC827Token.
 */
 implements IErc827TokenWrapper, IBurnableTokenWrapper {
    /**
     * Returns address of the global GEN token.
     */
    static getGenTokenAddress(): string;
    /**
     * Returns promise of DaoTokenWrapper on the global GEN token.
     */
    static getGenToken(): Promise<DaoTokenWrapper>;
    /**
     * Returns a promise of the given account's GEN token balance.
     * @param agentAddress
     */
    static getGenTokenBalance(agentAddress: Address): Promise<BigNumber>;
    name: string;
    friendlyName: string;
    factory: IContractWrapperFactory<DaoTokenWrapper>;
    /**
     * Burn the given number of tokens
     * @param options
     */
    burn(options: BurnableTokenBurnOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Approve transfer of tokens by msg.sender (or `onBehalfOf`, if given)
     * from the given "spender".  Then call the function specified
     * by `callData`, all in a single transaction.
     * @param options
     */
    approveAndCall(options: ApproveAndCallOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Transfer tokens from the current account to another.  Then call the function specified
     * by `callData`, all in a single transaction.
     * @param options
     */
    transferAndCall(options: TransferAndCallOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Transfer tokens from one address to another.  Then call the function specified
     * by `callData`, all in a single transaction.
     * @param options
     */
    transferFromAndCall(options: TransferFromAndCallOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Increase the number of tokens approved that msg.sender (or `onBehalfOf`, if given)
     * may transfer from the given "spender".
     * Then call the function specified by `callData`, all in a single transaction.
     * @param options
     */
    increaseApprovalAndCall(options: ChangeApprovalAndCallOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    /**
     * Decrease the number of tokens approved that msg.sender (or `onBehalfOf` if given)
     * may transfer from the given "spender".
     * Then call the function specified by `callData`, all in a single transaction.
     * @param options
     */
    decreaseApprovalAndCall(options: ChangeApprovalAndCallOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    getTokenName(): Promise<string>;
    getTokenSymbol(): Promise<string>;
    getTokenCap(): Promise<BigNumber>;
    /**
     * Mint tokens to recipient
     * @param options
     */
    mint(options: DaoTokenMintOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    approve(options: Erc20ApproveOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    transfer(options: Erc20TransferOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
    transferFrom(options: Erc20TransferFromOptions & TxGeneratingFunctionOptions): Promise<ArcTransactionResult>;
}
/**
 * defined just to add good type checking
 */
export declare class DaoTokenFactoryType extends ContractWrapperFactory<DaoTokenWrapper> {
    deployed(): Promise<DaoTokenWrapper>;
    new(name: string, symbol: string, cap: BigNumber): Promise<DaoTokenWrapper>;
}
export declare const DaoTokenFactory: DaoTokenFactoryType;
export interface DaoTokenMintOptions {
    /**
     * The token recipient
     */
    recipient: Address;
    /**
     * Amount to mint
     */
    amount: BigNumber | string;
}
