package Ġnet . cord a . node . services . api Ċ Ċ import Ġnet . cord a . core . concurrent . C ord a Future Ċ import Ġnet . cord a . core . context . Invocation Context Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . flows . Flow Logic Ċ import Ġnet . cord a . core . flows . StateMachine Run Id Ċ import Ġnet . cord a . core . internal . Flow StateMachine Ċ import Ġnet . cord a . core . internal . Named Cache Factory Ċ import Ġnet . cord a . core . internal . concurrent . Open Future Ċ import Ġnet . cord a . core . messaging . Data Feed Ċ import Ġnet . cord a . core . messaging . StateMachine Transaction Mapping Ċ import Ġnet . cord a . core . node . NodeInfo Ċ import Ġnet . cord a . core . node . Service Hub Ċ import Ġnet . cord a . core . node . States To Record Ċ import Ġnet . cord a . core . node . services . Network Map Cache Ċ import Ġnet . cord a . core . node . services . Network Map Cache Base Ċ import Ġnet . cord a . core . node . services . Transaction Storage Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . utilities . context Logger Ċ import Ġnet . cord a . node . internal . Initi ated Flow Factory Ċ import Ġnet . cord a . node . internal . cord app . C ord app Provider Internal Ċ import Ġnet . cord a . node . services . config . Node Configuration Ċ import Ġnet . cord a . node . services . messaging . Messaging Service Ċ import Ġnet . cord a . node . services . network . Network Map Updater Ċ import Ġnet . cord a . node . services . persistence . Attachment Storage Internal Ċ import Ġnet . cord a . node . services . state machine . External Event Ċ import Ġnet . cord a . node . services . state machine . Flow StateMachine Impl Ċ import Ġnet . cord a . node api . internal . persistence . C ord a Persistence Ċ import Ġjava . security . PublicKey Ċ Ċ interface ĠNetwork Map Cache Internal Ġ: ĠNetwork Map Cache , ĠNetwork Map Cache Base Ġ{ ĊĠĠĠ Ġoverride Ġval Ġnode Ready : ĠOpen Future < Void ?> ĊĊĠĠĠ Ġval Ġall Node Hashes : ĠList < Secure Hash > ĊĊĠĠĠ Ġfun ĠgetNode By Hash ( node Hash : ĠSecure Hash ): ĠNode Info ? ĊĊĠĠĠ Ġ/** ĠFind Ġnodes Ġfrom Ġthe Ġ[ PublicKey ] Ġto Short String Ġrepresentation . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġused Ġfor ĠArt emis Ġbridge Ġlookup Ġprocess . Ġ*/ ĊĠĠĠ Ġfun Ġget Nodes By Ow ning Key Index ( identity Key Index : ĠString ): ĠList < NodeInfo > ĊĊĠĠĠ Ġ/** ĠAdds Ġa Ġnode Ġto Ġthe Ġlocal Ġcache Ġ( gener ally Ġonly Ġused Ġfor Ġadding Ġourselves ). Ġ*/ ĊĠĠĠ Ġfun Ġadd Node ( node : ĠNode Info ) ĊĊĠĠĠ Ġ/** ĠRemoves Ġa Ġnode Ġfrom Ġthe Ġlocal Ġcache . Ġ*/ ĊĠĠĠ Ġfun Ġremove Node ( node : ĠNode Info ) Ċ } Ċ Ċ interface ĠService Hub Internal Ġ: ĠService Hub Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġcontext Logger () ĊĊĠĠĠĠĠĠĠ Ġfun Ġrecord Transactions ( states To Record : ĠStates To Record , Ġt xs : ĠIterable < Signed Transaction >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidated Transactions : ĠWrit able Transaction Storage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Machine Re corded Transaction Mapping : ĠState Machine Re corded Transaction Mapping Storage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault Service : ĠVault Service Internal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase : ĠC ord a Persistence ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( tx s . any ()) Ġ{ Ġ" No Ġtransactions Ġpassed Ġin Ġfor Ġrecording " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorded Transactions Ġ= Ġt xs . filter Ġ{ Ġvalidated Transactions . add Transaction ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Machine Run Id Ġ= ĠFlow StateMachine Impl . current StateMachine ()?. id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Machine Run Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorded Transactions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Machine Re corded Transaction Mapping . add Mapping ( state Machine Run Id , Ġit . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Transactions Ġrecorded Ġfrom Ġoutside Ġof Ġa Ġstate Ġmachine ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġuser Ġhas Ġrequested ĠStates To Record . ALL Ġwe Ġmay Ġend Ġup Ġrecording Ġand Ġrelation ally Ġmapping Ġstates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġdo Ġnot Ġinvolve Ġus Ġand Ġthat Ġwe Ġcannot Ġsign Ġfor . ĠThis Ġwill Ġbreak Ġcoin Ġselection Ġand Ġthus Ġa Ġwarning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġpresent Ġin Ġthe Ġdocumentation Ġfor Ġthis Ġfeature Ġ( see Ġthe Ġ" Observer Ġnodes " Ġtutorial Ġon Ġdocs . cord a . net ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġreason Ġfor Ġthis Ġis Ġthree - fold : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 ) ĠWe Ġare Ġputting Ġin Ġplace Ġthe Ġobserver Ġmode Ġfeature Ġrelatively Ġquickly Ġto Ġmeet Ġspecific Ġcustomer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġlaunch Ġtarget Ġdates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 ) ĠThe Ġright Ġdesign Ġfor Ġvault s Ġwhich Ġmix Ġobservations Ġand Ġrelevant Ġstates Ġisn 't Ġentirely Ġclear Ġyet . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 ) ĠIf Ġwe Ġget Ġthe Ġdesign Ġwrong Ġit Ġcould Ġcreate Ġsecurity Ġproblems Ġand Ġbusiness Ġconf us ions . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBack Ġin Ġthe Ġbitcoin j Ġdays ĠI Ġdid Ġadd Ġsupport Ġfor Ġ" watch ing Ġaddresses " Ġto Ġthe Ġwallet Ġcode , Ġwhich Ġis Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBitcoin Ġequivalent Ġof Ġobserver Ġnodes : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġhttps :// bitcoin j . github . io / working - with - the - wallet # watch ing - wallet s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġability Ġto Ġhave Ġa Ġwallet Ġcontaining Ġboth Ġir relevant Ġand Ġrelevant Ġstates Ġcomplicated Ġeverything Ġquite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġd ram atically , Ġeven Ġmethods Ġas Ġbasic Ġas Ġthe Ġget Balance () ĠAPI Ġwhich Ġrequired Ġadditional Ġmodes Ġto Ġlet Ġyou ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġquery Ġ" balance ĠI Ġcan Ġspend " Ġvs Ġ" balance ĠI Ġam Ġob serving ". ĠIn Ġthe Ġend Ġit Ġmight Ġhave Ġbeen Ġbetter Ġto Ġjust ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequire Ġthe Ġuser Ġto Ġcreate Ġan Ġentirely Ġseparate Ġwallet Ġfor Ġob serving Ġwith . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn ĠC ord a Ġwe Ġdon 't Ġsupport Ġa Ġsingle Ġnode Ġhaving Ġmultiple Ġvault s Ġ( at Ġthe Ġtime Ġof Ġwriting ), Ġand Ġit 's Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclear Ġthat 's Ġthe Ġright Ġway Ġto Ġgo : Ġperhaps Ġadding Ġan Ġ" origin " Ġcolumn Ġto Ġthe ĠVA ULT _ STAT ES Ġtable Ġis Ġa Ġbetter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsolution . ĠThen Ġyou Ġcould Ġselect Ġsub sets Ġof Ġstates Ġdepending Ġon Ġwhere Ġthe Ġreport Ġcame Ġfrom . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġrisk Ġof Ġdoing Ġthis Ġis Ġthat Ġapps / developers Ġmay Ġuse Ġ' c anned ĠSQL Ġqueries ' Ġnot Ġwritten Ġby Ġus Ġthat Ġforget ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġadd Ġa ĠWHERE Ġclause Ġfor Ġthe Ġorigin Ġcolumn . ĠThose Ġqueries Ġwill Ġseem Ġto Ġwork Ġmost Ġof Ġthe Ġtime Ġuntil ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthey 're Ġrun Ġon Ġan Ġobserver Ġnode Ġand Ġmix Ġin Ġir relevant Ġdata . ĠIn Ġthe Ġworst Ġcase Ġthis Ġmay Ġresult Ġin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġerr one ous Ġdata Ġbeing Ġreported Ġto Ġthe Ġuser , Ġwhich Ġcould Ġcause Ġsecurity Ġproblems . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBecause Ġthe Ġprimary Ġuse Ġcase Ġfor Ġrecording Ġir relevant Ġstates Ġis Ġobserver / reg ulator Ġnodes , Ġwho Ġare Ġunlikely ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġmake Ġwrites Ġto Ġthe Ġledger Ġvery Ġoften Ġor Ġat Ġall , Ġwe Ġchoose Ġto Ġp unt Ġthis Ġissue Ġfor Ġthe Ġtime Ġbeing . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault Service . notify All ( states To Record , Ġrecorded Transactions . map Ġ{ Ġit . core Transaction Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġattachments : ĠAttachment Storage Internal ĊĠĠĠ Ġoverride Ġval Ġvault Service : ĠVault Service Internal ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmap Ġof Ġhash -> tx Ġwhere Ġtx Ġhas Ġbeen Ġsignature / contract Ġvalidated Ġand Ġthe Ġstates Ġare Ġknown Ġto Ġbe Ġcorrect . ĊĠĠĠĠ Ġ* ĠThe Ġsignatures Ġaren 't Ġtechnically Ġneeded Ġafter Ġthat Ġpoint , Ġbut Ġwe Ġkeep Ġthem Ġaround Ġso Ġthat Ġwe Ġcan Ġrelay ĊĠĠĠĠ Ġ* Ġthe Ġtransaction Ġdata Ġto Ġother Ġnodes Ġthat Ġneed Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġvalidated Transactions : ĠWrit able Transaction Storage ĊĠĠĠ Ġval Ġstate Machine Re corded Transaction Mapping : ĠState Machine Re corded Transaction Mapping Storage ĊĠĠĠ Ġval Ġmonitoring Service : ĠMonitoring Service ĊĠĠĠ Ġval Ġschema Service : ĠSchema Service ĊĠĠĠ Ġoverride Ġval Ġnetwork Map Cache : ĠNetwork Map Cache Internal ĊĠĠĠ Ġval Ġaudit Service : ĠAudit Service ĊĠĠĠ Ġval Ġrpc Flows : ĠList < Class < out ĠFlow Logic <* >>> ĊĠĠĠ Ġval Ġnetwork Service : ĠMessaging Service ĊĠĠĠ Ġval Ġdatabase : ĠC ord a Persistence ĊĠĠĠ Ġval Ġconfiguration : ĠNode Configuration ĊĠĠĠ Ġval Ġnode Properties : ĠNode Properties Store ĊĠĠĠ Ġval Ġnetwork Map Updater : ĠNetwork Map Updater ĊĠĠĠ Ġoverride Ġval Ġc ord app Provider : ĠC ord app Provider Internal ĊĠĠĠ Ġoverride Ġfun Ġrecord Transactions ( states To Record : ĠStates To Record , Ġt xs : ĠIterable < Signed Transaction >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Transactions ( states To Record , Ġt xs , Ġvalidated Transactions , Ġstate Machine Re corded Transaction Mapping , Ġvault Service , Ġdatabase ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Flow Factory ( initi ating Flow Class : ĠClass < out ĠFlow Logic <* >> ): ĠInit i ated Flow Factory < *> ? ĊĠĠĠ Ġval Ġcache Factory : ĠNamed Cache Factory Ċ } Ċ Ċ interface ĠFlow Starter Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġan Ġalready Ġconstructed Ġflow . ĠNote Ġthat Ġyou Ġmust Ġbe Ġon Ġthe Ġserver Ġthread Ġto Ġcall Ġthis Ġmethod . ĠThis Ġmethod ĊĠĠĠĠ Ġ* Ġjust Ġsynt hes izes Ġan Ġ[ External Event . External Start Flow Event ] Ġand Ġcalls Ġthe Ġmethod Ġbelow . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġindicates Ġwho Ġstarted Ġthe Ġflow , Ġsee : Ġ[ Invocation Context ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġstart Flow ( logic : ĠFlow Logic < T >, Ġcontext : ĠInvocation Context ): ĠC ord a Future < Flow StateMachine < T >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġa Ġflow Ġas Ġdescribed Ġby Ġan Ġ[ External Event . External Start Flow Event ]. Ġ ĠIf Ġa Ġtransient Ġerror ĊĠĠĠĠ Ġ* Ġoccurs Ġduring Ġinvocation , Ġit Ġwill Ġre - attempt Ġto Ġstart Ġthe Ġflow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġstart Flow ( event : ĠExternal Event . External Start Flow Event < T >): ĠC ord a Future < Flow StateMachine < T >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWill Ġcheck Ġ[ logic Type ] Ġand Ġ[ args ] Ġagainst Ġa Ġwhitelist Ġand Ġif Ġacceptable Ġthen Ġconstruct Ġand Ġinitiate Ġthe Ġflow . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġyou Ġmust Ġbe Ġon Ġthe Ġserver Ġthread Ġto Ġcall Ġthis Ġmethod . Ġ[ context ] Ġpoints Ġhow Ġflow Ġwas Ġstarted , ĊĠĠĠĠ Ġ* ĠSee : Ġ[ Invocation Context ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws Ġnet . cord a . core . flows . Illegal Flow Logic Exception Ġor ĠIllegalArgumentException Ġif Ġthere Ġare Ġproblems Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġ[ logic Type ] Ġor Ġ[ args ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġinvoke Flow Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogic Type : ĠClass < out ĠFlow Logic < T >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠInvocation Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġargs : ĠAny ?): ĠC ord a Future < Flow StateMachine < T >> Ċ } Ċ Ċ interface ĠStarted Node Services Ġ: ĠService Hub Internal , ĠFlow Starter Ċ /** Ċ Ġ* ĠThread - safe Ġstorage Ġof Ġtransactions . Ċ Ġ*/ Ċ interface ĠWrit able Transaction Storage Ġ: ĠTransaction Storage Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġnew Ġtransaction Ġto Ġthe Ġstore . ĠIf Ġthe Ġstore Ġalready Ġhas Ġa Ġtransaction Ġwith Ġthe Ġsame Ġid Ġit Ġwill Ġbe ĊĠĠĠĠ Ġ* Ġoverwritten . ĊĠĠĠĠ Ġ* Ġ@ param Ġtransaction ĠThe Ġtransaction Ġto Ġbe Ġrecorded . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġtransaction Ġwas Ġrecorded Ġsuccessfully , Ġfalse Ġif Ġit Ġwas Ġalready Ġrecorded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠTODO : ĠThrow Ġan Ġexception Ġif Ġtrying Ġto Ġadd Ġa Ġtransaction Ġwith Ġfewer Ġsignatures Ġthan Ġan Ġexisting Ġentry . ĊĠĠĠ Ġfun Ġadd Transaction ( transaction : ĠSigned Transaction ): ĠBoolean Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġinterface Ġto Ġstorage Ġstoring Ġstate Ġmachine Ġ-> Ġrecorded Ġtx Ġmappings . ĠAny Ġtime Ġa Ġtransaction Ġis Ġrecorded Ċ Ġ* Ġduring Ġa Ġflow Ġrun Ġ[ add Mapping ] Ġshould Ġbe Ġcalled . Ċ Ġ*/ Ċ interface ĠState Machine Re corded Transaction Mapping Storage Ġ{ ĊĠĠĠ Ġfun Ġadd Mapping ( state Machine Run Id : ĠState Machine Run Id , Ġtransaction Id : ĠSecure Hash ) ĊĠĠĠ Ġfun Ġtrack (): ĠData Feed < List < StateMachine Transaction Mapping >, ĠState Machine Transaction Mapping > Ċ } Ċ