package Ġcom . template . oracle Ċ import Ġcom . template . Forward Contract Ċ import Ġcom . template . base . KNOWN _ SP OT S Ċ import Ġcom . template . base . Spot Price Ċ import Ġnet . cord a . core . crypto . Transaction Signature Ċ import Ġnet . cord a . core . node . Service Hub Ċ import Ġnet . cord a . core . node . services . C ord a Service Ċ import Ġnet . cord a . core . serialization . Singleton Serialize As Token Ċ import Ġnet . cord a . core . transactions . Filtered Transaction Ċ import Ġnet . cord a . core . contracts . Command Ċ Ċ @ C ord a Service Ċ class ĠOracle ( val Ġservices : ĠService Hub ) Ġ: ĠSingleton Serialize As Token () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmy Key Ġ= Ġservices . my Info . legal Id entities . first (). own ing Key ĊĊĠĠĠ Ġprivate Ġval Ġknown Sp ots Ġ= ĠK NO WN _ SP OT S ĊĊĠĠĠ Ġ/** ĠReturns Ġspot Ġfor Ġa Ġgiven Ġinstrument . Ġ*/ ĊĠĠĠ Ġfun Ġquery Spot ( instrument : ĠString ): ĠSpot Price Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġknown Sp ots . find Ġ{ Ġit . instrument Ġ== Ġinstrument } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Unknown Ġinstrument ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSign s Ġover Ġa Ġtransaction Ġif Ġthe Ġspecified Ġspot Ġprice Ġis Ġcorrect . ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġtakes Ġa Ġfiltered Ġtransaction Ġwhich Ġis Ġa Ġpartial ĠMer kle Ġtree . ĠAny Ġparts Ġof Ġthe Ġtransaction Ġwhich ĊĠĠĠĠ Ġ* Ġthe Ġoracle Ġdoesn 't Ġneed Ġto Ġsee Ġin Ġorder Ġto Ġverify Ġthe Ġcorrect ness Ġof Ġthe Ġnth Ġprime Ġhave Ġbeen Ġremoved . ĠIn Ġthis ĊĠĠĠĠ Ġ* Ġcase , Ġall Ġbut Ġthe Ġ[ Forward Contract . Oracle ] Ġcommands Ġhave Ġbeen Ġremoved . ĠIf Ġthe Ġspot Ġprice Ġand ĊĠĠĠĠ Ġ* Ġvol atility Ġare Ġcorrect Ġthen Ġthe Ġoracle Ġsigns Ġover Ġthe ĠMer kle Ġroot Ġ( the Ġhash ) Ġof Ġthe Ġtransaction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsign ( ft x : ĠFilter ed Transaction ): ĠTransaction Signature Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIs Ġthe Ġpartial ĠMer kle Ġtree Ġvalid ? ĊĠĠĠĠĠĠĠ Ġf tx . verify () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġtrue Ġif Ġthe Ġcomponent Ġis Ġan ĠOracle Command Ġthat : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- ĠStates Ġthe Ġcorrect Ġprice ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- ĠHas Ġthe Ġoracle Ġlisted Ġas Ġa Ġsigner ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Command With Correct Price And And IA m Signer ( elem : ĠAny ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelem Ġis ĠCommand < *> Ġ&& Ġelem . value Ġis ĠForward Contract . Oracle Command Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Data Ġ= Ġelem . value Ġas ĠForward Contract . Oracle Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcmd Spot Price Ġ= Ġcmd Data . spot Price ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Key Ġin Ġelem . sign ers Ġ&& Ġquery Spot ( cmd Spot Price . instrument ) Ġ== Ġcmd Data . spot Price ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIs Ġit Ġa ĠMer kle Ġtree Ġwe Ġare Ġwilling Ġto Ġsign Ġover ? ĊĠĠĠĠĠĠĠ Ġval ĠisValid Mer kle Tree Ġ= Ġf tx . check With Fun (:: is Command With Correct Price And And IA m Signer ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isValid Mer kle Tree ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservices . create Signature ( ft x , Ġmy Key ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Oracle Ġsignature Ġrequested Ġover Ġinvalid Ġtransaction .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }