Skip to content

Commit 27acf69

Browse files
authored
Merge pull request #17996 from MinaProtocol/cjjdespres/dynamic-root-module
Refactor root ledger in preparation for the vesting parameter update changes
2 parents 17c58f7 + 0a312e2 commit 27acf69

File tree

27 files changed

+605
-509
lines changed

27 files changed

+605
-509
lines changed

src/app/cli/src/init/mina_run.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ open Async
99
module Graphql_cohttp_async =
1010
Graphql_internal.Make (Graphql_async.Schema) (Cohttp_async.Io)
1111
(Cohttp_async.Body)
12+
module Root_ledger = Mina_ledger.Root
1213

1314
let snark_job_list_json t =
1415
let open Participating_state.Let_syntax in
@@ -316,7 +317,7 @@ let setup_local_server ?(client_trustlist = []) ~rest_server_port
316317
let%map accts = Mina_ledger.Ledger.to_list l_inner in
317318
Ok accts
318319
| Ledger_root l ->
319-
let casted = Mina_ledger.Ledger.Root.as_unmasked l in
320+
let casted = Root_ledger.as_unmasked l in
320321
let%map accts =
321322
Mina_ledger.Ledger.Any_ledger.M.to_list casted
322323
in

src/lib/bootstrap_controller/bootstrap_controller.ml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ open Pipe_lib.Strict_pipe
77
open Network_peer
88
open Mina_stdlib
99
module Ledger = Mina_ledger.Ledger
10+
module Root_ledger = Mina_ledger.Root
1011
module Sync_ledger = Mina_ledger.Sync_ledger
1112
module Transition_cache = Transition_cache
1213

@@ -428,7 +429,7 @@ let run_cycle ~context:(module Context : CONTEXT) ~trust_system ~verifier
428429
let%map staged_ledger_construction_time, construction_result =
429430
time_deferred
430431
(let open Deferred.Let_syntax in
431-
let temp_mask = Ledger.Root.as_masked temp_snarked_ledger in
432+
let temp_mask = Root_ledger.as_masked temp_snarked_ledger in
432433
let%map result =
433434
Staged_ledger
434435
.of_scan_state_pending_coinbases_and_snarked_ledger ~logger
@@ -967,10 +968,10 @@ let%test_module "Bootstrap_controller tests" =
967968
~root:(Transition_frontier.root new_frontier)
968969
sorted_external_transitions ;
969970
[%test_result: Ledger_hash.t]
970-
( Ledger.Root.merkle_root
971+
( Root_ledger.merkle_root
971972
@@ Transition_frontier.root_snarked_ledger new_frontier )
972973
~expect:
973-
( Ledger.Root.merkle_root
974+
( Root_ledger.merkle_root
974975
@@ Transition_frontier.root_snarked_ledger peer_net.state.frontier
975976
) )
976977

@@ -992,7 +993,7 @@ let%test_module "Bootstrap_controller tests" =
992993
in
993994
let snarked_ledger =
994995
Transition_frontier.root_snarked_ledger frontier
995-
|> Ledger.Root.as_masked
996+
|> Root_ledger.as_masked
996997
in
997998
let snarked_local_state =
998999
Transition_frontier.root frontier

src/lib/consensus/intf.ml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ open Async
44
open Currency
55
open Signature_lib
66
open Mina_base
7+
module Root_ledger = Mina_ledger.Root
78

89
module type CONTEXT = sig
910
val logger : Logger.t
@@ -317,7 +318,7 @@ module type S = sig
317318
module Ledger_snapshot : sig
318319
type t =
319320
| Genesis_epoch_ledger of Genesis_ledger.Packed.t
320-
| Ledger_root of Mina_ledger.Ledger.Root.t
321+
| Ledger_root of Root_ledger.t
321322

322323
val close : t -> unit
323324

@@ -333,8 +334,7 @@ module type S = sig
333334
-> genesis_epoch_data:Genesis_epoch_data.t
334335
-> epoch_ledger_location:string
335336
-> genesis_state_hash:State_hash.t
336-
-> epoch_ledger_backing_type:
337-
Genesis_ledger.Ledger.Root.Config.backing_type
337+
-> epoch_ledger_backing_type:Root_ledger.Config.backing_type
338338
-> Signature_lib.Public_key.Compressed.Set.t
339339
-> t
340340

@@ -720,7 +720,7 @@ module type S = sig
720720
Consensus_state.Value.t
721721
-> Consensus_state.Value.t
722722
-> local_state:Local_state.t
723-
-> snarked_ledger:Mina_ledger.Ledger.Root.t
723+
-> snarked_ledger:Root_ledger.t
724724
-> genesis_ledger_hash:Mina_base.Frozen_ledger_hash.t
725725
-> unit
726726

src/lib/consensus/proof_of_stake.ml

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ open Fold_lib
77
open Signature_lib
88
open Snark_params
99
open Num_util
10+
module Root_ledger = Mina_ledger.Root
1011

1112
module Segment_id = Mina_numbers.Nat.Make32 ()
1213

@@ -91,8 +92,7 @@ module Make_str (A : Wire_types.Concrete) = struct
9192
O1trace.sync_thread "compute_delegatee_table_ledger_root" (fun () ->
9293
compute_delegatee_table keys ~iter_accounts:(fun f ->
9394
Mina_ledger.Ledger.Any_ledger.M.iteri
94-
(Mina_ledger.Ledger.Root.as_unmasked ledger) ~f:(fun i acct ->
95-
f i acct ) ) )
95+
(Root_ledger.as_unmasked ledger) ~f:(fun i acct -> f i acct) ) )
9696

