123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990(*****************************************************************************)(* *)(* SPDX-License-Identifier: MIT *)(* Copyright (c) 2023 Nomadic Labs, <contact@nomadic-labs.com> *)(* *)(*****************************************************************************)typet=|BakerofSignature.public_key_hash|Single_stakerof{staker:Contract_repr.t;delegate:Signature.public_key_hash;}|Shared_between_stakersof{delegate:Signature.public_key_hash}letbakerpkh=Bakerpkhletsingle_staker~staker~delegate=match(staker:Contract_repr.t)with|ImplicitpkhwhenSignature.Public_key_hash.(pkh=delegate)->Bakerpkh|_->Single_staker{staker;delegate}letshared_between_stakers~delegate=Shared_between_stakers{delegate}letencoding=letopenData_encodinginletsingle_tag=0inletsingle_encoding=obj2(req"contract"Contract_repr.encoding)(req"delegate"Signature.Public_key_hash.encoding)inletshared_tag=1inletshared_encoding=obj1(req"delegate"Signature.Public_key_hash.encoding)inletbaker_tag=2inletbaker_encoding=obj1(req"baker"Signature.Public_key_hash.encoding)indef~title:"frozen_staker"~description:"Abstract notion of staker used in operation receipts for frozen \
deposits, either a single staker or all the stakers delegating to some \
delegate.""frozen_staker"@@matching(function|Bakerbaker->matchedbaker_tagbaker_encodingbaker|Single_staker{staker;delegate}->matchedsingle_tagsingle_encoding(staker,delegate)|Shared_between_stakers{delegate}->matchedshared_tagshared_encodingdelegate)[case~title:"Single"(Tagsingle_tag)single_encoding(function|Single_staker{staker;delegate}->Some(staker,delegate)|_->None)(fun(staker,delegate)->single_staker~staker~delegate);case~title:"Shared"(Tagshared_tag)shared_encoding(function|Shared_between_stakers{delegate}->Somedelegate|_->None)(fundelegate->Shared_between_stakers{delegate});case~title:"Baker"(Tagbaker_tag)baker_encoding(functionBakerbaker->Somebaker|_->None)(funbaker->Bakerbaker);]letcomparesasb=match(sa,sb)with|Bakerba,Bakerbb->Signature.Public_key_hash.comparebabb|Baker_,_->-1|_,Baker_->1|(Single_staker{staker=sa;delegate=da},Single_staker{staker=sb;delegate=db})->Compare.or_else(Contract_repr.comparesasb)(fun()->Signature.Public_key_hash.comparedadb)|(Shared_between_stakers{delegate=da},Shared_between_stakers{delegate=db})->Signature.Public_key_hash.comparedadb|Single_staker_,Shared_between_stakers_->-1|Shared_between_stakers_,Single_staker_->1