import type { Address, Instruction, ReadonlyUint8Array, TransactionSigner } from '@solana/kit';
import { type GasRouterConfig, type H256, type InterchainGasPaymasterType, type RemoteRouterConfig } from '../codecs/shared.js';
import { type InstructionAccountMeta } from './utils.js';
export declare enum TokenProgramInstructionKind {
    Init = 0,
    TransferRemote = 1,
    EnrollRemoteRouter = 2,
    EnrollRemoteRouters = 3,
    SetDestinationGasConfigs = 4,
    SetInterchainSecurityModule = 5,
    SetInterchainGasPaymaster = 6,
    TransferOwnership = 7
}
export interface TokenInitInstructionData {
    mailbox: Address;
    interchainSecurityModule: Address | null;
    interchainGasPaymaster: {
        programId: Address;
        igp: InterchainGasPaymasterType;
    } | null;
    decimals: number;
    remoteDecimals: number;
}
export interface TransferRemoteInstructionData {
    destinationDomain: number;
    recipient: H256;
    amountOrId: bigint;
}
export type TokenProgramInstructionData = {
    kind: 'init';
    value: TokenInitInstructionData;
} | {
    kind: 'transferRemote';
    value: TransferRemoteInstructionData;
} | {
    kind: 'enrollRemoteRouter';
    value: RemoteRouterConfig;
} | {
    kind: 'enrollRemoteRouters';
    value: RemoteRouterConfig[];
} | {
    kind: 'setDestinationGasConfigs';
    value: GasRouterConfig[];
} | {
    kind: 'setInterchainSecurityModule';
    value: Address | null;
} | {
    kind: 'setInterchainGasPaymaster';
    value: [Address, InterchainGasPaymasterType] | null;
} | {
    kind: 'transferOwnership';
    value: Address | null;
};
export declare function encodeTokenProgramInstruction(instruction: TokenProgramInstructionData): ReadonlyUint8Array;
export declare function decodeTokenProgramInstruction(data: Uint8Array): TokenProgramInstructionData | null;
export declare function getTokenInitInstruction(programAddress: Address, payer: TransactionSigner, init: TokenInitInstructionData, pluginAccounts: InstructionAccountMeta[]): Promise<Instruction>;
export declare function getTokenTransferOwnershipInstruction(programAddress: Address, owner: Address, newOwner: Address | null): Promise<Instruction>;
export declare function getTokenSetInterchainSecurityModuleInstruction(programAddress: Address, owner: Address, newIsm: Address | null): Promise<Instruction>;
export declare function getTokenSetInterchainGasPaymasterInstruction(programAddress: Address, owner: Address, value: [Address, InterchainGasPaymasterType] | null): Promise<Instruction>;
export declare function getTokenEnrollRemoteRoutersInstruction(programAddress: Address, owner: Address, routers: RemoteRouterConfig[]): Promise<Instruction>;
export declare function getTokenSetDestinationGasConfigsInstruction(programAddress: Address, owner: Address, gasConfigs: GasRouterConfig[]): Promise<Instruction>;
export declare function encodeTokenInit(value: TokenInitInstructionData): Uint8Array;
//# sourceMappingURL=token.d.ts.map