Skip to content

Commit 0a312e2

Browse files
committed
Refactor Root to prepare for vesting adjustment
The new Root ledger implementation explicitly depends on the exposed ledgers from Mina_ledger.Ledger. This simplifies a lot of the root definitions, and makes declaring the root interface much easier. It is also a functor, allowing the caller to pass in its own account conversion function. It is also an existential type that wraps a specific concrete ledger implementation, so that the root ledger creation functions can dynamically select a specific implementation when root ledgers are created/opened. For now, the only concrete implementation is the existing one, which assumes that the account conversion method is known at compile time. In future, this implementation will need to change.
1 parent a568719 commit 0a312e2

File tree

27 files changed

+438
-353
lines changed

27 files changed

+438
-353
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +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.Ledger.Root
12+
module Root_ledger = Mina_ledger.Root
1313

1414
let snark_job_list_json t =
1515
let open Participating_state.Let_syntax in

src/lib/bootstrap_controller/bootstrap_controller.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +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.Ledger.Root
10+
module Root_ledger = Mina_ledger.Root
1111
module Sync_ledger = Mina_ledger.Sync_ledger
1212
module Transition_cache = Transition_cache
1313

src/lib/consensus/intf.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ open Async
44
open Currency
55
open Signature_lib
66
open Mina_base
7-
module Root_ledger = Mina_ledger.Ledger.Root
7+
module Root_ledger = Mina_ledger.Root
88

99
module type CONTEXT = sig
1010
val logger : Logger.t

src/lib/consensus/proof_of_stake.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open Fold_lib
77
open Signature_lib
88
open Snark_params
99
open Num_util
10-
module Root_ledger = Mina_ledger.Ledger.Root
10+
module Root_ledger = Mina_ledger.Root
1111

1212
module Segment_id = Mina_numbers.Nat.Make32 ()
1313

src/lib/genesis_ledger/genesis_ledger.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ open Currency
33
open Signature_lib
44
open Mina_base
55
module Ledger = Mina_ledger.Ledger
6-
module Root_ledger = Mina_ledger.Ledger.Root
6+
module Root_ledger = Mina_ledger.Root
77
module Intf = Intf
88
module Ledger_transfer_mask =
99
Mina_ledger.Ledger_transfer.Make (Ledger) (Ledger.Any_ledger.M)

src/lib/genesis_ledger/intf.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
open Mina_base
22
open Signature_lib
33
open Core_kernel
4-
module Root_ledger = Mina_ledger.Ledger.Root
4+
module Root_ledger = Mina_ledger.Root
55

66
module Timing = struct
77
type t = (int, int, int, int) Account_timing.Poly.t

src/lib/genesis_ledger_helper/genesis_ledger_helper.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ open Async
33
open Signature_lib
44
open Mina_base
55
include Genesis_ledger_helper_lib
6-
module Root_ledger = Mina_ledger.Ledger.Root
6+
module Root_ledger = Mina_ledger.Root
77

88
type exn += Genesis_state_initialization_error
99

src/lib/mina_graphql/types.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ open Async
33
open Mina_base
44
open Mina_transaction
55
module Ledger = Mina_ledger.Ledger
6-
module Root_ledger = Mina_ledger.Ledger.Root
6+
module Root_ledger = Mina_ledger.Root
77
open Signature_lib
88
open Currency
99
open Schema

src/lib/mina_intf/transition_frontier_components_intf.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ open Pipe_lib
44
open Cache_lib
55
open Mina_base
66
open Network_peer
7-
module Root_ledger = Mina_ledger.Ledger.Root
7+
module Root_ledger = Mina_ledger.Root
88

99
module type CONTEXT = sig
1010
val logger : Logger.t
@@ -343,7 +343,7 @@ module type Transition_router_intf = sig
343343
-> Transaction_snark_work.Checked.t option )
344344
-> catchup_mode:[ `Super ]
345345
-> notify_online:(unit -> unit Deferred.t)
346-
-> ledger_backing:Root_ledger.Config.backing_type
346+
-> ledger_backing:Mina_ledger.Root.Config.backing_type
347347
-> unit
348348
-> ( [ `Transition of Mina_block.Validated.t ]
349349
* [ `Source of [ `Gossip | `Catchup | `Internal ] ]

src/lib/mina_ledger/ledger.ml

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,36 @@ module Ledger_inner = struct
294294
(Db)
295295
(Hardfork_db)
296296

297+
module Make_converting (Converting_inputs : sig
298+
val convert : Account.t -> Account.Hardfork.t
299+
end) :
300+
Merkle_ledger.Intf.Ledger.Converting.WITH_DATABASE
301+
with module Location = Location
302+
and module Addr = Location.Addr
303+
with type root_hash := Ledger_hash.t
304+
and type hash := Ledger_hash.t
305+
and type account := Account.t
306+
and type key := Signature_lib.Public_key.Compressed.t
307+
and type token_id := Token_id.t
308+
and type token_id_set := Token_id.Set.t
309+
and type account_id := Account_id.t
310+
and type account_id_set := Account_id.Set.t
311+
and type converted_account := Account.Hardfork.t
312+
and type primary_ledger = Db.t
313+
and type converting_ledger = Hardfork_db.t =
314+
Converting_merkle_tree.With_database
315+
(struct
316+
type converted_account = Account.Hardfork.t
317+
318+
let convert = Converting_inputs.convert
319+
320+
let converted_equal = Account.Hardfork.equal
321+
322+
include Inputs
323+
end)
324+
(Db)
325+
(Hardfork_db)
326+
297327
let of_any_ledger ledger =
298328
let mask = Mask.create ~depth:(Any_ledger.M.depth ledger) () in
299329
Maskable.register_mask ledger mask
@@ -328,12 +358,6 @@ module Ledger_inner = struct
328358
( Maskable.register_mask casted mask
329359
, Converting_ledger.converting_ledger converting_ledger )
330360

331-
module Root = struct
332-
include Root.Make (Any_ledger) (Db) (Hardfork_db) (Converting_ledger)
333-
334-
let as_masked t = as_unmasked t |> of_any_ledger
335-
end
336-
337361
(** Create a new empty ledger.
338362
339363
Warning: This skips mask registration, for use in transaction logic,

0 commit comments

Comments
 (0)