/**
 * 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 ReadonlyUint8Array, type TransactionSigner, type WritableAccount, type WritableSignerAccount } from '@solana/web3-v2.js';
import { SVM_SPOKE_PROGRAM_ADDRESS } from '../programs';
import { type RelayData, type RelayDataArgs } from '../types';
export declare const FILL_RELAY_DISCRIMINATOR: Uint8Array;
export declare function getFillRelayDiscriminatorBytes(): ReadonlyUint8Array;
export type FillRelayInstruction<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, TAccountMint extends string | IAccountMeta<string> = string, TAccountRelayerTokenAccount extends string | IAccountMeta<string> = string, TAccountRecipientTokenAccount extends string | IAccountMeta<string> = string, TAccountFillStatus extends string | IAccountMeta<string> = string, TAccountTokenProgram extends string | IAccountMeta<string> = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', TAccountAssociatedTokenProgram extends string | IAccountMeta<string> = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', 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 ? WritableSignerAccount<TAccountSigner> & IAccountSignerMeta<TAccountSigner> : TAccountSigner,
    TAccountInstructionParams extends string ? WritableAccount<TAccountInstructionParams> : TAccountInstructionParams,
    TAccountState extends string ? ReadonlyAccount<TAccountState> : TAccountState,
    TAccountMint extends string ? ReadonlyAccount<TAccountMint> : TAccountMint,
    TAccountRelayerTokenAccount extends string ? WritableAccount<TAccountRelayerTokenAccount> : TAccountRelayerTokenAccount,
    TAccountRecipientTokenAccount extends string ? WritableAccount<TAccountRecipientTokenAccount> : TAccountRecipientTokenAccount,
    TAccountFillStatus extends string ? WritableAccount<TAccountFillStatus> : TAccountFillStatus,
    TAccountTokenProgram extends string ? ReadonlyAccount<TAccountTokenProgram> : TAccountTokenProgram,
    TAccountAssociatedTokenProgram extends string ? ReadonlyAccount<TAccountAssociatedTokenProgram> : TAccountAssociatedTokenProgram,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    TAccountEventAuthority extends string ? ReadonlyAccount<TAccountEventAuthority> : TAccountEventAuthority,
    TAccountProgram extends string ? ReadonlyAccount<TAccountProgram> : TAccountProgram,
    ...TRemainingAccounts
]>;
export type FillRelayInstructionData = {
    discriminator: ReadonlyUint8Array;
    relayHash: ReadonlyUint8Array;
    relayData: Option<RelayData>;
    repaymentChainId: Option<bigint>;
    repaymentAddress: Option<Address>;
};
export type FillRelayInstructionDataArgs = {
    relayHash: ReadonlyUint8Array;
    relayData: OptionOrNullable<RelayDataArgs>;
    repaymentChainId: OptionOrNullable<number | bigint>;
    repaymentAddress: OptionOrNullable<Address>;
};
export declare function getFillRelayInstructionDataEncoder(): Encoder<FillRelayInstructionDataArgs>;
export declare function getFillRelayInstructionDataDecoder(): Decoder<FillRelayInstructionData>;
export declare function getFillRelayInstructionDataCodec(): Codec<FillRelayInstructionDataArgs, FillRelayInstructionData>;
export type FillRelayAsyncInput<TAccountSigner extends string = string, TAccountInstructionParams extends string = string, TAccountState extends string = string, TAccountMint extends string = string, TAccountRelayerTokenAccount extends string = string, TAccountRecipientTokenAccount extends string = string, TAccountFillStatus extends string = string, TAccountTokenProgram extends string = string, TAccountAssociatedTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountProgram extends string = string> = {
    signer: TransactionSigner<TAccountSigner>;
    instructionParams?: Address<TAccountInstructionParams>;
    state: Address<TAccountState>;
    mint: Address<TAccountMint>;
    relayerTokenAccount: Address<TAccountRelayerTokenAccount>;
    recipientTokenAccount?: Address<TAccountRecipientTokenAccount>;
    fillStatus?: Address<TAccountFillStatus>;
    tokenProgram?: Address<TAccountTokenProgram>;
    associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;
    systemProgram?: Address<TAccountSystemProgram>;
    eventAuthority?: Address<TAccountEventAuthority>;
    program: Address<TAccountProgram>;
    relayHash: FillRelayInstructionDataArgs['relayHash'];
    relayData: FillRelayInstructionDataArgs['relayData'];
    repaymentChainId: FillRelayInstructionDataArgs['repaymentChainId'];
    repaymentAddress: FillRelayInstructionDataArgs['repaymentAddress'];
};
export declare function getFillRelayInstructionAsync<TAccountSigner extends string, TAccountInstructionParams extends string, TAccountState extends string, TAccountMint extends string, TAccountRelayerTokenAccount extends string, TAccountRecipientTokenAccount extends string, TAccountFillStatus extends string, TAccountTokenProgram extends string, TAccountAssociatedTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountProgram extends string, TProgramAddress extends Address = typeof SVM_SPOKE_PROGRAM_ADDRESS>(input: FillRelayAsyncInput<TAccountSigner, TAccountInstructionParams, TAccountState, TAccountMint, TAccountRelayerTokenAccount, TAccountRecipientTokenAccount, TAccountFillStatus, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>, config?: {
    programAddress?: TProgramAddress;
}): Promise<FillRelayInstruction<TProgramAddress, TAccountSigner, TAccountInstructionParams, TAccountState, TAccountMint, TAccountRelayerTokenAccount, TAccountRecipientTokenAccount, TAccountFillStatus, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>>;
export type FillRelayInput<TAccountSigner extends string = string, TAccountInstructionParams extends string = string, TAccountState extends string = string, TAccountMint extends string = string, TAccountRelayerTokenAccount extends string = string, TAccountRecipientTokenAccount extends string = string, TAccountFillStatus extends string = string, TAccountTokenProgram extends string = string, TAccountAssociatedTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountProgram extends string = string> = {
    signer: TransactionSigner<TAccountSigner>;
    instructionParams?: Address<TAccountInstructionParams>;
    state: Address<TAccountState>;
    mint: Address<TAccountMint>;
    relayerTokenAccount: Address<TAccountRelayerTokenAccount>;
    recipientTokenAccount: Address<TAccountRecipientTokenAccount>;
    fillStatus: Address<TAccountFillStatus>;
    tokenProgram?: Address<TAccountTokenProgram>;
    associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;
    systemProgram?: Address<TAccountSystemProgram>;
    eventAuthority: Address<TAccountEventAuthority>;
    program: Address<TAccountProgram>;
    relayHash: FillRelayInstructionDataArgs['relayHash'];
    relayData: FillRelayInstructionDataArgs['relayData'];
    repaymentChainId: FillRelayInstructionDataArgs['repaymentChainId'];
    repaymentAddress: FillRelayInstructionDataArgs['repaymentAddress'];
};
export declare function getFillRelayInstruction<TAccountSigner extends string, TAccountInstructionParams extends string, TAccountState extends string, TAccountMint extends string, TAccountRelayerTokenAccount extends string, TAccountRecipientTokenAccount extends string, TAccountFillStatus extends string, TAccountTokenProgram extends string, TAccountAssociatedTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountProgram extends string, TProgramAddress extends Address = typeof SVM_SPOKE_PROGRAM_ADDRESS>(input: FillRelayInput<TAccountSigner, TAccountInstructionParams, TAccountState, TAccountMint, TAccountRelayerTokenAccount, TAccountRecipientTokenAccount, TAccountFillStatus, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>, config?: {
    programAddress?: TProgramAddress;
}): FillRelayInstruction<TProgramAddress, TAccountSigner, TAccountInstructionParams, TAccountState, TAccountMint, TAccountRelayerTokenAccount, TAccountRecipientTokenAccount, TAccountFillStatus, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountProgram>;
export type ParsedFillRelayInstruction<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];
        mint: TAccountMetas[3];
        relayerTokenAccount: TAccountMetas[4];
        recipientTokenAccount: TAccountMetas[5];
        fillStatus: TAccountMetas[6];
        tokenProgram: TAccountMetas[7];
        associatedTokenProgram: TAccountMetas[8];
        systemProgram: TAccountMetas[9];
        eventAuthority: TAccountMetas[10];
        program: TAccountMetas[11];
    };
    data: FillRelayInstructionData;
};
export declare function parseFillRelayInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>): ParsedFillRelayInstruction<TProgram, TAccountMetas>;
