import BigNumber from 'bignumber.js';
import { Account, Context, DecreaseAllowanceParams, Entity, IncreaseAllowanceParams, SetAllowanceParams } from "../../../internal";
import { NoArgsProcedureMethod, ProcedureMethod } from "../../../types";
export interface UniqueIdentifiers {
    /**
     * beneficiary address
     */
    beneficiary: string;
    /**
     * subsidizer address
     */
    subsidizer: string;
}
declare type HumanReadable = UniqueIdentifiers;
/**
 * Represents a Subsidy relationship on chain
 */
export declare class Subsidy extends Entity<UniqueIdentifiers, HumanReadable> {
    /**
     * @hidden
     * Check if a value is of type {@link UniqueIdentifiers}
     */
    static isUniqueIdentifiers(identifier: unknown): identifier is UniqueIdentifiers;
    /**
     * Account whose transactions are being paid for
     */
    beneficiary: Account;
    /**
     * Account that is paying for the transactions
     */
    subsidizer: Account;
    /**
     * @hidden
     */
    constructor(identifiers: UniqueIdentifiers, context: Context);
    /**
     * Terminate this Subsidy relationship. The beneficiary Account will be forced to pay for their own transactions
     *
     * @note both the beneficiary and the subsidizer are allowed to unilaterally quit the Subsidy
     */
    quit: NoArgsProcedureMethod<void>;
    /**
     * Set allowance for this Subsidy relationship
     *
     * @note Only the subsidizer is allowed to set the allowance
     *
     * @throws if the allowance to set is equal to the current allowance
     */
    setAllowance: ProcedureMethod<Pick<SetAllowanceParams, 'allowance'>, void>;
    /**
     * Increase allowance for this Subsidy relationship
     *
     * @note Only the subsidizer is allowed to increase the allowance
     */
    increaseAllowance: ProcedureMethod<Pick<IncreaseAllowanceParams, 'allowance'>, void>;
    /**
     * Decrease allowance for this Subsidy relationship
     *
     * @note Only the subsidizer is allowed to decrease the allowance
     *
     * @throws if the amount to decrease by is more than the existing allowance
     */
    decreaseAllowance: ProcedureMethod<Pick<DecreaseAllowanceParams, 'allowance'>, void>;
    /**
     * Determine whether this Subsidy relationship exists on chain
     */
    exists(): Promise<boolean>;
    /**
     * Get amount of POLYX subsidized for this Subsidy relationship
     *
     * @throws if the Subsidy does not exist
     */
    getAllowance(): Promise<BigNumber>;
    /**
     * Return the Subsidy's static data
     */
    toHuman(): HumanReadable;
}
export {};
//# sourceMappingURL=index.d.ts.map