import { Equal, Hash, HashSet, Schema } from "effect";
import * as Address from "./Address.js";
import * as Assets from "./Assets.js";
import * as TransactionHash from "./TransactionHash.js";
import * as TransactionInput from "./TransactionInput.js";
declare const UTxO_base: Schema.TaggedClass<UTxO, "UTxO", {
    readonly _tag: Schema.tag<"UTxO">;
} & {
    transactionId: typeof TransactionHash.TransactionHash;
    index: Schema.refine<bigint, typeof Schema.BigInt>;
    address: typeof Address.Address;
    assets: Schema.filter<typeof Assets.Assets>;
    datumOption: Schema.optional<Schema.Union<[typeof import("./DatumHash.js").DatumHash, typeof import("./InlineDatum.js").InlineDatum]>>;
    scriptRef: Schema.optional<Schema.Union<[typeof import("./NativeScripts.js").NativeScript, typeof import("./PlutusV1.js").PlutusV1, typeof import("./PlutusV2.js").PlutusV2, typeof import("./PlutusV3.js").PlutusV3]>>;
}>;
/**
 * UTxO (Unspent Transaction Output) - A transaction output with its on-chain reference.
 *
 * Combines TransactionOutput with the transaction reference (transactionId + index)
 * that uniquely identifies it on the blockchain.
 *
 * @since 2.0.0
 * @category model
 */
export declare class UTxO extends UTxO_base {
    toJSON(): {
        _tag: "UTxO";
        transactionId: {
            _tag: "TransactionHash";
            hash: string;
        };
        index: string;
        address: {
            networkId: number;
            paymentCredential: {
                _tag: "KeyHash";
                hash: string;
            } | {
                _tag: "ScriptHash";
                hash: string;
            };
            stakingCredential: {
                _tag: "KeyHash";
                hash: string;
            } | {
                _tag: "ScriptHash";
                hash: string;
            } | undefined;
        };
        assets: {
            lovelace: string;
            multiAsset: {
                _tag: "MultiAsset";
                map: Record<string, Record<string, string>>;
            } | undefined;
        };
        datumOption: {
            _tag: "InlineDatum";
            data: import("./Data.js").Data;
        } | {
            _tag: "DatumHash";
            hash: string;
        } | undefined;
        scriptRef: {
            _tag: "NativeScript" | "PlutusV1" | "PlutusV2" | "PlutusV3";
            cbor: string;
        } | undefined;
    };
    toString(): string;
    [Equal.symbol](that: unknown): boolean;
    [Hash.symbol](): number;
}
/**
 * Check if the given value is a valid UTxO.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isUTxO: (u: unknown, overrideOptions?: import("effect/SchemaAST").ParseOptions | number) => u is UTxO;
/**
 * A set of UTxOs with efficient lookups and set operations.
 * Uses Effect's HashSet for automatic deduplication via Hash protocol.
 *
 * @since 2.0.0
 * @category models
 */
export type UTxOSet = HashSet.HashSet<UTxO>;
/**
 * Create an empty UTxO set.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const empty: () => UTxOSet;
/**
 * Create a UTxO set from an iterable of UTxOs.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const fromIterable: (utxos: Iterable<UTxO>) => UTxOSet;
/**
 * Add a UTxO to the set.
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const add: (set: UTxOSet, utxo: UTxO) => UTxOSet;
/**
 * Remove a UTxO from the set.
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const remove: (set: UTxOSet, utxo: UTxO) => UTxOSet;
/**
 * Check if a UTxO exists in the set.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const has: (set: UTxOSet, utxo: UTxO) => boolean;
/**
 * Union of two UTxO sets.
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const union: (a: UTxOSet, b: UTxOSet) => UTxOSet;
/**
 * Intersection of two UTxO sets.
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const intersection: (a: UTxOSet, b: UTxOSet) => UTxOSet;
/**
 * Difference of two UTxO sets (elements in a but not in b).
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const difference: (a: UTxOSet, b: UTxOSet) => UTxOSet;
/**
 * Filter UTxOs in the set by predicate.
 *
 * @since 2.0.0
 * @category combinators
 */
export declare const filter: (set: UTxOSet, predicate: (utxo: UTxO) => boolean) => UTxOSet;
/**
 * Get the number of UTxOs in the set.
 *
 * @since 2.0.0
 * @category getters
 */
export declare const size: (set: UTxOSet) => number;
/**
 * Check if the set is empty.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isEmpty: (set: UTxOSet) => boolean;
/**
 * Convert a UTxO set to an array.
 *
 * @since 2.0.0
 * @category conversions
 */
export declare const toArray: (set: UTxOSet) => Array<UTxO>;
/**
 * Get the output reference string for a UTxO (txHash#index format).
 *
 * @since 2.0.0
 * @category getters
 */
export declare const toOutRefString: (utxo: UTxO) => string;
/**
 * Calculate total assets from a collection of UTxOs.
 *
 * @since 2.0.0
 * @category getters
 */
export declare const totalAssets: (utxos: ReadonlyArray<UTxO> | Set<UTxO>) => Assets.Assets;
/**
 * Convert UTxOs to sorted TransactionInputs.
 * Inputs are sorted by transaction hash then output index for deterministic ordering.
 *
 * @since 2.0.0
 * @category conversions
 */
export declare const toInputs: (utxos: ReadonlyArray<UTxO>) => ReadonlyArray<TransactionInput.TransactionInput>;
export {};
//# sourceMappingURL=UTxO.d.ts.map