9797
let compute_delegatee_table_ledger_any keys ledger =
9898
O1trace.sync_thread "compute_delegatee_table_ledger_any" (fun () ->
@@ -277,14 +277,14 @@ module Make_str (A : Wire_types.Concrete) = struct
277277
module Ledger_snapshot = struct
278278
type t =
279279
| Genesis_epoch_ledger of Genesis_ledger.Packed.t
280-
| Ledger_root of Mina_ledger.Ledger.Root.t
280+
| Ledger_root of Root_ledger.t
281281

282282
let merkle_root = function
283283
| Genesis_epoch_ledger packed ->
284284
Genesis_ledger.Packed.t packed
285285
|> Lazy.force |> Mina_ledger.Ledger.merkle_root
286286
| Ledger_root ledger ->
287-
Mina_ledger.Ledger.Root.merkle_root ledger
287+
Root_ledger.merkle_root ledger
288288

289289
let compute_delegatee_table keys ledger =
290290
match ledger with
@@ -299,14 +299,14 @@ module Make_str (A : Wire_types.Concrete) = struct
299299
| Genesis_epoch_ledger _ ->
300300
()
301301
| Ledger_root ledger ->
302-
Mina_ledger.Ledger.Root.close ledger
302+
Root_ledger.close ledger
303303

304304
let remove ~config = function
305305
| Genesis_epoch_ledger _ ->
306306
()
307307
| Ledger_root ledger ->
308-
Mina_ledger.Ledger.Root.close ledger ;
309-
Mina_ledger.Ledger.Root.Config.delete_backing config
308+
Root_ledger.close ledger ;
309+
Root_ledger.Config.delete_backing config
310310

311311
let ledger_subset keys ledger =
312312
let open Mina_ledger in
@@ -315,7 +315,7 @@ module Make_str (A : Wire_types.Concrete) = struct
315315
let ledger = Lazy.force @@ Genesis_ledger.Packed.t packed in
316316
Sparse_ledger.of_ledger_subset_exn ledger keys
317317
| Ledger_root db_ledger ->
318-
let ledger = Ledger.Root.as_masked db_ledger in
318+
let ledger = Root_ledger.as_masked db_ledger in
319319
let subset_ledger =
320320
Sparse_ledger.of_ledger_subset_exn ledger keys
321321
in
@@ -375,8 +375,7 @@ module Make_str (A : Wire_types.Concrete) = struct
375375
Option.t
376376
; mutable epoch_ledger_uuids : epoch_ledger_uuids
377377
; epoch_ledger_location : string
378-
; epoch_ledger_backing_type :
379-
Mina_ledger.Ledger.Root.Config.backing_type
378+
; epoch_ledger_backing_type : Root_ledger.Config.backing_type
380379
}
381380

