12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006(*****************************************************************************)(* *)(* Open Source License *)(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)(* Copyright (c) 2022 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. *)(* *)(*****************************************************************************)(* Tezos Protocol Implementation - Low level Repr. of Operations *)moduleKind=structtypepreendorsement_consensus_kind=Preendorsement_consensus_kindtypeendorsement_consensus_kind=Endorsement_consensus_kindtype'aconsensus=|Preendorsement_kind:preendorsement_consensus_kindconsensus|Endorsement_kind:endorsement_consensus_kindconsensustypepreendorsement=preendorsement_consensus_kindconsensustypeendorsement=endorsement_consensus_kindconsensustypedal_slot_availability=Dal_slot_availability_kindtypeseed_nonce_revelation=Seed_nonce_revelation_kindtypevdf_revelation=Vdf_revelation_kindtype'adouble_consensus_operation_evidence=|Double_consensus_operation_evidencetypedouble_endorsement_evidence=endorsement_consensus_kinddouble_consensus_operation_evidencetypedouble_preendorsement_evidence=preendorsement_consensus_kinddouble_consensus_operation_evidencetypedouble_baking_evidence=Double_baking_evidence_kindtypeactivate_account=Activate_account_kindtypeproposals=Proposals_kindtypeballot=Ballot_kindtypereveal=Reveal_kindtypetransaction=Transaction_kindtypeorigination=Origination_kindtypedelegation=Delegation_kindtypeevent=Event_kindtypeset_deposits_limit=Set_deposits_limit_kindtypeincrease_paid_storage=Increase_paid_storage_kindtypefailing_noop=Failing_noop_kindtyperegister_global_constant=Register_global_constant_kindtypetx_rollup_origination=Tx_rollup_origination_kindtypetx_rollup_submit_batch=Tx_rollup_submit_batch_kindtypetx_rollup_commit=Tx_rollup_commit_kindtypetx_rollup_return_bond=Tx_rollup_return_bond_kindtypetx_rollup_finalize_commitment=Tx_rollup_finalize_commitment_kindtypetx_rollup_remove_commitment=Tx_rollup_remove_commitment_kindtypetx_rollup_rejection=Tx_rollup_rejection_kindtypetx_rollup_dispatch_tickets=Tx_rollup_dispatch_tickets_kindtypetransfer_ticket=Transfer_ticket_kindtypedal_publish_slot_header=Dal_publish_slot_header_kindtypesc_rollup_originate=Sc_rollup_originate_kindtypesc_rollup_add_messages=Sc_rollup_add_messages_kindtypesc_rollup_cement=Sc_rollup_cement_kindtypesc_rollup_publish=Sc_rollup_publish_kindtypesc_rollup_refute=Sc_rollup_refute_kindtypesc_rollup_timeout=Sc_rollup_timeout_kindtypesc_rollup_execute_outbox_message=|Sc_rollup_execute_outbox_message_kindtypesc_rollup_recover_bond=Sc_rollup_recover_bond_kindtypesc_rollup_dal_slot_subscribe=Sc_rollup_dal_slot_subscribe_kindtype'amanager=|Reveal_manager_kind:revealmanager|Transaction_manager_kind:transactionmanager|Origination_manager_kind:originationmanager|Delegation_manager_kind:delegationmanager|Event_manager_kind:eventmanager|Register_global_constant_manager_kind:register_global_constantmanager|Set_deposits_limit_manager_kind:set_deposits_limitmanager|Increase_paid_storage_manager_kind:increase_paid_storagemanager|Tx_rollup_origination_manager_kind:tx_rollup_originationmanager|Tx_rollup_submit_batch_manager_kind:tx_rollup_submit_batchmanager|Tx_rollup_commit_manager_kind:tx_rollup_commitmanager|Tx_rollup_return_bond_manager_kind:tx_rollup_return_bondmanager|Tx_rollup_finalize_commitment_manager_kind:tx_rollup_finalize_commitmentmanager|Tx_rollup_remove_commitment_manager_kind:tx_rollup_remove_commitmentmanager|Tx_rollup_rejection_manager_kind:tx_rollup_rejectionmanager|Tx_rollup_dispatch_tickets_manager_kind:tx_rollup_dispatch_ticketsmanager|Transfer_ticket_manager_kind:transfer_ticketmanager|Dal_publish_slot_header_manager_kind:dal_publish_slot_headermanager|Sc_rollup_originate_manager_kind:sc_rollup_originatemanager|Sc_rollup_add_messages_manager_kind:sc_rollup_add_messagesmanager|Sc_rollup_cement_manager_kind:sc_rollup_cementmanager|Sc_rollup_publish_manager_kind:sc_rollup_publishmanager|Sc_rollup_refute_manager_kind:sc_rollup_refutemanager|Sc_rollup_timeout_manager_kind:sc_rollup_timeoutmanager|Sc_rollup_execute_outbox_message_manager_kind:sc_rollup_execute_outbox_messagemanager|Sc_rollup_recover_bond_manager_kind:sc_rollup_recover_bondmanager|Sc_rollup_dal_slot_subscribe_manager_kind:sc_rollup_dal_slot_subscribemanagerendtype'aconsensus_operation_type=|Endorsement:Kind.endorsementconsensus_operation_type|Preendorsement:Kind.preendorsementconsensus_operation_typeletpp_operation_kind(typekind)ppf(operation_kind:kindconsensus_operation_type)=matchoperation_kindwith|Endorsement->Format.fprintfppf"Endorsement"|Preendorsement->Format.fprintfppf"Preendorsement"typeconsensus_content={slot:Slot_repr.t;level:Raw_level_repr.t;(* The level is not required to validate an endorsement when it corresponds
to the current payload, but if we want to filter endorsements, we need
the level. *)round:Round_repr.t;block_payload_hash:Block_payload_hash.t;(* NOTE: This could be just the hash of the set of operations (the
actual payload). The grandfather block hash should already be
fixed by the operation.shell.branch field. This is not really
important but could make things easier for debugging *)}letconsensus_content_encoding=letopenData_encodinginconv(fun{slot;level;round;block_payload_hash}->(slot,level,round,block_payload_hash))(fun(slot,level,round,block_payload_hash)->{slot;level;round;block_payload_hash})(obj4(req"slot"Slot_repr.encoding)(req"level"Raw_level_repr.encoding)(req"round"Round_repr.encoding)(req"block_payload_hash"Block_payload_hash.encoding))letpp_consensus_contentppfcontent=Format.fprintfppf"(%ld, %a, %a, %a)"(Raw_level_repr.to_int32content.level)Round_repr.ppcontent.roundSlot_repr.ppcontent.slotBlock_payload_hash.pp_shortcontent.block_payload_hashtypeconsensus_watermark=|EndorsementofChain_id.t|PreendorsementofChain_id.t|Dal_slot_availabilityofChain_id.tletbytes_of_consensus_watermark=function|Preendorsementchain_id->Bytes.cat(Bytes.of_string"\x12")(Chain_id.to_byteschain_id)|Dal_slot_availabilitychain_id(* We reuse the watermark of an endorsement. This is because this
operation is temporary and aims to be merged with an endorsement
later on. Moreover, there is a leak of abstraction with the shell
which makes adding a new watermark a bit awkward. *)|Endorsementchain_id->Bytes.cat(Bytes.of_string"\x13")(Chain_id.to_byteschain_id)letto_watermarkw=Signature.Custom(bytes_of_consensus_watermarkw)letof_watermark=function|Signature.Customb->ifCompare.Int.(Bytes.lengthb>0)thenmatchBytes.getb0with|'\x12'->Option.map(funchain_id->Endorsementchain_id)(Chain_id.of_bytes_opt(Bytes.subb1(Bytes.lengthb-1)))|'\x13'->Option.map(funchain_id->Preendorsementchain_id)(Chain_id.of_bytes_opt(Bytes.subb1(Bytes.lengthb-1)))|'\x14'->Option.map(funchain_id->Dal_slot_availabilitychain_id)(Chain_id.of_bytes_opt(Bytes.subb1(Bytes.lengthb-1)))|_->NoneelseNone|_->Nonetyperaw=Operation.t={shell:Operation.shell_header;proto:bytes}letraw_encoding=Operation.encodingtype'kindoperation={shell:Operation.shell_header;protocol_data:'kindprotocol_data;}and'kindprotocol_data={contents:'kindcontents_list;signature:Signature.toption;}and_contents_list=|Single:'kindcontents->'kindcontents_list|Cons:'kindKind.managercontents*'restKind.managercontents_list->('kind*'rest)Kind.managercontents_listand_contents=|Preendorsement:consensus_content->Kind.preendorsementcontents|Endorsement:consensus_content->Kind.endorsementcontents|Dal_slot_availability:Signature.Public_key_hash.t*Dal_endorsement_repr.t->Kind.dal_slot_availabilitycontents|Seed_nonce_revelation:{level:Raw_level_repr.t;nonce:Seed_repr.nonce;}->Kind.seed_nonce_revelationcontents|Vdf_revelation:{solution:Seed_repr.vdf_solution;}->Kind.vdf_revelationcontents|Double_preendorsement_evidence:{op1:Kind.preendorsementoperation;op2:Kind.preendorsementoperation;}->Kind.double_preendorsement_evidencecontents|Double_endorsement_evidence:{op1:Kind.endorsementoperation;op2:Kind.endorsementoperation;}->Kind.double_endorsement_evidencecontents|Double_baking_evidence:{bh1:Block_header_repr.t;bh2:Block_header_repr.t;}->Kind.double_baking_evidencecontents|Activate_account:{id:Ed25519.Public_key_hash.t;activation_code:Blinded_public_key_hash.activation_code;}->Kind.activate_accountcontents|Proposals:{source:Signature.Public_key_hash.t;period:int32;proposals:Protocol_hash.tlist;}->Kind.proposalscontents|Ballot:{source:Signature.Public_key_hash.t;period:int32;proposal:Protocol_hash.t;ballot:Vote_repr.ballot;}->Kind.ballotcontents|Failing_noop:string->Kind.failing_noopcontents|Manager_operation:{source:Signature.public_key_hash;fee:Tez_repr.tez;counter:counter;operation:'kindmanager_operation;gas_limit:Gas_limit_repr.Arith.integral;storage_limit:Z.t;}->'kindKind.managercontentsand_manager_operation=|Reveal:Signature.Public_key.t->Kind.revealmanager_operation|Transaction:{amount:Tez_repr.tez;parameters:Script_repr.lazy_expr;entrypoint:Entrypoint_repr.t;destination:Contract_repr.t;}->Kind.transactionmanager_operation|Origination:{delegate:Signature.Public_key_hash.toption;script:Script_repr.t;credit:Tez_repr.tez;}->Kind.originationmanager_operation|Delegation:Signature.Public_key_hash.toption->Kind.delegationmanager_operation|Register_global_constant:{value:Script_repr.lazy_expr;}->Kind.register_global_constantmanager_operation|Set_deposits_limit:Tez_repr.toption->Kind.set_deposits_limitmanager_operation|Increase_paid_storage:{amount_in_bytes:Z.t;destination:Contract_hash.t;}->Kind.increase_paid_storagemanager_operation|Tx_rollup_origination:Kind.tx_rollup_originationmanager_operation|Tx_rollup_submit_batch:{tx_rollup:Tx_rollup_repr.t;content:string;burn_limit:Tez_repr.toption;}->Kind.tx_rollup_submit_batchmanager_operation|Tx_rollup_commit:{tx_rollup:Tx_rollup_repr.t;commitment:Tx_rollup_commitment_repr.Full.t;}->Kind.tx_rollup_commitmanager_operation|Tx_rollup_return_bond:{tx_rollup:Tx_rollup_repr.t;}->Kind.tx_rollup_return_bondmanager_operation|Tx_rollup_finalize_commitment:{tx_rollup:Tx_rollup_repr.t;}->Kind.tx_rollup_finalize_commitmentmanager_operation|Tx_rollup_remove_commitment:{tx_rollup:Tx_rollup_repr.t;}->Kind.tx_rollup_remove_commitmentmanager_operation|Tx_rollup_rejection:{tx_rollup:Tx_rollup_repr.t;level:Tx_rollup_level_repr.t;message:Tx_rollup_message_repr.t;message_position:int;message_path:Tx_rollup_inbox_repr.Merkle.path;message_result_hash:Tx_rollup_message_result_hash_repr.t;message_result_path:Tx_rollup_commitment_repr.Merkle.path;previous_message_result:Tx_rollup_message_result_repr.t;previous_message_result_path:Tx_rollup_commitment_repr.Merkle.path;proof:Tx_rollup_l2_proof.t;}->Kind.tx_rollup_rejectionmanager_operation|Tx_rollup_dispatch_tickets:{tx_rollup:Tx_rollup_repr.t;level:Tx_rollup_level_repr.t;context_hash:Context_hash.t;message_index:int;message_result_path:Tx_rollup_commitment_repr.Merkle.path;tickets_info:Tx_rollup_reveal_repr.tlist;}->Kind.tx_rollup_dispatch_ticketsmanager_operation|Transfer_ticket:{contents:Script_repr.lazy_expr;ty:Script_repr.lazy_expr;ticketer:Contract_repr.t;amount:Z.t;destination:Contract_repr.t;entrypoint:Entrypoint_repr.t;}->Kind.transfer_ticketmanager_operation|Dal_publish_slot_header:{slot:Dal_slot_repr.t;}->Kind.dal_publish_slot_headermanager_operation|Sc_rollup_originate:{kind:Sc_rollups.Kind.t;boot_sector:string;parameters_ty:Script_repr.lazy_expr;}->Kind.sc_rollup_originatemanager_operation|Sc_rollup_add_messages:{rollup:Sc_rollup_repr.t;messages:stringlist;}->Kind.sc_rollup_add_messagesmanager_operation|Sc_rollup_cement:{rollup:Sc_rollup_repr.t;commitment:Sc_rollup_commitment_repr.Hash.t;}->Kind.sc_rollup_cementmanager_operation|Sc_rollup_publish:{rollup:Sc_rollup_repr.t;commitment:Sc_rollup_commitment_repr.t;}->Kind.sc_rollup_publishmanager_operation|Sc_rollup_refute:{rollup:Sc_rollup_repr.t;opponent:Sc_rollup_repr.Staker.t;refutation:Sc_rollup_game_repr.refutation;is_opening_move:bool;}->Kind.sc_rollup_refutemanager_operation|Sc_rollup_timeout:{rollup:Sc_rollup_repr.t;stakers:Sc_rollup_game_repr.Index.t;}->Kind.sc_rollup_timeoutmanager_operation|Sc_rollup_execute_outbox_message:{rollup:Sc_rollup_repr.t;cemented_commitment:Sc_rollup_commitment_repr.Hash.t;outbox_level:Raw_level_repr.t;message_index:int;inclusion_proof:string;message:string;}->Kind.sc_rollup_execute_outbox_messagemanager_operation|Sc_rollup_recover_bond:{sc_rollup:Sc_rollup_repr.t;}->Kind.sc_rollup_recover_bondmanager_operation|Sc_rollup_dal_slot_subscribe:{rollup:Sc_rollup_repr.t;slot_index:Dal_slot_repr.Index.t;}->Kind.sc_rollup_dal_slot_subscribemanager_operationandcounter=Z.tletmanager_kind:typekind.kindmanager_operation->kindKind.manager=function|Reveal_->Kind.Reveal_manager_kind|Transaction_->Kind.Transaction_manager_kind|Origination_->Kind.Origination_manager_kind|Delegation_->Kind.Delegation_manager_kind|Register_global_constant_->Kind.Register_global_constant_manager_kind|Set_deposits_limit_->Kind.Set_deposits_limit_manager_kind|Increase_paid_storage_->Kind.Increase_paid_storage_manager_kind|Tx_rollup_origination->Kind.Tx_rollup_origination_manager_kind|Tx_rollup_submit_batch_->Kind.Tx_rollup_submit_batch_manager_kind|Tx_rollup_commit_->Kind.Tx_rollup_commit_manager_kind|Tx_rollup_return_bond_->Kind.Tx_rollup_return_bond_manager_kind|Tx_rollup_finalize_commitment_->Kind.Tx_rollup_finalize_commitment_manager_kind|Tx_rollup_remove_commitment_->Kind.Tx_rollup_remove_commitment_manager_kind|Tx_rollup_rejection_->Kind.Tx_rollup_rejection_manager_kind|Tx_rollup_dispatch_tickets_->Kind.Tx_rollup_dispatch_tickets_manager_kind|Transfer_ticket_->Kind.Transfer_ticket_manager_kind|Dal_publish_slot_header_->Kind.Dal_publish_slot_header_manager_kind|Sc_rollup_originate_->Kind.Sc_rollup_originate_manager_kind|Sc_rollup_add_messages_->Kind.Sc_rollup_add_messages_manager_kind|Sc_rollup_cement_->Kind.Sc_rollup_cement_manager_kind|Sc_rollup_publish_->Kind.Sc_rollup_publish_manager_kind|Sc_rollup_refute_->Kind.Sc_rollup_refute_manager_kind|Sc_rollup_timeout_->Kind.Sc_rollup_timeout_manager_kind|Sc_rollup_execute_outbox_message_->Kind.Sc_rollup_execute_outbox_message_manager_kind|Sc_rollup_recover_bond_->Kind.Sc_rollup_recover_bond_manager_kind|Sc_rollup_dal_slot_subscribe_->Kind.Sc_rollup_dal_slot_subscribe_manager_kindtypepacked_manager_operation=|Manager:'kindmanager_operation->packed_manager_operationtypepacked_contents=Contents:'kindcontents->packed_contentstypepacked_contents_list=|Contents_list:'kindcontents_list->packed_contents_listtypepacked_protocol_data=|Operation_data:'kindprotocol_data->packed_protocol_datatypepacked_operation={shell:Operation.shell_header;protocol_data:packed_protocol_data;}letpack({shell;protocol_data}:_operation):packed_operation={shell;protocol_data=Operation_dataprotocol_data}letreccontents_list_to_list:typea.acontents_list->_=function|Singleo->[Contentso]|Cons(o,os)->Contentso::contents_list_to_listosletto_list=functionContents_listl->contents_list_to_listl(* This first version of of_list has the type (_, string) result expected by
the conv_with_guard combinator of Data_encoding. For a more conventional
return type see [of_list] below. *)letrecof_list_internal=function|[]->Error"Operation lists should not be empty."|[Contentso]->Ok(Contents_list(Singleo))|Contentso::os->(of_list_internalos>>?fun(Contents_listos)->match(o,os)with|Manager_operation_,Single(Manager_operation_)->Ok(Contents_list(Cons(o,os)))|Manager_operation_,Cons_->Ok(Contents_list(Cons(o,os)))|_->Error"Operation list of length > 1 should only contains manager \
operations.")typeerror+=Contents_list_errorofstring(* `Permanent *)letof_listl=matchof_list_internallwith|Okcontents->Okcontents|Errors->error@@Contents_list_errorslettx_rollup_operation_tag_offset=150lettx_rollup_operation_origination_tag=tx_rollup_operation_tag_offset+0lettx_rollup_operation_submit_batch_tag=tx_rollup_operation_tag_offset+1lettx_rollup_operation_commit_tag=tx_rollup_operation_tag_offset+2lettx_rollup_operation_return_bond_tag=tx_rollup_operation_tag_offset+3lettx_rollup_operation_finalize_commitment_tag=tx_rollup_operation_tag_offset+4lettx_rollup_operation_remove_commitment_tag=tx_rollup_operation_tag_offset+5lettx_rollup_operation_rejection_tag=tx_rollup_operation_tag_offset+6lettx_rollup_operation_dispatch_tickets_tag=tx_rollup_operation_tag_offset+7lettransfer_ticket_tag=tx_rollup_operation_tag_offset+8letsc_rollup_operation_tag_offset=200letsc_rollup_operation_origination_tag=sc_rollup_operation_tag_offset+0letsc_rollup_operation_add_message_tag=sc_rollup_operation_tag_offset+1letsc_rollup_operation_cement_tag=sc_rollup_operation_tag_offset+2letsc_rollup_operation_publish_tag=sc_rollup_operation_tag_offset+3letsc_rollup_operation_refute_tag=sc_rollup_operation_tag_offset+4letsc_rollup_operation_timeout_tag=sc_rollup_operation_tag_offset+5letsc_rollup_execute_outbox_message_tag=sc_rollup_operation_tag_offset+6letsc_rollup_operation_recover_bond_tag=sc_rollup_operation_tag_offset+7letsc_rollup_operation_dal_slot_subscribe_tag=sc_rollup_operation_tag_offset+8letdal_offset=230letdal_publish_slot_header_tag=dal_offset+0moduleEncoding=structopenData_encodingletcasetagnameargsprojinj=casetag~title:(String.capitalize_asciiname)(merge_objs(obj1(req"kind"(constantname)))args)(funx->matchprojxwithNone->None|Somex->Some((),x))(fun((),x)->injx)moduleManager_operations=structtype'kindcase=|MCase:{tag:int;name:string;encoding:'aData_encoding.t;select:packed_manager_operation->'kindmanager_operationoption;proj:'kindmanager_operation->'a;inj:'a->'kindmanager_operation;}->'kindcase[@@coq_force_gadt]let[@coq_axiom_with_reason"gadt"]reveal_case=MCase{tag=0;name="reveal";encoding=obj1(req"public_key"Signature.Public_key.encoding);select=(functionManager(Reveal_asop)->Someop|_->None);proj=(functionRevealpkh->pkh);inj=(funpkh->Revealpkh);}let[@coq_axiom_with_reason"gadt"]transaction_case=MCase{tag=1;name="transaction";encoding=obj3(req"amount"Tez_repr.encoding)(req"destination"Contract_repr.encoding)(opt"parameters"(obj2(req"entrypoint"Entrypoint_repr.smart_encoding)(req"value"Script_repr.lazy_expr_encoding)));select=(functionManager(Transaction_asop)->Someop|_->None);proj=(function|Transaction{amount;destination;parameters;entrypoint}->letparameters=ifScript_repr.is_unit_parameterparameters&&Entrypoint_repr.is_defaultentrypointthenNoneelseSome(entrypoint,parameters)in(amount,destination,parameters));inj=(fun(amount,destination,parameters)->letentrypoint,parameters=matchparameterswith|None->(Entrypoint_repr.default,Script_repr.unit_parameter)|Some(entrypoint,value)->(entrypoint,value)inTransaction{amount;destination;parameters;entrypoint});}let[@coq_axiom_with_reason"gadt"]origination_case=MCase{tag=2;name="origination";encoding=obj3(req"balance"Tez_repr.encoding)(opt"delegate"Signature.Public_key_hash.encoding)(req"script"Script_repr.encoding);select=(functionManager(Origination_asop)->Someop|_->None);proj=(function|Origination{credit;delegate;script}->(credit,delegate,script));inj=(fun(credit,delegate,script)->Origination{credit;delegate;script});}let[@coq_axiom_with_reason"gadt"]delegation_case=MCase{tag=3;name="delegation";encoding=obj1(opt"delegate"Signature.Public_key_hash.encoding);select=(functionManager(Delegation_asop)->Someop|_->None);proj=(functionDelegationkey->key);inj=(funkey->Delegationkey);}let[@coq_axiom_with_reason"gadt"]register_global_constant_case=MCase{tag=4;name="register_global_constant";encoding=obj1(req"value"Script_repr.lazy_expr_encoding);select=(function|Manager(Register_global_constant_asop)->Someop|_->None);proj=(functionRegister_global_constant{value}->value);inj=(funvalue->Register_global_constant{value});}let[@coq_axiom_with_reason"gadt"]set_deposits_limit_case=MCase{tag=5;name="set_deposits_limit";encoding=obj1(opt"limit"Tez_repr.encoding);select=(function|Manager(Set_deposits_limit_asop)->Someop|_->None);proj=(functionSet_deposits_limitkey->key);inj=(funkey->Set_deposits_limitkey);}let[@coq_axiom_with_reason"gadt"]increase_paid_storage_case=MCase{tag=9;name="increase_paid_storage";encoding=obj2(req"amount"Data_encoding.z)(req"destination"Contract_repr.originated_encoding);select=(function|Manager(Increase_paid_storage_asop)->Someop|_->None);proj=(function|Increase_paid_storage{amount_in_bytes;destination}->(amount_in_bytes,destination));inj=(fun(amount_in_bytes,destination)->Increase_paid_storage{amount_in_bytes;destination});}let[@coq_axiom_with_reason"gadt"]tx_rollup_origination_case=MCase{tag=tx_rollup_operation_origination_tag;name="tx_rollup_origination";encoding=obj1(req"tx_rollup_origination"Data_encoding.unit);select=(function|Manager(Tx_rollup_originationasop)->Someop|_->None);proj=(functionTx_rollup_origination->());inj=(fun()->Tx_rollup_origination);}lettx_rollup_batch_content=(* The content of batches is a string, but stands for an immutable byte
sequence. JSON only allows unicode strings so we use the [bytes]
encoding which is in hexadecimal for JSON. *)convBytes.of_stringBytes.to_stringbyteslet[@coq_axiom_with_reason"gadt"]tx_rollup_submit_batch_case=MCase{tag=tx_rollup_operation_submit_batch_tag;name="tx_rollup_submit_batch";encoding=obj3(req"rollup"Tx_rollup_repr.encoding)(req"content"tx_rollup_batch_content)(opt"burn_limit"Tez_repr.encoding);select=(function|Manager(Tx_rollup_submit_batch_asop)->Someop|_->None);proj=(function|Tx_rollup_submit_batch{tx_rollup;content;burn_limit}->(tx_rollup,content,burn_limit));inj=(fun(tx_rollup,content,burn_limit)->Tx_rollup_submit_batch{tx_rollup;content;burn_limit});}let[@coq_axiom_with_reason"gadt"]tx_rollup_commit_case=MCase{tag=tx_rollup_operation_commit_tag;name="tx_rollup_commit";encoding=obj2(req"rollup"Tx_rollup_repr.encoding)(req"commitment"Tx_rollup_commitment_repr.Full.encoding);select=(function|Manager(Tx_rollup_commit_asop)->Someop|_->None);proj=(function|Tx_rollup_commit{tx_rollup;commitment}->(tx_rollup,commitment));inj=(fun(tx_rollup,commitment)->Tx_rollup_commit{tx_rollup;commitment});}let[@coq_axiom_with_reason"gadt"]tx_rollup_return_bond_case=MCase{tag=tx_rollup_operation_return_bond_tag;name="tx_rollup_return_bond";encoding=obj1(req"rollup"Tx_rollup_repr.encoding);select=(function|Manager(Tx_rollup_return_bond_asop)->Someop|_->None);proj=(functionTx_rollup_return_bond{tx_rollup}->tx_rollup);inj=(funtx_rollup->Tx_rollup_return_bond{tx_rollup});}let[@coq_axiom_with_reason"gadt"]tx_rollup_finalize_commitment_case=MCase{tag=tx_rollup_operation_finalize_commitment_tag;name="tx_rollup_finalize_commitment";encoding=obj1(req"rollup"Tx_rollup_repr.encoding);select=(function|Manager(Tx_rollup_finalize_commitment_asop)->Someop|_->None);proj=(functionTx_rollup_finalize_commitment{tx_rollup}->tx_rollup);inj=(funtx_rollup->Tx_rollup_finalize_commitment{tx_rollup});}let[@coq_axiom_with_reason"gadt"]tx_rollup_remove_commitment_case=MCase{tag=tx_rollup_operation_remove_commitment_tag;name="tx_rollup_remove_commitment";encoding=obj1(req"rollup"Tx_rollup_repr.encoding);select=(function|Manager(Tx_rollup_remove_commitment_asop)->Someop|_->None);proj=(functionTx_rollup_remove_commitment{tx_rollup}->tx_rollup);inj=(funtx_rollup->Tx_rollup_remove_commitment{tx_rollup});}let[@coq_axiom_with_reason"gadt"]tx_rollup_rejection_case=MCase{tag=tx_rollup_operation_rejection_tag;name="tx_rollup_rejection";encoding=obj10(req"rollup"Tx_rollup_repr.encoding)(req"level"Tx_rollup_level_repr.encoding)(req"message"Tx_rollup_message_repr.encoding)(req"message_position"n)(req"message_path"Tx_rollup_inbox_repr.Merkle.path_encoding)(req"message_result_hash"Tx_rollup_message_result_hash_repr.encoding)(req"message_result_path"Tx_rollup_commitment_repr.Merkle.path_encoding)(req"previous_message_result"Tx_rollup_message_result_repr.encoding)(req"previous_message_result_path"Tx_rollup_commitment_repr.Merkle.path_encoding)(req"proof"Tx_rollup_l2_proof.encoding);select=(function|Manager(Tx_rollup_rejection_asop)->Someop|_->None);proj=(function|Tx_rollup_rejection{tx_rollup;level;message;message_position;message_path;message_result_hash;message_result_path;previous_message_result;previous_message_result_path;proof;}->(tx_rollup,level,message,Z.of_intmessage_position,message_path,message_result_hash,message_result_path,previous_message_result,previous_message_result_path,proof));inj=(fun(tx_rollup,level,message,message_position,message_path,message_result_hash,message_result_path,previous_message_result,previous_message_result_path,proof)->Tx_rollup_rejection{tx_rollup;level;message;message_position=Z.to_intmessage_position;message_path;message_result_hash;message_result_path;previous_message_result;previous_message_result_path;proof;});}let[@coq_axiom_with_reason"gadt"]tx_rollup_dispatch_tickets_case=MCase{tag=tx_rollup_operation_dispatch_tickets_tag;name="tx_rollup_dispatch_tickets";encoding=obj6(req"tx_rollup"Tx_rollup_repr.encoding)(req"level"Tx_rollup_level_repr.encoding)(req"context_hash"Context_hash.encoding)(req"message_index"int31)(req"message_result_path"Tx_rollup_commitment_repr.Merkle.path_encoding)(req"tickets_info"(Data_encoding.listTx_rollup_reveal_repr.encoding));select=(function|Manager(Tx_rollup_dispatch_tickets_asop)->Someop|_->None);proj=(function|Tx_rollup_dispatch_tickets{tx_rollup;level;context_hash;message_index;message_result_path;tickets_info;}->(tx_rollup,level,context_hash,message_index,message_result_path,tickets_info));inj=(fun(tx_rollup,level,context_hash,message_index,message_result_path,tickets_info)->Tx_rollup_dispatch_tickets{tx_rollup;level;context_hash;message_index;message_result_path;tickets_info;});}let[@coq_axiom_with_reason"gadt"]transfer_ticket_case=MCase{tag=transfer_ticket_tag;name="transfer_ticket";encoding=obj6(req"ticket_contents"Script_repr.lazy_expr_encoding)(req"ticket_ty"Script_repr.lazy_expr_encoding)(req"ticket_ticketer"Contract_repr.encoding)(req"ticket_amount"n)(req"destination"Contract_repr.encoding)(req"entrypoint"Entrypoint_repr.simple_encoding);select=(function|Manager(Transfer_ticket_asop)->Someop|_->None);proj=(function|Transfer_ticket{contents;ty;ticketer;amount;destination;entrypoint}->(contents,ty,ticketer,amount,destination,entrypoint));inj=(fun(contents,ty,ticketer,amount,destination,entrypoint)->Transfer_ticket{contents;ty;ticketer;amount;destination;entrypoint});}let[@coq_axiom_with_reason"gadt"]sc_rollup_originate_case=MCase{tag=sc_rollup_operation_origination_tag;name="sc_rollup_originate";encoding=obj3(req"kind"Sc_rollups.Kind.encoding)(req"boot_sector"Data_encoding.string)(req"parameters_ty"Script_repr.lazy_expr_encoding);select=(function|Manager(Sc_rollup_originate_asop)->Someop|_->None);proj=(function|Sc_rollup_originate{kind;boot_sector;parameters_ty}->(kind,boot_sector,parameters_ty));inj=(fun(kind,boot_sector,parameters_ty)->Sc_rollup_originate{kind;boot_sector;parameters_ty});}let[@coq_axiom_with_reason"gadt"]dal_publish_slot_header_case=MCase{tag=dal_publish_slot_header_tag;name="dal_publish_slot_header";encoding=obj1(req"slot"Dal_slot_repr.encoding);select=(function|Manager(Dal_publish_slot_header_asop)->Someop|_->None);proj=(functionDal_publish_slot_header{slot}->slot);inj=(funslot->Dal_publish_slot_header{slot});}let[@coq_axiom_with_reason"gadt"]sc_rollup_add_messages_case=MCase{tag=sc_rollup_operation_add_message_tag;name="sc_rollup_add_messages";encoding=obj2(req"rollup"Sc_rollup_repr.encoding)(req"message"(liststring));select=(function|Manager(Sc_rollup_add_messages_asop)->Someop|_->None);proj=(function|Sc_rollup_add_messages{rollup;messages}->(rollup,messages));inj=(fun(rollup,messages)->Sc_rollup_add_messages{rollup;messages});}let[@coq_axiom_with_reason"gadt"]sc_rollup_cement_case=MCase{tag=sc_rollup_operation_cement_tag;name="sc_rollup_cement";encoding=obj2(req"rollup"Sc_rollup_repr.encoding)(req"commitment"Sc_rollup_commitment_repr.Hash.encoding);select=(function|Manager(Sc_rollup_cement_asop)->Someop|_->None);proj=(function|Sc_rollup_cement{rollup;commitment}->(rollup,commitment));inj=(fun(rollup,commitment)->Sc_rollup_cement{rollup;commitment});}let[@coq_axiom_with_reason"gadt"]sc_rollup_publish_case=MCase{tag=sc_rollup_operation_publish_tag;name="sc_rollup_publish";encoding=obj2(req"rollup"Sc_rollup_repr.encoding)(req"commitment"Sc_rollup_commitment_repr.encoding);select=(function|Manager(Sc_rollup_publish_asop)->Someop|_->None);proj=(function|Sc_rollup_publish{rollup;commitment}->(rollup,commitment));inj=(fun(rollup,commitment)->Sc_rollup_publish{rollup;commitment});}let[@coq_axiom_with_reason"gadt"]sc_rollup_refute_case=MCase{tag=sc_rollup_operation_refute_tag;name="sc_rollup_refute";encoding=obj4(req"rollup"Sc_rollup_repr.encoding)(req"opponent"Sc_rollup_repr.Staker.encoding)(req"refutation"Sc_rollup_game_repr.refutation_encoding)(req"is_opening_move"bool);select=(function|Manager(Sc_rollup_refute_asop)->Someop|_->None);proj=(function|Sc_rollup_refute{rollup;opponent;refutation;is_opening_move}->(rollup,opponent,refutation,is_opening_move));inj=(fun(rollup,opponent,refutation,is_opening_move)->Sc_rollup_refute{rollup;opponent;refutation;is_opening_move});}let[@coq_axiom_with_reason"gadt"]sc_rollup_timeout_case=MCase{tag=sc_rollup_operation_timeout_tag;name="sc_rollup_timeout";encoding=obj2(req"rollup"Sc_rollup_repr.encoding)(req"stakers"Sc_rollup_game_repr.Index.encoding);select=(function|Manager(Sc_rollup_timeout_asop)->Someop|_->None);proj=(function|Sc_rollup_timeout{rollup;stakers}->(rollup,stakers));inj=(fun(rollup,stakers)->Sc_rollup_timeout{rollup;stakers});}let[@coq_axiom_with_reason"gadt"]sc_rollup_execute_outbox_message_case=MCase{tag=sc_rollup_execute_outbox_message_tag;name="sc_rollup_execute_outbox_message";encoding=obj6(req"rollup"Sc_rollup_repr.encoding)(req"cemented_commitment"Sc_rollup_commitment_repr.Hash.encoding)(req"outbox_level"Raw_level_repr.encoding)(req"message_index"Data_encoding.int31)(req"inclusion proof"Data_encoding.string)(req"message"Data_encoding.string);select=(function|Manager(Sc_rollup_execute_outbox_message_asop)->Someop|_->None);proj=(function|Sc_rollup_execute_outbox_message{rollup;cemented_commitment;outbox_level;message_index;inclusion_proof;message;}->(rollup,cemented_commitment,outbox_level,message_index,inclusion_proof,message));inj=(fun(rollup,cemented_commitment,outbox_level,message_index,inclusion_proof,message)->Sc_rollup_execute_outbox_message{rollup;cemented_commitment;outbox_level;message_index;inclusion_proof;message;});}let[@coq_axiom_with_reason"gadt"]sc_rollup_recover_bond_case=MCase{tag=sc_rollup_operation_recover_bond_tag;name="sc_rollup_recover_bond";encoding=obj1(req"rollup"Sc_rollup_repr.Address.encoding);select=(function|Manager(Sc_rollup_recover_bond_asop)->Someop|_->None);proj=(functionSc_rollup_recover_bond{sc_rollup}->sc_rollup);inj=(funsc_rollup->Sc_rollup_recover_bond{sc_rollup});}let[@coq_axiom_with_reason"gadt"]sc_rollup_dal_slot_subscribe_case=MCase{tag=sc_rollup_operation_dal_slot_subscribe_tag;name="sc_rollup_dal_slot_subscribe";encoding=obj2(req"rollup"Sc_rollup_repr.encoding)(req"slot_index"Dal_slot_repr.Index.encoding);select=(function|Manager(Sc_rollup_dal_slot_subscribe_asop)->Someop|_->None);proj=(function|Sc_rollup_dal_slot_subscribe{rollup;slot_index}->(rollup,slot_index));inj=(fun(rollup,slot_index)->Sc_rollup_dal_slot_subscribe{rollup;slot_index});}endtype'bcase=|Case:{tag:int;name:string;encoding:'aData_encoding.t;select:packed_contents->'bcontentsoption;proj:'bcontents->'a;inj:'a->'bcontents;}->'bcaseletpreendorsement_case=Case{tag=20;name="preendorsement";encoding=consensus_content_encoding;select=(functionContents(Preendorsement_asop)->Someop|_->None);proj=(fun(Preendorsementpreendorsement)->preendorsement);inj=(funpreendorsement->Preendorsementpreendorsement);}letpreendorsement_encoding=letmake(Case{tag;name;encoding;select=_;proj;inj})=case(Tagtag)nameencoding(funo->Some(projo))(funx->injx)inletto_list:Kind.preendorsementcontents_list->_=function|Singleo->oinletof_list:Kind.preendorsementcontents->_=function|o->Singleoindef"inlined.preendorsement"@@conv(fun({shell;protocol_data={contents;signature}}:_operation)->(shell,(contents,signature)))(fun(shell,(contents,signature)):_operation->{shell;protocol_data={contents;signature}})(merge_objsOperation.shell_header_encoding(obj2(req"operations"(convto_listof_list@@def"inlined.preendorsement.contents"@@union[makepreendorsement_case]))(varopt"signature"Signature.encoding)))letendorsement_encoding=obj4(req"slot"Slot_repr.encoding)(req"level"Raw_level_repr.encoding)(req"round"Round_repr.encoding)(req"block_payload_hash"Block_payload_hash.encoding)letendorsement_case=Case{tag=21;name="endorsement";encoding=endorsement_encoding;select=(functionContents(Endorsement_asop)->Someop|_->None);proj=(fun[@coq_match_with_default](Endorsementconsensus_content)->(consensus_content.slot,consensus_content.level,consensus_content.round,consensus_content.block_payload_hash));inj=(fun(slot,level,round,block_payload_hash)->Endorsement{slot;level;round;block_payload_hash});}let[@coq_axiom_with_reason"gadt"]endorsement_encoding=letmake(Case{tag;name;encoding;select=_;proj;inj})=case(Tagtag)nameencoding(funo->Some(projo))(funx->injx)inletto_list:Kind.endorsementcontents_list->_=fun(Singleo)->oinletof_list:Kind.endorsementcontents->_=funo->Singleoindef"inlined.endorsement"@@conv(fun({shell;protocol_data={contents;signature}}:_operation)->(shell,(contents,signature)))(fun(shell,(contents,signature)):_operation->{shell;protocol_data={contents;signature}})(merge_objsOperation.shell_header_encoding(obj2(req"operations"(convto_listof_list@@def"inlined.endorsement_mempool.contents"@@union[makeendorsement_case]))(varopt"signature"Signature.encoding)))letdal_slot_availability_encoding=obj2(req"endorser"Signature.Public_key_hash.encoding)(req"endorsement"Dal_endorsement_repr.encoding)letdal_slot_availability_case=Case{tag=22;name="dal_slot_availability";encoding=dal_slot_availability_encoding;select=(function|Contents(Dal_slot_availability_asop)->Someop|_->None);proj=(fun[@coq_match_with_default](Dal_slot_availability(endorser,endorsement))->(endorser,endorsement));inj=(fun(endorser,endorsement)->Dal_slot_availability(endorser,endorsement));}let[@coq_axiom_with_reason"gadt"]seed_nonce_revelation_case=Case{tag=1;name="seed_nonce_revelation";encoding=obj2(req"level"Raw_level_repr.encoding)(req"nonce"Seed_repr.nonce_encoding);select=(function|Contents(Seed_nonce_revelation_asop)->Someop|_->None);proj=(fun(Seed_nonce_revelation{level;nonce})->(level,nonce));inj=(fun(level,nonce)->Seed_nonce_revelation{level;nonce});}let[@coq_axiom_with_reason"gadt"]vdf_revelation_case=Case{tag=8;name="vdf_revelation";encoding=obj1(req"solution"Seed_repr.vdf_solution_encoding);select=(functionContents(Vdf_revelation_asop)->Someop|_->None);proj=(functionVdf_revelation{solution}->solution);inj=(funsolution->Vdf_revelation{solution});}let[@coq_axiom_with_reason"gadt"]double_preendorsement_evidence_case:Kind.double_preendorsement_evidencecase=Case{tag=7;name="double_preendorsement_evidence";encoding=obj2(req"op1"(dynamic_sizepreendorsement_encoding))(req"op2"(dynamic_sizepreendorsement_encoding));select=(function|Contents(Double_preendorsement_evidence_asop)->Someop|_->None);proj=(fun(Double_preendorsement_evidence{op1;op2})->(op1,op2));inj=(fun(op1,op2)->Double_preendorsement_evidence{op1;op2});}let[@coq_axiom_with_reason"gadt"]double_endorsement_evidence_case:Kind.double_endorsement_evidencecase=Case{tag=2;name="double_endorsement_evidence";encoding=obj2(req"op1"(dynamic_sizeendorsement_encoding))(req"op2"(dynamic_sizeendorsement_encoding));select=(function|Contents(Double_endorsement_evidence_asop)->Someop|_->None);proj=(fun(Double_endorsement_evidence{op1;op2})->(op1,op2));inj=(fun(op1,op2)->Double_endorsement_evidence{op1;op2});}let[@coq_axiom_with_reason"gadt"]double_baking_evidence_case=Case{tag=3;name="double_baking_evidence";encoding=obj2(req"bh1"(dynamic_sizeBlock_header_repr.encoding))(req"bh2"(dynamic_sizeBlock_header_repr.encoding));select=(function|Contents(Double_baking_evidence_asop)->Someop|_->None);proj=(fun(Double_baking_evidence{bh1;bh2})->(bh1,bh2));inj=(fun(bh1,bh2)->Double_baking_evidence{bh1;bh2});}let[@coq_axiom_with_reason"gadt"]activate_account_case=Case{tag=4;name="activate_account";encoding=obj2(req"pkh"Ed25519.Public_key_hash.encoding)(req"secret"Blinded_public_key_hash.activation_code_encoding);select=(function|Contents(Activate_account_asop)->Someop|_->None);proj=(fun(Activate_account{id;activation_code})->(id,activation_code));inj=(fun(id,activation_code)->Activate_account{id;activation_code});}let[@coq_axiom_with_reason"gadt"]proposals_case=Case{tag=5;name="proposals";encoding=obj3(req"source"Signature.Public_key_hash.encoding)(req"period"int32)(req"proposals"(listProtocol_hash.encoding));select=(functionContents(Proposals_asop)->Someop|_->None);proj=(fun(Proposals{source;period;proposals})->(source,period,proposals));inj=(fun(source,period,proposals)->Proposals{source;period;proposals});}let[@coq_axiom_with_reason"gadt"]ballot_case=Case{tag=6;name="ballot";encoding=obj4(req"source"Signature.Public_key_hash.encoding)(req"period"int32)(req"proposal"Protocol_hash.encoding)(req"ballot"Vote_repr.ballot_encoding);select=(functionContents(Ballot_asop)->Someop|_->None);proj=(function|Ballot{source;period;proposal;ballot}->(source,period,proposal,ballot));inj=(fun(source,period,proposal,ballot)->Ballot{source;period;proposal;ballot});}letfailing_noop_case=Case{tag=17;name="failing_noop";encoding=obj1(req"arbitrary"Data_encoding.string);select=(functionContents(Failing_noop_asop)->Someop|_->None);proj=(function[@coq_match_with_default]Failing_noopmessage->message);inj=(functionmessage->Failing_noopmessage);}letmanager_encoding=obj5(req"source"Signature.Public_key_hash.encoding)(req"fee"Tez_repr.encoding)(req"counter"(check_size10n))(req"gas_limit"(check_size10Gas_limit_repr.Arith.n_integral_encoding))(req"storage_limit"(check_size10n))letextract:typekind.kindKind.managercontents->_=function[@coq_match_with_default]|Manager_operation{source;fee;counter;gas_limit;storage_limit;operation=_}->(source,fee,counter,gas_limit,storage_limit)letrebuild(source,fee,counter,gas_limit,storage_limit)operation=Manager_operation{source;fee;counter;gas_limit;storage_limit;operation}let[@coq_axiom_with_reason"gadt"]make_manager_casetag(typekind)(Manager_operations.MCasemcase:kindManager_operations.case)=Case{tag;name=mcase.name;encoding=merge_objsmanager_encodingmcase.encoding;select=(function|Contents(Manager_operation({operation;_}asop))->(matchmcase.select(Manageroperation)with|None->None|Someoperation->Some(Manager_operation{opwithoperation}))|_->None);proj=(function|Manager_operation{operation;_}asop->(extractop,mcase.projoperation));inj=(fun(op,contents)->rebuildop(mcase.injcontents));}letreveal_case=make_manager_case107Manager_operations.reveal_caselettransaction_case=make_manager_case108Manager_operations.transaction_caseletorigination_case=make_manager_case109Manager_operations.origination_caseletdelegation_case=make_manager_case110Manager_operations.delegation_caseletregister_global_constant_case=make_manager_case111Manager_operations.register_global_constant_caseletset_deposits_limit_case=make_manager_case112Manager_operations.set_deposits_limit_caseletincrease_paid_storage_case=make_manager_case113Manager_operations.increase_paid_storage_caselettx_rollup_origination_case=make_manager_casetx_rollup_operation_tag_offsetManager_operations.tx_rollup_origination_caselettx_rollup_submit_batch_case=make_manager_casetx_rollup_operation_submit_batch_tagManager_operations.tx_rollup_submit_batch_caselettx_rollup_commit_case=make_manager_casetx_rollup_operation_commit_tagManager_operations.tx_rollup_commit_caselettx_rollup_return_bond_case=make_manager_casetx_rollup_operation_return_bond_tagManager_operations.tx_rollup_return_bond_caselettx_rollup_finalize_commitment_case=make_manager_casetx_rollup_operation_finalize_commitment_tagManager_operations.tx_rollup_finalize_commitment_caselettx_rollup_remove_commitment_case=make_manager_casetx_rollup_operation_remove_commitment_tagManager_operations.tx_rollup_remove_commitment_caselettx_rollup_rejection_case=make_manager_casetx_rollup_operation_rejection_tagManager_operations.tx_rollup_rejection_caselettx_rollup_dispatch_tickets_case=make_manager_casetx_rollup_operation_dispatch_tickets_tagManager_operations.tx_rollup_dispatch_tickets_caselettransfer_ticket_case=make_manager_casetransfer_ticket_tagManager_operations.transfer_ticket_caseletdal_publish_slot_header_case=make_manager_casedal_publish_slot_header_tagManager_operations.dal_publish_slot_header_caseletsc_rollup_originate_case=make_manager_casesc_rollup_operation_origination_tagManager_operations.sc_rollup_originate_caseletsc_rollup_add_messages_case=make_manager_casesc_rollup_operation_add_message_tagManager_operations.sc_rollup_add_messages_caseletsc_rollup_cement_case=make_manager_casesc_rollup_operation_cement_tagManager_operations.sc_rollup_cement_caseletsc_rollup_publish_case=make_manager_casesc_rollup_operation_publish_tagManager_operations.sc_rollup_publish_caseletsc_rollup_refute_case=make_manager_casesc_rollup_operation_refute_tagManager_operations.sc_rollup_refute_caseletsc_rollup_timeout_case=make_manager_casesc_rollup_operation_timeout_tagManager_operations.sc_rollup_timeout_caseletsc_rollup_execute_outbox_message_case=make_manager_casesc_rollup_execute_outbox_message_tagManager_operations.sc_rollup_execute_outbox_message_caseletsc_rollup_recover_bond_case=make_manager_casesc_rollup_operation_recover_bond_tagManager_operations.sc_rollup_recover_bond_caseletsc_rollup_dal_slot_subscribe_case=make_manager_casesc_rollup_operation_dal_slot_subscribe_tagManager_operations.sc_rollup_dal_slot_subscribe_caseletcontents_encoding=letmake(Case{tag;name;encoding;select;proj;inj})=case(Tagtag)nameencoding(funo->matchselectowithNone->None|Someo->Some(projo))(funx->Contents(injx))indef"operation.alpha.contents"@@union[makeendorsement_case;makepreendorsement_case;makedal_slot_availability_case;makeseed_nonce_revelation_case;makevdf_revelation_case;makedouble_endorsement_evidence_case;makedouble_preendorsement_evidence_case;makedouble_baking_evidence_case;makeactivate_account_case;makeproposals_case;makeballot_case;makereveal_case;maketransaction_case;makeorigination_case;makedelegation_case;makeset_deposits_limit_case;makeincrease_paid_storage_case;makefailing_noop_case;makeregister_global_constant_case;maketx_rollup_origination_case;maketx_rollup_submit_batch_case;maketx_rollup_commit_case;maketx_rollup_return_bond_case;maketx_rollup_finalize_commitment_case;maketx_rollup_remove_commitment_case;maketx_rollup_rejection_case;maketx_rollup_dispatch_tickets_case;maketransfer_ticket_case;makedal_publish_slot_header_case;makesc_rollup_originate_case;makesc_rollup_add_messages_case;makesc_rollup_cement_case;makesc_rollup_publish_case;makesc_rollup_refute_case;makesc_rollup_timeout_case;makesc_rollup_execute_outbox_message_case;makesc_rollup_recover_bond_case;makesc_rollup_dal_slot_subscribe_case;]letcontents_list_encoding=conv_with_guardto_listof_list_internal(Variable.listcontents_encoding)letoptional_signature_encoding=conv(functionSomes->s|None->Signature.zero)(funs->ifSignature.equalsSignature.zerothenNoneelseSomes)Signature.encodingletprotocol_data_encoding=def"operation.alpha.contents_and_signature"@@conv(fun(Operation_data{contents;signature})->(Contents_listcontents,signature))(fun(Contents_listcontents,signature)->Operation_data{contents;signature})(obj2(req"contents"contents_list_encoding)(req"signature"optional_signature_encoding))letoperation_encoding=conv(fun{shell;protocol_data}->(shell,protocol_data))(fun(shell,protocol_data)->{shell;protocol_data})(merge_objsOperation.shell_header_encodingprotocol_data_encoding)letunsigned_operation_encoding=def"operation.alpha.unsigned_operation"@@merge_objsOperation.shell_header_encoding(obj1(req"contents"contents_list_encoding))endletencoding=Encoding.operation_encodingletcontents_encoding=Encoding.contents_encodingletcontents_list_encoding=Encoding.contents_list_encodingletprotocol_data_encoding=Encoding.protocol_data_encodingletunsigned_operation_encoding=Encoding.unsigned_operation_encodingletraw({shell;protocol_data}:_operation)=letproto=Data_encoding.Binary.to_bytes_exnprotocol_data_encoding(Operation_dataprotocol_data)in{Operation.shell;proto}letacceptable_passes(op:packed_operation)=let(Operation_dataprotocol_data)=op.protocol_datainmatchprotocol_data.contentswith|Single(Failing_noop_)->[]|Single(Preendorsement_)->[0]|Single(Endorsement_)->[0]|Single(Dal_slot_availability_)->[0]|Single(Proposals_)->[1]|Single(Ballot_)->[1]|Single(Seed_nonce_revelation_)->[2]|Single(Vdf_revelation_)->[2]|Single(Double_endorsement_evidence_)->[2]|Single(Double_preendorsement_evidence_)->[2]|Single(Double_baking_evidence_)->[2]|Single(Activate_account_)->[2]|Single(Manager_operation_)->[3]|Cons(Manager_operation_,_ops)->[3]typeerror+=Invalid_signature(* `Permanent *)typeerror+=Missing_signature(* `Permanent *)let()=register_error_kind`Permanent~id:"operation.invalid_signature"~title:"Invalid operation signature"~description:"The operation signature is ill-formed or has been made with the wrong \
public key"~pp:(funppf()->Format.fprintfppf"The operation signature is invalid")Data_encoding.unit(functionInvalid_signature->Some()|_->None)(fun()->Invalid_signature);register_error_kind`Permanent~id:"operation.missing_signature"~title:"Missing operation signature"~description:"The operation is of a kind that must be signed, but the signature is \
missing"~pp:(funppf()->Format.fprintfppf"The operation requires a signature")Data_encoding.unit(functionMissing_signature->Some()|_->None)(fun()->Missing_signature);register_error_kind`Permanent~id:"operation.contents_list_error"~title:"Invalid list of operation contents."~description:"An operation contents list has an unexpected shape; it should be either \
a single operation or a non-empty list of manager operations"~pp:(funppfs->Format.fprintfppf"An operation contents list has an unexpected shape: %s"s)Data_encoding.(obj1(req"message"string))(functionContents_list_errors->Somes|_->None)(funs->Contents_list_errors)letcheck_signature(typekind)keychain_id({shell;protocol_data}:kindoperation)=letcheck~watermarkcontentssignature=letunsigned_operation=Data_encoding.Binary.to_bytes_exnunsigned_operation_encoding(shell,contents)inifSignature.check~watermarkkeysignatureunsigned_operationthenOk()elseerrorInvalid_signatureinmatchprotocol_data.signaturewith|None->errorMissing_signature|Somesignature->(matchprotocol_data.contentswith|Single(Preendorsement_)ascontents->check~watermark:(to_watermark(Preendorsementchain_id))(Contents_listcontents)signature|Single(Endorsement_)ascontents->check~watermark:(to_watermark(Endorsementchain_id))(Contents_listcontents)signature|Single(Dal_slot_availability_)ascontents->check~watermark:(to_watermark(Dal_slot_availabilitychain_id))(Contents_listcontents)signature|Single(Failing_noop_|Proposals_|Ballot_|Seed_nonce_revelation_|Vdf_revelation_|Double_endorsement_evidence_|Double_preendorsement_evidence_|Double_baking_evidence_|Activate_account_|Manager_operation_)->check~watermark:Generic_operation(Contents_listprotocol_data.contents)signature|Cons(Manager_operation_,_ops)->check~watermark:Generic_operation(Contents_listprotocol_data.contents)signature)lethash_raw=Operation.hashlethash(o:_operation)=letproto=Data_encoding.Binary.to_bytes_exnprotocol_data_encoding(Operation_datao.protocol_data)inOperation.hash{shell=o.shell;proto}lethash_packed(o:packed_operation)=letproto=Data_encoding.Binary.to_bytes_exnprotocol_data_encodingo.protocol_datainOperation.hash{shell=o.shell;proto}type('a,'b)eq=Eq:('a,'a)eq[@@coq_force_gadt]letequal_manager_operation_kind:typeab.amanager_operation->bmanager_operation->(a,b)eqoption=funop1op2->match(op1,op2)with|Reveal_,Reveal_->SomeEq|Reveal_,_->None|Transaction_,Transaction_->SomeEq|Transaction_,_->None|Origination_,Origination_->SomeEq|Origination_,_->None|Delegation_,Delegation_->SomeEq|Delegation_,_->None|Register_global_constant_,Register_global_constant_->SomeEq|Register_global_constant_,_->None|Set_deposits_limit_,Set_deposits_limit_->SomeEq|Set_deposits_limit_,_->None|Increase_paid_storage_,Increase_paid_storage_->SomeEq|Increase_paid_storage_,_->None|Tx_rollup_origination,Tx_rollup_origination->SomeEq|Tx_rollup_origination,_->None|Tx_rollup_submit_batch_,Tx_rollup_submit_batch_->SomeEq|Tx_rollup_submit_batch_,_->None|Tx_rollup_commit_,Tx_rollup_commit_->SomeEq|Tx_rollup_commit_,_->None|Tx_rollup_return_bond_,Tx_rollup_return_bond_->SomeEq|Tx_rollup_return_bond_,_->None|Tx_rollup_finalize_commitment_,Tx_rollup_finalize_commitment_->SomeEq|Tx_rollup_finalize_commitment_,_->None|Tx_rollup_remove_commitment_,Tx_rollup_remove_commitment_->SomeEq|Tx_rollup_remove_commitment_,_->None|Tx_rollup_rejection_,Tx_rollup_rejection_->SomeEq|Tx_rollup_rejection_,_->None|Tx_rollup_dispatch_tickets_,Tx_rollup_dispatch_tickets_->SomeEq|Tx_rollup_dispatch_tickets_,_->None|Transfer_ticket_,Transfer_ticket_->SomeEq|Transfer_ticket_,_->None|Dal_publish_slot_header_,Dal_publish_slot_header_->SomeEq|Dal_publish_slot_header_,_->None|Sc_rollup_originate_,Sc_rollup_originate_->SomeEq|Sc_rollup_originate_,_->None|Sc_rollup_add_messages_,Sc_rollup_add_messages_->SomeEq|Sc_rollup_add_messages_,_->None|Sc_rollup_cement_,Sc_rollup_cement_->SomeEq|Sc_rollup_cement_,_->None|Sc_rollup_publish_,Sc_rollup_publish_->SomeEq|Sc_rollup_publish_,_->None|Sc_rollup_refute_,Sc_rollup_refute_->SomeEq|Sc_rollup_refute_,_->None|Sc_rollup_timeout_,Sc_rollup_timeout_->SomeEq|Sc_rollup_timeout_,_->None|Sc_rollup_execute_outbox_message_,Sc_rollup_execute_outbox_message_->SomeEq|Sc_rollup_execute_outbox_message_,_->None|Sc_rollup_recover_bond_,Sc_rollup_recover_bond_->SomeEq|Sc_rollup_recover_bond_,_->None|Sc_rollup_dal_slot_subscribe_,Sc_rollup_dal_slot_subscribe_->SomeEq|Sc_rollup_dal_slot_subscribe_,_->Noneletequal_contents_kind:typeab.acontents->bcontents->(a,b)eqoption=funop1op2->match(op1,op2)with|Preendorsement_,Preendorsement_->SomeEq|Preendorsement_,_->None|Endorsement_,Endorsement_->SomeEq|Endorsement_,_->None|Dal_slot_availability_,Dal_slot_availability_->SomeEq|Dal_slot_availability_,_->None|Seed_nonce_revelation_,Seed_nonce_revelation_->SomeEq|Seed_nonce_revelation_,_->None|Vdf_revelation_,Vdf_revelation_->SomeEq|Vdf_revelation_,_->None|Double_endorsement_evidence_,Double_endorsement_evidence_->SomeEq|Double_endorsement_evidence_,_->None|Double_preendorsement_evidence_,Double_preendorsement_evidence_->SomeEq|Double_preendorsement_evidence_,_->None|Double_baking_evidence_,Double_baking_evidence_->SomeEq|Double_baking_evidence_,_->None|Activate_account_,Activate_account_->SomeEq|Activate_account_,_->None|Proposals_,Proposals_->SomeEq|Proposals_,_->None|Ballot_,Ballot_->SomeEq|Ballot_,_->None|Failing_noop_,Failing_noop_->SomeEq|Failing_noop_,_->None|Manager_operationop1,Manager_operationop2->(matchequal_manager_operation_kindop1.operationop2.operationwith|None->None|SomeEq->SomeEq)|Manager_operation_,_->Noneletrecequal_contents_kind_list:typeab.acontents_list->bcontents_list->(a,b)eqoption=funop1op2->match(op1,op2)with|Singleop1,Singleop2->equal_contents_kindop1op2|Single_,Cons_->None|Cons_,Single_->None|Cons(op1,ops1),Cons(op2,ops2)->(matchequal_contents_kindop1op2with|None->None|SomeEq->(matchequal_contents_kind_listops1ops2with|None->None|SomeEq->SomeEq))letequal:typeab.aoperation->boperation->(a,b)eqoption=funop1op2->ifnot(Operation_hash.equal(hashop1)(hashop2))thenNoneelseequal_contents_kind_listop1.protocol_data.contentsop2.protocol_data.contents