import { Equal, FastCheck, Hash, Inspectable, Schema } from "effect";
import * as CBOR from "./CBOR.js";
import * as PlutusData from "./Data.js";
/**
 * Redeemer tag enum for different script execution contexts.
 *
 * CDDL: redeemer_tag = 0 ; spend | 1 ; mint | 2 ; cert | 3 ; reward | 4 ; vote | 5 ; propose
 *
 * @since 2.0.0
 * @category model
 */
export declare const RedeemerTag: Schema.Literal<["spend", "mint", "cert", "reward", "vote", "propose"]>;
export type RedeemerTag = typeof RedeemerTag.Type;
declare const ExUnits_base: Schema.Class<ExUnits, {
    mem: Schema.refine<bigint, typeof Schema.BigInt>;
    steps: Schema.refine<bigint, typeof Schema.BigInt>;
}, Schema.Struct.Encoded<{
    mem: Schema.refine<bigint, typeof Schema.BigInt>;
    steps: Schema.refine<bigint, typeof Schema.BigInt>;
}>, never, {
    readonly mem: bigint;
} & {
    readonly steps: bigint;
}, {}, {}>;
/**
 * Execution units for Plutus script execution.
 *
 * CDDL: ex_units = [mem: uint64, steps: uint64]
 *
 * @since 2.0.0
 * @category model
 */
export declare class ExUnits extends ExUnits_base {
    toJSON(): {
        mem: string;
        steps: string;
    };
    [Equal.symbol](that: unknown): boolean;
    [Hash.symbol](): number;
}
declare const Redeemer_base: Schema.Class<Redeemer, {
    tag: Schema.Literal<["spend", "mint", "cert", "reward", "vote", "propose"]>;
    index: Schema.refine<bigint, typeof Schema.BigInt>;
    data: Schema.SchemaClass<PlutusData.Data, PlutusData.DataEncoded, never>;
    exUnits: typeof ExUnits;
}, Schema.Struct.Encoded<{
    tag: Schema.Literal<["spend", "mint", "cert", "reward", "vote", "propose"]>;
    index: Schema.refine<bigint, typeof Schema.BigInt>;
    data: Schema.SchemaClass<PlutusData.Data, PlutusData.DataEncoded, never>;
    exUnits: typeof ExUnits;
}>, never, {
    readonly tag: "vote" | "mint" | "spend" | "cert" | "reward" | "propose";
} & {
    readonly data: PlutusData.Data;
} & {
    readonly index: bigint;
} & {
    readonly exUnits: ExUnits;
}, {}, {}>;
/**
 * Redeemer for Plutus script execution based on Conway CDDL specification.
 *
 * CDDL: redeemer = [ tag, index, data, ex_units ]
 * Where:
 * - tag: redeemer_tag (0=spend, 1=mint, 2=cert, 3=reward)
 * - index: uint64 (index into the respective input/output/certificate/reward array)
 * - data: plutus_data (the actual redeemer data passed to the script)
 * - ex_units: [mem: uint64, steps: uint64] (execution unit limits)
 *
 * @since 2.0.0
 * @category model
 */
export declare class Redeemer extends Redeemer_base {
    /**
     * Convert to JSON representation.
     *
     * @since 2.0.0
     * @category conversions
     */
    toJSON(): {
        _tag: string;
        tag: "vote" | "mint" | "spend" | "cert" | "reward" | "propose";
        index: string;
        data: PlutusData.Data;
        exUnits: {
            mem: string;
            steps: string;
        };
    };
    /**
     * Convert to string representation.
     *
     * @since 2.0.0
     * @category conversions
     */
    toString(): string;
    /**
     * Custom inspect for Node.js REPL.
     *
     * @since 2.0.0
     * @category conversions
     */
    [Inspectable.NodeInspectSymbol](): unknown;
    /**
     * Structural equality check.
     *
     * @since 2.0.0
     * @category equality
     */
    [Equal.symbol](that: unknown): boolean;
    /**
     * Hash code generation.
     * Only hashes tag and index for performance (minimal structure).
     *
     * @since 2.0.0
     * @category hashing
     */
    [Hash.symbol](): number;
}
/**
 * Helper function to convert RedeemerTag string to CBOR integer.
 *
 * @since 2.0.0
 * @category utilities
 */
export declare const tagToInteger: (tag: RedeemerTag) => bigint;
/**
 * Helper function to convert CBOR integer to RedeemerTag string.
 *
 * @since 2.0.0
 * @category utilities
 */
export declare const integerToTag: (value: bigint) => RedeemerTag;
/**
 * CDDL schema for Redeemer as tuple structure.
 *
 * CDDL: redeemer = [ tag, index, data, ex_units ]
 *
 * @since 2.0.0
 * @category schemas
 */
export declare const CDDLSchema: Schema.Tuple<[Schema.SchemaClass<bigint, bigint, never>, Schema.SchemaClass<bigint, bigint, never>, Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.Tuple2<typeof Schema.BigIntFromSelf, typeof Schema.BigIntFromSelf>]>;
/**
 * CDDL transformation schema for Redeemer.
 *
 * Transforms between CBOR tuple representation and Redeemer class instance.
 *
 * @since 2.0.0
 * @category schemas
 */
