import { SlotIndex } from '../slot';
import { NumericString, u64 } from '../../utils';
import { Address, AccountAddress } from '../address';
/**
 * All of the unlock condition types.
 */
declare enum UnlockConditionType {
    /** An address unlock condition. */
    Address = 0,
    /** A storage deposit return unlock condition. */
    StorageDepositReturn = 1,
    /** A timelock unlock condition. */
    Timelock = 2,
    /** An expiration unlock condition. */
    Expiration = 3,
    /** A state controller address unlock condition. */
    StateControllerAddress = 4,
    /** A governor address unlock condition. */
    GovernorAddress = 5,
    /** An immutable account address unlock condition. */
    ImmutableAccountAddress = 6
}
declare abstract class UnlockCondition {
    /**
     * The type of unlock condition.
     */
    readonly type: UnlockConditionType;
    /**
     * @param type The type of the unlock condition.
     */
    constructor(type: UnlockConditionType);
    /**
     * Parse an unlock condition from a plain JS JSON object.
     */
    static parse(data: any): UnlockCondition;
}
/**
 * An address unlock condition.
 */
declare class AddressUnlockCondition extends UnlockCondition {
    /**
     * An address unlocked with a private key.
     */
    readonly address: Address;
    /**
     * @param address The address that needs to be unlocked with a private key.
     */
    constructor(address: Address);
}
/**
 * A Storage Deposit Return Unlock Condition.
 */
declare class StorageDepositReturnUnlockCondition extends UnlockCondition {
    /**
     * The amount the consuming transaction must deposit to `returnAddress`.
     */
    readonly amount: NumericString;
    /**
     * The address to return the amount to.
     */
    readonly returnAddress: Address;
    /**
     * @param returnAddress The address to return the amount to.
     * @param amount The amount the consuming transaction must deposit to `returnAddress`.
     */
    constructor(returnAddress: Address, amount: u64 | NumericString);
    /**
     * The amount the consuming transaction must deposit to `returnAddress`.
     */
    getAmount(): u64;
}
/**
 * Defines a slot index until which the output can not be unlocked.
 */
declare class TimelockUnlockCondition extends UnlockCondition {
    /**
     * Slot index starting from which the output can be consumed.
     */
    readonly slotIndex: SlotIndex;
    constructor(slotIndex: SlotIndex);
}
/**
 * Defines a slot index until which only the Address defined in the Address Unlock Condition is allowed to unlock the output.
 * After the slot index is reached/passed, only the Return Address can unlock it.
 */
declare class ExpirationUnlockCondition extends UnlockCondition {
    /**
     * The return address.
     */
    readonly returnAddress: Address;
    /**
     * Before this slot index, the Address Unlock Condition is allowed to unlock the output, after that only the address defined in Return Address can.
     */
    readonly slotIndex: SlotIndex;
    /**
     * @param returnAddress The address that can unlock the expired output.
     * @param slotIndex The slot index timestamp marking the end of the claim period.
     */
    constructor(returnAddress: Address, slotIndex: SlotIndex);
}
/**
 * A State Controller Address Unlock Condition.
 */
declare class StateControllerAddressUnlockCondition extends UnlockCondition {
    /**
     * The address.
     */
    readonly address: Address;
    /**
     * @param address The State Controller address that is allowed to do state transitions.
     */
    constructor(address: Address);
}
/**
 * A Governor Address Unlock Condition.
 */
declare class GovernorAddressUnlockCondition extends UnlockCondition {
    /**
     * The Governor address.
     */
    readonly address: Address;
    /**
     * @param address The governor address that is allowed to do governance transitions.
     */
    constructor(address: Address);
}
/**
 * Immutable Account Unlock Condition.
 */
declare class ImmutableAccountAddressUnlockCondition extends UnlockCondition {
    /**
     * The Immutable Account address.
     */
    readonly address: Address;
    /**
     * @param address The Immutable Account address that owns the output.
     */
    constructor(address: AccountAddress);
}
declare const UnlockConditionDiscriminator: {
    property: string;
    subTypes: ({
        value: typeof AddressUnlockCondition;
        name: any;
    } | {
        value: typeof StorageDepositReturnUnlockCondition;
        name: any;
    } | {
        value: typeof TimelockUnlockCondition;
        name: any;
    } | {
        value: typeof ExpirationUnlockCondition;
        name: any;
    })[];
};
export { UnlockConditionDiscriminator, UnlockCondition, UnlockConditionType, AddressUnlockCondition, StorageDepositReturnUnlockCondition, TimelockUnlockCondition, ExpirationUnlockCondition, StateControllerAddressUnlockCondition, GovernorAddressUnlockCondition, ImmutableAccountAddressUnlockCondition, };
