Skip to content

Commit 05213da

Browse files
authored
Merge pull request #16093 from MinaProtocol/fabrizio-m/wide-merkle-queries
Wide merkle query
2 parents 8e66adb + 36801fc commit 05213da

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+960
-303
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ let setup_daemon logger ~itn_features =
10061006
let module Context = struct
10071007
let logger = logger
10081008

1009-
let precomputed_values = precomputed_values
1009+
let compile_config = precomputed_values.compile_config
10101010

10111011
let constraint_constants = precomputed_values.constraint_constants
10121012

src/config/dev.mlh

+4
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,7 @@
7878
[%%undef compaction_interval]
7979
[%%define vrf_poll_interval 0]
8080
[%%undef zkapp_cmd_limit]
81+
82+
(* Sync ledger query/response size*)
83+
[%%define sync_ledger_max_subtree_depth 4]
84+
[%%define sync_ledger_default_subtree_depth 3]

src/config/devnet.mlh

+4
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@
7373
[%%define vrf_poll_interval 5000]
7474
[%%define zkapp_cmd_limit 24]
7575
[%%undef scan_state_transaction_capacity_log_2]
76+
77+
(* Constants determining sync ledger query/response size*)
78+
[%%define sync_ledger_max_subtree_depth 8]
79+
[%%define sync_ledger_default_subtree_depth 6]

src/config/lightnet.mlh

+4
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,7 @@
7272
[%%define compaction_interval 360000]
7373
[%%define vrf_poll_interval 5000]
7474
[%%undef zkapp_cmd_limit]
75+
76+
(* Constants determining sync ledger query/response size*)
77+
[%%define sync_ledger_max_subtree_depth 8]
78+
[%%define sync_ledger_default_subtree_depth 6]

src/config/mainnet.mlh

+4
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@
7373
[%%define vrf_poll_interval 5000]
7474
[%%define zkapp_cmd_limit 24]
7575
[%%undef scan_state_transaction_capacity_log_2]
76+
77+
(* Constants determining sync ledger query/response size*)
78+
[%%define sync_ledger_max_subtree_depth 8]
79+
[%%define sync_ledger_default_subtree_depth 6]

src/lib/block_producer/block_producer.ml

