import { AccountKeysFromLookups, AddressLookupTableAccount, Blockhash, TransactionInstruction } from '../config/types';
import { MessageHeader, MessageAddressTableLookup, MessageCompiledInstruction } from './index';
import { PublicKey } from '../utils/publickey';
/**
 * Message constructor arguments
 */
export declare type MessageV0Args = {
    /** The message header, identifying signed and read-only `accountKeys` */
    header: MessageHeader;
    /** The static account keys used by this transaction */
    staticAccountKeys: PublicKey[];
    /** The hash of a recent ledger block */
    recentBlockhash: Blockhash;
    /** Instructions that will be executed in sequence and committed in one atomic transaction if all succeed. */
    compiledInstructions: MessageCompiledInstruction[];
    /** Instructions that will be executed in sequence and committed in one atomic transaction if all succeed. */
    addressTableLookups: MessageAddressTableLookup[];
};
export declare type CompileV0Args = {
    payerKey: PublicKey;
    instructions: Array<TransactionInstruction>;
    recentBlockhash: Blockhash;
    addressLookupTableAccounts?: Array<AddressLookupTableAccount>;
};
export declare type GetAccountKeysArgs = {
    accountKeysFromLookups?: AccountKeysFromLookups | null;
} | {
    addressLookupTableAccounts?: AddressLookupTableAccount[] | null;
};
export declare class MessageV0 {
    header: MessageHeader;
    staticAccountKeys: Array<PublicKey>;
    recentBlockhash: Blockhash;
    compiledInstructions: Array<MessageCompiledInstruction>;
    addressTableLookups: Array<MessageAddressTableLookup>;
    constructor(args: MessageV0Args);
    get version(): 0;
    get numAccountKeysFromLookups(): number;
    isAccountSigner(index: number): boolean;
    isAccountWritable(index: number): boolean;
    serialize(): Uint8Array;
    private serializeInstructions;
    private serializeAddressTableLookups;
    static deserialize(serializedMessage: Uint8Array): MessageV0;
}
