Skip to content

Commit e00273e

Browse files
authored
Merge pull request #17641 from MinaProtocol/lyh/improve-genesis-ledger-creation
Improve Genesis Ledger Creation
2 parents 320b48d + f2470c6 commit e00273e

File tree

26 files changed

+105
-104
lines changed

26 files changed

+105
-104
lines changed

src/app/cli/src/cli_entrypoint/mina_cli_entrypoint.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,8 +1142,7 @@ let setup_daemon logger ~itn_features ~default_snark_worker_fee =
11421142
let consensus_local_state =
11431143
Consensus.Data.Local_state.create
11441144
~context:(module Context)
1145-
~genesis_ledger:
1146-
(Precomputed_values.genesis_ledger precomputed_values)
1145+
~genesis_ledger:precomputed_values.genesis_ledger
11471146
~genesis_epoch_data:precomputed_values.genesis_epoch_data
11481147
~epoch_ledger_location
11491148
( Option.map block_production_keypair ~f:(fun keypair ->

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ let setup_local_server ?(client_trustlist = []) ?rest_server_port
306306
| Ok ledger -> (
307307
match ledger with
308308
| Genesis_epoch_ledger l ->
309-
let%map accts = Mina_ledger.Ledger.to_list l in
309+
let l_inner = Lazy.force @@ Genesis_ledger.Packed.t l in
310+
let%map accts = Mina_ledger.Ledger.to_list l_inner in
310311
Ok accts
311312
| Ledger_root l ->
312313
let casted = Mina_ledger.Ledger.Root.as_unmasked l in

src/app/cli/src/init/test_ledger_application.ml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,8 @@ let mk_tx ~transfer_parties_get_actions_events ~event_elements ~action_elements
8585
let generate_protocol_state_stub ~consensus_constants ~constraint_constants
8686
ledger =
8787
let open Staged_ledger_diff in
88-
Protocol_state.negative_one
89-
~genesis_ledger:(lazy ledger)
90-
~genesis_epoch_data:None ~constraint_constants ~consensus_constants
91-
~genesis_body_reference
88+
Protocol_state.negative_one ~genesis_ledger:ledger ~genesis_epoch_data:None
89+
~constraint_constants ~consensus_constants ~genesis_body_reference
9290

9391
let apply_txs ~transfer_parties_get_actions_events ~action_elements
9492
~event_elements ~constraint_constants ~first_partition_slots ~no_new_stack
@@ -186,9 +184,16 @@ let test ~privkey_path ~ledger_path ?prev_block_path ~first_partition_slots
186184
O1trace.thread "mina"
187185
@@ fun () ->
188186
let%bind keypair = read_privkey privkey_path in
187+
188+
let module Test_genesis_ledger = Genesis_ledger.Make (struct
189+
include Test_genesis_ledger
190+
191+
let directory = `Path ledger_path
192+
193+
let depth = constraint_constants.ledger_depth
194+
end) in
189195
let init_ledger =
190-
Ledger.create ~directory_name:ledger_path
191-
~depth:constraint_constants.ledger_depth ()
196+
Lazy.force @@ Genesis_ledger.Packed.t (module Test_genesis_ledger)
192197
in
193198
let prev_protocol_state =
194199
let%map.Option prev_block_path = prev_block_path in
@@ -207,7 +212,7 @@ let test ~privkey_path ~ledger_path ?prev_block_path ~first_partition_slots
207212
match prev_protocol_state with
208213
| None ->
209214
generate_protocol_state_stub ~consensus_constants ~constraint_constants
210-
init_ledger
215+
(module Test_genesis_ledger)
211216
| Some p ->
212217
p
213218
in

src/app/zkapp_test_transaction/lib/commands.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ let gen_proof ?(zkapp_account = None) (zkapp_command : Zkapp_command.t)
109109
let open Staged_ledger_diff in
110110
(*not using Precomputed_values.for_unit_test because of dependency cycle*)
111111
Mina_state.Genesis_protocol_state.t
112-
~genesis_ledger:Genesis_ledger.(Packed.t for_unit_tests)
112+
~genesis_ledger:Genesis_ledger.for_unit_tests
113113
~genesis_epoch_data:Consensus.Genesis_epoch_data.for_unit_tests
114114
~constraint_constants ~consensus_constants ~genesis_body_reference
115115
in
@@ -171,7 +171,7 @@ let generate_zkapp_txn (keypair : Signature_lib.Keypair.t) (ledger : Ledger.t)
171171
let compile_time_genesis =
172172
(*not using Precomputed_values.for_unit_test because of dependency cycle*)
173173
Mina_state.Genesis_protocol_state.t
174-
~genesis_ledger:Genesis_ledger.(Packed.t for_unit_tests)
174+
~genesis_ledger:Genesis_ledger.for_unit_tests
175175
~genesis_epoch_data:Consensus.Genesis_epoch_data.for_unit_tests
176176
~constraint_constants ~consensus_constants ~genesis_body_reference
177177
in

src/lib/consensus/genesis_epoch_data.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
module Data = struct
2-
type t =
3-
{ ledger : Mina_ledger.Ledger.t Lazy.t; seed : Mina_base.Epoch_seed.t }
2+
type t = { ledger : Genesis_ledger.Packed.t; seed : Mina_base.Epoch_seed.t }
43
end
54

65
type tt = { staking : Data.t; next : Data.t option }

src/lib/consensus/intf.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ module type S = sig
297297
module Genesis_epoch_data : sig
298298
module Data : sig
299299
type t =
300-
{ ledger : Mina_ledger.Ledger.t Lazy.t; seed : Mina_base.Epoch_seed.t }
300+
{ ledger : Genesis_ledger.Packed.t; seed : Mina_base.Epoch_seed.t }
301301
end
302302

303303
type tt = { staking : Data.t; next : Data.t option }
@@ -316,7 +316,7 @@ module type S = sig
316316

317317
module Ledger_snapshot : sig
318318
type t =
319-
| Genesis_epoch_ledger of Mina_ledger.Ledger.t
319+
| Genesis_epoch_ledger of Genesis_ledger.Packed.t
320320
| Ledger_root of Mina_ledger.Ledger.Root.t
321321

322322
val close : t -> unit
@@ -330,7 +330,7 @@ module type S = sig
330330
val create :
331331
Signature_lib.Public_key.Compressed.Set.t
332332
-> context:(module CONTEXT)
333-
-> genesis_ledger:Mina_ledger.Ledger.t Lazy.t
333+
-> genesis_ledger:Genesis_ledger.Packed.t
334334
-> genesis_epoch_data:Genesis_epoch_data.t
335335
-> epoch_ledger_location:string
336336
-> genesis_state_hash:State_hash.t
@@ -507,7 +507,7 @@ module type S = sig
507507
-> (var, Value.t) Snark_params.Tick.Typ.t
508508

509509
val negative_one :
510-
genesis_ledger:Mina_ledger.Ledger.t Lazy.t
510+
genesis_ledger:Genesis_ledger.Packed.t
511511
-> genesis_epoch_data:Genesis_epoch_data.t
512512
-> constants:Constants.t
513513
-> constraint_constants:Genesis_constants.Constraint_constants.t
@@ -516,15 +516,15 @@ module type S = sig
516516
val create_genesis_from_transition :
517517
negative_one_protocol_state_hash:Mina_base.State_hash.t
518518
-> consensus_transition:Consensus_transition.Value.t
519-
-> genesis_ledger:Mina_ledger.Ledger.t Lazy.t
519+
-> genesis_ledger:Genesis_ledger.Packed.t
520520
-> genesis_epoch_data:Genesis_epoch_data.t
521521
-> constraint_constants:Genesis_constants.Constraint_constants.t
522522
-> constants:Constants.t
523523
-> Value.t
524524

525525
val create_genesis :
526526
negative_one_protocol_state_hash:Mina_base.State_hash.t
527-
-> genesis_ledger:Mina_ledger.Ledger.t Lazy.t
527+
-> genesis_ledger:Genesis_ledger.Packed.t
528528
-> genesis_epoch_data:Genesis_epoch_data.t
529529
-> constraint_constants:Genesis_constants.Constraint_constants.t
530530
-> constants:Constants.t

src/lib/consensus/proof_of_stake.ml

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/lib/fake_network/fake_network.ml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,10 @@ module Generator = struct
230230
Filename.temp_dir_name ^/ "epoch_ledger"
231231
^ (Uuid_unix.create () |> Uuid.to_string)
232232
in
233-
let genesis_ledger = Precomputed_values.genesis_ledger precomputed_values in
234233
let consensus_local_state =
235234
Consensus.Data.Local_state.create Public_key.Compressed.Set.empty
236235
~context:(module Context)
237-
~genesis_ledger
236+
~genesis_ledger:precomputed_values.genesis_ledger
238237
~genesis_epoch_data:precomputed_values.genesis_epoch_data
239238
~epoch_ledger_location
240239
~genesis_state_hash:
@@ -273,11 +272,10 @@ module Generator = struct
273272
Filename.temp_dir_name ^/ "epoch_ledger"
274273
^ (Uuid_unix.create () |> Uuid.to_string)
275274
in
276-
let genesis_ledger = Precomputed_values.genesis_ledger precomputed_values in
277275
let consensus_local_state =
278276
Consensus.Data.Local_state.create Public_key.Compressed.Set.empty
279277
~context:(module Context)
280-
~genesis_ledger
278+
~genesis_ledger:precomputed_values.genesis_ledger
281279
~genesis_epoch_data:precomputed_values.genesis_epoch_data
282280
~epoch_ledger_location
283281
~genesis_state_hash:

src/lib/genesis_ledger_helper/genesis_ledger_helper.ml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -604,8 +604,7 @@ module Epoch_data = struct
604604
in
605605
[%log trace] "Loaded staking epoch ledger from $ledger_file"
606606
~metadata:[ ("ledger_file", `String ledger_file) ] ;
607-
( { Consensus.Genesis_epoch_data.Data.ledger =
608-
Genesis_ledger.Packed.t staking_ledger
607+
( { Consensus.Genesis_epoch_data.Data.ledger = staking_ledger
609608
; seed = Epoch_seed.of_base58_check_exn config.staking.seed
610609
}
611610
, { config.staking with ledger = config' } )
@@ -622,8 +621,7 @@ module Epoch_data = struct
622621
[%log trace] "Loaded next epoch ledger from $ledger_file"
623622
~metadata:[ ("ledger_file", `String ledger_file) ] ;
624623
( Some
625-
{ Consensus.Genesis_epoch_data.Data.ledger =
626-
Genesis_ledger.Packed.t next_ledger
624+
{ Consensus.Genesis_epoch_data.Data.ledger = next_ledger
627625
; seed = Epoch_seed.of_base58_check_exn seed
628626
}
629627
, Some { Runtime_config.Epoch_data.Data.ledger = config''; seed }
@@ -707,8 +705,7 @@ module Genesis_proof = struct
707705
in
708706
let open Staged_ledger_diff in
709707
let protocol_state_with_hashes =
710-
Mina_state.Genesis_protocol_state.t
711-
~genesis_ledger:(Genesis_ledger.Packed.t ledger)
708+
Mina_state.Genesis_protocol_state.t ~genesis_ledger:ledger
712709
~genesis_epoch_data ~constraint_constants ~consensus_constants
713710
~genesis_body_reference
714711
in

src/lib/mina_graphql/mina_graphql.ml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,10 +2096,8 @@ module Queries = struct
20962096
; hash = { State_hash.State_hashes.state_hash = hash; _ }
20972097
} =
20982098
let open Staged_ledger_diff in
2099-
Genesis_protocol_state.t
2100-
~genesis_ledger:(Genesis_ledger.Packed.t genesis_ledger)
2101-
~genesis_epoch_data ~constraint_constants ~consensus_constants
2102-
~genesis_body_reference
2099+
Genesis_protocol_state.t ~genesis_ledger ~genesis_epoch_data
2100+
~constraint_constants ~consensus_constants ~genesis_body_reference
21032101
in
21042102
let winner = fst Consensus_state_hooks.genesis_winner in
21052103
{ With_hash.data =
@@ -2601,7 +2599,8 @@ module Queries = struct
26012599
let cast_ledger = function
26022600
| Consensus.Data.Local_state.Snapshot.Ledger_snapshot.Genesis_epoch_ledger
26032601
l ->
2604-
Ledger.Any_ledger.cast (module Ledger) l
2602+
let l_inner = Lazy.force @@ Genesis_ledger.Packed.t l in
2603+
Ledger.Any_ledger.cast (module Ledger) l_inner
26052604
| Consensus.Data.Local_state.Snapshot.Ledger_snapshot.Ledger_root l ->
26062605
Ledger.Root.as_unmasked l
26072606
in

0 commit comments

Comments
 (0)