// ĠVer i Block ĠBlock chain ĠProject Ċ // ĠCopyright Ġ 2 0 1 7 - 2 0 1 8 ĠVer i Block , ĠInc Ċ // ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠX en ios ĠSE ZC Ċ // ĠAll Ġrights Ġreserved . Ċ // Ġhttps :// www . ver ib lock . org Ċ // ĠDistributed Ġunder Ġthe ĠMIT Ġsoftware Ġlicense , Ġsee Ġthe Ġaccompanying Ċ // Ġfile ĠLICENSE Ġor Ġhttp :// www . opensource . org / licenses / mit - license . php . Ċ package Ġorg . ver ib lock . sp v . wallet Ċ Ċ import Ġorg . ver ib lock . sdk . models . Coin Ċ import Ġorg . ver ib lock . sp v . model . Standard Transaction Ċ import Ġorg . ver ib lock . sp v . model . Transaction Meta Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . function . Consumer Ċ Ċ class ĠLed ger Ġ{ ĊĠĠĠ Ġprivate Ġval Ġentries : ĠMutable Map < String , ĠAddress Ledger > Ġ= ĠHashMap () ĊĊĠĠĠ Ġfun Ġadd ( address : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . put If Absent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAddress Ledger ( address , ĠCoin . ZERO , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( address : ĠString ): ĠAddress Ledger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . getValue ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlist (): ĠCollection < Address Ledger > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . values ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload ( to Load : ĠList < Address Ledger >) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( address Ledger Ġin Ġto Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( address Ledger ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord ( tx : ĠStandard Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġledger Entries Ġ= Ġcreate Ledger Entries From ( tx ) ĊĠĠĠĠĠĠĠ Ġledger Entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( it . address ). add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd ( address Ledger : ĠAddress Ledger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . put If Absent ( address Ledger . address , Ġaddress Ledger ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Ledger Entries From ( tx : ĠStandard Transaction ): ĠList < Ledger Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġledger Entries Ġ= ĠArrayList < Ledger Entry >() ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġif Ġ( tx . transaction Meta !!. state Ġ=== ĠTransaction Meta . Meta State . CON FI R MED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Entry . Status . CON FI R MED ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Entry . Status . PENDING ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( entries . containsKey ( tx . input Address !!. get ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Entries . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Entry ( tx . input Address !!. get (), Ġtx . tx Id , Ġtx . input Amount !! , ĠCoin . ZERO , Ġtx . get Signature Index (), Ġ 0 , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtx . get Outputs (). indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġtx . get Outputs ()[ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entries . containsKey ( o . address . get ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġledger Entries . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLed ger Entry ( o . address . get (), Ġtx . tx Id , ĠCoin . ZERO , Ġo . amount , Ġ- 1 , Ġi , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġledger Entries ĊĠĠĠ Ġ} Ċ } Ċ