+16-6
Original file line numberDiff line numberDiff line change
@@ -819,12 +819,17 @@ let produce ~genesis_breadcrumb ~context:(module Context : CONTEXT) ~prover
819819
(Mina_base.State_hash.to_base58_check
820820
protocol_state_hashes.state_hash ) )
821821
] ;
822+
let module Consensus_context = struct
823+
include Context
824+
825+
let compile_config = precomputed_values.compile_config
826+
end in
822827
Internal_tracing.with_state_hash protocol_state_hashes.state_hash
823828
@@ fun () ->
824829
Debug_assert.debug_assert (fun () ->
825830
[%test_result: [ `Take | `Keep ]]
826831
(Consensus.Hooks.select
827-
~context:(module Context)
832+
~context:(module Consensus_context)
828833
~existing:
829834
(With_hash.map ~f:Mina_block.consensus_state
830835
previous_transition )
@@ -839,7 +844,7 @@ let produce ~genesis_breadcrumb ~context:(module Context : CONTEXT) ~prover
839844
in
840845
[%test_result: [ `Take | `Keep ]]
841846
(Consensus.Hooks.select
842-
~context:(module Context)
847+
~context:(module Consensus_context)
843848
~existing:root_consensus_state_with_hashes
844849
~candidate:consensus_state_with_hashes )
845850
~expect:`Take
@@ -908,7 +913,7 @@ let produce ~genesis_breadcrumb ~context:(module Context : CONTEXT) ~prover
908913
`This_block_was_not_received_via_gossip
909914
>>= Validation.validate_frontier_dependencies
910915
~to_header:Mina_block.header
911-
~context:(module Context)
916+
~context:(module Consensus_context)
912917
~root_block:
913918
( Transition_frontier.root frontier
914919
|> Breadcrumb.block_with_hash )
@@ -1412,10 +1417,15 @@ let run_precomputed ~context:(module Context : CONTEXT) ~verifier ~trust_system
14121417
Header.protocol_state
14131418
@@ Mina_block.header (With_hash.data previous_transition)
14141419
in
1420+
let module Consensus_context = struct
1421+
include Context
1422+
1423+
let compile_config = precomputed_values.compile_config
1424+
end in
14151425
Debug_assert.debug_assert (fun () ->
14161426
[%test_result: [ `Take | `Keep ]]
14171427
(Consensus.Hooks.select
1418-
~context:(module Context)
1428+
~context:(module Consensus_context)
14191429
~existing:
14201430
(With_hash.map ~f:Mina_block.consensus_state
14211431
previous_transition )
@@ -1430,7 +1440,7 @@ let run_precomputed ~context:(module Context : CONTEXT) ~verifier ~trust_system
14301440
in
14311441
[%test_result: [ `Take | `Keep ]]
14321442
(Consensus.Hooks.select
1433-
~context:(module Context)
1443+
~context:(module Consensus_context)
14341444
~existing:root_consensus_state_with_hashes
14351445
~candidate:consensus_state_with_hashes )
14361446
~expect:`Take
@@ -1468,7 +1478,7 @@ let run_precomputed ~context:(module Context : CONTEXT) ~verifier ~trust_system
14681478
previous_protocol_state )
14691479
>>= Validation.validate_frontier_dependencies
14701480
~to_header:Mina_block.header
1471-
~context:(module Context)
1481+
~context:(module Consensus_context)
14721482
~root_block:
14731483
( Transition_frontier.root frontier
14741484
|> Breadcrumb.block_with_hash )

src/lib/bootstrap_controller/bootstrap_controller.ml

+37-28
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ module type CONTEXT = sig
1717
val constraint_constants : Genesis_constants.Constraint_constants.t
1818

1919
val consensus_constants : Consensus.Constants.t
20-
21-
val compile_config : Mina_compile_config.t
2220
end
2321

2422
type Structured_log_events.t += Bootstrap_complete
@@ -65,9 +63,11 @@ let time_deferred deferred =
6563
(Time.diff end_time start_time, result)
6664

6765
let worth_getting_root ({ context = (module Context); _ } as t) candidate =
68-
let module Context = struct
66+
let module Consensus_context = struct
6967
include Context
7068

69+
let compile_config = precomputed_values.compile_config
70+
7171
let logger =
7272
Logger.extend logger
7373
[ ( "selection_context"
@@ -76,7 +76,7 @@ let worth_getting_root ({ context = (module Context); _ } as t) candidate =
7676
end in
7777
Consensus.Hooks.equal_select_status `Take
7878
@@ Consensus.Hooks.select
79-
~context:(module Context)
79+
~context:(module Consensus_context)
8080
~existing:
8181
( t.best_seen_transition |> Mina_block.Validation.block_with_hash
8282
|> With_hash.map ~f:Mina_block.consensus_state )
@@ -152,7 +152,7 @@ let to_consensus_state h =
152152
the existing one, then reset the Sync_ledger's target by calling
153153
[start_sync_job_with_peer] function. *)
154154
let on_transition ({ context = (module Context); _ } as t) ~sender
155-
~root_sync_ledger ~genesis_constants candidate_header =
155+
~root_sync_ledger candidate_header =
156156
let open Context in
157157
let candidate_consensus_state =
158158
With_hash.map ~f:to_consensus_state candidate_header
@@ -175,7 +175,7 @@ let on_transition ({ context = (module Context); _ } as t) ~sender
175175
match%bind
176176
Sync_handler.Root.verify
177177
~context:(module Context)
178-
~verifier:t.verifier ~genesis_constants candidate_consensus_state
178+
~verifier:t.verifier candidate_consensus_state
179179
peer_root_with_proof.data
180180
with
181181
| Ok (`Root root, `Best_tip best_tip) ->
@@ -189,7 +189,7 @@ let on_transition ({ context = (module Context); _ } as t) ~sender
189189
incoming transitions, add those to the transition_cache and calls
190190
[on_transition] function. *)
191191
let sync_ledger ({ context = (module Context); _ } as t) ~preferred
192-
~root_sync_ledger ~transition_graph ~sync_ledger_reader ~genesis_constants =
192+
~root_sync_ledger ~transition_graph ~sync_ledger_reader =
193193
let open Context in
194194
let query_reader = Sync_ledger.Db.query_reader root_sync_ledger in
195195
let response_writer = Sync_ledger.Db.answer_writer root_sync_ledger in
@@ -232,11 +232,15 @@ let sync_ledger ({ context = (module Context); _ } as t) ~preferred
232232
] ;
233233

234234
Deferred.ignore_m
235-
@@ on_transition t ~sender ~root_sync_ledger ~genesis_constants
236-
header_with_hash )
235+
@@ on_transition t ~sender ~root_sync_ledger header_with_hash )
237236
else Deferred.unit )
238237

