34 lines
1.2 KiB
OCaml
34 lines
1.2 KiB
OCaml
|
(**************************************************************************)
|
||
|
(* *)
|
||
|
(* Copyright (c) 2014 - 2018. *)
|
||
|
(* Dynamic Ledger Solutions, Inc.< contact@tezos.com > *)
|
||
|
(* *)
|
||
|
(* All rights reserved.No warranty, explicit or implicit, provided. *)
|
||
|
(* *)
|
||
|
(**************************************************************************)
|
||
|
|
||
|
open Protocol
|
||
|
|
||
|
module Table = Hashtbl.Make(struct
|
||
|
type t = Nonce_hash.t
|
||
|
let hash h =
|
||
|
Int32.to_int (MBytes.get_int32 (Nonce_hash.to_bytes h) 0)
|
||
|
let equal = Nonce_hash.equal
|
||
|
end)
|
||
|
|
||
|
let known_nonces = Table.create 17
|
||
|
|
||
|
let generate () =
|
||
|
match
|
||
|
Alpha_context.Nonce.of_bytes @@
|
||
|
Rand.generate Alpha_context.Constants.nonce_length
|
||
|
with
|
||
|
| Ok nonce ->
|
||
|
let hash = Alpha_context.Nonce.hash nonce in
|
||
|
Table.add known_nonces hash nonce ;
|
||
|
(hash, nonce)
|
||
|
| Error _ -> assert false
|
||
|
|
||
|
let forget_all () = Table.clear known_nonces
|
||
|
let get hash = Table.find known_nonces hash
|