package Ġcom . accent ure . inter oper ability . webserver Ċ Ċ import Ġcom . accent ure . inter oper ability . contracts . Foreign PubKey Ċ import Ġcom . accent ure . inter oper ability . flows . Copy Asset Flow Ċ import Ġcom . accent ure . inter oper ability . flows . Create Actor Flow Ċ import Ġcom . accent ure . inter oper ability . flows . Verify Signed Message Flow Ċ import Ġcom . accent ure . inter oper ability . states . Actor State Ċ import Ġcom . accent ure . inter oper ability . states . Actor Type Ċ import Ġnet . cord a . core . node . services . vault . Query Criteria Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ Ċ @ RestController Ċ @ RequestMapping ("/ api / v 1 / actors ") Ċ class ĠAct ors Controller ( rpc : ĠNode RPC Connection ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġproxy Ġ= Ġrpc . proxy ĊĊĠĠĠ Ġclass ĠActor RequestBody ( ĊĠĠĠĠĠĠĠ Ġval Ġasync : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠActor Type , ĊĠĠĠĠĠĠĠ Ġval Ġpub Key : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ PostMapping ("/ create ", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġcreate Actor ( ĊĠĠĠĠĠĠĠ Ġ@ RequestBody Ġrequest Body : ĠActor RequestBody ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpub Key Ġ= ĠForeign PubKey . verify PubKey ( request Body . pub Key ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparties Ġ= Ġproxy . network Map Snapshot () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . legal Id entities . first () Ġ} Ġ- Ġproxy . not ary Id entities () ĊĊĠĠĠĠĠĠĠ Ġval Ġflow Handler Ġ= Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Actor Flow . Init iator :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparties , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body . type ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġif Ġ( request Body . async Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" transaction Hash ", Ġflow Handler . returnValue . get (). toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Handler . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" state Machine Run Id ", Ġflow Handler . id . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( map Of ( out )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠActor Output ( ĊĠĠĠĠĠĠĠ Ġval Ġuuid : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġpub Key : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( actor : ĠActor State ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġactor . linear Id . id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġactor . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġactor . type . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub Key Ġ= Ġactor . pub Key ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ list ", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġget Act ors List (): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactors Ġ= Ġproxy . vault Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor State :: class . java ĊĠĠĠĠĠĠĠ Ġ). states . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor Output ( it . state . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( actors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ { pub Key :. + }", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġget Actor By PubKey ( ĊĠĠĠĠĠĠĠ Ġ@ PathVariable Ġpub Key : ĠString ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactor Ġ= Ġproxy . vault Query By Criteria < Actor State >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQuery Criteria . Linear State Query Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Id Ġ= ĠlistOf ( pub Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor State :: class . java ĊĠĠĠĠĠĠĠ Ġ). states . single OrNull ()?. state ?. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠResponseEntity . not Found (). build () ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( Actor Output ( actor )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠVerify RequestBody ( ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsignatures : ĠList < String > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ PostMapping ("/ verify ", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġverify Signatures ( ĊĠĠĠĠĠĠĠ Ġ@ RequestBody Ġrequest Body : ĠVerify RequestBody ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġverify Message And Signatures ( request Body . message , Ġrequest Body . signatures ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message " Ġto Ġrequest Body . message , Ġ// Ġinput Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" signatures " Ġto Ġrequest Body . signatures , Ġ// Ġinput Ġsignatures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify " Ġto Ġpair . first , Ġ// Ġresult Ġof Ġverification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify State Ref " Ġto Ġpair . second ?. toString () Ġ// Ġreference Ġto ĠVerify State Ġor Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ("/ verify - state ", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġcheck Verify Signatures ( ĊĠĠĠĠĠĠĠ Ġ@ RequestBody Ġrequest Body : ĠVerify RequestBody ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġquery Verify State ( request Body . message , Ġrequest Body . signatures ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message " Ġto Ġrequest Body . message , Ġ// Ġinput Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" signatures " Ġto Ġrequest Body . signatures , Ġ Ġ// Ġinput Ġsignatures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify " Ġto Ġpair ?. first , Ġ// Ġresult Ġof Ġverification Ġif ĠVerify State Ġexists Ġotherwise Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify State Ref " Ġto Ġpair ?. second ?. toString () Ġ// Ġreference Ġto Ġexisting ĠVerify State Ġor Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ("/ verify - and - create ", Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġverify Signatures And Create Asset ( ĊĠĠĠĠĠĠĠ Ġ@ RequestBody Ġrequest Body : ĠVerify RequestBody ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġverify Message And Signatures ( request Body . message , Ġrequest Body . signatures ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġif ĠVerify State Ġexists Ġtrigger Ġa ĠCopy Asset Flow Ġand Ġreturn Ġtransaction Ġid Ġotherwise Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Hash Ġ= Ġpair . second ?. let Ġ{ Ġstate Ref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparticipants Ġ= Ġproxy . network Map Snapshot () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . legal Id entities . first () Ġ} Ġ- Ġproxy . not ary Id entities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCopy Asset Flow . Init iator :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ref , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticipants ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). returnValue . get (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message " Ġto Ġrequest Body . message , Ġ// Ġinput Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" signatures " Ġto Ġrequest Body . signatures , Ġ Ġ// Ġinput Ġsignatures ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify " Ġto Ġpair . first ,// Ġresult Ġof Ġverification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" verify State Ref " Ġto Ġpair . second ?. toString (), Ġ// Ġreference Ġto ĠVerify State Ġor Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" transaction Hash " Ġto Ġtransaction Hash Ġ Ġ// Ġid Ġof Ġthe Ġtransaction Ġthat Ġcreated Ġthe ĠAsset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Verify State ( ĊĠĠĠĠĠĠĠ Ġmessage : ĠString , Ġsignatures : ĠList < String > ĊĠĠĠ Ġ) Ġ= Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠ ĠVerify Signed Message Flow . Query Already Been Validated :: class . java , ĊĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠ Ġsignatures ĊĠĠĠ Ġ). returnValue . get (). first OrNull () ĊĊĠĠĠ Ġprivate Ġfun Ġverify Message And Signatures ( ĊĠĠĠĠĠĠĠ Ġmessage : ĠString , Ġsignatures : ĠList < String > ĊĠĠĠ Ġ) Ġ= Ġquery Verify State ( message , Ġsignatures ) Ġ// ĠCheck Ġthat Ġthis Ġmessage Ġand Ġthese Ġsignatures Ġhave Ġalready Ġbeen Ġverified . ĊĠĠĠĠĠĠĠ Ġ?: Ġ// ĠNot Ġfound . ĠVerify Ġthe Ġmessage Ġand Ġsignatures Ġnow ĊĠĠĠĠĠĠĠ Ġproxy . start Flow Dynamic ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerify Signed Message Flow . Init iator :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignatures ĊĠĠĠĠĠĠĠ Ġ). returnValue . get () Ċ } Ċ