package Ġio . pro venance . explorer . domain . entities Ċ Ċ import Ġcom . google . protobuf . Any Ċ import Ġcos mos . auth . v 1 beta 1 . Auth Ċ import Ġio . pro venance . explorer . OBJECT _ MAP PER Ċ import Ġio . pro venance . explorer . domain . core . sql . json b Ċ import Ġio . pro venance . explorer . grpc . extensions . getType ShortName Ċ import Ġio . pro venance . explorer . service . get Account Type Ċ import Ġio . pro venance . marker . v 1 . Marker Account Ċ import Ġorg . jetbrains . ex posed . dao . Int Entity Ċ import Ġorg . jetbrains . ex posed . dao . Int Entity Class Ċ import Ġorg . jetbrains . ex posed . dao . id . Entity ID Ċ import Ġorg . jetbrains . ex posed . dao . id . Int Id Table Ċ import Ġorg . jetbrains . ex posed . sql . and Ċ import Ġorg . jetbrains . ex posed . sql . insert AndGet Id Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ Ċ object ĠAccount Table Ġ: ĠInt Id Table ( name Ġ= Ġ" account ") Ġ{ ĊĠĠĠ Ġval Ġaccount Address Ġ= Ġvarchar (" account _ address ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġtype Ġ= Ġvarchar (" type ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġaccount Number Ġ= Ġlong (" account _ number "). nullable () ĊĠĠĠ Ġval Ġbase Account Ġ= Ġjsonb < Account Table , ĠAuth . Base Account >(" base _ account ", ĠOBJECT _ MAP PER ). nullable () ĊĠĠĠ Ġval Ġdata Ġ= Ġjsonb < Account Table , ĠAny >(" data ", ĠOBJECT _ MAP PER ). nullable () ĊĠĠĠ Ġval Ġis Contract Ġ= Ġbool (" is _ contract "). default ( false ) Ċ } Ċ Ċ class ĠAccount Record ( id : ĠEntity ID < Int >) Ġ: ĠInt Entity ( id ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠInt Entity Class < Account Record >( Account Table ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Accounts Missing Number () Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Record . find Ġ{ ĠAccount Table . account Number . isNull () Ġand ĠAccount Table . base Account . isNotNull () Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind Sig sBy Address ( address : ĠString ) Ġ= ĠSignature Record . findBy Join ( Sig Join Type . ACCOUNT , Ġaddress ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠfindBy Address ( addr : ĠString ) Ġ= ĠAccount Record . find Ġ{ ĠAccount Table . account Address Ġeq Ġaddr Ġ}. first OrNull () ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind ListBy Address ( list : ĠList < String >) Ġ= ĠAccount Record . find Ġ{ ĠAccount Table . account Address . in List ( list ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinsert Unknown Account ( addr : ĠString , Ġis Contract : ĠBoolean Ġ= Ġfalse ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindBy Address ( addr ) Ġ?: ĠAccount Table . insert AndGet Id Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . account Address ] Ġ= Ġaddr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . type ] Ġ= Ġ" Base Account " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . is Contract ] Ġ= Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġfind ById ( it ) !! Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinsert Ignore ( acc : ĠAny , Ġis Contract : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc . type Url . getType ShortName (). let Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Module Account :: class . java . simple Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . unpack ( Auth . Module Account :: class . java ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Ignore ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . type Url . get Account Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account . account Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Base Account :: class . java . simple Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . unpack ( Auth . Base Account :: class . java ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Ignore ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . type Url . get Account Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . account Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Account :: class . java . simple Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . unpack ( Marker Account :: class . java ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Ignore ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . type Url . get Account Type (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account . account Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . base Account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" This Ġaccount Ġtype Ġhas Ġnot Ġbeen Ġhandled Ġyet : Ġ${ acc . type Url }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinsert Ignore ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Account : ĠAuth . Base Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Contract : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindBy Address ( address )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . base Account Ġ= Ġbase Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . account Number Ġ= Ġbase Account . account Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Contract Ġ= Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠAccount Table . insert AndGet Id Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . account Address ] Ġ= Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . type ] Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . account Number ] Ġ= Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . base Account ] Ġ= Ġbase Account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . data ] Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . is Contract ] Ġ= Ġis Contract ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġfind ById ( it ) !! Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Join Record . insert ( base Account . pub Key , ĠSig Join Type . ACCOUNT , Ġaddress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġaccount Address Ġby ĠAccount Table . account Address ĊĠĠĠ Ġvar Ġtype Ġby ĠAccount Table . type ĊĠĠĠ Ġvar Ġaccount Number Ġby ĠAccount Table . account Number ĊĠĠĠ Ġvar Ġbase Account Ġby ĠAccount Table . base Account ĊĠĠĠ Ġvar Ġdata Ġby ĠAccount Table . data ĊĠĠĠ Ġvar Ġis Contract Ġby ĠAccount Table . is Contract Ċ } Ċ