@@ -263,7 +263,6 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
263263 : write_result Lwt.t =
264264 with_write_lock t.did (fun () ->
265265 let open Sequencer.Types in
266- let module Inductive = Mist.Mst. Inductive (Mst ) in
267266 let % lwt prev_commit =
268267 match % lwt User_store. get_commit t.db with
269268 | Some (_ , commit ) ->
@@ -280,11 +279,11 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
280279 Cid. to_string c
281280 | None ->
282281 " null" ) ) ;
283- let % lwt block_map = Lwt. map ref (get_map t) in
284282 let cached_store = Cached_store. create t.db in
285283 let mst : Cached_mst.t ref =
286284 ref (Cached_mst. create cached_store prev_commit.data)
287285 in
286+ t.block_map < - None ;
288287 (* ops to emit, built in loop because prev_data (previous cid) is otherwise inaccessible *)
289288 let commit_ops : commit_evt_op list ref = ref [] in
290289 let added_leaves = ref Block_map. empty in
@@ -297,7 +296,7 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
297296 let path = Format. sprintf " %s/%s" collection rkey in
298297 let uri = Format. sprintf " at://%s/%s" t.did path in
299298 let % lwt () =
300- match String_map. find_opt path ! block_map with
299+ match % lwt User_store. get_record_cid t.db path with
301300 | Some cid ->
302301 Errors. invalid_request ~name: " InvalidSwap"
303302 (Format. sprintf
@@ -314,7 +313,6 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
314313 let % lwt cid, block =
315314 User_store. put_record t.db (`LexMap record_with_type) path
316315 in
317- block_map := String_map. add path cid ! block_map ;
318316 added_leaves := Block_map. set cid block ! added_leaves ;
319317 commit_ops :=
320318 ! commit_ops
@@ -340,7 +338,7 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
340338 | Update {collection; rkey; value; swap_record; _} ->
341339 let path = Format. sprintf " %s/%s" collection rkey in
342340 let uri = Format. sprintf " at://%s/%s" t.did path in
343- let old_cid = String_map. find_opt path ! block_map in
341+ let % lwt old_cid = User_store. get_record_cid t.db path in
344342 ( if
345343 (swap_record <> None && swap_record <> old_cid)
346344 || (swap_record = None && old_cid = None )
@@ -385,7 +383,6 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
385383 User_store. put_record t.db (`LexMap record_with_type) path
386384 in
387385 added_leaves := Block_map. set new_cid new_block ! added_leaves ;
388- block_map := String_map. add path new_cid ! block_map ;
389386 commit_ops :=
390387 ! commit_ops
391388 @ [{action= `Update ; path; cid= Some new_cid; prev= old_cid}] ;
@@ -409,7 +406,7 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
409406 ; cid= new_cid } )
410407 | Delete {collection; rkey; swap_record; _} ->
411408 let path = Format. sprintf " %s/%s" collection rkey in
412- let cid = String_map. find_opt path ! block_map in
409+ let % lwt cid = User_store. get_record_cid t.db path in
413410 ( if cid = None || (swap_record <> None && swap_record <> cid)
414411 then
415412 let cid_str =
@@ -441,7 +438,6 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
441438 Lwt. return_unit
442439 in
443440 let % lwt () = User_store. delete_record t.db path in
444- block_map := String_map. remove path ! block_map ;
445441 commit_ops :=
446442 ! commit_ops @ [{action= `Delete ; path; cid= None ; prev= cid}] ;
447443 let % lwt new_mst = Cached_mst. delete ! mst path in
@@ -458,29 +454,16 @@ let apply_writes (t : t) (writes : repo_write list) (swap_commit : Cid.t option)
458454 let commit_block =
459455 new_commit_signed |> signed_commit_to_yojson |> Dag_cbor. encode_yojson
460456 in
461- let diff : Inductive.diff list =
462- List. fold_left
463- (fun (acc : Inductive.diff list )
464- ({action; path; cid; prev} : commit_evt_op ) ->
465- match action with
466- | `Create ->
467- acc @ [Add {key= path; cid= Option. get cid}]
468- | `Update ->
469- acc @ [Update {key= path; cid= Option. get cid; prev}]
470- | `Delete ->
471- acc @ [Delete {key= path; prev= Option. get prev}] )
472- [] ! commit_ops
473- in
474457 let % lwt proof_blocks =
475- match % lwt
476- Inductive. generate_proof ! block_map diff ~new_root: new_mst.root
477- ~prev_root: prev_commit.data
478- with
479- | Ok blocks ->
480- Lwt. return (Block_map. merge blocks ! added_leaves)
481- | Error err ->
482- raise err
458+ Lwt_list. fold_left_s
459+ (fun acc ({path; _} : commit_evt_op ) ->
460+ let % lwt key_proof =
461+ Cached_mst. proof_for_key new_mst new_mst.root path
462+ in
463+ Lwt. return (Block_map. merge acc key_proof) )
464+ Block_map. empty ! commit_ops
483465 in
466+ let proof_blocks = Block_map. merge proof_blocks ! added_leaves in
484467 let block_stream =
485468 proof_blocks |> Block_map. entries |> Lwt_seq. of_list
486469 |> Lwt_seq. cons (new_commit_cid, commit_block)
0 commit comments