import { FastCheck, Inspectable, Schema } from "effect";
/**
* CDDL specs
* hash32 = bytes .size 32
*/
/**
* The length in bytes of a DatumHash.
*
* @since 2.0.0
* @category constants
*/
export declare const DATUM_HASH_BYTES_LENGTH = 32;
/**
* The length in hex characters of a DatumHash.
*
* @since 2.0.0
* @category constants
*/
export declare const DATUM_HASH_HEX_LENGTH = 64;
declare const DatumHashError_base: new = {}>(args: import("effect/Types").Equals extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
readonly _tag: "DatumHashError";
} & Readonly;
/**
* Error class for DatumHash related operations.
*
* @example
* import { DatumHash } from "@lucid-evolution/experimental";
* import assert from "assert";
*
* const error = new DatumHash.DatumHashError({ message: "Invalid datum hash" });
* assert(error.message === "Invalid datum hash");
*
* @since 2.0.0
* @category errors
*/
export declare class DatumHashError extends DatumHashError_base<{
message?: string;
reason?: "InvalidHexLength" | "InvalidBytesLength" | "InvalidHexFormat" | "InvalidCBORFormat";
}> {
}
/**
* Schema for validating hex strings as datum hashes
*
* @since 2.0.0
* @category schemas
*/
export declare const Hash: Schema.refine, Schema.SchemaClass, string & import("effect/Brand").Brand<"HexString">, never>>;
declare const DatumHash_base: Schema.TaggedClass;
} & {
hash: Schema.refine, Schema.SchemaClass, string & import("effect/Brand").Brand<"HexString">, never>>;
}>;
/**
* Schema for a 32-byte datum hash
*
* @since 2.0.0
* @category schemas
*/
export declare class DatumHash extends DatumHash_base {
[Inspectable.NodeInspectSymbol](): {
_tag: string;
hash: string & import("effect/Brand").Brand<"HexString">;
};
}
/**
* Check if the given value is a valid DatumHash
*
* @since 2.0.0
* @category predicates
*/
export declare const isDatumHash: (u: unknown, overrideOptions?: import("effect/SchemaAST").ParseOptions | number) => u is DatumHash;
/**
* Schema for DatumHash bytes validation
*
* @since 2.0.0
* @category schemas
*/
export declare const DatumHashBytes: Schema.SchemaClass, Uint8Array, never>;
/**
* Schema for transforming between Uint8Array and DatumHash
*
* @since 2.0.0
* @category encoding/decoding
*/
export declare const Bytes: Schema.transform, Uint8Array, never>, Schema.Schema;
}, never>>;
/**
* Schema for transforming between hex string and DatumHash
*
* @since 2.0.0
* @category encoding/decoding
*/
export declare const HexString: Schema.transform, Schema.SchemaClass, string & import("effect/Brand").Brand<"HexString">, never>>, typeof DatumHash>;
/**
* Schema for transforming between CBOR bytes and DatumHash
*
* @since 2.0.0
* @category encoding/decoding
*/
export declare const CBORBytes: Schema.transformOrFail, Uint8Array, readonly [], never>, typeof DatumHash, never>;
/**
* Schema for transforming between CBOR hex and DatumHash
*
* @since 2.0.0
* @category encoding/decoding
*/
export declare const CBORHex: Schema.transformOrFail, string & import("effect/Brand").Brand<"HexString">, never>, typeof DatumHash, never>;
/**
* Check if two DatumHash instances are equal.
*
* @example
* import { DatumHash } from "@lucid-evolution/experimental";
* import { Schema } from "effect";
* import assert from "assert";
*
* const hash1 = Schema.decodeUnknownSync(DatumHash.HexString)(
* "5160f88b929bf8a6c57c285b889488f9137c0ef3cfd0bcf408a10020e69146d5"
* );
* const hash2 = Schema.decodeUnknownSync(DatumHash.HexString)(
* "5160f88b929bf8a6c57c285b889488f9137c0ef3cfd0bcf408a10020e69146d5"
* );
* const hash3 = Schema.decodeUnknownSync(DatumHash.HexString)(
* "bfd6dd1e96e4fd26c6379aa3093aaef25639d58ee76d045bd4528ef9f2fed808"
* );
*
* assert(DatumHash.equals(hash1, hash2) === true); // Same hash
* assert(DatumHash.equals(hash1, hash3) === false); // Different hashes
*
* @since 2.0.0
* @category equality
*/
export declare const equals: (a: DatumHash, b: DatumHash) => boolean;
/**
* Generator for creating random DatumHash instances for testing
*
* @example
* import { DatumHash } from "@lucid-evolution/experimental";
* import { FastCheck } from "effect";
* import assert from "assert";
*
* const randomSamples = FastCheck.sample(DatumHash.generator, 10);
* randomSamples.forEach((datumHash) => {
* assert(datumHash._tag === "DatumHash");
* assert(datumHash.hash.length === 64);
* });
*
* @since 2.0.0
* @category generators
*/
export declare const generator: FastCheck.Arbitrary;
export {};
//# sourceMappingURL=DatumHash.d.ts.map