12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2022 Nomadic Labs. <contact@nomadic-labs.com> *)(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)(* Copyright (c) 2020 Metastate AG <hello@metastate.dev> *)(* *)(* 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. *)(* *)(*****************************************************************************)moduleShell_error_monad=Error_monadtypeshell_error=error=..openEnvironment_contextopenEnvironment_protocol_TmoduletypeT=sigincludeTezos_protocol_environment_sigs.V9.TwithtypeFormat.formatter=Format.formatterandtype'aSeq.node='aSeq.nodeandtype'aSeq.t=unit-> 'aSeq.nodeandtype'aData_encoding.t='aData_encoding.tandtype'aData_encoding.Compact.t='aData_encoding.Compact.tandtype'aData_encoding.lazy_t='aData_encoding.lazy_tandtype'aLwt.t='aLwt.tandtype('a,'b)Pervasives.result=('a,'b)resultandtypeChain_id.t=Chain_id.tandtypeBlock_hash.t=Block_hash.tandtypeOperation_hash.t=Operation_hash.tandtypeOperation_list_hash.t=Operation_list_hash.tandtypeOperation_list_list_hash.t=Operation_list_list_hash.tandtypeContext.t=Context.tandtypeContext.cache_key=Environment_context.Context.cache_keyandtypeContext.cache_value=Environment_context.Context.cache_valueandtypeContext_hash.t=Context_hash.tandtypeContext_hash.Version.t=Context_hash.Version.tandtypeContext.config=Tezos_context_sigs.Config.tandmoduleContext.Proof=Environment_context.Context.ProofandtypeProtocol_hash.t=Protocol_hash.tandtypeTime.t=Time.Protocol.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=Tezos_crypto.Signature.Ed25519.Public_key_hash.tandtypeEd25519.Public_key.t=Tezos_crypto.Signature.Ed25519.Public_key.tandtypeEd25519.t=Tezos_crypto.Signature.Ed25519.tandtypeSecp256k1.Public_key_hash.t=Tezos_crypto.Signature.Secp256k1.Public_key_hash.tandtypeSecp256k1.Public_key.t=Tezos_crypto.Signature.Secp256k1.Public_key.tandtypeSecp256k1.t=Tezos_crypto.Signature.Secp256k1.tandtypeP256.Public_key_hash.t=Tezos_crypto.Signature.P256.Public_key_hash.tandtypeP256.Public_key.t=Tezos_crypto.Signature.P256.Public_key.tandtypeP256.t=Tezos_crypto.Signature.P256.tandtypeBls.Public_key_hash.t=Tezos_crypto.Signature.Bls.Public_key_hash.tandtypeBls.Public_key.t=Tezos_crypto.Signature.Bls.Public_key.tandtypeBls.t=Tezos_crypto.Signature.Bls.tandtypeSignature.public_key_hash=Tezos_crypto.Signature.V1.public_key_hashandtypeSignature.public_key=Tezos_crypto.Signature.V1.public_keyandtypeSignature.signature=Tezos_crypto.Signature.V1.signatureandtypeSignature.t=Tezos_crypto.Signature.V1.tandtypeSignature.watermark=Tezos_crypto.Signature.V1.watermarkandtypeMicheline.canonical_location=Micheline.canonical_locationandtype'aMicheline.canonical='aMicheline.canonicalandtypeZ.t=Z.tandtypeQ.t=Q.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_tztrace=Error_monad.tztraceandtype'aError_monad.shell_tzresult=('a,Error_monad.tztrace)resultandtypeTimelock.chest=Tezos_crypto.Timelock_legacy.chestandtypeTimelock.chest_key=Tezos_crypto.Timelock_legacy.chest_keyandtypeTimelock.opening_result=Tezos_crypto.Timelock_legacy.opening_resultandmoduleSapling=Tezos_sapling.Core.Validatorandtype('a,'b)Either.t=('a,'b)Stdlib.Either.tandtypeBls.Primitive.Fr.t=Bls12_381.Fr.tandtypePlonk.proof=Tezos_protocol_environment_structs.V9.Plonk.proofandtypePlonk.public_parameters=Tezos_protocol_environment_structs.V9.Plonk.verifier_public_parametersandtypeDal.parameters=Tezos_crypto_dal.Cryptobox.Verifier.parametersandtypeDal.commitment=Tezos_crypto_dal.Cryptobox.Verifier.commitmentandtypeDal.commitment_proof=Tezos_crypto_dal.Cryptobox.Verifier.commitment_proofandtypeDal.page_proof=Tezos_crypto_dal.Cryptobox.Verifier.page_proofandtypeBounded.Non_negative_int32.t=Tezos_base.Bounded.Non_negative_int32.tandtypeWasm_2_0_0.reveal=Tezos_scoru_wasm.Wasm_pvm_state.Compatibility.revealandtypeWasm_2_0_0.version=Tezos_scoru_wasm.Wasm_pvm_state.versionandtypeWasm_2_0_0.input=Tezos_scoru_wasm.Wasm_pvm_state.input_infoandtypeWasm_2_0_0.output=Tezos_scoru_wasm.Wasm_pvm_state.output_infoandtypeWasm_2_0_0.reveal_hash=Tezos_scoru_wasm.Wasm_pvm_state.Compatibility.reveal_hashtypeerror+=Ecoproto_errorofError_monad.errorvalwrap_tzerror:Error_monad.error->errorvalwrap_tztrace:Error_monad.errorError_monad.trace->errortracevalwrap_tzresult:'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_stateandtypeapplication_state=P.application_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)()=struct(* The protocol V9 only supports 64-bits architectures. We ensure this the
hard way with a dynamic check. *)let()=matchSys.word_sizewith|32->Printf.eprintf"FAILURE: Environment V9 does not support 32-bit architectures\n%!";Stdlib.exit1|64->()|n->Printf.eprintf"FAILURE: Unknown, unsupported architecture (%d bits)\n%!"n;Stdlib.exit1moduleCamlinternalFormatBasics=CamlinternalFormatBasicsincludeStdlibmodulePervasives=StdlibmoduleLogging=structtypelevel=Internal_event.level=|Debug|Info|Notice|Warning|Error|Fatalletlogging_function=refNoneletname_colon_space=Param.name^": "letnull_formatter=Format.make_formatter(fun___->())(fun()->())letlog(level:Internal_event.level)=match!logging_functionwith|None->Format.ikfprintfignorenull_formatter|Somef->Format.kasprintf(funs->flevel(name_colon_space^s))letlog_string(level:Internal_event.level)s=match!logging_functionwith|None->()|Somef->flevel(name_colon_space^s)endmoduleCompare=ComparemoduleEither=EithermoduleSeq=Tezos_protocol_environment_structs.V9.SeqmoduleList=Tezos_error_monad.TzLwtreslib.ListmoduleArray=Tezos_protocol_environment_structs.V9.ArraymoduleChar=CharmoduleBytes=Tezos_base.TzPervasives.BytesmoduleHex=Tezos_stdlib.HexmoduleString=StringmoduleBits=BitsmoduleTzEndian=TzEndianmoduleSet=Tezos_error_monad.TzLwtreslib.SetmoduleMap=Tezos_error_monad.TzLwtreslib.MapmoduleInt32=Int32moduleInt64=Int64moduleFormat=FormatmoduleFallbackArray=FallbackArrayletnot_a_sys_excnext_classifier=function|Unix.Unix_error_|UnixLabels.Unix_error_|Sys_error_->false|e->next_classifieremoduleOption=structincludeTezos_error_monad.TzLwtreslib.Option(* This as well as the catchers in [Result] and [Error_monad] are different
from the ones in Lwtreslib/Error Monad in that they also hide the Unix
and System errors. This is because, from the point-of-view of the
protocol, these exceptions are too abstract and too indeterministic. *)letcatch?(catch_only=fun_->true)f=(* Note that [catch] also special-cases its own set of exceptions. *)catch~catch_only:(not_a_sys_exccatch_only)fletcatch_s?(catch_only=fun_->true)f=catch_s~catch_only:(not_a_sys_exccatch_only)fendmoduleResult=structincludeTezos_error_monad.TzLwtreslib.Resultletcatch?(catch_only=fun_->true)f=catch~catch_only:(not_a_sys_exccatch_only)fletcatch_f?(catch_only=fun_->true)f=catch_f~catch_only:(not_a_sys_exccatch_only)fletcatch_s?(catch_only=fun_->true)f=catch_s~catch_only:(not_a_sys_exccatch_only)fendmoduleRaw_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])letkeccak256msg=Tezos_crypto.Hacl.Hash.Keccak_256.digestmsgletsha3_256msg=Tezos_crypto.Hacl.Hash.SHA3_256.digestmsgletsha3_512msg=Tezos_crypto.Hacl.Hash.SHA3_512.digestmsgendmoduleZ=ZmoduleQ=QmoduleLwt=LwtmoduleData_encoding=structincludeTezos_protocol_environment_structs.V9.Data_encodingtypetag_size=[`Uint8|`Uint16]letdefname?title?descriptionencoding=def(Param.name^"."^name)?title?descriptionencoding(* TODO: https://gitlab.com/nomadic-labs/data-encoding/-/issues/58
Remove when fix is integrated in data-encoding. *)letsplitted~json~binary=letopenData_encoding__.Encodinginlete=splitted~json~binaryin{ewithencoding=(matche.encodingwith|Splitted{encoding;json_encoding;_}->Splitted{encoding;json_encoding;is_obj=is_objjson&&is_objbinary;is_tup=is_tupjson&&is_tupbinary;}|desc->desc);}endmoduleTime=Time.ProtocolmoduleEd25519=Tezos_crypto.Signature.Ed25519moduleSecp256k1=Tezos_crypto.Signature.Secp256k1moduleP256=Tezos_crypto.Signature.P256moduleBls=Tezos_crypto.Signature.BlsmoduleSignature=Tezos_crypto.Signature.V1moduleTimelock=Tezos_crypto.Timelock_legacymoduleVdf=Class_group_vdf.Vdf_self_containedmoduleS=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->Bytes.tvalof_bytes_opt:Bytes.t->toptionvalof_bytes_exn:Bytes.t->tendmoduletypeENCODER=sigtypetvalencoding:tData_encoding.tvalrpc_arg:tTezos_rpc.Arg.tendmoduletypeINDEXES_SET=sigincludeSet.Svalrandom_elt:t->eltvalencoding:tData_encoding.tendmoduletypeINDEXES_MAP=sigincludeMap.Svalencoding:'aData_encoding.t->'atData_encoding.tendmoduletypeINDEXES=sigtypetmoduleSet:INDEXES_SETwithtypeelt=tmoduleMap:INDEXES_MAPwithtypekey=tendmoduletypeHASH=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_PUBLIC_KEY_HASH=sigtypetvalpp:Format.formatter->t->unitvalpp_short:Format.formatter->t->unitincludeCompare.Swithtypet:=tincludeRAW_DATAwithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tincludeINDEXESwithtypet:=tvalzero:tendmoduletypeSIGNATURE_PUBLIC_KEY=sigtypetvalpp:Format.formatter->t->unitincludeCompare.Swithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=ttypepublic_key_hash_tvalhash:t->public_key_hash_tvalsize:t->int(* in bytes *)valof_bytes_without_validation:bytes->toptionendmoduletypeSIGNATURE=sigmodulePublic_key_hash:SIGNATURE_PUBLIC_KEY_HASHmodulePublic_key:SIGNATURE_PUBLIC_KEYwithtypepublic_key_hash_t:=Public_key_hash.ttypetvalpp:Format.formatter->t->unitincludeRAW_DATAwithtypet:=tincludeCompare.Swithtypet:=tincludeB58_DATAwithtypet:=tincludeENCODERwithtypet:=tvalzero:ttypewatermark(** Check a signature *)valcheck:?watermark:watermark->Public_key.t->t->Bytes.t->boolendmoduletypeAGGREGATE_SIGNATURE=sigincludeSIGNATUREvalaggregate_check:(Public_key.t*watermarkoption*bytes)list->t->boolvalaggregate_signature_opt:tlist->toptionendmoduletypeSPLIT_SIGNATURE=sigincludeSIGNATUREtypeprefixtypesplitted={prefix:prefixoption;suffix:Bytes.t}valsplit_signature:t->splittedvalof_splitted:splitted->toptionvalprefix_encoding:prefixData_encoding.tendmoduletypeFIELD=sigtypet(** The order of the finite field *)valorder:Z.t(** Minimal number of bytes required to encode a value of the field. *)valsize_in_bytes:int(** [check_bytes bs] returns [true] if [bs] is a correct byte
representation of a field element *)valcheck_bytes:Bytes.t->bool(** The neutral element for the addition *)valzero:t(** The neutral element for the multiplication *)valone:t(** [add a b] returns [a + b mod order] *)valadd:t->t->t(** [mul a b] returns [a * b mod order] *)valmul:t->t->t(** [eq a b] returns [true] if [a = b mod order], else [false] *)valeq:t->t->bool(** [negate x] returns [-x mod order]. Equivalently, [negate x] returns the
unique [y] such that [x + y mod order = 0]
*)valnegate:t->t(** [inverse_opt x] returns [x^-1] if [x] is not [0] as an option, else [None] *)valinverse_opt:t->toption(** [pow x n] returns [x^n] *)valpow:t->Z.t->t(** From a predefined bytes representation, construct a value t. It is not
required that to_bytes [(Option.get (of_bytes_opt t)) = t]. By default, little endian encoding
is used and the given element is modulo the prime order *)valof_bytes_opt:Bytes.t->toption(** Convert the value t to a bytes representation which can be used for
hashing for instance. It is not required that [Option.get (to_bytes
(of_bytes_opt t)) = t]. By default, little endian encoding is used, and
length of the resulting bytes may vary depending on the order.
*)valto_bytes:t->Bytes.tend(** Module type for the prime fields GF(p) *)moduletypePRIME_FIELD=sigincludeFIELD(** Actual number of bytes allocated for a value of type t *)valsize_in_memory:int(** [of_z x] builds an element t from the Zarith element [x]. [mod order] is
applied if [x >= order] or [x < 0]. *)valof_z:Z.t->t(** [to_z x] builds a Zarith element, using the decimal representation.
Arithmetic on the result can be done using the modular functions on
integers *)valto_z:t->Z.tendmoduletypeCURVE=sig(** The type of the element in the elliptic curve *)typet(** Actual number of bytes allocated for a value of type t *)valsize_in_memory:int(** The size of a point representation, in bytes *)valsize_in_bytes:intmoduleScalar:FIELD(** Check if a point, represented as a byte array, is on the curve **)valcheck_bytes:Bytes.t->bool(** Attempt to construct a point from a byte array *)valof_bytes_opt:Bytes.t->toption(** Return a representation in bytes *)valto_bytes:t->Bytes.t(** Zero of the elliptic curve *)valzero:t(** A fixed generator of the elliptic curve *)valone:t(** Return the addition of two element *)valadd:t->t->t(** Double the element *)valdouble:t->t(** Return the opposite of the element *)valnegate:t->t(** Return [true] if the two elements are algebraically the same *)valeq:t->t->bool(** Multiply an element by a scalar *)valmul:t->Scalar.t->tendendmoduleError_core=structincludeTezos_error_monad.Core_maker.Make(structletid=Format.asprintf"proto.%s."Param.nameend)(structtypet=[`Branch(** Errors that may not happen in another context *)|`Temporary(** Errors that may not happen in a later context *)|`Permanent(** Errors that will happen no matter the context *)|`Outdated(** Errors that happen when the context is too old *)]letdefault_category=`Temporaryletstring_of_category=function|`Permanent->"permanent"|`Outdated->"outdated"|`Branch->"branch"|`Temporary->"temporary"letclassify=function|`Permanent->Tezos_error_monad.Error_classification.Permanent|`Branch->Branch|`Temporary->Temporary|`Outdated->Outdatedend)endtypeerror_category=Error_core.error_categorytypeshell_error+=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=structtypeshell_tztrace=Error_monad.tztracetype'ashell_tzresult=('a,Error_monad.tztrace)resultincludeError_coreincludeTezos_error_monad.TzLwtreslib.MonadincludeTezos_error_monad.Monad_maker.Make(Error_core)(TzTrace)(Tezos_error_monad.TzLwtreslib.Monad)(* Backwards compatibility additions (dont_wait, trace helpers) *)includeTezos_protocol_environment_structs.V9.Error_monad_infix_globalslettzfaile=Lwt.return_error(TzTrace.makee)leterrore=Error(TzTrace.makee)letdont_waitexerf=dont_waitferexlettrace_of_errore=TzTrace.makeeletmake_trace_encodinge=TzTrace.encodingeletpp_trace=pp_print_tracetype'errtrace='errTzTrace.trace(* Shadowing catch to prevent catching system exceptions *)typeerror+=Exnofexnlet()=register_error_kind`Temporary~id:"failure"~title:"Exception"~description:"Exception safely wrapped in an error"~pp:(funppfs->Format.fprintfppf"@[<h 0>%a@]"Format.pp_print_texts)Data_encoding.(obj1(req"msg"@@stringPlain))(function|Exn(Failuremsg)->Somemsg|Exnexn->Some(Printexc.to_stringexn)|_->None)(funmsg->Exn(Failuremsg))leterror_of_exne=TzTrace.make@@Exneletcatch?catch_onlyf=Result.catch?catch_onlyf|>Result.map_errorerror_of_exnletcatch_f?catch_onlyfh=Result.catch?catch_onlyf|>Result.map_error(fune->trace_of_error(he))letcatch_s?catch_onlyf=letopenLwt_syntaxinlet+r=Result.catch_s?catch_onlyfinResult.map_error(fune->error_of_exne)rletboth_e=Tezos_error_monad.TzLwtreslib.Monad.Traced_result_syntax.bothletjoin_e=Tezos_error_monad.TzLwtreslib.Monad.Traced_result_syntax.joinletall_e=Tezos_error_monad.TzLwtreslib.Monad.Traced_result_syntax.allendlet()=letid=Format.asprintf"proto.%s.wrapper"Param.nameinShell_error_monad.register_wrapped_error_kind(moduleWrapped_error_monad)~id~title:("Error returned by protocol "^Param.name)~description:("Wrapped error for economic protocol "^Param.name^".")letwrap_tzerrorerror=Ecoproto_errorerrorletwrap_tztracet=List.mapwrap_tzerrortletwrap_tzresultr=Result.map_errorwrap_tztracermoduleChain_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=Tezos_crypto.Blake2BmoduleFitness=FitnessmoduleOperation=OperationmoduleBlock_header=Block_headermoduleBounded=BoundedmoduleProtocol=ProtocolmoduleRPC_arg=Tezos_rpc.ArgmoduleRPC_path=Tezos_rpc.PathmoduleRPC_query=Tezos_rpc.QuerymoduleRPC_service=Tezos_rpc.ServicemoduleRPC_answer=structtype'ot=[`Okof'o(* 200 *)|`OkChunkof'o(* 200 but with chunked transfer encoding *)|`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_rpc.Directoryletgen_registerdirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|`Oko->RPC_answer.returno|`OkChunko->RPC_answer.return_chunkedo|`OkStreams->RPC_answer.return_streams|`Createds->Lwt.return(`Createds)|`No_content->Lwt.return`No_content|`Unauthorizede->lete=Option.map(List.map(fune->Ecoproto_errore))einLwt.return(`Unauthorizede)|`Forbiddene->lete=Option.map(List.map(fune->Ecoproto_errore))einLwt.return(`Forbiddene)|`Not_founde->lete=Option.map(List.map(fune->Ecoproto_errore))einLwt.return(`Not_founde)|`Conflicte->lete=Option.map(List.map(fune->Ecoproto_errore))einLwt.return(`Conflicte)|`Errore->lete=Option.map(List.map(fune->Ecoproto_errore))einLwt.return(`Errore))letregister~chunkeddirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|Okowhenchunked->RPC_answer.return_chunkedo|Oko(* otherwise *)->RPC_answer.returno|Errore->RPC_answer.faile)letopt_register~chunkeddirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*r=handlerpqiinmatchrwith|Ok(Someo)whenchunked->RPC_answer.return_chunkedo|Ok(Someo)(* otherwise *)->RPC_answer.returno|OkNone->RPC_answer.not_found|Errore->RPC_answer.faile)letlwt_register~chunkeddirservicehandler=letopenLwt_syntaxingen_registerdirservice(funpqi->let*o=handlerpqiinifchunkedthenRPC_answer.return_chunkedoelseRPC_answer.returno)openCurryletregister0~chunkedrootsf=register~chunkedroots(curryZf)letregister1~chunkedrootsf=register~chunkedroots(curry(SZ)f)letregister2~chunkedrootsf=register~chunkedroots(curry(S(SZ))f)letregister3~chunkedrootsf=register~chunkedroots(curry(S(S(SZ)))f)letregister4~chunkedrootsf=register~chunkedroots(curry(S(S(S(SZ))))f)letregister5~chunkedrootsf=register~chunkedroots(curry(S(S(S(S(SZ)))))f)letopt_register0~chunkedrootsf=opt_register~chunkedroots(curryZf)letopt_register1~chunkedrootsf=opt_register~chunkedroots(curry(SZ)f)letopt_register2~chunkedrootsf=opt_register~chunkedroots(curry(S(SZ))f)letopt_register3~chunkedrootsf=opt_register~chunkedroots(curry(S(S(SZ)))f)letopt_register4~chunkedrootsf=opt_register~chunkedroots(curry(S(S(S(SZ))))f)letopt_register5~chunkedrootsf=opt_register~chunkedroots(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_register0~chunkedrootsf=lwt_register~chunkedroots(curryZf)letlwt_register1~chunkedrootsf=lwt_register~chunkedroots(curry(SZ)f)letlwt_register2~chunkedrootsf=lwt_register~chunkedroots(curry(S(SZ))f)letlwt_register3~chunkedrootsf=lwt_register~chunkedroots(curry(S(S(SZ)))f)letlwt_register4~chunkedrootsf=lwt_register~chunkedroots(curry(S(S(S(SZ))))f)letlwt_register5~chunkedrootsf=lwt_register~chunkedroots(curry(S(S(S(S(SZ)))))f)endmoduleRPC_context=structtypet=rpc_contextclasstype['pr]simple=objectmethodcall_proto_service0:'m'q'i'o.(([<Tezos_rpc.Service.meth]as'm),t,t,'q,'i,'o)Tezos_rpc.Service.t->'pr->'q->'i->'oError_monad.shell_tzresultLwt.tmethodcall_proto_service1:'m'a'q'i'o.(([<Tezos_rpc.Service.meth]as'm),t,t*'a,'q,'i,'o)Tezos_rpc.Service.t->'pr->'a->'q->'i->'oError_monad.shell_tzresultLwt.tmethodcall_proto_service2:'m'a'b'q'i'o.(([<Tezos_rpc.Service.meth]as'm),t,(t*'a)*'b,'q,'i,'o)Tezos_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)endmoduleSapling=Tezos_sapling.Core.ValidatormoduleMicheline=structincludeMichelineincludeMicheline_encoding(* The environment exposes a single canonical encoding for Micheline
expression. Since env-V4, it is encoding-v2 because this is the most
recent, most correct-at-time-of-writing encoding. For backwards
compatibility reason, you should never upgrade (nor downgrade) this.
Future fixes and improvements of the encoding should be made available in
future environments only. *)letcanonical_encoding~variantencoding=canonical_encoding_v2~variant:(Param.name^"."^variant)encodingendmoduleUpdater =structtypenonrecvalidation_result=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_protocolmoduletypePROTOCOL=Environment_protocol_T_V7.Twithtypecontext:=Context.tandtypecache_value:=Environment_context.Context.cache_valueandtypecache_key:=Environment_context.Context.cache_keyandtypequota:=quotaandtypevalidation_result:=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=structincludeContextincludeEnvironment_context.V9moduletypePROOF_ENCODING=Tezos_context_sigs.Context.PROOF_ENCODINGmoduleProof_encoding=Tezos_context_merkle_proof_encoding.Merkle_proof_encodingletcompletectxts=Base58.completectxtsendmoduleWasm_2_0_0=structtypeinput=Tezos_scoru_wasm.Wasm_pvm_state.input_info={inbox_level:Bounded.Non_negative_int32.t;message_counter:Z.t;}typeoutput=Tezos_scoru_wasm.Wasm_pvm_state.output_info={outbox_level:Bounded.Non_negative_int32.t;message_index:Z.t;}typereveal_hash=Tezos_scoru_wasm.Wasm_pvm_state.Compatibility.reveal_hashtypereveal=Tezos_scoru_wasm.Wasm_pvm_state.Compatibility.reveal=|Reveal_raw_dataofreveal_hash|Reveal_metadatatypeinput_request=|No_input_required|Input_required|Reveal_requiredofrevealtypeinfo={current_tick:Z.t;last_input_read:inputoption;input_request:input_request;}typeversion=Tezos_scoru_wasm.Wasm_pvm_state.versionletv1=Tezos_scoru_wasm.Wasm_pvm_state.V1moduleMake(Tree:Context.TREEwithtypekey=stringlistandtypevalue=bytes)=structtypeTezos_tree_encoding.tree_instance+=PVM_treeofTree.treeincludeTezos_scoru_wasm.Wasm_pvm.Make(structincludeTreeletselect=function|PVM_treet->t|_->raiseTezos_tree_encoding.Incorrect_tree_typeletwrapt=PVM_treetend)letreveal_compatreveal=matchTezos_scoru_wasm.Wasm_pvm_state.Compatibility.of_current_optrevealwith|Somer->r|None->(* The WASM PVM before environment V11 will not request a value
outside of the [Compatibility.reveal] domain. As a consequence,
the only execution path leading to executing this branch is
by having two dishonest nodes playing against each other.
As a consequence, it is safe to return an arbitrary value here,
and we do so to avoid raising an exception. *)Reveal_raw_data"this line costs 10k XTZ to execute"letinput_request_compat=function|Tezos_scoru_wasm.Wasm_pvm_state.No_input_required->No_input_required|Input_required->Input_required|Reveal_requiredreq->Reveal_required(reveal_compatreq)letinfo_compatTezos_scoru_wasm.Wasm_pvm_state.{current_tick;last_input_read;input_request}={current_tick;last_input_read;input_request=input_request_compatinput_request;}letget_infotree=letopenLwt_syntaxinlet+info=get_infotreeininfo_compatinfoendendmoduleLift(P:Updater.PROTOCOL)=structletenvironment_version=Protocol.V9letexpected_context_hash=Predecessor_resulting_contextincludePletblock_header_metadata_encoding_with_legacy_attestation_name=block_header_metadata_encodingletoperation_data_encoding_with_legacy_attestation_name=operation_data_encodingletoperation_receipt_encoding_with_legacy_attestation_name=operation_receipt_encodingletoperation_data_and_receipt_encoding_with_legacy_attestation_name=operation_data_and_receipt_encodingletvalue_of_key~chain_id~predecessor_context~predecessor_timestamp~predecessor_level~predecessor_fitness~predecessor~timestamp=letopenLwt_result_syntaxinlet*!r=value_of_key~chain_id~predecessor_context~predecessor_timestamp~predecessor_level~predecessor_fitness~predecessor~timestampinlet*?f=wrap_tzresultrinreturn(funx->let*!r=fxinLwt.return(wrap_tzresultr))(** Ensure that the cache is correctly loaded in memory
before running any operations. *)letload_predecessor_cachepredecessor_contextchain_idmode(predecessor_header:Block_header.shell_header)cache=letopenLwt_result_syntaxinletpredecessor_hash,timestamp=matchmodewith|Applicationblock_header|Partial_validationblock_header->(block_header.shell.predecessor,block_header.shell.timestamp)|Construction{predecessor_hash;timestamp;_}|Partial_construction{predecessor_hash;timestamp}->(predecessor_hash,timestamp)inlet*value_of_key=value_of_key~chain_id~predecessor_context~predecessor_timestamp:predecessor_header.timestamp~predecessor_level:predecessor_header.level~predecessor_fitness:predecessor_header.fitness~predecessor:predecessor_hash~timestampinContext.load_cachepredecessor_hashpredecessor_contextcachevalue_of_keyletbegin_validationctxtchain_idmode~predecessor~cache=letopenLwt_result_syntaxinlet*ctxt=load_predecessor_cachectxtchain_idmodepredecessorcacheinlet*!validation_state=begin_validationctxtchain_idmode~predecessorinLwt.return(wrap_tzresultvalidation_state)letvalidate_operation?check_signaturevalidation_stateophoperation=letopenLwt_syntaxinlet+validation_state=validate_operation?check_signaturevalidation_stateophoperationinwrap_tzresultvalidation_stateletfinalize_validationvalidation_state=letopenLwt_syntaxinlet+res=finalize_validationvalidation_stateinwrap_tzresultresletbegin_applicationctxtchain_idmode~predecessor~cache=letopenLwt_result_syntaxinlet*ctxt=load_predecessor_cachectxtchain_idmodepredecessorcacheinlet*!application_state=begin_applicationctxtchain_id~predecessormodeinLwt.return(wrap_tzresultapplication_state)letapply_operationapplication_stateophoperation=letopenLwt_syntaxinlet+application_state=apply_operationapplication_stateophoperationinwrap_tzresultapplication_stateletfinalize_applicationstateshell_header=letopenLwt_syntaxinlet+res=finalize_applicationstateshell_headerinwrap_tzresultresletinitchain_idcbh=letopenLwt_syntaxinlet+r=initchain_idcbhinwrap_tzresultrletset_log_message_consumerf=Logging.logging_function:=SomefmoduleMempool=structincludeMempooltypeadd_error=|Validation_errorofError_monad.shell_tztrace|Add_conflictofoperation_conflictletadd_operation?check_signature?conflict_handlerinfomempoolop:(t*add_result,add_error)resultLwt.t=letopenLwt_syntaxinlet+r=Mempool.add_operation?check_signature?conflict_handlerinfomempoolopinmatchrwith|Okv->Okv|Error(Mempool.Validation_errore)->Error(Validation_error(wrap_tztracee))|Error(Mempool.Add_conflictc)->Error(Add_conflictc)letinitctxtchain_id~head_hash~head~cache=letopenLwt_result_syntaxinlet*ctxt=load_predecessor_cachectxtchain_id(Partial_construction{predecessor_hash=head_hash;timestamp=head.Block_header.timestamp;})headcacheinlet*!r=initctxtchain_id~head_hash~headinLwt.return(wrap_tzresultr)endendclass['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)qimethodcall_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)qiendmoduleEquality_witness=Environment_context.Equality_witnessmodulePlonk=Tezos_protocol_environment_structs.V9.PlonkmoduleDal=structincludeTezos_crypto_dal.Cryptobox.Verifierletverify_pagetcommitment~page_indexpagepage_proof=matchverify_pagetcommitment~page_indexpagepage_proofwith|Error`Page_length_mismatch->Error`Page_length_mismatch|Error`Page_index_out_of_range->Error`Segment_index_out_of_range|Error(`Invalid_page|`Invalid_degree_strictly_less_than_expected_)->Okfalse|Ok()->Oktrueendend