@@ -276,19 +276,22 @@ module Make_str (A : Wire_types.Concrete) = struct
276276 module Snapshot = struct
277277 module Ledger_snapshot = struct
278278 type t =
279- | Genesis_epoch_ledger of Mina_ledger.Ledger .t
279+ | Genesis_epoch_ledger of Genesis_ledger.Packed .t
280280 | Ledger_root of Mina_ledger.Ledger.Root .t
281281
282282 let merkle_root = function
283- | Genesis_epoch_ledger ledger ->
284- Mina_ledger.Ledger. merkle_root ledger
283+ | Genesis_epoch_ledger packed ->
284+ Genesis_ledger.Packed. t packed
285+ |> Lazy. force |> Mina_ledger.Ledger. merkle_root
285286 | Ledger_root ledger ->
286287 Mina_ledger.Ledger.Root. merkle_root ledger
287288
288289 let compute_delegatee_table keys ledger =
289290 match ledger with
290291 | Genesis_epoch_ledger ledger ->
291- compute_delegatee_table_genesis_ledger keys ledger
292+ Genesis_ledger.Packed. t ledger
293+ |> Lazy. force
294+ |> compute_delegatee_table_genesis_ledger keys
292295 | Ledger_root ledger ->
293296 compute_delegatee_table_ledger_root keys ledger
294297
@@ -308,7 +311,8 @@ module Make_str (A : Wire_types.Concrete) = struct
308311 let ledger_subset keys ledger =
309312 let open Mina_ledger in
310313 match ledger with
311- | Genesis_epoch_ledger ledger ->
314+ | Genesis_epoch_ledger packed ->
315+ let ledger = Lazy. force @@ Genesis_ledger.Packed. t packed in
312316 Sparse_ledger. of_ledger_subset_exn ledger keys
313317 | Ledger_root db_ledger ->
314318 let ledger = Ledger.Root. as_masked db_ledger in
@@ -454,7 +458,7 @@ module Make_str (A : Wire_types.Concrete) = struct
454458 Snapshot.Ledger_snapshot. Ledger_root
455459 (Mina_ledger.Ledger.Root. create_single ~directory_name: location
456460 ~depth: constraint_constants.ledger_depth () ) )
457- else Genesis_epoch_ledger ( Lazy. force genesis_epoch_ledger)
461+ else Genesis_epoch_ledger genesis_epoch_ledger
458462
459463 let create block_producer_pubkeys ~context :(module Context : CONTEXT )
460464 ~genesis_ledger ~genesis_epoch_data ~epoch_ledger_location
@@ -965,7 +969,8 @@ module Make_str (A : Wire_types.Concrete) = struct
965969 ]
966970
967971 let genesis ~(genesis_epoch_data : Genesis_epoch_data.Data.t ) =
968- { Poly. ledger = Epoch_ledger. genesis ~ledger: genesis_epoch_data.ledger
972+ let ledger = Genesis_ledger.Packed. t genesis_epoch_data.ledger in
973+ { Poly. ledger = Epoch_ledger. genesis ~ledger
969974 ; seed = genesis_epoch_data.seed
970975 ; start_checkpoint = Mina_base.State_hash. (of_hash zero)
971976 ; lock_checkpoint = Lock_checkpoint. null
@@ -1995,7 +2000,9 @@ module Make_str (A : Wire_types.Concrete) = struct
19952000 (Length. to_int constants.sub_windows_per_window - 1 )
19962001 ~f: (Fn. const max_sub_window_density)
19972002 ; last_vrf_output = Vrf.Output.Truncated. dummy
1998- ; total_currency = genesis_ledger_total_currency ~ledger: genesis_ledger
2003+ ; total_currency =
2004+ genesis_ledger_total_currency
2005+ ~ledger: (Genesis_ledger.Packed. t genesis_ledger)
19992006 ; curr_global_slot_since_hard_fork = Global_slot. zero ~constants
20002007 ; global_slot_since_genesis
20012008 ; staking_epoch_data =
@@ -2027,7 +2034,8 @@ module Make_str (A : Wire_types.Concrete) = struct
20272034 }
20282035 in
20292036 let snarked_ledger_hash =
2030- Lazy. force genesis_ledger |> Mina_ledger.Ledger. merkle_root
2037+ Genesis_ledger.Packed. t genesis_ledger
2038+ |> Lazy. force |> Mina_ledger.Ledger. merkle_root
20312039 |> Mina_base.Frozen_ledger_hash. of_ledger_hash
20322040 in
20332041 let genesis_winner_pk = fst Vrf.Precomputed. genesis_winner in
@@ -2642,26 +2650,15 @@ module Make_str (A : Wire_types.Concrete) = struct
26422650 match snapshot.ledger with
26432651 | Ledger_snapshot. Ledger_root ledger ->
26442652 Ok ledger
2645- | Ledger_snapshot. Genesis_epoch_ledger ledger ->
2646- let module Ledger_transfer =
2647- Mina_ledger.Ledger_transfer. Make
2648- (Mina_ledger. Ledger )
2649- (Mina_ledger.Ledger.Any_ledger. M )
2650- in
2653+ | Ledger_snapshot. Genesis_epoch_ledger packed ->
26512654 let fresh_root_ledger =
26522655 Mina_ledger.Ledger.Root. create_single
26532656 ~directory_name: snapshot_location
26542657 ~depth: Context. constraint_constants.ledger_depth
26552658 ()
26562659 in
2657- (* TODO: replace with more efficient root->root transfer *)
2658- let % map.Or_error _fresh_root_ledger =
2659- Ledger_transfer. transfer_accounts ~src: ledger
2660- ~dest:
2661- (Mina_ledger.Ledger.Root. as_unmasked
2662- fresh_root_ledger )
2663- in
2664- fresh_root_ledger )
2660+ Genesis_ledger.Packed. populate_root packed
2661+ fresh_root_ledger )
26652662 in
26662663 match snapshot_id with
26672664 | Staking_epoch_snapshot ->
@@ -3103,7 +3100,7 @@ module Make_str (A : Wire_types.Concrete) = struct
31033100
31043101 let % test " Receive a valid consensus_state with a bit of delay" =
31053102 let constants = Lazy. force Constants. for_unit_tests in
3106- let genesis_ledger = Genesis_ledger. ( Packed. t for_unit_tests) in
3103+ let genesis_ledger = Genesis_ledger. for_unit_tests in
31073104 let genesis_epoch_data = Genesis_epoch_data. for_unit_tests in
31083105 let negative_one =
31093106 Consensus_state. negative_one ~genesis_ledger ~genesis_epoch_data
@@ -3126,7 +3123,7 @@ module Make_str (A : Wire_types.Concrete) = struct
31263123 let % test " Receive an invalid consensus_state" =
31273124 let epoch = Epoch. of_int 5 in
31283125 let constants = Lazy. force Constants. for_unit_tests in
3129- let genesis_ledger = Genesis_ledger. ( Packed. t for_unit_tests) in
3126+ let genesis_ledger = Genesis_ledger. for_unit_tests in
31303127 let genesis_epoch_data = Genesis_epoch_data. for_unit_tests in
31313128 let negative_one =
31323129 Consensus_state. negative_one ~genesis_ledger ~genesis_epoch_data
@@ -3428,8 +3425,8 @@ module Make_str (A : Wire_types.Concrete) = struct
34283425 let previous_consensus_state =
34293426 Consensus_state. create_genesis
34303427 ~negative_one_protocol_state_hash: previous_protocol_state_hash
3431- ~genesis_ledger: Genesis_ledger. t ~genesis_epoch_data
3432- ~constraint_constants ~constants
3428+ ~genesis_ledger: ( module Genesis_ledger )
3429+ ~genesis_epoch_data ~ constraint_constants ~constants
34333430 in
34343431 (* If this is a fork then check blockchain length and global_slot_since_genesis have been set correctly*)
34353432 ( match constraint_constants.fork with
@@ -3646,8 +3643,8 @@ module Make_str (A : Wire_types.Concrete) = struct
36463643 let previous_consensus_state =
36473644 Consensus_state. create_genesis
36483645 ~negative_one_protocol_state_hash: previous_protocol_state_hash
3649- ~genesis_ledger: Genesis_ledger. t ~genesis_epoch_data
3650- ~constraint_constants ~constants
3646+ ~genesis_ledger: ( module Genesis_ledger )
3647+ ~genesis_epoch_data ~ constraint_constants ~constants
36513648 in
36523649 let seed = previous_consensus_state.staking_epoch_data.seed in
36533650 let maybe_sk, account = Genesis_ledger. largest_account_exn () in
@@ -3665,7 +3662,7 @@ module Make_str (A : Wire_types.Concrete) = struct
36653662 in
36663663 let epoch_snapshot =
36673664 { Local_state.Snapshot. delegatee_table
3668- ; ledger = Genesis_epoch_ledger ledger
3665+ ; ledger = Genesis_epoch_ledger ( module Genesis_ledger )
36693666 }
36703667 in
36713668 let balance = Balance. to_nanomina_int account.balance in
0 commit comments