import { PublicKey } from '@solana/web3.js';
import { Domain } from '@hyperlane-xyz/utils';
import { SealevelInterchainGasPaymasterConfig } from '../../gas/adapters/serialization.js';
/**
 * Hyperlane Token Borsh Schema
 */
export declare class SealevelHyperlaneTokenData {
    readonly fields: any;
    bump: number;
    mailbox: Uint8Array;
    mailbox_pubkey: PublicKey;
    mailbox_process_authority: Uint8Array;
    mailbox_process_authority_pubkey: PublicKey;
    dispatch_authority_bump: number;
    decimals: number;
    remote_decimals: number;
    owner?: Uint8Array;
    owner_pub_key?: PublicKey;
    interchain_security_module?: Uint8Array;
    interchain_security_module_pubkey?: PublicKey;
    interchain_gas_paymaster?: SealevelInterchainGasPaymasterConfig;
    interchain_gas_paymaster_pubkey?: PublicKey;
    interchain_gas_paymaster_account_pubkey?: PublicKey;
    destination_gas?: Map<Domain, bigint>;
    remote_routers?: Map<Domain, Uint8Array>;
    remote_router_pubkeys: Map<Domain, PublicKey>;
    constructor(fields: any);
}
export declare const SealevelHyperlaneTokenDataSchema: Map<any, any>;
/**
 * Transfer Remote Borsh Schema
 */
export declare enum SealevelHypTokenInstruction {
    Init = 0,
    TransferRemote = 1,
    EnrollRemoteRouter = 2,
    EnrollRemoteRouters = 3,
    SetDestinationGasConfigs = 4,
    SetInterchainSecurityModule = 5,
    SetInterchainGasPaymaster = 6,
    TransferOwnership = 7
}
/**
 * Human-readable names for Hyperlane Token instructions
 */
export declare const SealevelHypTokenInstructionName: Record<SealevelHypTokenInstruction, string>;
export declare class SealevelTransferRemoteInstruction {
    readonly fields: any;
    destination_domain: number;
    recipient: Uint8Array;
    recipient_pubkey: PublicKey;
    amount_or_id: number;
    constructor(fields: any);
}
export declare const SealevelTransferRemoteSchema: Map<any, any>;
export declare enum SealevelCCInstructionKind {
    SetCrossCollateralRouters = 0,
    TransferRemoteTo = 1,
    HandleLocal = 2,
    HandleLocalAccountMetas = 3
}
export declare class SealevelCCTransferRemoteToInstruction {
    readonly fields: any;
    destination_domain: number;
    recipient: Uint8Array;
    amount_or_id: bigint;
    target_router: Uint8Array;
    constructor(fields: any);
}
export declare const SealevelCCTransferRemoteToSchema: Map<any, any>;
export declare class SealevelCCHandleLocalInstruction {
    readonly fields: any;
    sender_program_id: Uint8Array;
    message: Uint8Array;
    constructor(fields: any);
}
export declare const SealevelCCHandleLocalSchema: Map<any, any>;
/**
 * Encodes a TokenMessage matching the Rust `hyperlane_warp_route::TokenMessage`.
 * Layout: recipient (32 bytes) + amount (32 bytes, big-endian U256) + metadata (variable).
 */
export declare function encodeTokenMessage(recipient: Uint8Array, amount: bigint, metadata?: Uint8Array): Buffer;
/**
 * RemoteRouterConfig - Configuration for a remote router
 * Matches: rust/sealevel/libraries/hyperlane-sealevel-connection-client/src/router.rs
 */
export declare class SealevelRemoteRouterConfig {
    domain: number;
    router: Uint8Array | null;
    get routerAddress(): string | null;
    constructor(fields: any);
}
export declare const SealevelRemoteRouterConfigSchema: {
    kind: "struct";
    fields: (string | {
        kind: "option";
        type: number[];
    })[][];
};
/**
 * GasRouterConfig - Configuration for destination gas
 * Matches: rust/sealevel/libraries/hyperlane-sealevel-connection-client/src/gas_router.rs
 */
