/**
 * This code was AUTOGENERATED using the codama library.
 * Please DO NOT EDIT THIS FILE, instead use visitors
 * to add features, then rerun codama to update it.
 *
 * @see https://github.com/codama-idl/codama
 */
import { type Address, type Codec, type Decoder, type Encoder, type IAccountMeta, type IAccountSignerMeta, type IInstruction, type IInstructionWithAccounts, type IInstructionWithData, type Option, type OptionOrNullable, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount } from '@solana/web3-v2.js';
import { SVM_SPOKE_PROGRAM_ADDRESS } from '../programs';
import { type SlowFill, type SlowFillArgs } from '../types';
export declare const EXECUTE_SLOW_RELAY_LEAF_DISCRIMINATOR: Uint8Array;
export declare function getExecuteSlowRelayLeafDiscriminatorBytes(): ReadonlyUint8Array;
export type ExecuteSlowRelayLeafInstruction<TProgram extends string = typeof SVM_SPOKE_PROGRAM_ADDRESS, TAccountSigner extends string | IAccountMeta<string> = string, TAccountInstructionParams extends string | IAccountMeta<string> = string, TAccountState extends string | IAccountMeta<string> = string, TAccountRootBundle extends string | IAccountMeta<string> = string, TAccountFillStatus extends string | IAccountMeta<string> = string, TAccountMint extends string | IAccountMeta<string> = string, TAccountRecipientTokenAccount extends string | IAccountMeta<string> = string, TAccountVault extends string | IAccountMeta<string> = string, TAccountTokenProgram extends string | IAccountMeta<string> = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', TAccountSystemProgram extends string | IAccountMeta<string> = '11111111111111111111111111111111', TAccountEventAuthority extends string | IAccountMeta<string> = string, TAccountProgram extends string | IAccountMeta<string> = string, TRemainingAccounts extends readonly IAccountMeta<string>[] = []> = IInstruction<TProgram> & IInstructionWithData<Uint8Array> & IInstructionWithAccounts<[
    TAccountSigner extends string ? ReadonlySignerAccount<TAccountSigner> & IAccountSignerMeta<TAccountSigner> : TAccountSigner,
    TAccountInstructionParams extends string ? WritableAccount<TAccountInstructionParams> : TAccountInstructionParams,
    TAccountState extends string ? ReadonlyAccount<TAccountState> : TAccountState,
    TAccountRootBundle extends string ? ReadonlyAccount<TAccountRootBundle> : TAccountRootBundle,
    TAccountFillStatus extends string ? WritableAccount<TAccountFillStatus> : TAccountFillStatus,
    TAccountMint extends string ? ReadonlyAccount<TAccountMint> : TAccountMint,
    TAccountRecipientTokenAccount extends string ? WritableAccount<TAccountRecipientTokenAccount> : TAccountRecipientTokenAccount,
    TAccountVault extends string ? WritableAccount<TAccountVault> : TAccountVault,
    TAccountTokenProgram extends string ? ReadonlyAccount<TAccountTokenProgram> : TAccountTokenProgram,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    TAccountEventAuthority extends string ? ReadonlyAccount<TAccountEventAuthority> : TAccountEventAuthority,
    TAccountProgram extends string ? ReadonlyAccount<TAccountProgram> : TAccountProgram,
    ...TRemainingAccounts
]>;
export type ExecuteSlowRelayLeafInstructionData = {
    discriminator: ReadonlyUint8Array;
    relayHash: ReadonlyUint8Array;
    slowFillLeaf: Option<SlowFill>;
    rootBundleId: Option<number>;
    proof: Option<Array<ReadonlyUint8Array>>;
};
export type ExecuteSlowRelayLeafInstructionDataArgs = {
    relayHash: ReadonlyUint8Array;
    slowFillLeaf: OptionOrNullable<SlowFillArgs>;
    rootBundleId: OptionOrNullable<number>;
    proof: OptionOrNullable<Array<ReadonlyUint8Array>>;
};
export declare function getExecuteSlowRelayLeafInstructionDataEncoder(): Encoder<ExecuteSlowRelayLeafInstructionDataArgs>;
export declare function getExecuteSlowRelayLeafInstructionDataDecoder(): Decoder<ExecuteSlowRelayLeafInstructionData>;
export declare function getExecuteSlowRelayLeafInstructionDataCodec(): Codec<ExecuteSlowRelayLeafInstructionDataArgs, ExecuteSlowRelayLeafInstructionData>;
export type ExecuteSlowRelayLeafAsyncInput<TAccountSigner extends string = string, TAccountInstructionParams extends string = string, TAccountState extends string = string, TAccountRootBundle extends string = string, TAccountFillStatus extends string = string, TAccountMint extends string = string, TAccountRecipientTokenAccount extends string = string, TAccountVault extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountProgram extends string = string> = {
    signer: TransactionSigner<TAccountSigner>;
    instructionParams?: Address<TAccountInstructionParams>;
    state: Address<TAccountState>;
    rootBundle: Address<TAccountRootBundle>;
    fillStatus?: Address<TAccountFillStatus>;
    mint: Address<TAccountMint>;
    recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;
    vault?: Address<TAccountVault>;
    tokenProgram?: Address<TAccountTokenProgram>;
    systemProgram?: Address<TAccountSystemProgram>;
    eventAuthority?: Address<TAccountEventAuthority>;
    program: Address<TAccountProgram>;
    relayHash: ExecuteSlowRelayLeafInstructionDataArgs['relayHash'];
    slowFillLeaf: ExecuteSlowRelayLeafInstructionDataArgs['slowFillLeaf'];
    rootBundleId: ExecuteSlowRelayLeafInstructionDataArgs['rootBundleId'];
    proof: ExecuteSlowRelayLeafInstructionDataArgs['proof'];
};
export declare function getExecuteSlowRelayLeafInstructionAsync<TAccountSigner extends string, TAccountInstructionParams extends string, TAccountState extends string, TAccountRootBundle extends string, TAccountFillStatus extends string, TAccountMint extends string, TAccountRecipientTokenAccount extends string, TAccountVault extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountProgram extends string, TProgramAddress extends Address = typeof SVM_SPOKE_PROGRAM_ADDRESS>(input: ExecuteSlowRelayLeafAsyncInput<TAccountSigner, TAccountInstructionParams, TAccountState, TAccountRootBundle, TAccountFillStatus, TAccountMint, TAccountRecipientTokenAccount, TAccountVault, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>, config?: {
    programAddress?: TProgramAddress;
}): Promise<ExecuteSlowRelayLeafInstruction<TProgramAddress, TAccountSigner, TAccountInstructionParams, TAccountState, TAccountRootBundle, TAccountFillStatus, TAccountMint, TAccountRecipientTokenAccount, TAccountVault, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>>;
export type ExecuteSlowRelayLeafInput<TAccountSigner extends string = string, TAccountInstructionParams extends string = string, TAccountState extends string = string, TAccountRootBundle extends string = string, TAccountFillStatus extends string = string, TAccountMint extends string = string, TAccountRecipientTokenAccount extends string = string, TAccountVault extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountProgram extends string = string> = {
    signer: TransactionSigner<TAccountSigner>;
    instructionParams?: Address<TAccountInstructionParams>;
    state: Address<TAccountState>;
    rootBundle: Address<TAccountRootBundle>;
    fillStatus: Address<TAccountFillStatus>;
    mint: Address<TAccountMint>;
    recipientTokenAccount: Address<TAccountRecipientTokenAccount>;
    vault: Address<TAccountVault>;
    tokenProgram?: Address<TAccountTokenProgram>;
    systemProgram?: Address<TAccountSystemProgram>;
    eventAuthority: Address<TAccountEventAuthority>;
    program: Address<TAccountProgram>;
    relayHash: ExecuteSlowRelayLeafInstructionDataArgs['relayHash'];
    slowFillLeaf: ExecuteSlowRelayLeafInstructionDataArgs['slowFillLeaf'];
    rootBundleId: ExecuteSlowRelayLeafInstructionDataArgs['rootBundleId'];
    proof: ExecuteSlowRelayLeafInstructionDataArgs['proof'];
};
export declare function getExecuteSlowRelayLeafInstruction<TAccountSigner extends string, TAccountInstructionParams extends string, TAccountState extends string, TAccountRootBundle extends string, TAccountFillStatus extends string, TAccountMint extends string, TAccountRecipientTokenAccount extends string, TAccountVault extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountProgram extends string, TProgramAddress extends Address = typeof SVM_SPOKE_PROGRAM_ADDRESS>(input: ExecuteSlowRelayLeafInput<TAccountSigner, TAccountInstructionParams, TAccountState, TAccountRootBundle, TAccountFillStatus, TAccountMint, TAccountRecipientTokenAccount, TAccountVault, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>, config?: {
    programAddress?: TProgramAddress;
}): ExecuteSlowRelayLeafInstruction<TProgramAddress, TAccountSigner, TAccountInstructionParams, TAccountState, TAccountRootBundle, TAccountFillStatus, TAccountMint, TAccountRecipientTokenAccount, TAccountVault, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>;
export type ParsedExecuteSlowRelayLeafInstruction<TProgram extends string = typeof SVM_SPOKE_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        signer: TAccountMetas[0];
        instructionParams?: TAccountMetas[1] | undefined;
        state: TAccountMetas[2];
        rootBundle: TAccountMetas[3];
        fillStatus: TAccountMetas[4];
        mint: TAccountMetas[5];
        recipientTokenAccount: TAccountMetas[6];
        vault: TAccountMetas[7];
        tokenProgram: TAccountMetas[8];
        systemProgram: TAccountMetas[9];
        eventAuthority: TAccountMetas[10];
        program: TAccountMetas[11];
    };
    data: ExecuteSlowRelayLeafInstructionData;
};
export declare function parseExecuteSlowRelayLeafInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>): ParsedExecuteSlowRelayLeafInstruction<TProgram, TAccountMetas>;
