import { Address, Codec, Decoder, Encoder, IAccountMeta, IAccountSignerMeta, IInstruction, IInstructionWithAccounts, IInstructionWithData, ReadonlyAccount, TransactionSigner, WritableAccount, WritableSignerAccount } from '@solana/kit';
import { WAVEBREAK_PROGRAM_ADDRESS } from '../programs';
import { PermissionMessage, PermissionMessageArgs, PermissionSignature, PermissionSignatureArgs } from '../types';
export declare const PERMISSION_CONSUME_TOP_LEVEL_DISCRIMINATOR = 0;
export declare function getPermissionConsumeTopLevelDiscriminatorBytes(): import('@solana/kit').ReadonlyUint8Array;
export type PermissionConsumeTopLevelInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountConsumer extends string | IAccountMeta<string> = string, TAccountPermissionConfig extends string | IAccountMeta<string> = string, TAccountConsumedPermission extends string | IAccountMeta<string> = string, TAccountSystemProgram extends string | IAccountMeta<string> = "11111111111111111111111111111111", TAccountInstructions extends string | IAccountMeta<string> = string, TRemainingAccounts extends readonly IAccountMeta<string>[] = []> = IInstruction<TProgram> & IInstructionWithData<Uint8Array> & IInstructionWithAccounts<[
    TAccountConsumer extends string ? WritableSignerAccount<TAccountConsumer> & IAccountSignerMeta<TAccountConsumer> : TAccountConsumer,
    TAccountPermissionConfig extends string ? WritableAccount<TAccountPermissionConfig> : TAccountPermissionConfig,
    TAccountConsumedPermission extends string ? WritableAccount<TAccountConsumedPermission> : TAccountConsumedPermission,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    TAccountInstructions extends string ? ReadonlyAccount<TAccountInstructions> : TAccountInstructions,
    ...TRemainingAccounts
]>;
export type PermissionConsumeTopLevelInstructionData = {
    discriminator: number;
    permissionMessage: PermissionMessage;
    permissionSignature: PermissionSignature;
};
export type PermissionConsumeTopLevelInstructionDataArgs = {
    permissionMessage: PermissionMessageArgs;
    permissionSignature: PermissionSignatureArgs;
};
export declare function getPermissionConsumeTopLevelInstructionDataEncoder(): Encoder<PermissionConsumeTopLevelInstructionDataArgs>;
export declare function getPermissionConsumeTopLevelInstructionDataDecoder(): Decoder<PermissionConsumeTopLevelInstructionData>;
export declare function getPermissionConsumeTopLevelInstructionDataCodec(): Codec<PermissionConsumeTopLevelInstructionDataArgs, PermissionConsumeTopLevelInstructionData>;
export type PermissionConsumeTopLevelInput<TAccountConsumer extends string = string, TAccountPermissionConfig extends string = string, TAccountConsumedPermission extends string = string, TAccountSystemProgram extends string = string, TAccountInstructions extends string = string> = {
    consumer: TransactionSigner<TAccountConsumer>;
    permissionConfig: Address<TAccountPermissionConfig>;
    consumedPermission: Address<TAccountConsumedPermission>;
    systemProgram?: Address<TAccountSystemProgram>;
    instructions: Address<TAccountInstructions>;
    permissionMessage: PermissionConsumeTopLevelInstructionDataArgs["permissionMessage"];
    permissionSignature: PermissionConsumeTopLevelInstructionDataArgs["permissionSignature"];
};
export declare function getPermissionConsumeTopLevelInstruction<TAccountConsumer extends string, TAccountPermissionConfig extends string, TAccountConsumedPermission extends string, TAccountSystemProgram extends string, TAccountInstructions extends string, TProgramAddress extends Address = typeof WAVEBREAK_PROGRAM_ADDRESS>(input: PermissionConsumeTopLevelInput<TAccountConsumer, TAccountPermissionConfig, TAccountConsumedPermission, TAccountSystemProgram, TAccountInstructions>, config?: {
    programAddress?: TProgramAddress;
}): PermissionConsumeTopLevelInstruction<TProgramAddress, TAccountConsumer, TAccountPermissionConfig, TAccountConsumedPermission, TAccountSystemProgram, TAccountInstructions>;
export type ParsedPermissionConsumeTopLevelInstruction<TProgram extends string = typeof WAVEBREAK_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        consumer: TAccountMetas[0];
        permissionConfig: TAccountMetas[1];
        consumedPermission: TAccountMetas[2];
        systemProgram: TAccountMetas[3];
        instructions: TAccountMetas[4];
    };
    data: PermissionConsumeTopLevelInstructionData;
};
export declare function parsePermissionConsumeTopLevelInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>): ParsedPermissionConsumeTopLevelInstruction<TProgram, TAccountMetas>;