export declare class SealevelGasRouterConfig {
    domain: number;
    gas: bigint | null;
    constructor(fields: any);
}
export declare const SealevelGasRouterConfigSchema: {
    kind: "struct";
    fields: (string | {
        kind: "option";
        type: string;
    })[][];
};
/**
 * EnrollRemoteRouter instruction data
 * Matches: EnrollRemoteRouter(RemoteRouterConfig)
 */
export declare class SealevelEnrollRemoteRouterInstruction {
    config: SealevelRemoteRouterConfig;
    constructor(fields: any);
}
export declare const SealevelEnrollRemoteRouterInstructionSchema: Map<any, any>;
/**
 * EnrollRemoteRouters instruction data
 * Matches: EnrollRemoteRouters(Vec<RemoteRouterConfig>)
 */
export declare class SealevelEnrollRemoteRoutersInstruction {
    configs: SealevelRemoteRouterConfig[];
    constructor(fields: any);
}
export declare const SealevelEnrollRemoteRoutersInstructionSchema: Map<any, any>;
/**
 * SetDestinationGasConfigs instruction data
 * Matches: SetDestinationGasConfigs(Vec<GasRouterConfig>)
 */
export declare class SealevelSetDestinationGasConfigsInstruction {
    configs: SealevelGasRouterConfig[];
    constructor(fields: any);
}
export declare const SealevelSetDestinationGasConfigsInstructionSchema: Map<any, any>;
/**
 * SetInterchainSecurityModule instruction data
 * Matches: SetInterchainSecurityModule(Option<Pubkey>)
 */
export declare class SealevelSetInterchainSecurityModuleInstruction {
    ism: Uint8Array | null;
    ismPubkey?: PublicKey;
    constructor(fields: any);
}
export declare const SealevelSetInterchainSecurityModuleInstructionSchema: Map<any, any>;
/**
 * InterchainGasPaymasterType with inner Pubkey for instruction serialization
 * This represents the tuple (Pubkey, InterchainGasPaymasterType) in Rust
 * Matches: rust/sealevel/programs/hyperlane-sealevel-igp/src/accounts.rs
 *
 * Note: The Rust enum InterchainGasPaymasterType has variants:
 *   Igp(Pubkey) = 0
 *   OverheadIgp(Pubkey) = 1
 * But in the warp route instruction, it's serialized as Option<(Pubkey, InterchainGasPaymasterType)>
 * where InterchainGasPaymasterType becomes (u8 discriminator, Pubkey)
 */
export declare class SealevelIgpConfig {
    programId: Uint8Array;
    igpType: number;
    igpAccount: Uint8Array;
    programIdPubkey?: PublicKey;
    igpAccountPubkey?: PublicKey;
    get igpTypeName(): string;
    constructor(fields: any);
}
export declare const SealevelIgpConfigSchema: {
    kind: "struct";
    fields: (string | number[])[][];
};
/**
 * SetInterchainGasPaymaster instruction data
 * Matches: SetInterchainGasPaymaster(Option<(Pubkey, InterchainGasPaymasterType)>)
 */
export declare class SealevelSetInterchainGasPaymasterInstruction {
    igpConfig: SealevelIgpConfig | null;
    constructor(fields: any);
}
export declare const SealevelSetInterchainGasPaymasterInstructionSchema: Map<any, any>;
/**
 * TransferOwnership instruction data for warp routes
 * Matches: TransferOwnership(Option<Pubkey>)
 */
export declare class SealevelHypTokenTransferOwnershipInstruction {
    newOwner: Uint8Array | null;
    newOwnerPubkey?: PublicKey;
    constructor(fields: any);
}
export declare const SealevelHypTokenTransferOwnershipInstructionSchema: Map<any, any>;
//# sourceMappingURL=serialization.d.ts.map