import type { Address, ReadonlyUint8Array } from '@solana/kit';
import { type ByteCursor } from './binary.js';
export type H160 = Uint8Array;
export type H256 = Uint8Array;
export interface RemoteRouterConfig {
    domain: number;
    router: H256 | null;
}
export interface GasRouterConfig {
    domain: number;
    gas: bigint | null;
}
export interface VerifyInstruction {
    metadata: Uint8Array;
    message: Uint8Array;
}
export interface HandleInstruction {
    origin: number;
    sender: H256;
    message: Uint8Array;
}
export interface ValidatorsAndThreshold {
    validators: H160[];
    threshold: number;
}
export interface Domained<T> {
    domain: number;
    data: T;
}
export declare enum InterchainGasPaymasterTypeKind {
    Igp = 0,
    OverheadIgp = 1
}
export interface InterchainGasPaymasterType {
    kind: InterchainGasPaymasterTypeKind;
    account: Address;
}
export interface RemoteGasData {
    tokenExchangeRate: bigint;
    gasPrice: bigint;
    tokenDecimals: number;
}
export interface GasOracleRemoteGasData {
    kind: 0;
    value: RemoteGasData;
}
export type GasOracle = GasOracleRemoteGasData;
export interface GasOverheadConfig {
    destinationDomain: number;
    gasOverhead: bigint | null;
}
export interface GasOracleConfig {
    domain: number;
    gasOracle: GasOracle | null;
}
export declare function encodeH160(value: string | ReadonlyUint8Array): ReadonlyUint8Array;
export declare function encodeH256(value: string | ReadonlyUint8Array): ReadonlyUint8Array;
export declare function decodeH160(cursor: ByteCursor): H160;
export declare function decodeH256(cursor: ByteCursor): H256;
export declare function encodeVerifyInstruction(value: VerifyInstruction): Uint8Array;
export declare function decodeVerifyInstruction(cursor: ByteCursor): VerifyInstruction;
export declare function encodeHandleInstruction(value: HandleInstruction): Uint8Array;
export declare function decodeHandleInstruction(cursor: ByteCursor): HandleInstruction;
export declare function encodeRemoteRouterConfig(value: RemoteRouterConfig): Uint8Array;
export declare function encodeGasRouterConfig(value: GasRouterConfig): Uint8Array;
export declare function encodeValidatorsAndThreshold(value: ValidatorsAndThreshold): Uint8Array;
export declare function decodeValidatorsAndThreshold(cursor: ByteCursor): ValidatorsAndThreshold;
export declare function encodeDomainedValidatorsAndThreshold(value: Domained<ValidatorsAndThreshold>): Uint8Array;
export declare function decodeDomainedValidatorsAndThreshold(cursor: ByteCursor): Domained<ValidatorsAndThreshold>;
export declare function encodeInterchainGasPaymasterType(value: InterchainGasPaymasterType): Uint8Array;
export declare function decodeInterchainGasPaymasterType(cursor: ByteCursor): InterchainGasPaymasterType;
export declare function encodeGasOracle(value: GasOracle): Uint8Array;
export declare function decodeGasOracle(cursor: ByteCursor): GasOracle;
export declare function encodeGasOverheadConfig(value: GasOverheadConfig): Uint8Array;
export declare function encodeGasOracleConfig(value: GasOracleConfig): Uint8Array;
export declare function decodeMapU32U64(cursor: ByteCursor): Map<number, bigint>;
export declare function decodeMapU32H256(cursor: ByteCursor): Map<number, H256>;
export declare function decodeMapU32VecH256(cursor: ByteCursor): Map<number, Uint8Array[]>;
export declare function decodeMapU32GasOracle(cursor: ByteCursor): Map<number, GasOracle>;
export declare function encodeMapU32H256(entries: Map<number, H256>): ReadonlyUint8Array;
export declare function encodeMapU32U64(entries: Map<number, bigint>): ReadonlyUint8Array;
//# sourceMappingURL=shared.d.ts.map