382381
let to_yojson t =
@@ -400,14 +399,14 @@ module Make_str (A : Wire_types.Concrete) = struct
400399
type t = Data.t ref [@@deriving to_yojson]
401400

402401
let staking_epoch_ledger_config (t : t) =
403-
Mina_ledger.Ledger.Root.Config.with_directory
402+
Root_ledger.Config.with_directory
404403
~backing_type:!t.epoch_ledger_backing_type
405404
~directory_name:
406405
( !t.epoch_ledger_location
407406
^ Uuid.to_string !t.epoch_ledger_uuids.staking )
408407

409408
let next_epoch_ledger_config (t : t) =
410-
Mina_ledger.Ledger.Root.Config.with_directory
409+
Root_ledger.Config.with_directory
411410
~backing_type:!t.epoch_ledger_backing_type
412411
~directory_name:
413412
( !t.epoch_ledger_location
@@ -461,13 +460,12 @@ module Make_str (A : Wire_types.Concrete) = struct
461460
let create_epoch_ledger ~config ~context:(module Context : CONTEXT)
462461
~genesis_epoch_ledger =
463462
let open Context in
464-
if Mina_ledger.Ledger.Root.Config.exists_any_backing config then (
463+
if Root_ledger.Config.exists_any_backing config then (
465464
[%log info]
466-
~metadata:
467-
[ ("config", Mina_ledger.Ledger.Root.Config.to_yojson config) ]
465+
~metadata:[ ("config", Root_ledger.Config.to_yojson config) ]
468466
"Loading epoch ledger from disk: $config" ;
469467
Snapshot.Ledger_snapshot.Ledger_root
470-
(Mina_ledger.Ledger.Root.create ~logger ~config
468+
(Root_ledger.create ~logger ~config
471469
~depth:constraint_constants.ledger_depth () ) )
472470
else Genesis_epoch_ledger genesis_epoch_ledger
473471

@@ -498,7 +496,7 @@ module Make_str (A : Wire_types.Concrete) = struct
498496
epoch_ledger_uuids
499497
in
500498
let ledger_config uuid =
501-
Mina_ledger.Ledger.Root.Config.(
499+
Root_ledger.Config.(
502500
with_directory ~backing_type:epoch_ledger_backing_type
503501
~directory_name:(epoch_ledger_location ^ Uuid.to_string uuid))
504502
in
@@ -539,15 +537,11 @@ module Make_str (A : Wire_types.Concrete) = struct
539537
, Mina_base.State_hash.to_yojson
540538
epoch_ledger_uuids.genesis_state_hash )
541539
; ( "staking"
542-
, Mina_ledger.Ledger.Root.Config.to_yojson
543-
staking_ledger_config )
544-
; ( "next"
545-
, Mina_ledger.Ledger.Root.Config.to_yojson
546-
next_ledger_config )
540+
, Root_ledger.Config.to_yojson staking_ledger_config )
541+
; ("next", Root_ledger.Config.to_yojson next_ledger_config)
547542
] ;
548-
Mina_ledger.Ledger.Root.Config.delete_backing
549-
staking_ledger_config ;
550-
Mina_ledger.Ledger.Root.Config.delete_backing next_ledger_config ;
543+
Root_ledger.Config.delete_backing staking_ledger_config ;
544+
Root_ledger.Config.delete_backing next_ledger_config ;
551545
create_new_uuids () )
552546
else create_new_uuids ()
553547
in
@@ -2639,7 +2633,7 @@ module Make_str (A : Wire_types.Concrete) = struct
26392633
Deferred.Or_error.ok_unit
26402634
| Ledger_root next_epoch_ledger ->
26412635
let ledger =
2642-
Mina_ledger.Ledger.Root.create_checkpoint next_epoch_ledger
2636+
Root_ledger.create_checkpoint next_epoch_ledger
26432637
~config:(staking_epoch_ledger_config local_state)
26442638
()
26452639
in
@@ -2704,7 +2698,7 @@ module Make_str (A : Wire_types.Concrete) = struct
27042698
~metadata:[ ("target_ledger_hash", ledger_hash_json) ] ;
27052699
assert (
27062700
Mina_base.Ledger_hash.equal target_ledger_hash
2707-
(Mina_ledger.Ledger.Root.merkle_root ledger) ) ;
2701+
(Root_ledger.merkle_root ledger) ) ;
27082702
reset_snapshot local_state snapshot_id ledger ;
27092703
Deferred.Or_error.ok_unit
27102704
| `Target_changed _ ->
@@ -3035,9 +3029,7 @@ module Make_str (A : Wire_types.Concrete) = struct
30353029
let frontier_root_transition (prev : Consensus_state.Value.t)
30363030
(next : Consensus_state.Value.t) ~(local_state : Local_state.t)
30373031
~snarked_ledger ~genesis_ledger_hash =
3038-
let snarked_ledger_hash =
3039-
Mina_ledger.Ledger.Root.merkle_root snarked_ledger
3040-
in
3032+
let snarked_ledger_hash = Root_ledger.merkle_root snarked_ledger in
30413033
if
30423034
not
30433035
(Epoch.equal
@@ -3071,19 +3063,18 @@ module Make_str (A : Wire_types.Concrete) = struct
30713063
!local_state.next_epoch_snapshot <-
30723064
{ ledger =
30733065
(let config =
3074-
Mina_ledger.Ledger.Root.Config.with_directory
3066+
Root_ledger.Config.with_directory
30753067
~backing_type:!local_state.epoch_ledger_backing_type
30763068
~directory_name:
30773069
( !local_state.epoch_ledger_location
30783070
^ Uuid.to_string epoch_ledger_uuids.next )
30793071
in
30803072
Local_state.Snapshot.Ledger_snapshot.Ledger_root
3081-
(Mina_ledger.Ledger.Root.create_checkpoint snarked_ledger
3082-
~config () ) )
3073+
(Root_ledger.create_checkpoint snarked_ledger ~config ()) )
30833074
; delegatee_table =
30843075
compute_delegatee_table_ledger_any
30853076
(Local_state.current_block_production_keys local_state)
3086-
(Mina_ledger.Ledger.Root.as_unmasked snarked_ledger)
3077+
(Root_ledger.as_unmasked snarked_ledger)
30873078
} ) )
30883079

30893080
let should_bootstrap_len ~context:(module Context : CONTEXT) ~existing

src/lib/genesis_ledger/genesis_ledger.ml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ open Currency
33
open Signature_lib
44
open Mina_base
55
module Ledger = Mina_ledger.Ledger
6+
module Root_ledger = Mina_ledger.Root
67
module Intf = Intf
78
module Ledger_transfer_mask =
89
Mina_ledger.Ledger_transfer.Make (Ledger) (Ledger.Any_ledger.M)
@@ -76,9 +77,9 @@ module Utils = struct
7677
assert (
7778
Ledger_hash.equal
7879
(Ledger.merkle_root genesis_mask)
79-
(Ledger.Root.merkle_root root) ) ;
80-
assert (Ledger.Root.depth root = depth) ;
81-
Ledger.Root.create_checkpoint ~config root () |> Or_error.return
80+
(Root_ledger.merkle_root root) ) ;
81+
assert (Root_ledger.depth root = depth) ;
82+
Root_ledger.create_checkpoint ~config root () |> Or_error.return
8283

8384
let keypair_of_account_record_exn (private_key, account) =
8485
let open Account in
@@ -121,7 +122,7 @@ module Make (Inputs : Intf.Ledger_input_intf) : Intf.S = struct
121122
(* TODO: #1488 compute this at compile time instead of lazily *)
122123
(* The backing_ledger is either an `Ephemeral ledger, which exists purely as a
123124
mask in memory, with a null ledger root, or a `Root ledger, which is backed
124-
by a concrete [Ledger.Root.t] on disk. We need a single mask to present to
125+
by a concrete [Root_ledger.t] on disk. We need a single mask to present to
125126
the users of the genesis ledger interface (through the [t] value below), so
126127
that is also saved here. *)
127128
let backing_ledger =
@@ -133,14 +134,14 @@ module Make (Inputs : Intf.Ledger_input_intf) : Intf.S = struct
133134
| `New backing_type ->
134135
lazy
135136
( `Root
136-
(Ledger.Root.create_temporary ~logger ~backing_type ~depth ())
137+
(Root_ledger.create_temporary ~logger ~backing_type ~depth ())
137138
, true )
138139
| `Path (directory_name, backing_type) ->
139140
lazy
140141
( `Root
141-
(Ledger.Root.create ~logger
142+
(Root_ledger.create ~logger
142143
~config:
143-
(Ledger.Root.Config.with_directory ~backing_type
144+
(Root_ledger.Config.with_directory ~backing_type
144145
~directory_name )
145146
~depth () )
146147
, false )
@@ -150,7 +151,7 @@ module Make (Inputs : Intf.Ledger_input_intf) : Intf.S = struct
150151
| `Ephemeral ledger ->
151152
ledger
152153
| `Root ledger ->
153-
Ledger.Root.as_masked ledger
154+
Root_ledger.as_masked ledger
154155
in
155156
( if insert_accounts then
156157
let addrs_and_accounts =
@@ -169,12 +170,12 @@ module Make (Inputs : Intf.Ledger_input_intf) : Intf.S = struct
169170
match backing_ledger with
170171
| `Ephemeral ledger ->
171172
let open Or_error.Let_syntax in
172-
let root = Ledger.Root.create ~logger ~config ~depth () in
173+
let root = Root_ledger.create ~logger ~config ~depth () in
173174
(* We are transferring to an unmasked view of the root, so this is
174175
used solely for the transfer side effect *)
175176
let%map _dest =
176177
Ledger_transfer_mask.transfer_accounts ~src:ledger
177-
~dest:(Ledger.Root.as_unmasked root)
178+
~dest:(Root_ledger.as_unmasked root)
178179
in
179180
root
180181
| `Root ledger ->
@@ -241,15 +242,15 @@ module Packed = struct
241242
end
242243

243244
module Of_ledger (T : sig
244-
val backing_ledger : Ledger.Root.t Lazy.t
245+
val backing_ledger : Root_ledger.t Lazy.t
245246

246247
val depth : int
247248
end) : Intf.S = struct
248249
include T
249250

250251
let backing_ledger =
251252
Lazy.map
252-
~f:(fun ledger -> (ledger, Ledger.Root.as_masked ledger))
253+
~f:(fun ledger -> (ledger, Root_ledger.as_masked ledger))
253254
backing_ledger
254255

255256
let t = Lazy.map ~f:snd backing_ledger

src/lib/genesis_ledger/intf.ml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
open Mina_base
22
open Signature_lib
33
open Core_kernel
4+
module Root_ledger = Mina_ledger.Root
45

56
module Timing = struct
67
type t = (int, int, int, int) Account_timing.Poly.t
@@ -63,8 +64,8 @@ module type Ledger_input_intf = sig
6364

6465
val directory :
6566
[ `Ephemeral
66-
| `New of Mina_ledger.Ledger.Root.Config.backing_type
67-
| `Path of string * Mina_ledger.Ledger.Root.Config.backing_type ]
67+
| `New of Root_ledger.Config.backing_type
68+
| `Path of string * Root_ledger.Config.backing_type ]
6869

6970
val depth : int
7071

@@ -76,10 +77,7 @@ module type S = sig
7677

7778
(** Create a new root ledger that is equal in state to the genesis ledger *)
7879
val create_root :
79-
config:Mina_ledger.Ledger.Root.Config.t
80-
-> depth:int
81-
-> unit
82-
-> Mina_ledger.Ledger.Root.t Or_error.t
80+
config:Root_ledger.Config.t -> depth:int -> unit -> Root_ledger.t Or_error.t
8381

8482
val depth : int
8583

0 commit comments

Comments
 (0)