package Ġio . pro venance . explorer . domain . entities Ċ Ċ import Ġcom . google . protobuf . Any Ċ import Ġcos mos . crypto . multis ig . Keys Ċ import Ġio . pro venance . explorer . OBJECT _ MAP PER Ċ import Ġio . pro venance . explorer . domain . core . sql . json b Ċ import Ġio . pro venance . explorer . domain . extensions . to Base 6 4 Ċ 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 . Join Type Ċ import Ġorg . jetbrains . ex posed . sql . and Ċ import Ġorg . jetbrains . ex posed . sql . andWhere Ċ import Ġorg . jetbrains . ex posed . sql . insert Ċ import Ġorg . jetbrains . ex posed . sql . insert AndGet Id Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ Ċ object ĠSignature Table Ġ: ĠInt Id Table ( name Ġ= Ġ" signature ") Ġ{ ĊĠĠĠ Ġval Ġbase 6 4 Sig Ġ= Ġvarchar (" base _ 6 4 _ sig ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġpub key Type Ġ= Ġvarchar (" pubkey _ type ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġpub key Object Ġ= Ġjsonb < Signature Table , ĠAny >(" pubkey _ object ", ĠOBJECT _ MAP PER ) ĊĠĠĠ Ġval Ġmulti Sig Object Ġ= Ġjsonb < Signature Table , ĠAny >(" multi _ sig _ object ", ĠOBJECT _ MAP PER ). nullable () Ċ } Ċ Ċ class ĠSignature Record ( id : ĠEntity ID < Int >) Ġ: ĠInt Entity ( id ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠInt Entity Class < Signature Record >( Signature Table ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠfindBy Base 6 4 Sig ( sig : ĠString , Ġtype : ĠString ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Record . find Ġ{ Ġ( Signature Table . base 6 4 Sig Ġeq Ġsig ) Ġand Ġ( Signature Table . pubkey Type Ġeq Ġtype ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind ById List ( sig Ids : ĠList < Int >) Ġ= ĠSignature Record . find Ġ{ ĠSignature Table . id Ġin List Ġsig Ids Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠfindBy Join ( join Type : ĠSig Join Type , Ġjoin Key : ĠString ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Record . wrap Rows ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Table . join ( S JT , ĠJoin Type . INNER , ĠSignature Table . id , ĠS JT . signature Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠS JT . join Type Ġeq Ġjoin Type . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andWhere Ġ{ ĠS JT . join Key Ġeq Ġjoin Key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinsert AndGet Ids ( pubkey : ĠAny , Ġmulti Sig : ĠAny ?): ĠList < Int > Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . type Url . contains (" secp 2 5 6 k 1 ") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . unpack ( cosmos . crypto . secp 2 5 6 k 1 . Keys . PubKey :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġkey Ġ-> ĠlistOf ( insert AndGet Id ( key . key . to Base 6 4 (), Ġpub key . type Url , Ġpub key , Ġmulti Sig )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . type Url . contains (" secp 2 5 6 r 1 ") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . unpack ( cosmos . crypto . secp 2 5 6 r 1 . Keys . PubKey :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġkey Ġ-> ĠlistOf ( insert AndGet Id ( key . key . to Base 6 4 (), Ġpub key . type Url , Ġpub key , Ġmulti Sig )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . type Url . contains (" ed 2 5 5 1 9 ") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . unpack ( cosmos . crypto . ed 2 5 5 1 9 . Keys . PubKey :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġkey Ġ-> ĠlistOf ( insert AndGet Id ( key . key . to Base 6 4 (), Ġpub key . type Url , Ġpub key , Ġmulti Sig )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . type Url . contains (" Legacy A mino PubKey ") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub key . unpack ( Keys . Legacy A mino PubKey :: class . java ). let Ġ{ Ġmulti Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti . public Keys List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġinsert AndGet Ids ( it , Ġpub key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinsert AndGet Id ( sig : ĠString , Ġtype : ĠString , Ġkey : ĠAny , Ġmultis ig : ĠAny ?) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindBy Base 6 4 Sig ( sig , Ġtype )?. id ?. value Ġ?: ĠSignature Table . insert AndGet Id Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . base 6 4 Sig ] Ġ= Ġsig ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . pubkey Type ] Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . pubkey Object ] Ġ= Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . multi Sig Object ] Ġ= Ġmultis ig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbase 6 4 Sig Ġby ĠSignature Table . base 6 4 Sig ĊĠĠĠ Ġvar Ġpub key Type Ġby ĠSignature Table . pubkey Type ĊĠĠĠ Ġvar Ġpub key Object Ġby ĠSignature Table . pubkey Object ĊĠĠĠ Ġvar Ġmulti Sig Object Ġby ĠSignature Table . multi Sig Object Ċ } Ċ Ċ enum Ġclass ĠSig Join Type Ġ{ ĠAC COUNT , ĠTRAN SACTION Ġ} Ċ Ċ val ĠS JT Ġ= ĠSignature Join Table Ċ object ĠSignature Join Table Ġ: ĠInt Id Table ( name Ġ= Ġ" signature _ join ") Ġ{ ĊĠĠĠ Ġval Ġjoin Type Ġ= Ġvarchar (" join _ type ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġjoin Key Ġ= Ġvarchar (" join _ key ", Ġ 1 2 8 ) ĊĠĠĠ Ġval Ġsignature Id Ġ= Ġinteger (" signature _ id ") Ċ } Ċ Ċ class ĠSignature Join Record ( id : ĠEntity ID < Int >) Ġ: ĠInt Entity ( id ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠInt Entity Class < Signature Join Record >( Signature Join Table ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠfindBy Join And Sig Id ( sig Id : ĠInt , Ġjoin Type : ĠSig Join Type , Ġjoin Key : ĠString ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Join Record . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( S JT . join Type Ġeq Ġjoin Type . name ) Ġand Ġ( S JT . join Key Ġeq Ġjoin Key ) Ġand Ġ( S JT . signature Id Ġeq Ġsig Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġinsert ( pubkey : ĠAny , Ġjoin Type : ĠSig Join Type , Ġjoin Key : ĠString ) Ġ= Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Record . insert AndGet Ids ( pubkey , Ġnull ). forEach Ġ{ Ġsig Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindBy Join And Sig Id ( sig Id , Ġjoin Type , Ġjoin Key ). first OrNull () Ġ?: ĠS JT . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . join Type ] Ġ= Ġjoin Type . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . join Key ] Ġ= Ġjoin Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ this . signature Id ] Ġ= Ġsig Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġjoin Type Ġby ĠSignature Join Table . join Type ĊĠĠĠ Ġvar Ġjoin Key Ġby ĠSignature Join Table . join Key ĊĠĠĠ Ġvar Ġsignature Id Ġby ĠSignature Join Table . signature Id Ċ } Ċ