import type { ProperLayout, CustomizableBytes, Item } from "binary-layout";
import { rawDomainItem, domainItem } from "./layoutItems.js";
import { domains } from "./constants/chains/index.js";
type DomainItem<R extends boolean> = R extends true ? typeof rawDomainItem : ReturnType<typeof domainItem<typeof domains>>;
export declare const messageLayoutTemplate: <const V extends number, const N extends Item, const E extends ProperLayout, const B extends CustomizableBytes = undefined, const R extends boolean = false, const O extends boolean = true>(version: V, nonceItem: N, extraFields: E, messageBody?: B, useRawDomains?: R, omitVersion?: O) => readonly [{
    readonly binary: "uint";
    readonly size: 4;
    readonly custom: V;
    readonly omit: O;
    readonly name: "version";
}, {
    readonly name: "sourceDomain";
} & DomainItem<R>, {
    readonly name: "destinationDomain";
} & DomainItem<R>, {
    readonly name: "nonce";
} & N, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "sender";
}, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "recipient";
}, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "destinationCaller";
}, ...E, import("binary-layout").CustomizableBytesReturn<{
    readonly name: "messageBody";
}, B>];
export declare const burnMessageLayoutTemplate: <const V extends number, const O extends boolean>(version: V, omitVersion?: O) => readonly [{
    readonly binary: "uint";
    readonly size: 4;
    readonly custom: V;
    readonly omit: O;
    readonly name: "messageBodyVersion";
}, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "burnToken";
}, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "mintRecipient";
}, {
    readonly binary: "uint";
    readonly size: 32;
    readonly custom: {
        to: (val: bigint) => import("@stable-io/amount").Amount<{
            readonly name: "Usdc";
            readonly units: readonly [{
                readonly symbol: "USDC";
                readonly scale: 1;
            }, {
                readonly symbol: "µUSDC";
                readonly scale: bigint | import("@stable-io/amount").Rational;
            }];
            readonly human: "USDC";
            readonly atomic: "µUSDC";
            readonly stringify: (val: import("@stable-io/amount").Rational) => string;
        }>;
        from: (amount: import("@stable-io/amount").Amount<{
            readonly name: "Usdc";
            readonly units: readonly [{
                readonly symbol: "USDC";
                readonly scale: 1;
            }, {
                readonly symbol: "µUSDC";
                readonly scale: bigint | import("@stable-io/amount").Rational;
            }];
            readonly human: "USDC";
            readonly atomic: "µUSDC";
            readonly stringify: (val: import("@stable-io/amount").Rational) => string;
        }>) => bigint;
    };
    readonly name: "amount";
}, {
    readonly binary: "bytes";
    readonly size: import("@stable-io/utils").Size;
    readonly custom: {
        to: (encoded: Uint8Array) => import("./address.js").UniversalAddress;
        from: (addr: import("./address.js").UniversalAddress) => Uint8Array<ArrayBufferLike>;
    };
    readonly name: "messageSender";
}];
export {};
//# sourceMappingURL=messages.d.ts.map