From 02bdd7a470143977848c9841b46386083f4ce9c5 Mon Sep 17 00:00:00 2001 From: Estevan Castilho Date: Sat, 2 May 2026 03:41:35 +0000 Subject: Hashes are not strings, but we can pretend otherwise (for now) --- lib/merkle.ml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'lib/merkle.ml') diff --git a/lib/merkle.ml b/lib/merkle.ml index 6c4be52..5b30856 100644 --- a/lib/merkle.ml +++ b/lib/merkle.ml @@ -39,16 +39,16 @@ end (** Simple hash set implementation. This is a placeholder until a proper radix-merkle library with OCaml 5 support becomes available. *) module HashSet : S = struct - module StringSet = Set.Make (String) + module HashSet' = Set.Make (Conventions.Hash) - type t = StringSet.t + type t = HashSet'.t - let empty = StringSet.empty - let is_empty = StringSet.is_empty - let insert hash tree = StringSet.add hash tree - let delete hash tree = StringSet.remove hash tree - let member hash tree = StringSet.mem hash tree - let keys tree = StringSet.elements tree + let empty = HashSet'.empty + let is_empty = HashSet'.is_empty + let insert hash tree = HashSet'.add hash tree + let delete hash tree = HashSet'.remove hash tree + let member hash tree = HashSet'.mem hash tree + let keys tree = HashSet'.elements tree (* TODO: Streaming/pagination for large tuple sets. Currently materializes entire keyset into memory, which fails for relations with billions of tuples. Replace with paginated access (keys_paginated offset limit) or lazy generator @@ -56,14 +56,14 @@ module HashSet : S = struct radix-merkle tree (plebeia) for native lazy traversal. *) let root_hash tree = - if StringSet.is_empty tree then None + if HashSet'.is_empty tree then None else (* Compute root hash by hashing sorted concatenation of all hashes *) - let sorted_hashes = StringSet.elements tree in - let concatenated = String.concat "" sorted_hashes in + let sorted_hashes = HashSet'.elements tree in + let concatenated = String.concat "" (List.map Conventions.Hash.to_string sorted_hashes) in Some (Conventions.Hash.hash_text concatenated) - let size = StringSet.cardinal + let size = HashSet'.cardinal end include HashSet -- cgit v1.2.3