import { type AccountMeta, type AccountSignerMeta, type Address, type Codec, type Decoder, type Encoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, type WritableSignerAccount } from "@solana/kit";
import { MESSAGE_TRANSMITTER_PROGRAM_ADDRESS } from "../programs";
export declare const SEND_MESSAGE_WITH_CALLER_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
export declare function getSendMessageWithCallerDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
export type SendMessageWithCallerInstruction<TProgram extends string = typeof MESSAGE_TRANSMITTER_PROGRAM_ADDRESS, TAccountEventRentPayer extends string | AccountMeta<string> = string, TAccountSenderAuthorityPda extends string | AccountMeta<string> = string, TAccountMessageTransmitter extends string | AccountMeta<string> = string, TAccountMessageSentEventData extends string | AccountMeta<string> = string, TAccountSenderProgram extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[
    TAccountEventRentPayer extends string ? WritableSignerAccount<TAccountEventRentPayer> & AccountSignerMeta<TAccountEventRentPayer> : TAccountEventRentPayer,
    TAccountSenderAuthorityPda extends string ? ReadonlySignerAccount<TAccountSenderAuthorityPda> & AccountSignerMeta<TAccountSenderAuthorityPda> : TAccountSenderAuthorityPda,
    TAccountMessageTransmitter extends string ? WritableAccount<TAccountMessageTransmitter> : TAccountMessageTransmitter,
    TAccountMessageSentEventData extends string ? WritableSignerAccount<TAccountMessageSentEventData> & AccountSignerMeta<TAccountMessageSentEventData> : TAccountMessageSentEventData,
    TAccountSenderProgram extends string ? ReadonlyAccount<TAccountSenderProgram> : TAccountSenderProgram,
    TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
    ...TRemainingAccounts
]>;
export type SendMessageWithCallerInstructionData = {
    discriminator: ReadonlyUint8Array;
    destinationDomain: number;
    recipient: Address;
    messageBody: ReadonlyUint8Array;
    destinationCaller: Address;
};
export type SendMessageWithCallerInstructionDataArgs = {
    destinationDomain: number;
    recipient: Address;
    messageBody: ReadonlyUint8Array;
    destinationCaller: Address;
};
export declare function getSendMessageWithCallerInstructionDataEncoder(): Encoder<SendMessageWithCallerInstructionDataArgs>;
export declare function getSendMessageWithCallerInstructionDataDecoder(): Decoder<SendMessageWithCallerInstructionData>;
export declare function getSendMessageWithCallerInstructionDataCodec(): Codec<SendMessageWithCallerInstructionDataArgs, SendMessageWithCallerInstructionData>;
export type SendMessageWithCallerInput<TAccountEventRentPayer extends string = string, TAccountSenderAuthorityPda extends string = string, TAccountMessageTransmitter extends string = string, TAccountMessageSentEventData extends string = string, TAccountSenderProgram extends string = string, TAccountSystemProgram extends string = string> = {
    eventRentPayer: TransactionSigner<TAccountEventRentPayer>;
    senderAuthorityPda: TransactionSigner<TAccountSenderAuthorityPda>;
    messageTransmitter: Address<TAccountMessageTransmitter>;
    messageSentEventData: TransactionSigner<TAccountMessageSentEventData>;
    senderProgram: Address<TAccountSenderProgram>;
    systemProgram?: Address<TAccountSystemProgram>;
    destinationDomain: SendMessageWithCallerInstructionDataArgs["destinationDomain"];
    recipient: SendMessageWithCallerInstructionDataArgs["recipient"];
    messageBody: SendMessageWithCallerInstructionDataArgs["messageBody"];
    destinationCaller: SendMessageWithCallerInstructionDataArgs["destinationCaller"];
};
export declare function getSendMessageWithCallerInstruction<TAccountEventRentPayer extends string, TAccountSenderAuthorityPda extends string, TAccountMessageTransmitter extends string, TAccountMessageSentEventData extends string, TAccountSenderProgram extends string, TAccountSystemProgram extends string, TProgramAddress extends Address = typeof MESSAGE_TRANSMITTER_PROGRAM_ADDRESS>(input: SendMessageWithCallerInput<TAccountEventRentPayer, TAccountSenderAuthorityPda, TAccountMessageTransmitter, TAccountMessageSentEventData, TAccountSenderProgram, TAccountSystemProgram>, config?: {
    programAddress?: TProgramAddress;
}): SendMessageWithCallerInstruction<TProgramAddress, TAccountEventRentPayer, TAccountSenderAuthorityPda, TAccountMessageTransmitter, TAccountMessageSentEventData, TAccountSenderProgram, TAccountSystemProgram>;
export type ParsedSendMessageWithCallerInstruction<TProgram extends string = typeof MESSAGE_TRANSMITTER_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        eventRentPayer: TAccountMetas[0];
        senderAuthorityPda: TAccountMetas[1];
        messageTransmitter: TAccountMetas[2];
        messageSentEventData: TAccountMetas[3];
        senderProgram: TAccountMetas[4];
        systemProgram: TAccountMetas[5];
    };
    data: SendMessageWithCallerInstructionData;
};
export declare function parseSendMessageWithCallerInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedSendMessageWithCallerInstruction<TProgram, TAccountMetas>;