export declare const FromCDDL: Schema.transformOrFail<Schema.Tuple<[Schema.SchemaClass<bigint, bigint, never>, Schema.SchemaClass<bigint, bigint, never>, Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.Tuple2<typeof Schema.BigIntFromSelf, typeof Schema.BigIntFromSelf>]>, Schema.SchemaClass<Redeemer, Redeemer, never>, never>;
/**
 * CBOR bytes transformation schema for Redeemer using CDDL.
 * Transforms between CBOR bytes and Redeemer using CDDL encoding.
 *
 * @since 2.0.0
 * @category schemas
 */
export declare const FromCBORBytes: (options?: CBOR.CodecOptions) => Schema.transform<Schema.transformOrFail<typeof Schema.Uint8ArrayFromSelf, Schema.declare<CBOR.CBOR, CBOR.CBOR, readonly [], never>, never>, Schema.transformOrFail<Schema.Tuple<[Schema.SchemaClass<bigint, bigint, never>, Schema.SchemaClass<bigint, bigint, never>, Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.Tuple2<typeof Schema.BigIntFromSelf, typeof Schema.BigIntFromSelf>]>, Schema.SchemaClass<Redeemer, Redeemer, never>, never>>;
/**
 * CBOR hex transformation schema for Redeemer using CDDL.
 * Transforms between CBOR hex string and Redeemer using CDDL encoding.
 *
 * @since 2.0.0
 * @category schemas
 */
export declare const FromCBORHex: (options?: CBOR.CodecOptions) => Schema.transform<Schema.Schema<Uint8Array<ArrayBufferLike>, string, never>, Schema.transform<Schema.transformOrFail<typeof Schema.Uint8ArrayFromSelf, Schema.declare<CBOR.CBOR, CBOR.CBOR, readonly [], never>, never>, Schema.transformOrFail<Schema.Tuple<[Schema.SchemaClass<bigint, bigint, never>, Schema.SchemaClass<bigint, bigint, never>, Schema.Schema<CBOR.CBOR, CBOR.CBOR, never>, Schema.Tuple2<typeof Schema.BigIntFromSelf, typeof Schema.BigIntFromSelf>]>, Schema.SchemaClass<Redeemer, Redeemer, never>, never>>>;
/**
 * Create a spend redeemer for spending UTxO inputs.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const spend: (index: bigint, data: PlutusData.Data, exUnits: ExUnits) => Redeemer;
/**
 * Create a mint redeemer for minting/burning tokens.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const mint: (index: bigint, data: PlutusData.Data, exUnits: ExUnits) => Redeemer;
/**
 * Create a cert redeemer for certificate validation.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const cert: (index: bigint, data: PlutusData.Data, exUnits: ExUnits) => Redeemer;
/**
 * Create a reward redeemer for withdrawal validation.
 *
 * @since 2.0.0
 * @category constructors
 */
export declare const reward: (index: bigint, data: PlutusData.Data, exUnits: ExUnits) => Redeemer;
/**
 * Check if a redeemer is for spending inputs.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isSpend: (redeemer: Redeemer) => boolean;
/**
 * Check if a redeemer is for minting/burning.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isMint: (redeemer: Redeemer) => boolean;
/**
 * Check if a redeemer is for certificates.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isCert: (redeemer: Redeemer) => boolean;
/**
 * Check if a redeemer is for withdrawals.
 *
 * @since 2.0.0
 * @category predicates
 */
export declare const isReward: (redeemer: Redeemer) => boolean;
/**
 * Encode Redeemer to CBOR bytes.
 *
 * @since 2.0.0
 * @category transformation
 */
export declare const toCBORBytes: (redeemer: Redeemer, options?: CBOR.CodecOptions) => Uint8Array;
/**
 * Encode Redeemer to CBOR hex string.
 *
 * @since 2.0.0
 * @category transformation
 */
export declare const toCBORHex: (redeemer: Redeemer, options?: CBOR.CodecOptions) => string;
/**
 * Decode Redeemer from CBOR bytes.
 *
 * @since 2.0.0
 * @category transformation
 */
export declare const fromCBORBytes: (bytes: Uint8Array, options?: CBOR.CodecOptions) => Redeemer;
/**
 * Decode Redeemer from CBOR hex string.
 *
 * @since 2.0.0
 * @category transformation
 */
export declare const fromCBORHex: (hex: string, options?: CBOR.CodecOptions) => Redeemer;
/**
 * FastCheck arbitrary for generating random RedeemerTag values.
 *
 * @since 2.0.0
 * @category generators
 */
export declare const arbitraryRedeemerTag: FastCheck.Arbitrary<RedeemerTag>;
/**
 * FastCheck arbitrary for generating random ExUnits values.
 *
 * @since 2.0.0
 * @category generators
 */
export declare const arbitraryExUnits: FastCheck.Arbitrary<ExUnits>;
/**
 * FastCheck arbitrary for generating random Redeemer instances.
 *
 * @since 2.0.0
 * @category generators
 */
/**
 * Compute total ex_units by summing over redeemers.
 *
 * @since 2.0.0
 * @category utilities
 */
export declare const totalExUnits: (redeemers: ReadonlyArray<Redeemer>) => ExUnits;
export declare const arbitrary: FastCheck.Arbitrary<Redeemer>;
export {};
//# sourceMappingURL=Redeemer.d.ts.map