/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - present , ĠDash ĠCore ĠTeam Ċ Ġ* Ċ Ġ* ĠThis Ġsource Ġcode Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense Ġfound Ġin Ġthe Ċ Ġ* ĠCOPYING Ġfile Ġin Ġthe Ġroot Ġdirectory Ġof Ġthis Ġsource Ġtree . Ċ Ġ*/ Ċ Ċ package Ġorg . dash j . platform . dpp . identity Ċ Ċ import Ġorg . bitcoin j . core . EC Key Ċ import Ġorg . bitcoin j . core . Transaction Ċ import Ġorg . bitcoin j . core . Transaction Out Point Ċ import Ġorg . bitcoin j . qu or ums . Instant Send Lock Ċ import Ġorg . dash j . platform . dpp . Dash Platform Protocol Ċ import Ġorg . dash j . platform . dpp . Factory Ċ import Ġorg . dash j . platform . dpp . Protocol Version Ċ import Ġorg . dash j . platform . dpp . State Repository Ċ import Ġorg . dash j . platform . dpp . identifier . Identifier Ċ import Ġorg . dash j . platform . dpp . state transition . Asset Lock Proof Factory Ċ import Ġorg . dash j . platform . dpp . util . Credits Converter . convert Sat oshi To Credits Ċ Ċ class ĠIdentity Factory ( dpp : ĠDash Platform Protocol , Ġstate Repository : ĠState Repository ) Ġ: ĠFactory ( dpp , Ġstate Repository ) Ġ{ ĊĊĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠ Ġlocked Out Point : ĠTransaction Out Point , ĊĠĠĠĠĠĠĠ Ġpublic Keys : ĠList < Identity PublicKey >, ĊĠĠĠĠĠĠĠ Ġrevision : ĠInt , ĊĠĠĠĠĠĠĠ Ġprotocol Version : ĠInt ĊĠĠĠ Ġ): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠIdentifier . from ( locked Out Point . hash ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity ( id , Ġpublic Keys , Ġrevision , Ġprotocol Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( id : ĠIdentifier , Ġpublic Keys : ĠList < Identity PublicKey >, Ġrevision : ĠInt , Ġprotocol Version : ĠInt ): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity ( id , Ġpublic Keys , Ġrevision , Ġprotocol Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( id : ĠString , Ġpublic Keys : ĠList < Identity PublicKey >, Ġrevision : ĠInt , Ġprotocol Version : ĠInt ): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity ( Identifier . from ( id ), Ġpublic Keys , Ġrevision , Ġprotocol Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( asset Lock Proof : ĠAsset Lock Proof , Ġpublic Keys : ĠList < EC Key >): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset Lock Proof . create Identifier (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Keys . map Indexed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIdentity PublicKey ( index , ĠIdentity PublicKey . TYPES . ECD SA _ SE CP 2 5 6 K 1 , Ġit . pub Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrevision Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotocol Version Ġ= ĠProtocol Version . latest Version ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate From Object ( raw Identity : ĠMutable Map < String , ĠAny ? >, Ġoptions : ĠOptions Ġ= ĠOptions ()): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity ( raw Identity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate From Buffer ( payload : ĠByteArray , Ġoptions : ĠOptions Ġ= ĠOptions ()): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( protocol Version , Ġraw Identity ) Ġ= Ġdecode Protocol Entity ( payload , Ġd pp . protocol Version ) ĊĠĠĠĠĠĠĠ Ġraw Identity [" protocol Version "] Ġ= Ġprotocol Version ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate From Object ( raw Identity , Ġoptions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Instant Asset Lock Proof ( ĊĠĠĠĠĠĠĠ Ġinstant Send Lock : ĠInstant Send Lock , ĊĠĠĠĠĠĠĠ Ġasset Lock Transaction : ĠTransaction , ĊĠĠĠĠĠĠĠ Ġoutput Index : ĠLong ĊĠĠĠ Ġ): ĠInstant Asset Lock Proof Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInstant Asset Lock Proof ( output Index , Ġasset Lock Transaction , Ġinstant Send Lock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Chain Asset Lock Proof ( ĊĠĠĠĠĠĠĠ Ġcore Chain Locked Height : ĠLong , ĊĠĠĠĠĠĠĠ Ġout Point : ĠTransaction Out Point ĊĠĠĠ Ġ): ĠChain Asset Lock Proof Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠChain Asset Lock Proof ( core Chain Locked Height , Ġout Point ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Identity Create Transition ( identity : ĠIdentity ): ĠIdentity Create Transition Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity Create Transition ( identity . asset Lock Proof !! , Ġidentity . public Keys , ĠProtocol Version . latest Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Identity Create Transition ( ĊĠĠĠĠĠĠĠ Ġasset Lock : ĠAsset Lock Proof , ĊĠĠĠĠĠĠĠ Ġidentity Public Keys : ĠList < Identity PublicKey > ĊĠĠĠ Ġ): ĠIdentity Create Transition Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity Create Transition ( asset Lock , Ġidentity Public Keys ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Identity Top up Transition ( ĊĠĠĠĠĠĠĠ Ġidentity Id : ĠIdentifier , ĊĠĠĠĠĠĠĠ Ġasset Lock : ĠAsset Lock Proof ĊĠĠĠ Ġ): ĠIdentity Top Up Transition Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIdentity Top Up Transition ( identity Id , Ġasset Lock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Identity Create State Transition ( state Transition : ĠIdentity State Transition ): ĠIdentity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Create Transition Ġ= Ġstate Transition Ġas ĠIdentity Create Transition ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠAsset Lock Proof Factory ( state Repository ). fetch Asset Lock Transaction Output ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Create Transition . asset Lock Proof ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġout point Ġ= Ġidentity Create Transition . asset Lock Proof . get Out Point () ĊĊĠĠĠĠĠĠĠ Ġval Ġcredits Amount Ġ= Ġconvert Sat oshi To Credits ( output . value ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Identity Ġ= ĠIdentity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Create Transition . identity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Create Transition . public Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtocol Version . latest Version ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠpublicKey Hashes Ġ= Ġnew Identity . public Keys . map Ġ{ ĠEC Key . from Public Only ( it . data ). pub Key Hash Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġstore Ġidentity ĊĠĠĠĠĠĠĠ Ġstate Repository . store Identity ( new Identity ) ĊĠĠĠĠĠĠĠ Ġstate Repository . store Identity PublicKey Hashes ( new Identity . id , ĠpublicKey Hashes ) ĊĠĠĠĠĠĠĠ Ġstate Repository . mark Asset Lock Transaction Out Point As Used ( out point ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew Identity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Identity Top Up Transition ( state Transition : ĠIdentity Top Up Transition ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠAsset Lock Proof Factory ( state Repository ). fetch Asset Lock Transaction Output ( state Transition . asset Lock ) ĊĠĠĠĠĠĠĠ Ġval Ġout Point Ġ= Ġstate Transition . asset Lock . get Out Point () ĊĊĠĠĠĠĠĠĠ Ġval Ġcredits Amount Ġ= Ġconvert Sat oshi To Credits ( output . value ) ĊĠĠĠĠĠĠĠ Ġval Ġidentity Id Ġ= Ġstate Transition . identity Id ĊĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= Ġstate Repository . fetch Identity ( identity Id ) ĊĠĠĠĠĠĠĠ Ġidentity !!. increase Balance ( credits Amount ) ĊĊĠĠĠĠĠĠĠ Ġstate Repository . store Identity ( identity ) ĊĊĠĠĠĠĠĠĠ Ġstate Repository . mark Asset Lock Transaction Out Point As Used ( out Point ) ĊĠĠĠ Ġ} Ċ } Ċ