2016-09-08 21:13:10 +04:00
|
|
|
(**************************************************************************)
|
|
|
|
(* *)
|
2018-02-06 00:17:03 +04:00
|
|
|
(* Copyright (c) 2014 - 2018. *)
|
2016-09-08 21:13:10 +04:00
|
|
|
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
|
|
|
|
(* *)
|
|
|
|
(* All rights reserved. No warranty, explicit or implicit, provided. *)
|
|
|
|
(* *)
|
|
|
|
(**************************************************************************)
|
|
|
|
|
|
|
|
|
|
|
|
(** {2 Hash Types} ************************************************************)
|
|
|
|
|
|
|
|
(** The signature of an abstract hash type, as produced by functor
|
2016-11-25 22:46:50 +04:00
|
|
|
{!Make_Blake2B}. The {!t} type is abstracted for separating the
|
2016-09-08 21:13:10 +04:00
|
|
|
various kinds of hashes in the system at typing time. Each type is
|
|
|
|
equipped with functions to use it as is of as keys in the database
|
|
|
|
or in memory sets and maps. *)
|
2016-11-14 19:26:34 +04:00
|
|
|
|
|
|
|
module type MINIMAL_HASH = sig
|
|
|
|
|
2016-09-08 21:13:10 +04:00
|
|
|
type t
|
|
|
|
|
2016-11-14 19:26:34 +04:00
|
|
|
val name: string
|
|
|
|
val title: string
|
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
val hash_bytes: Cstruct.buffer list -> t
|
2016-09-08 21:13:10 +04:00
|
|
|
val hash_string: string list -> t
|
|
|
|
val size: int (* in bytes *)
|
|
|
|
val compare: t -> t -> int
|
|
|
|
val equal: t -> t -> bool
|
2017-02-24 20:17:53 +04:00
|
|
|
|
2016-09-08 21:13:10 +04:00
|
|
|
val to_hex: t -> string
|
2017-02-24 20:17:53 +04:00
|
|
|
val of_hex: string -> t option
|
|
|
|
val of_hex_exn: string -> t
|
|
|
|
|
2016-11-25 22:46:50 +04:00
|
|
|
val to_string: t -> string
|
2017-02-24 20:17:53 +04:00
|
|
|
val of_string: string -> t option
|
|
|
|
val of_string_exn: string -> t
|
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
val to_bytes: t -> Cstruct.buffer
|
|
|
|
val of_bytes_opt: Cstruct.buffer -> t option
|
|
|
|
val of_bytes_exn: Cstruct.buffer -> t
|
2017-02-24 20:17:53 +04:00
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
val read: Cstruct.buffer -> int -> t
|
|
|
|
val write: Cstruct.buffer -> int -> t -> unit
|
2017-02-24 20:17:53 +04:00
|
|
|
|
2017-11-16 19:45:22 +04:00
|
|
|
val to_path: t -> string list -> string list
|
2017-02-24 20:17:53 +04:00
|
|
|
val of_path: string list -> t option
|
|
|
|
val of_path_exn: string list -> t
|
|
|
|
|
2016-10-06 20:30:04 +04:00
|
|
|
val prefix_path: string -> string list
|
2017-02-24 20:17:53 +04:00
|
|
|
val path_length: int
|
2016-11-14 19:26:34 +04:00
|
|
|
|
2018-02-11 22:17:39 +04:00
|
|
|
val zero: t
|
|
|
|
|
2016-11-14 19:26:34 +04:00
|
|
|
end
|
|
|
|
|
|
|
|
module type HASH = sig
|
|
|
|
|
|
|
|
include MINIMAL_HASH
|
|
|
|
|
2017-02-19 21:22:32 +04:00
|
|
|
val to_b58check: t -> string
|
|
|
|
val to_short_b58check: t -> string
|
2016-11-14 19:26:34 +04:00
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
val of_b58check_exn: string -> t
|
|
|
|
val of_b58check_opt: string -> t option
|
2017-12-08 22:10:08 +04:00
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
type Base58.data += Hash of t
|
|
|
|
val b58check_encoding: t Base58.encoding
|
2017-02-24 20:17:53 +04:00
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
val pp: Format.formatter -> t -> unit
|
|
|
|
val pp_short: Format.formatter -> t -> unit
|
2017-02-24 20:17:53 +04:00
|
|
|
|
|
|
|
end
|
|
|
|
|
2018-02-08 13:51:01 +04:00
|
|
|
module type MERKLE_TREE = sig
|
2016-09-08 21:13:10 +04:00
|
|
|
|
2017-03-16 20:17:06 +04:00
|
|
|
type elt
|
2018-02-08 13:51:01 +04:00
|
|
|
val elt_bytes: elt -> Cstruct.buffer
|
2017-03-16 20:17:06 +04:00
|
|
|
|
|
|
|
include HASH
|
2018-02-08 13:51:01 +04:00
|
|
|
|
2017-03-16 20:17:06 +04:00
|
|
|
val compute: elt list -> t
|
|
|
|
val empty: t
|
2018-02-08 13:51:01 +04:00
|
|
|
|
2017-03-16 20:17:06 +04:00
|
|
|
type path =
|
|
|
|
| Left of path * t
|
|
|
|
| Right of t * path
|
|
|
|
| Op
|
2018-02-08 13:51:01 +04:00
|
|
|
|
2017-03-16 20:17:06 +04:00
|
|
|
val compute_path: elt list -> int -> path
|
|
|
|
val check_path: path -> elt -> t * int
|
2018-02-08 13:51:01 +04:00
|
|
|
|
2017-03-16 20:17:06 +04:00
|
|
|
end
|