@@ -81,6 +81,16 @@ module Utils = struct
8181 assert (Root_ledger. depth root = depth) ;
8282 Root_ledger. create_checkpoint ~config root () |> Or_error. return
8383
84+ let create_root_from_backing_root_with_directory genesis_mask root ~directory
85+ ~depth () =
86+ assert (
87+ Ledger_hash. equal
88+ (Ledger. merkle_root genesis_mask)
89+ (Root_ledger. merkle_root root) ) ;
90+ assert (Root_ledger. depth root = depth) ;
91+ Root_ledger. create_checkpoint_with_directory root ~directory_name: directory
92+ |> Or_error. return
93+
8494 let keypair_of_account_record_exn (private_key , account ) =
8595 let open Account in
8696 let sk_error_msg =
@@ -181,6 +191,29 @@ module Make (Inputs : Intf.Ledger_input_intf) : Intf.S = struct
181191 | `Root ledger ->
182192 create_root_from_backing_root mask ledger ~config ~depth ()
183193
194+ let create_root_with_directory ~directory ~depth () =
195+ let backing_ledger, mask = Lazy. force backing_ledger in
196+ match backing_ledger with
197+ | `Ephemeral ledger ->
198+ (* For ephemeral ledgers, create a fresh root with stable_db backing
199+ and transfer accounts to it *)
200+ let open Or_error.Let_syntax in
201+ let config =
202+ Root_ledger.Config. with_directory ~backing_type: Stable_db
203+ ~directory_name: directory
204+ in
205+ let root = Root_ledger. create ~logger ~config ~depth () in
206+ (* We are transferring to an unmasked view of the root, so this is
207+ used solely for the transfer side effect *)
208+ let % map _dest =
209+ Ledger_transfer_mask. transfer_accounts ~src: ledger
210+ ~dest: (Root_ledger. as_unmasked root)
211+ in
212+ root
213+ | `Root ledger ->
214+ create_root_from_backing_root_with_directory mask ledger ~directory
215+ ~depth ()
216+
184217 include Utils
185218
186219 let find_account_record_exn ~f =
@@ -219,6 +252,8 @@ module Packed = struct
219252
220253 let create_root ((module L) : t ) = L. create_root
221254
255+ let create_root_with_directory ((module L) : t ) = L. create_root_with_directory
256+
222257 let depth ((module L) : t ) = L. depth
223258
224259 let accounts ((module L) : t ) = L. accounts
@@ -265,6 +300,11 @@ end) : Intf.S = struct
265300 let genesis_root, mask = Lazy. force backing_ledger in
266301 create_root_from_backing_root mask genesis_root ~config ~depth ()
267302
303+ let create_root_with_directory ~directory ~depth () =
304+ let genesis_root, mask = Lazy. force backing_ledger in
305+ create_root_from_backing_root_with_directory mask genesis_root ~directory
306+ ~depth ()
307+
268308 let find_account_record_exn ~f =
269309 find_account_record_exn ~f (Lazy. force accounts)
270310
0 commit comments