diff --git a/src/proto_alpha/lib_protocol/src/init_storage.ml b/src/proto_alpha/lib_protocol/src/init_storage.ml index da5bb8173..ec0b9c69e 100644 --- a/src/proto_alpha/lib_protocol/src/init_storage.ml +++ b/src/proto_alpha/lib_protocol/src/init_storage.ml @@ -44,7 +44,28 @@ let prepare_first_block ctxt ~typecheck ~level ~timestamp ~fitness = Storage.Last_block_priority.init ctxt 0 >>=? fun ctxt -> return ctxt | Alpha -> - return ctxt + Storage.Contract.fold ctxt ~init:(ok ctxt) + ~f:(fun contract ctxt -> + Lwt.return ctxt >>=? fun ctxt -> + match contract with + | Implicit _ -> return ctxt + | Originated _contract_hash -> + Roll_storage.get_contract_delegate ctxt contract >>=? fun delegate -> + match delegate with + | None -> return ctxt + | Some delegate -> + Delegate_storage.registered ctxt delegate >>= fun registered -> + if registered then + return ctxt + else + Contract_storage.is_manager_key_revealed + ctxt (Contract_repr.implicit_contract delegate) >>=? fun revealed -> + if revealed then + Delegate_storage.set ctxt + (Contract_repr.implicit_contract delegate) + (Some delegate) + else + return ctxt) let prepare ctxt ~level ~timestamp ~fitness = Raw_context.prepare ~level ~timestamp ~fitness ctxt