import * as BigNumber from "bignumber.js";
import { Address, Hash, SchemePermissions, SchemeWrapper } from "../commonTypes";
import { ArcTransactionDataResult, ArcTransactionProposalResult, ArcTransactionResult, ContractWrapperBase, EventFetcherFactory, StandardSchemeParams, TransactionReceiptTruffle } from "../contractWrapperBase";
import { ContractWrapperFactory } from "../contractWrapperFactory";
import { ProposalExecutedEventResult } from "./commonEventInterfaces";
export declare class VestingSchemeWrapper extends ContractWrapperBase implements SchemeWrapper {
    name: string;
    friendlyName: string;
    factory: ContractWrapperFactory<VestingSchemeWrapper>;
    /**
     * Events
     */
    ProposalExecuted: EventFetcherFactory<ProposalExecutedEventResult>;
    AgreementProposal: EventFetcherFactory<AgreementProposalEventResult>;
    NewVestedAgreement: EventFetcherFactory<NewVestedAgreementEventResult>;
    SignToCancelAgreement: EventFetcherFactory<SignToCancelAgreementEventResult>;
    RevokeSignToCancelAgreement: EventFetcherFactory<RevokeSignToCancelAgreementEventResult>;
    AgreementCancel: EventFetcherFactory<AgreementCancelEventResult>;
    Collect: EventFetcherFactory<CollectEventResult>;
    /**
     * see CreateVestingAgreementConfig
     */
    private defaultCreateOptions;
    /**
     * Propose a new vesting agreement
     * @param {ProposeVestingAgreementConfig} options
     */
    propose(options?: ProposeVestingAgreementConfig): Promise<ArcTransactionProposalResult>;
    /**
     * Create a new vesting agreement
     * @param {CreateVestingAgreementConfig} options
     */
    create(options?: CreateVestingAgreementConfig): Promise<ArcTransactionAgreementResult>;
    /**
     * Sign to cancel a vesting agreement
     * @param {SignToCancelVestingAgreementConfig} options
     */
    signToCancel(options?: SignToCancelVestingAgreementConfig): Promise<ArcTransactionResult>;
    /**
     * Revoke vote for cancelling a vesting agreement
     * @param {RevokeSignToCancelVestingAgreementConfig} options
     */
    revokeSignToCancel(options?: RevokeSignToCancelVestingAgreementConfig): Promise<ArcTransactionResult>;
    /**
     * Collects for a beneficiary, according to the agreement
     * @param {CollectVestingAgreementConfig} options
     */
    collect(options?: CollectVestingAgreementConfig): Promise<ArcTransactionResult>;
    /**
     * Return all agreements ever created by this scheme
     * Filter by the optional agreementId.
     */
    getAgreements(options?: GetAgreementParams): Promise<Array<Agreement>>;
    setParameters(params: StandardSchemeParams): Promise<ArcTransactionDataResult<Hash>>;
    getDefaultPermissions(): SchemePermissions;
    getSchemePermissions(avatarAddress: Address): Promise<SchemePermissions>;
    getSchemeParameters(avatarAddress: Address): Promise<StandardSchemeParams>;
    getParameters(paramsHash: Hash): Promise<StandardSchemeParams>;
    private validateCreateParams(options);
    private schemeAgreementToAgreement(schemeAgreement, agreementId);
}
export declare class ArcTransactionAgreementResult extends ArcTransactionResult {
    agreementId: number;
    constructor(tx: TransactionReceiptTruffle);
}
export declare const VestingSchemeFactory: ContractWrapperFactory<VestingSchemeWrapper>;
export interface AgreementProposalEventResult {
    /**
     * indexed
     */
    _avatar: Address;
    _proposalId: Hash;
}
export interface NewVestedAgreementEventResult {
    /**
     * indexed
     */
    _agreementId: BigNumber.BigNumber;
}
export interface SignToCancelAgreementEventResult {
    /**
     * indexed
     */
    _agreementId: BigNumber.BigNumber;
    /**
     * indexed
     */
    _signer: Address;
}
export interface RevokeSignToCancelAgreementEventResult {
    /**
     * indexed
     */
    _agreementId: BigNumber.BigNumber;
    /**
     * indexed
     */
    _signer: Address;
}
export interface AgreementCancelEventResult {
    /**
     * indexed
     */
    _agreementId: BigNumber.BigNumber;
}
export interface CollectEventResult {
    /**
     * indexed
     */
    _agreementId: BigNumber.BigNumber;
}
export interface CommonVestingAgreementConfig {
    /**
     * Address of the recipient of the proposed agreement.
     */
    beneficiaryAddress: Address;
    /**
     * Where to send the tokens in case of cancellation
     */
    returnOnCancelAddress: string;
    /**
     * Optional ethereum block number at which the agreement starts.
     * Default is the current block number.
     * Must be greater than or equal to zero.
     */
    startingBlock?: number;
    /**
     * The number of tokens to pay per period.
     * Period is calculated as (number of blocks / periodLength).
     * Should be expressed in Wei.
     * Must be greater than zero.
     */
    amountPerPeriod: BigNumber.BigNumber | string;
    /**
     * number of blocks in a period.
     * Must be greater than zero.
     */
    periodLength: number;
    /**
     * maximum number of periods that can be paid out.
     * Must be greater than zero.
     */
    numOfAgreedPeriods: number;
    /**
     * The minimum number of periods that must pass before the beneficiary
     * may collect tokens under the agreement.
     * Must be greater than or equal to zero.
     */
    cliffInPeriods: number;
    /**
     * The number of signatures required to cancel agreement.
     * See signToCancel.
     */
    signaturesReqToCancel: number;
    /**
     * An array of addresses of those who will be allowed to sign to cancel an agreement.
     * The length of this array must be greater than or equal to signaturesReqToCancel.
     */
    signers: Array<string>;
}
export interface CreateVestingAgreementConfig extends CommonVestingAgreementConfig {
    /**
     * The address of the token that will be used to pay for the creation of the agreement.
     * The caller (msg.Sender) must have the funds to pay in that token.
     */
    token: string;
}
export interface ProposeVestingAgreementConfig extends CommonVestingAgreementConfig {
    /**
     * The address of the avatar in which the proposal is being be made.
     */
    avatar: Address;
}
export interface SignToCancelVestingAgreementConfig {
    /**
     * the agreementId
     */
    agreementId: number;
}
export interface RevokeSignToCancelVestingAgreementConfig {
    /**
     * the agreementId
     */
    agreementId: number;
}
export interface CollectVestingAgreementConfig {
    /**
     * the agreementId
     */
    agreementId: number;
}
export interface GetAgreementParams {
    /**
     * The address of the avatar
     */
    avatar: Address;
    /**
     * Optional agreement Id
     */
    agreementId?: number;
}
export interface Agreement {
    agreementId: number;
    amountPerPeriod: BigNumber.BigNumber;
    beneficiaryAddress: Address;
    cliffInPeriods: BigNumber.BigNumber;
    collectedPeriods: BigNumber.BigNumber;
    numOfAgreedPeriods: BigNumber.BigNumber;
    periodLength: BigNumber.BigNumber;
    returnOnCancelAddress: Address;
    signaturesReqToCancel: BigNumber.BigNumber;
    startingBlock: BigNumber.BigNumber;
    tokenAddress: Address;
}