239238
let external_transition_compare ~context:(module Context : CONTEXT) =
239+
let module Consensus_context = struct
240+
include Context
241+
242+
let compile_config = precomputed_values.compile_config
243+
end in
240244
let get_consensus_state =
241245
Fn.compose Protocol_state.consensus_state Mina_block.Header.protocol_state
242246
in
@@ -250,7 +254,9 @@ let external_transition_compare ~context:(module Context : CONTEXT) =
250254
then 0
251255
else if
252256
Consensus.Hooks.equal_select_status `Keep
253-
@@ Consensus.Hooks.select ~context:(module Context) ~existing ~candidate
257+
@@ Consensus.Hooks.select
258+
~context:(module Consensus_context)
259+
~existing ~candidate
254260
then -1
255261
else 1 )
256262
~f:(With_hash.map ~f:get_consensus_state)
@@ -273,10 +279,6 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~verifier ~network
273279
~persistent_frontier ~initial_root_transition ~catchup_mode =
274280
let open Context in
275281
O1trace.thread "bootstrap" (fun () ->
276-
let genesis_constants =
277-
Precomputed_values.genesis_constants precomputed_values
278-
in
279-
let constraint_constants = precomputed_values.constraint_constants in
280282
let rec loop previous_cycles =
281283
let sync_ledger_pipe = "sync ledger pipe" in
282284
let sync_ledger_reader, sync_ledger_writer =
@@ -331,14 +333,21 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~verifier ~network
331333
temp_persistent_root_instance
332334
in
333335
(* step 1. download snarked_ledger *)
336+
let module Consensus_context = struct
337+
include Context
338+
339+
let compile_config = precomputed_values.compile_config
340+
end in
334341
let%bind sync_ledger_time, (hash, sender, expected_staged_ledger_hash) =
335342
time_deferred
336343
(let root_sync_ledger =
337-
Sync_ledger.Db.create temp_snarked_ledger ~logger ~trust_system
344+
Sync_ledger.Db.create temp_snarked_ledger
345+
~context:(module Consensus_context)
346+
~trust_system
338347
in
339348
don't_wait_for
340349
(sync_ledger t ~preferred:preferred_peers ~root_sync_ledger
341-
~transition_graph ~sync_ledger_reader ~genesis_constants ) ;
350+
~transition_graph ~sync_ledger_reader ) ;
342351
(* We ignore the resulting ledger returned here since it will always
343352
* be the same as the ledger we started with because we are syncing
344353
* a db ledger. *)
@@ -565,7 +574,7 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~verifier ~network
565574
[%log info] "Synchronizing consensus local state" ;
566575
let%map result =
567576
Consensus.Hooks.sync_local_state
568-
~context:(module Context)
577+
~context:(module Consensus_context)
569578
~local_state:consensus_local_state ~trust_system
570579
~glue_sync_ledger:
571580
(Mina_networking.glue_sync_ledger t.network)
@@ -616,7 +625,7 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~verifier ~network
616625
bootstrapping: " ^ msg )
617626
in
618627
Transition_frontier.load
619-
~context:(module Context)
628+
~context:(module Consensus_context)
620629
~retry_with_fresh_db:false ~verifier ~consensus_local_state
621630
~persistent_root ~persistent_frontier ~catchup_mode ()
622631
>>| function
@@ -658,7 +667,7 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~verifier ~network
658667
in
659668
Consensus.Hooks.equal_select_status `Take
660669
@@ Consensus.Hooks.select
661-
~context:(module Context)
670+
~context:(module Consensus_context)
662671
~existing:root_consensus_state
663672
~candidate:
664673
(With_hash.map
@@ -741,8 +750,6 @@ let%test_module "Bootstrap_controller tests" =
741750

742751
let constraint_constants = precomputed_values.constraint_constants
743752

744-
let compile_config = Mina_compile_config.For_unit_tests.t
745-
746753
module Context = struct
747754
let logger = logger
748755

@@ -752,8 +759,6 @@ let%test_module "Bootstrap_controller tests" =
752759
Genesis_constants.For_unit_tests.Constraint_constants.t
753760

754761
let consensus_constants = precomputed_values.consensus_constants
755-
756-
let compile_config = compile_config
757762
end
758763

759764
let verifier =
@@ -800,8 +805,7 @@ let%test_module "Bootstrap_controller tests" =
800805
let%bind fake_network =
801806
Fake_network.Generator.(
802807
gen ~precomputed_values ~verifier ~max_frontier_length
803-
~compile_config [ fresh_peer; fresh_peer ]
804-
~use_super_catchup:false)
808+
[ fresh_peer; fresh_peer ] ~use_super_catchup:false)
805809
in
806810
let%map make_branch =
807811
Transition_frontier.Breadcrumb.For_tests.gen_seq ~precomputed_values
@@ -829,16 +833,21 @@ let%test_module "Bootstrap_controller tests" =
829833
let bootstrap =
830834
make_non_running_bootstrap ~genesis_root ~network:me.network
831835
in
836+
let module Consensus_context = struct
837+
include Context
838+
839+
let compile_config = precomputed_values.compile_config
840+
end in
832841
let root_sync_ledger =
833842
Sync_ledger.Db.create
834843
(Transition_frontier.root_snarked_ledger me.state.frontier)
835-
~logger ~trust_system
844+
~context:(module Consensus_context)
845+
~trust_system
836846
in
837847
Async.Thread_safe.block_on_async_exn (fun () ->
838848
let sync_deferred =
839849
sync_ledger bootstrap ~root_sync_ledger ~transition_graph
840850
~preferred:[] ~sync_ledger_reader
841-
~genesis_constants:Genesis_constants.For_unit_tests.t
842851
in
843852
let%bind () =
844853
Deferred.List.iter branch ~f:(fun breadcrumb ->
@@ -935,7 +944,7 @@ let%test_module "Bootstrap_controller tests" =
935944
Quickcheck.test ~trials:1
936945
Fake_network.Generator.(
937946
gen ~precomputed_values ~verifier ~max_frontier_length
938-
~use_super_catchup:false ~compile_config
947+
~use_super_catchup:false
939948
[ fresh_peer
940949
; peer_with_branch
941950
~frontier_branch_size:((max_frontier_length * 2) + 2)

src/lib/bootstrap_controller/bootstrap_controller.mli

-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ module type CONTEXT = sig
1111
val constraint_constants : Genesis_constants.Constraint_constants.t
1212

1313
val consensus_constants : Consensus.Constants.t
14-
15-
val compile_config : Mina_compile_config.t
1614
end
1715

1816
type Structured_log_events.t += Bootstrap_complete [@@deriving register_event]

src/lib/consensus/intf.ml

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ module type CONTEXT = sig
1111
val constraint_constants : Genesis_constants.Constraint_constants.t
1212

1313
val consensus_constants : Constants.t
14+
15+
val compile_config : Mina_compile_config.t
1416
end
1517

1618
module type Constants = sig

src/lib/consensus/proof_of_stake.ml

+9-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ module Make_str (A : Wire_types.Concrete) = struct
3030
val constraint_constants : Genesis_constants.Constraint_constants.t
3131

3232
val consensus_constants : Constants.t
33+
34+
val compile_config : Mina_compile_config.t
3335
end
3436

3537
let make_checked t = Snark_params.Tick.Run.make_checked t
@@ -2678,8 +2680,9 @@ module Make_str (A : Wire_types.Concrete) = struct
26782680
(next_epoch_ledger_location local_state)
26792681
in
26802682
let sync_ledger =
2681-
Mina_ledger.Sync_ledger.Db.create ~logger ~trust_system
2682-
db_ledger
2683+
Mina_ledger.Sync_ledger.Db.create
2684+
~context:(module Context)
2685+
~trust_system db_ledger
26832686
in
26842687
let query_reader =
26852688
Mina_ledger.Sync_ledger.Db.query_reader sync_ledger
@@ -3107,6 +3110,8 @@ module Make_str (A : Wire_types.Concrete) = struct
31073110
Genesis_constants.For_unit_tests.Constraint_constants.t
31083111

31093112
let consensus_constants = Lazy.force Constants.for_unit_tests
3113+
3114+
let compile_config = Mina_compile_config.For_unit_tests.t
31103115
end in
31113116
(* Even when consensus constants are of prod sizes, candidate should still trigger a bootstrap *)
31123117
should_bootstrap_len
@@ -3433,6 +3438,8 @@ module Make_str (A : Wire_types.Concrete) = struct
34333438
let constraint_constants = constraint_constants
34343439

34353440
let consensus_constants = constants
3441+
3442+
let compile_config = Mina_compile_config.For_unit_tests.t
34363443
end
34373444

34383445
let test_update constraint_constants =

0 commit comments

Comments
 (0)