package Ġcom . example . flow Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . example . service . Rate Ċ import Ġcom . example . service . Rate Of Ċ import Ġcom . example . service . Salary Rate Oracle Ċ import Ġnet . cord a . core . crypto . Transaction Signature Ċ import Ġnet . cord a . core . crypto . is Ful filled By Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . transactions . Filtered Transaction Ċ import Ġnet . cord a . core . transactions . Transaction Builder Ċ import Ġnet . cord a . core . utilities . Progress Tracker Ċ import Ġnet . cord a . core . utilities . unwrap Ċ Ċ @ Initi ating Flow Ċ class ĠQuery Rate ( val Ġrate Of : ĠRate Of , Ġval Ġoracle : ĠParty ) Ġ: ĠFlow Logic < Rate >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠRate Ġ= ĊĠĠĠĠĠĠĠ Ġinitiate Flow ( oracle ). send And Receive < Rate >( rate Of ). unwrap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( it . of Ġ== Ġrate Of ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ @ Initi ating Flow Ċ class ĠSign Rate ( val Ġtx : ĠTransaction Builder , Ġval Ġoracle : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpartial Mer kle Tx : ĠFilter ed Transaction ) Ġ: ĠFlow Logic < Transaction Signature >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠTransaction Signature Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoracle Session Ġ= Ġinitiate Flow ( oracle ) ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġoracle Session . send And Receive < Transaction Signature >( partial Mer kle Tx ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresp . unwrap Ġ{ Ġsig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( oracle Session . counter party . own ing Key . is Ful filled By ( listOf ( sig . by ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx . to Wire Transaction ( service Hub ). check Signature ( sig ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsig ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠThe Ġoracle Ġflow Ġto Ġhandle Ġsalary Ġrate Ġqueries . Ċ @ Initi ated By ( Query Rate :: class ) Ċ class ĠQuery Rate Handler ( val Ġsession : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠRE CE IV ING Ġ: ĠProgress Tracker . Step (" Re ceiving Ġquery Ġrequest .") ĊĠĠĠĠĠĠĠ Ġobject ĠCAL C UL ATING Ġ: ĠProgress Tracker . Step (" Checking Ġsalary Ġtable .") ĊĠĠĠĠĠĠĠ Ġobject ĠS ENDING Ġ: ĠProgress Tracker . Step (" Sending Ġquery Ġresponse .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= ĠProgress Tracker ( RECE IV ING , ĠCAL C UL ATING , ĠS ENDING ) ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠRE CE IV ING ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġsession . receive < Rate Of >(). unwrap Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠCAL C UL ATING ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġrate Ġfrom Ġthe Ġoracle . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . cord a Service ( Salary Rate Oracle :: class . java ). query ( request ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe - throw Ġthe Ġexception Ġas Ġa ĠFlow Exception Ġso Ġits Ġpropag ated Ġto Ġthe Ġquerying Ġnode . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠS ENDING ĊĠĠĠĠĠĠĠ Ġsession . send ( response ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Initi ated By ( Sign Rate :: class ) Ċ class ĠSign Rate Handler ( val Ġsession : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠRE CE IV ING Ġ: ĠProgress Tracker . Step (" Re ceiving Ġsign Ġrequest .") ĊĠĠĠĠĠĠĠ Ġobject ĠSIGN ING Ġ: ĠProgress Tracker . Step (" Signing Ġfiltered Ġtransaction .") ĊĠĠĠĠĠĠĠ Ġobject ĠS ENDING Ġ: ĠProgress Tracker . Step (" Sending Ġsign Ġresponse .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= ĠProgress Tracker ( RECE IV ING , ĠSIGN ING , ĠS ENDING ) ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠRE CE IV ING ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġsession . receive < Filtered Transaction >(). unwrap Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSIGN ING ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . cord a Service ( Salary Rate Oracle :: class . java ). sign ( request ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠS ENDING ĊĠĠĠĠĠĠĠ Ġsession . send ( response ) ĊĠĠĠ Ġ} Ċ }