From cff6c4beb187f8483ed27e6bf6b78e7af1473d0d Mon Sep 17 00:00:00 2001 From: Pierre Chambart Date: Tue, 17 Jul 2018 18:24:58 +0200 Subject: [PATCH] Alpha_002: forced registration for unregistered delegates --- .../lib_protocol/src/init_storage.ml | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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