123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)(* Copyright (c) 2018-2021 Nomadic Labs. <contact@nomadic-labs.com> *)(* *)(* Permission is hereby granted, free of charge, to any person obtaining a *)(* copy of this software and associated documentation files (the "Software"),*)(* to deal in the Software without restriction, including without limitation *)(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *)(* and/or sell copies of the Software, and to permit persons to whom the *)(* Software is furnished to do so, subject to the following conditions: *)(* *)(* The above copyright notice and this permission notice shall be included *)(* in all copies or substantial portions of the Software. *)(* *)(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*)(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *)(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *)(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*)(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *)(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *)(* DEALINGS IN THE SOFTWARE. *)(* *)(*****************************************************************************)openEnvironment_contextopenEnvironment_protocol_TmoduletypeT=sigincludeTezos_protocol_environment_sigs.V0.TwithtypeFormat.formatter=Format.formatterandtype'aData_encoding.t='aData_encoding.tandtype'aData_encoding.lazy_t ='aData_encoding.lazy_tandtype'aLwt.t='aLwt.tandtype('a,'b)Pervasives.result=('a,'b)resultandtypeChain_id.t=Tezos_crypto.Hashed.Chain_id.tandtypeBlock_hash.t=Tezos_crypto.Hashed.Block_hash.tandtypeOperation_hash.t=Tezos_crypto.Hashed.Operation_hash.tandtypeOperation_list_hash.t=Tezos_crypto.Hashed.Operation_list_hash.tandtypeOperation_list_list_hash.t=Tezos_crypto.Hashed.Operation_list_list_hash.tandtypeContext.t=Context.tandtypeContext_hash.t=Tezos_crypto.Hashed.Context_hash.tandtypeProtocol_hash.t=Tezos_crypto.Hashed.Protocol_hash.tandtypeTime.t=Time.Protocol.tandtypeMBytes.t=Tezos_protocol_environment_structs.V0.MBytes.tandtypeOperation.shell_header=Operation.shell_headerandtypeOperation.t=Operation.tandtypeBlock_header.shell_header=Block_header.shell_headerandtypeBlock_header.t=Block_header.tandtype'aRPC_directory.t='aTezos_rpc.Directory.tandtypeEd25519.Public_key_hash.t=Signature.Ed25519.Public_key_hash.tandtypeEd25519.Public_key.t=Signature.Ed25519.Public_key.tandtypeEd25519.t=Signature.Ed25519.tandtypeSecp256k1.Public_key_hash.t=Signature.Secp256k1.Public_key_hash.tandtypeSecp256k1.Public_key.t=Signature.Secp256k1.Public_key.tandtypeSecp256k1.t=Signature.Secp256k1.tandtypeP256.Public_key_hash.t=Signature.P256.Public_key_hash.tandtypeP256.Public_key.t=Signature.P256.Public_key.tandtypeP256.t=Signature.P256.tandtypeSignature.public_key_hash=Signature.V0.public_key_hashandtypeSignature.public_key=Signature.V0.public_keyandtypeSignature.t=Signature.V0.tandtypeSignature.watermark =Signature.V0.watermarkandtype'aMicheline.canonical='aMicheline.canonicalandtypeZ.t=Z.tandtype('a,'b)Micheline.node=('a,'b)Micheline.nodeandtypeData_encoding.json_schema=Data_encoding.json_schemaandtype('a,'b)RPC_path.t=('a,'b)Tezos_rpc.Path.tandtypeRPC_service.meth=Tezos_rpc.Service.methandtype(+'m,'pr,'p,'q,'i,'o)RPC_service.t=('m,'pr,'p,'q,'i,'o)Tezos_rpc.Service.tandtypeError_monad.shell_error=Error_monad.errortypeerror+=Ecoproto_errorofError_monad.errorvalwrap_error:'aError_monad.tzresult->'atzresultmoduleLift(P:Updater.PROTOCOL):PROTOCOLwithtypeblock_header_data=P.block_header_dataandtypeblock_header_metadata=P.block_header_metadataandtypeblock_header=P.block_headerandtypeoperation_data=P.operation_dataandtypeoperation_receipt=P.operation_receiptandtypeoperation=P.operationandtypevalidation_state=P.validation_stateclass['chain,'block]proto_rpc_context:Tezos_rpc.Context.t->(unit,(unit*'chain)*'block)RPC_path.t->['chain*'block]RPC_context.simpleclass['block]proto_rpc_context_of_directory:('block->RPC_context.t)->RPC_context.tRPC_directory.t->['block]RPC_context.simpleendmoduleMake(Param:sigvalname:stringend)()=structmoduleCamlinternalFormatBasics=CamlinternalFormatBasicsincludeStdlib(* The modules provided in the [_struct.V0.M] pack are meant specifically to
shadow modules from [Stdlib]/[Base]/etc. with backwards compatible
versions. Thus we open the module, hiding the incompatible, newer modules.
*)openTezos_protocol_environment_structs.V0modulePervasives=StdlibmoduleCompare=ComparemoduleList=ListmoduleBytes=structincludeBytesincludeEndianBytes.BigEndianendmoduleString=structincludeStringincludeEndianString.BigEndianmoduleLE=EndianString.LittleEndianendmoduleSet=Stdlib.SetmoduleMap=Stdlib.MapmoduleInt32=Int32moduleInt64=Int64moduleFormat=FormatmoduleOption=OptionmoduleMBytes=MBytesmoduleRaw_hashes=structletsha256=Tezos_crypto.Hacl.Hash.SHA256.digestletsha512=Tezos_crypto.Hacl.Hash.SHA512.digestletblake2bmsg=Tezos_crypto.Blake2B.to_bytes(Tezos_crypto.Blake2B.hash_bytes[msg])endmoduleZ=structincludeZletto_bits?(pad_to=0)z=letbits=to_bitszinletlen=Pervasives.((numbitsz+7)/8)inletfull_len=Tezos_stdlib.Compare.Int.maxpad_toleniniffull_len=0thenMBytes.create0elseletres=MBytes.createfull_leninBytes.fillres0full_len'\000';MBytes.blit_of_stringbits0res0len;resletof_bitsbytes=of_bits(MBytes.to_stringbytes)endmoduleLwt=LwtmoduleLwt_list=Lwt_listmoduleData_encoding=structincludeData_encodingletdefname?title?descriptionencoding=def(Param.name^"."^name)?title?descriptionencodingendmoduleTime=Time.ProtocolmoduleEd25519=Ed25519moduleSecp256k1=Secp256k1moduleP256=P256moduleSignature=SignaturemoduleS=structmoduletypeT=Tezos_base.S.TmoduletypeHASHABLE=Tezos_base.S.HASHABLEmoduletypeMINIMAL_HASH=Tezos_crypto.Intfs.MINIMAL_HASHmoduletypeB58_DATA=sigtypetvalto_b58check:t->stringvalto_short_b58check:t->stringvalof_b58check_exn:string->tvalof_b58check_opt:string->toptiontypeTezos_crypto.Base58.data+=Dataoftvalb58check_encoding:tTezos_crypto.Base58.encodingendmoduletypeRAW_DATA=sigtypetvalsize:int(* in bytes *)valto_bytes:t->MBytes.tvalof_bytes_opt:MBytes.t->toptionvalof_bytes_exn:MBytes.t->tendmoduletypeENCODER=sigtypetvalencoding:tData_encoding.tvalrpc_arg:tTezos_rpc.Arg.tendmoduletypeSET=S.SETmoduletypeMAP=S.MAPmoduletypeINDEXES=sigtypetvalto_path:t->stringlist->stringlistvalof_path:stringlist->toptionvalof_path_exn:stringlist->tvalprefix_path:string->stringlistvalpath_length:intmoduleSet:sigincludeSETwithtypeelt=tvalencoding:tData_encoding.tendmoduleMap:sigincludeMAPwithtypekey=tvalencoding:'aData_encoding.t->'atData_encoding.tendendmoduletypeHASH=sigincludeMINIMAL_HASHincludeRAW_DATAwithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tincludeINDEXESwithtypet:=tendmoduletypeMERKLE_TREE=sigtypeeltincludeHASHvalcompute:eltlist->tvalempty:ttypepath=Leftofpath*t|Rightoft*path|Opvalcompute_path:eltlist->int->pathvalcheck_path:path->elt->t*intvalpath_encoding:pathData_encoding.tendmoduletypeSIGNATURE=sigmodulePublic_key_hash:sigtypetvalpp:Format.formatter->t->unitvalpp_short:Format.formatter->t->unitincludeCompare.Swithtypet:=tincludeRAW_DATAwithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tincludeINDEXESwithtypet:=tvalzero:tendmodulePublic_key:sigtypetvalpp:Format.formatter->t->unitincludeCompare.Swithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tvalhash:t->Public_key_hash.tendtypetvalpp:Format.formatter->t->unitincludeRAW_DATAwithtypet:=tincludeCompare.Swithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tvalzero:ttypewatermark(** Check a signature *)valcheck:?watermark:watermark->Public_key.t->t->MBytes.t->boolendendmoduleError_core=structincludeTezos_error_monad.Core_maker.Make(structletid=Format.asprintf"proto.%s."Param.nameend)(Tezos_protocol_environment_structs.V0.Error_monad_trace_eval)leterror_encoding=Data_encoding.dynamic_sizeerror_encodingendtypeerror_category=Error_core.error_categorytypeerror+=Ecoproto_errorofError_core.errormoduleWrapped_error_monad=structtypeunwrapped=Error_core.error=..include(Error_core:sigincludeTezos_error_monad.Sig.COREwithtypeerror:=unwrappedandtypeerror_category=error_categoryend)letunwrap=functionEcoproto_errorecoerror->Someecoerror|_->Noneletwrapecoerror=Ecoproto_errorecoerrorendmoduleError_monad=structtype'ashell_tzresult='aError_monad.tzresulttypeshell_error=Error_monad.error=..includeError_coreincludeTezos_error_monad.TzLwtreslib.MonadincludeTezos_error_monad.Monad_maker.Make(Error_core)(TzTrace)(Tezos_error_monad.TzLwtreslib.Monad)(* below is for backward compatibility *)includeError_monad_infix_globalsincludeError_monad_traversorsincludeError_monad_trace_evalletfaile=Lwt.return_error(TzTrace.makee)leterrore=Error(TzTrace.makee)(* Shouldn't be used, only to keep the same environment interface *)letclassify_errors=function|[]->`Temporary|error::_->(find_info_of_errorerror).categoryendlet()=letid=Format.asprintf"proto.%s.wrapper"Param.nameinregister_wrapped_error_kind(moduleWrapped_error_monad)~id~title:("Error returned by protocol "^Param.name)~description:("Wrapped error for economic protocol "^Param.name^".")letwrap_error=function|Ok_asok->ok|Errorerrors->Error(List.map(funerror->Ecoproto_errorerror)errors)moduleChain_id=Chain_idmoduleBlock_hash=Block_hashmoduleOperation_hash=Operation_hashmoduleOperation_list_hash=Operation_list_hashmoduleOperation_list_list_hash=Operation_list_list_hashmoduleContext_hash=Context_hashmoduleProtocol_hash=Protocol_hashmoduleBlake2B=Blake2BmoduleFitness=FitnessmoduleOperation=OperationmoduleBlock_header=Block_headermoduleProtocol=ProtocolmoduleRPC_arg=Tezos_rpc.ArgmoduleRPC_path=Tezos_rpc.PathmoduleRPC_query=Tezos_rpc.QuerymoduleRPC_service=Tezos_rpc.ServicemoduleRPC_answer=structtype'ot=[`Okof'o(* 200 *)|`OkStreamof'ostream(* 200 *)|`Createdofstringoption(* 201 *)|`No_content(* 204 *)|`UnauthorizedofError_monad.errorlistoption(* 401 *)|`ForbiddenofError_monad.errorlistoption(* 403 *)|`Not_foundofError_monad.errorlistoption(* 404 *)|`ConflictofError_monad.errorlistoption(* 409 *)|`ErrorofError_monad.errorlistoption(* 500 *)]and'astream='aResto_directory.Answer.stream={next:unit->'aoptionLwt.t;shutdown:unit->unit;}letreturnx=Lwt.return(`Okx)letreturn_chunkedx=Lwt.return(`OkChunkx)letreturn_streamx=Lwt.return(`OkStreamx)letnot_found=Lwt.return(`Not_foundNone)letfailerr=Lwt.return(`Error(Someerr))endmoduleRPC_directory=structincludeTezos_protocol_environment_structs.V0.RPC_directoryletgen_registerdirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|`Oko->RPC_answer.return_chunkedo|`OkStreams->RPC_answer.return_streams|`Createds->Lwt.return(`Createds)|`No_content->Lwt.return`No_content|`Unauthorizede->lete=Option.mape~f:(List.map(fune->Ecoproto_errore))inLwt.return(`Unauthorizede)|`Forbiddene->lete=Option.mape~f:(List.map(fune->Ecoproto_errore))inLwt.return(`Forbiddene)|`Not_founde->lete=Option.mape~f:(List.map(fune->Ecoproto_errore))inLwt.return(`Not_founde)|`Conflicte->lete=Option.mape~f:(List.map(fune->Ecoproto_errore))inLwt.return(`Conflicte)|`Errore->lete=Option.mape~f:(List.map(fune->Ecoproto_errore))inLwt.return(`Errore))letregisterdirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|Oko->RPC_answer.returno|Errore->RPC_answer.faile)letopt_registerdirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|Ok(Someo)->RPC_answer.returno|OkNone->RPC_answer.not_found|Errore->RPC_answer.faile)letlwt_registerdirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*o=handlerpqiinRPC_answer.returno)openCurryletregister0rootsf=registerroots(curryZf)letregister1rootsf=registerroots(curry(SZ)f)letregister2rootsf=registerroots(curry(S(SZ))f)letregister3rootsf=registerroots(curry(S(S(SZ)))f)letregister4rootsf=registerroots(curry(S(S(S(SZ))))f)letregister5rootsf=registerroots(curry(S(S(S(S(SZ)))))f)letopt_register0rootsf=opt_registerroots(curryZf)letopt_register1rootsf=opt_registerroots(curry(SZ)f)letopt_register2rootsf=opt_registerroots(curry(S(SZ))f)letopt_register3rootsf=opt_registerroots(curry(S(S(SZ)))f)letopt_register4rootsf=opt_registerroots(curry(S(S(S(SZ))))f)letopt_register5rootsf=opt_registerroots(curry(S(S(S(S(SZ)))))f)letgen_register0rootsf=gen_registerroots(curryZf)letgen_register1rootsf=gen_registerroots(curry(SZ)f)letgen_register2rootsf=gen_registerroots(curry(S(SZ))f)letgen_register3rootsf=gen_registerroots(curry(S(S(SZ)))f)letgen_register4rootsf=gen_registerroots(curry(S(S(S(SZ))))f)letgen_register5rootsf=gen_registerroots(curry(S(S(S(S(SZ)))))f)letlwt_register0rootsf=lwt_registerroots(curryZf)letlwt_register1rootsf=lwt_registerroots(curry(SZ)f)letlwt_register2rootsf=lwt_registerroots(curry(S(SZ))f)letlwt_register3rootsf=lwt_registerroots(curry(S(S(SZ)))f)letlwt_register4rootsf=lwt_registerroots(curry(S(S(S(SZ))))f)letlwt_register5rootsf=lwt_registerroots(curry(S(S(S(S(SZ)))))f)endmoduleRPC_context=structtypet=rpc_contextclasstype['pr]simple=objectmethodcall_proto_service0:'m'q'i'o.(([<RPC_service.meth]as'm),t,t,'q,'i,'o)RPC_service.t->'pr->'q->'i->'oError_monad.shell_tzresultLwt.tmethodcall_proto_service1:'m'a'q'i'o.(([<RPC_service.meth]as'm),t,t*'a,'q,'i,'o)RPC_service.t->'pr->'a->'q->'i->'oError_monad.shell_tzresultLwt.tmethodcall_proto_service2:'m'a'b'q'i'o.(([<RPC_service.meth]as'm),t,(t*'a)*'b,'q,'i,'o)RPC_service.t->'pr->'a->'b->'q->'i->'oError_monad.shell_tzresultLwt.tmethodcall_proto_service3:'m'a'b'c'q'i'o.(([<RPC_service.meth]as'm),t,((t*'a)*'b)*'c,'q,'i,'o)RPC_service.t->'pr->'a->'b->'c->'q->'i->'oError_monad.shell_tzresultLwt.tendletmake_call0s(ctxt:_simple)=ctxt#call_proto_service0sletmake_call0=(make_call0:_->_simple->_:>_->_#simple->_)letmake_call1s(ctxt:_simple)=ctxt#call_proto_service1sletmake_call1=(make_call1:_->_simple->_:>_->_#simple->_)letmake_call2s(ctxt:_simple)=ctxt#call_proto_service2sletmake_call2=(make_call2:_->_simple->_:>_->_#simple->_)letmake_call3s(ctxt:_simple)=ctxt#call_proto_service3sletmake_call3=(make_call3:_->_simple->_:>_->_#simple->_)letmake_opt_call0sctxtblockqi=letopenLwt_syntaxinlet*r=make_call0sctxtblockqiinmatchrwith|Error[Tezos_rpc.Context.Not_found_]->Lwt.return_okNone|Error_asv->Lwt.returnv|Okv->Lwt.return_ok(Somev)letmake_opt_call1sctxtblocka1qi=letopenLwt_syntaxinlet*r=make_call1sctxtblocka1qiinmatchrwith|Error[Tezos_rpc.Context.Not_found_]->Lwt.return_okNone|Error_asv->Lwt.returnv|Okv->Lwt.return_ok(Somev)letmake_opt_call2sctxtblocka1a2qi=letopenLwt_syntaxinlet*r=make_call2sctxtblocka1a2qiinmatchrwith|Error[Tezos_rpc.Context.Not_found_]->Lwt.return_okNone|Error_asv->Lwt.returnv|Okv->Lwt.return_ok(Somev)letmake_opt_call3sctxtblocka1a2a3qi=letopenLwt_syntaxinlet*r=make_call3sctxtblocka1a2a3qiinmatchrwith|Error[Tezos_rpc.Context.Not_found_]->Lwt.return_okNone|Error_asv->Lwt.returnv|Okv->Lwt.return_ok(Somev)endmoduleMicheline=structincludeMichelineincludeTezos_micheline.Micheline_encodingletcanonical_encoding_v1~variantencoding=canonical_encoding_v1~variant:(Param.name^"."^variant)encodingletcanonical_encoding~variantencoding=canonical_encoding_v0~variant:(Param.name^"."^variant)encodingendmoduleLogging=Legacy_loggingmoduleUpdater=structtypenonrecvalidation_result=legacy_validation_result={context:Context.t;fitness:Fitness.t;message:stringoption;max_operations_ttl:int;last_allowed_fork_level:Int32.t;}typenonrecquota=quota={max_size:int;max_op:intoption}typenonrecrpc_context=rpc_context={block_hash:Block_hash.t;block_header:Block_header.shell_header;context:Context.t;}letactivate=Context.set_protocolletfork_test_chain=Context.fork_test_chainmoduletypePROTOCOL=Environment_protocol_T_V0.Twithtypecontext:=Context.tandtypequota:=quotaandtypevalidation_result:=legacy_validation_resultandtyperpc_context:=rpc_contextandtypetztrace:=Error_monad.tztraceandtype'atzresult:='aError_monad.tzresultendmoduleBase58=structincludeTezos_crypto.Base58letsimple_encodeencs=simple_encodeencsletsimple_decodeencs=simple_decodeencsincludeMake(structtypecontext=Context.tend)letdecodes=decodesendmoduleContext=structincludeContextletset=addletget=findletdir_mem=mem_treeletremove_rec=removeletcopyctxt~from~to_=letopenLwt_syntaxinlet*sub_tree=find_treectxtfrominTezos_error_monad.TzLwtreslib.Option.map_s(add_treectxtto_)sub_treeletfold_keyssroot~init~f=Context.foldsroot~order:`Sorted~init~f:(funkvacc->letk=root@kinmatchTree.kindvwith`Value->fkacc|`Tree->Lwt.returnacc)letfoldtroot~init~f=Context.fold~depth:(`Eq1)troot~order:`Sorted~init~f:(funkvacc->letk=root@kinmatchTree.kindvwith|`Value->f(`Keyk)acc|`Tree->f(`Dirk)acc)letkeyst=fold_keyst~init:[]~f:(funkacc->Lwt.return(k::acc))letregister_resolver=Base58.register_resolverletcompletectxts=Base58.completectxtsletdel=removeendmoduleLiftV0(P:Updater.PROTOCOL)=structincludePletbegin_partial_application~chain_id~ancestor_context~predecessor_timestamp~predecessor_fitnessraw_block=letopenLwt_syntaxinlet+r=begin_partial_application~chain_id~ancestor_context~predecessor_timestamp~predecessor_fitnessraw_blockinwrap_errorrletbegin_application~chain_id~predecessor_context~predecessor_timestamp~predecessor_fitnessraw_block=letopenLwt_syntaxinlet+r=begin_application~chain_id~predecessor_context~predecessor_timestamp~predecessor_fitnessraw_blockinwrap_errorrletbegin_construction~chain_id~predecessor_context~predecessor_timestamp~predecessor_level~predecessor_fitness~predecessor~timestamp?protocol_data()=letopenLwt_syntaxinlet+r=begin_construction~chain_id~predecessor_context~predecessor_timestamp~predecessor_level~predecessor_fitness~predecessor~timestamp?protocol_data()inwrap_errorrletcurrent_contextc=letopenLwt_syntaxinlet+r=current_contextcinwrap_errorrletapply_operationco=letopenLwt_syntaxinlet+r=apply_operationcoinwrap_errorrletfinalize_blockc=letopenLwt_syntaxinlet*r=finalize_blockcinmatchrwith|Ok(vr,metadata)->Lwt.return_ok(lift_legacy_validation_resultvr,metadata)|Errore->Lwt.return(wrap_error(Errore))letinitcbh=letopenLwt_syntaxinlet*r=initcbhinmatchrwith|Okvr->Lwt.return_ok(lift_legacy_validation_resultvr)|Errore->Lwt.return(wrap_error(Errore))endmoduleLift(P:Updater.PROTOCOL)=structincludeIgnoreCaches (Environment_protocol_T.V0toV10(LiftV0(P)))letset_log_message_consumer_=()letenvironment_version=Protocol.V0letexpected_context_hash=Resulting_contextendclass['chain,'block]proto_rpc_context(t:Tezos_rpc.Context.t)(prefix:(unit,(unit*'chain)*'block)RPC_path.t)=objectmethodcall_proto_service0:'m'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,RPC_context.t,'q,'i,'o)RPC_service.t->'chain*'block->'q->'i->'otzresultLwt.t=funs(chain,block)qi->lets=RPC_service.subst0sinlets=RPC_service.prefixprefixsint#call_services(((),chain),block)qimethod call_proto_service1:'m'a'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,RPC_context.t*'a,'q,'i,'o)RPC_service.t->'chain*'block->'a->'q->'i->'otzresultLwt.t=funs(chain,block)a1qi->lets=RPC_service.subst1sinlets=RPC_service.prefixprefixsint#call_services((((),chain),block),a1)qimethodcall_proto_service2:'m'a'b'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,(RPC_context.t*'a)*'b,'q,'i,'o)RPC_service.t->'chain*'block->'a->'b->'q->'i->'otzresultLwt.t=funs(chain,block)a1a2qi->lets=RPC_service.subst2sinlets=RPC_service.prefixprefixsint#call_services(((((),chain),block),a1),a2)qimethodcall_proto_service3:'m'a'b'c'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,((RPC_context.t*'a)*'b)*'c,'q,'i,'o)RPC_service.t->'chain*'block->'a->'b->'c->'q->'i->'otzresultLwt.t=funs(chain,block)a1a2a3qi->lets=RPC_service.subst3sinlets=RPC_service.prefixprefixsint#call_services((((((),chain),block),a1),a2),a3)qiendclass['block]proto_rpc_context_of_directoryconvdir:['block]RPC_context.simple=letlookup=newTezos_rpc.Context.of_directorydirinobjectmethodcall_proto_service0:'m'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,RPC_context.t,'q,'i,'o)RPC_service.t->'block->'q->'i->'otzresultLwt.t=funsblockqi->letrpc_context=convblockinlookup#call_servicesrpc_contextqimethodcall_proto_service1:'m'a'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,RPC_context.t*'a,'q,'i,'o)RPC_service.t->'block->'a->'q->'i->'otzresultLwt.t=funsblocka1qi->letrpc_context=convblockinlookup#call_services(rpc_context,a1)qimethodcall_proto_service2:'m'a'b'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,(RPC_context.t*'a)*'b,'q,'i,'o)RPC_service.t->'block->'a->'b->'q->'i->'otzresultLwt.t=funsblocka1a2qi->letrpc_context=convblockinlookup#call_services((rpc_context,a1),a2)qimethodcall_proto_service3:'m'a'b'c'q'i'o.(([<RPC_service.meth]as'm),RPC_context.t,((RPC_context.t*'a)*'b)*'c,'q,'i,'o)RPC_service.t->'block->'a->'b->'c->'q->'i->'otzresultLwt.t=funsblocka1a2a3qi->letrpc_context=convblockinlookup#call_services(((rpc_context,a1),a2),a3)qiendend