/**
 * Branded types for domain-specific values to prevent mixing incompatible units
 *
 * These types provide compile-time safety to ensure we don't accidentally
 * use Bitcoin satoshis where UCD is expected, or vice versa.
 *
 * @example
 * ```typescript
 * const debt: UCD = UCD(1000000n);
 * const balance: Satoshis = Satoshis(50000000n);
 *
 * // This will cause a TypeScript error:
 * await mintUCD(balance); // Error: Cannot use Satoshis where UCD expected
 * ```
 */
declare const __brand: unique symbol;
/**
 * UCD (USD Coin Diamond) - The stablecoin minted against Bitcoin collateral
 * Base unit: 1 UCD = 10^18 wei (matches ERC20 decimals)
 */
export type UCD = bigint & {
    readonly [__brand]: 'UCD';
};
/**
 * Satoshis - Bitcoin base unit
 * Base unit: 1 BTC = 100,000,000 satoshis
 */
export type Satoshis = bigint & {
    readonly [__brand]: 'Satoshis';
};
/**
 * Wei - Ethereum base unit for ETH and ERC20 tokens (18 decimals)
 * Base unit: 1 token = 10^18 wei
 */
export type Wei = bigint & {
    readonly [__brand]: 'Wei';
};
/**
 * BPS - Basis Points for percentage calculations
 * Base unit: 1% = 100 BPS, 100% = 10,000 BPS
 */
export type BPS = number & {
    readonly [__brand]: 'BPS';
};
/**
 * UnixTimestamp - Unix timestamp in seconds
 */
export type UnixTimestamp = number & {
    readonly [__brand]: 'UnixTimestamp';
};
/**
 * BlockNumber - Ethereum block number
 */
export type BlockNumber = number & {
    readonly [__brand]: 'BlockNumber';
};
export declare const UCD: (value: bigint) => UCD;
export declare const Satoshis: (value: bigint) => Satoshis;
export declare const Wei: (value: bigint) => Wei;
export declare const BPS: (value: number) => BPS;
export declare const UnixTimestamp: (value: number) => UnixTimestamp;
export declare const BlockNumber: (value: number) => BlockNumber;
export declare function isUCD(value: unknown): value is UCD;
export declare function isSatoshis(value: unknown): value is Satoshis;
export declare function isWei(value: unknown): value is Wei;
export declare function isBPS(value: unknown): value is BPS;
export declare function isUnixTimestamp(value: unknown): value is UnixTimestamp;
export declare function isBlockNumber(value: unknown): value is BlockNumber;
export declare namespace UCDConversions {
    function fromWhole(whole: number | string): UCD;
    function toWhole(ucd: UCD): number;
    function format(ucd: UCD, decimals?: number): string;
    /**
     * Convert UCD to JSON-serializable string
     */
    function toJSON(ucd: UCD): string;
    /**
     * Parse UCD from JSON string
     */
    function fromJSON(json: string): UCD;
    /**
     * Convert to structured serializable format with metadata
     */
    function toSerializable(ucd: UCD): {
        value: string;
        decimals: number;
        type: 'UCD';
    };
}
export declare namespace SatoshisConversions {
    function fromBTC(btc: number | string): Satoshis;
    function toBTC(satoshis: Satoshis): number;
    function format(satoshis: Satoshis, unit?: 'BTC' | 'sats'): string;
    /**
     * Convert Satoshis to JSON-serializable string
     */
    function toJSON(satoshis: Satoshis): string;
    /**
     * Parse Satoshis from JSON string
     */
    function fromJSON(json: string): Satoshis;
    /**
     * Convert to structured serializable format with metadata
     */
    function toSerializable(satoshis: Satoshis): {
        value: string;
        unit: 'satoshis';
        type: 'Satoshis';
    };
}
export declare namespace WeiConversions {
    function fromWhole(whole: number | string): Wei;
    function toWhole(wei: Wei): number;
    function format(wei: Wei, decimals?: number): string;
    /**
     * Convert Wei to JSON-serializable string
     */
    function toJSON(wei: Wei): string;
    /**
     * Parse Wei from JSON string
     */
    function fromJSON(json: string): Wei;
    /**
     * Convert to structured serializable format with metadata
     */
    function toSerializable(wei: Wei): {
        value: string;
        decimals: number;
        type: 'Wei';
    };
}
export declare namespace BPSConversions {
    function fromPercent(percent: number): BPS;
    function toPercent(bps: BPS): number;
    function toDecimal(bps: BPS): number;
    function format(bps: BPS): string;
}
export {};
