Implement confirmed and unconfirmed balance functions
This commit is contained in:
parent
56eeeaaf20
commit
ccc19d635b
1 changed files with 121 additions and 12 deletions
133
src/Zenith/DB.hs
133
src/Zenith/DB.hs
|
@ -1392,6 +1392,19 @@ getBalance pool za = do
|
||||||
let oBal = sum oAmts
|
let oBal = sum oAmts
|
||||||
return . fromIntegral $ tBal + sBal + oBal
|
return . fromIntegral $ tBal + sBal + oBal
|
||||||
|
|
||||||
|
getUnconfirmedBalance :: ConnectionPool -> ZcashAccountId -> IO Integer
|
||||||
|
getUnconfirmedBalance pool za = do
|
||||||
|
trNotes <- getWalletUnspentUnconfirmedTrNotes pool za
|
||||||
|
let tAmts = map (walletTrNoteValue . entityVal) trNotes
|
||||||
|
let tBal = sum tAmts
|
||||||
|
sapNotes <- getWalletUnspentUnconfirmedSapNotes pool za
|
||||||
|
let sAmts = map (walletSapNoteValue . entityVal) sapNotes
|
||||||
|
let sBal = sum sAmts
|
||||||
|
orchNotes <- getWalletUnspentUnconfirmedOrchNotes pool za
|
||||||
|
let oAmts = map (walletOrchNoteValue . entityVal) orchNotes
|
||||||
|
let oBal = sum oAmts
|
||||||
|
return . fromIntegral $ tBal + sBal + oBal
|
||||||
|
|
||||||
clearWalletTransactions :: ConnectionPool -> IO ()
|
clearWalletTransactions :: ConnectionPool -> IO ()
|
||||||
clearWalletTransactions pool = do
|
clearWalletTransactions pool = do
|
||||||
runNoLoggingT $
|
runNoLoggingT $
|
||||||
|
@ -1429,10 +1442,42 @@ getWalletUnspentTrNotes pool za = do
|
||||||
PS.retryOnBusy $
|
PS.retryOnBusy $
|
||||||
flip PS.runSqlPool pool $ do
|
flip PS.runSqlPool pool $ do
|
||||||
select $ do
|
select $ do
|
||||||
n <- from $ table @WalletTrNote
|
(txs :& tNotes) <-
|
||||||
where_ (n ^. WalletTrNoteAccId ==. val za)
|
from $ table @WalletTransaction `innerJoin` table @WalletTrNote `on`
|
||||||
where_ (n ^. WalletTrNoteSpent ==. val False)
|
(\(txs :& tNotes) ->
|
||||||
pure n
|
txs ^. WalletTransactionId ==. tNotes ^. WalletTrNoteTx)
|
||||||
|
where_ (tNotes ^. WalletTrNoteAccId ==. val za)
|
||||||
|
where_ (tNotes ^. WalletTrNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((tNotes ^. WalletTrNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 3) ||.
|
||||||
|
(tNotes ^. WalletTrNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 10))
|
||||||
|
pure tNotes
|
||||||
|
|
||||||
|
getWalletUnspentUnconfirmedTrNotes ::
|
||||||
|
ConnectionPool -> ZcashAccountId -> IO [Entity WalletTrNote]
|
||||||
|
getWalletUnspentUnconfirmedTrNotes pool za = do
|
||||||
|
runNoLoggingT $
|
||||||
|
PS.retryOnBusy $
|
||||||
|
flip PS.runSqlPool pool $ do
|
||||||
|
select $ do
|
||||||
|
(txs :& tNotes) <-
|
||||||
|
from $ table @WalletTransaction `innerJoin` table @WalletTrNote `on`
|
||||||
|
(\(txs :& tNotes) ->
|
||||||
|
txs ^. WalletTransactionId ==. tNotes ^. WalletTrNoteTx)
|
||||||
|
where_ (tNotes ^. WalletTrNoteAccId ==. val za)
|
||||||
|
where_ (tNotes ^. WalletTrNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((tNotes ^. WalletTrNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 3) ||.
|
||||||
|
(tNotes ^. WalletTrNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 10))
|
||||||
|
pure tNotes
|
||||||
|
|
||||||
getWalletUnspentSapNotes ::
|
getWalletUnspentSapNotes ::
|
||||||
ConnectionPool -> ZcashAccountId -> IO [Entity WalletSapNote]
|
ConnectionPool -> ZcashAccountId -> IO [Entity WalletSapNote]
|
||||||
|
@ -1441,10 +1486,42 @@ getWalletUnspentSapNotes pool za = do
|
||||||
PS.retryOnBusy $
|
PS.retryOnBusy $
|
||||||
flip PS.runSqlPool pool $ do
|
flip PS.runSqlPool pool $ do
|
||||||
select $ do
|
select $ do
|
||||||
n1 <- from $ table @WalletSapNote
|
(txs :& sNotes) <-
|
||||||
where_ (n1 ^. WalletSapNoteAccId ==. val za)
|
from $ table @WalletTransaction `innerJoin` table @WalletSapNote `on`
|
||||||
where_ (n1 ^. WalletSapNoteSpent ==. val False)
|
(\(txs :& sNotes) ->
|
||||||
pure n1
|
txs ^. WalletTransactionId ==. sNotes ^. WalletSapNoteTx)
|
||||||
|
where_ (sNotes ^. WalletSapNoteAccId ==. val za)
|
||||||
|
where_ (sNotes ^. WalletSapNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((sNotes ^. WalletSapNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 3) ||.
|
||||||
|
(sNotes ^. WalletSapNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 10))
|
||||||
|
pure sNotes
|
||||||
|
|
||||||
|
getWalletUnspentUnconfirmedSapNotes ::
|
||||||
|
ConnectionPool -> ZcashAccountId -> IO [Entity WalletSapNote]
|
||||||
|
getWalletUnspentUnconfirmedSapNotes pool za = do
|
||||||
|
runNoLoggingT $
|
||||||
|
PS.retryOnBusy $
|
||||||
|
flip PS.runSqlPool pool $ do
|
||||||
|
select $ do
|
||||||
|
(txs :& sNotes) <-
|
||||||
|
from $ table @WalletTransaction `innerJoin` table @WalletSapNote `on`
|
||||||
|
(\(txs :& sNotes) ->
|
||||||
|
txs ^. WalletTransactionId ==. sNotes ^. WalletSapNoteTx)
|
||||||
|
where_ (sNotes ^. WalletSapNoteAccId ==. val za)
|
||||||
|
where_ (sNotes ^. WalletSapNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((sNotes ^. WalletSapNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 3) ||.
|
||||||
|
(sNotes ^. WalletSapNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 10))
|
||||||
|
pure sNotes
|
||||||
|
|
||||||
getWalletUnspentOrchNotes ::
|
getWalletUnspentOrchNotes ::
|
||||||
ConnectionPool -> ZcashAccountId -> IO [Entity WalletOrchNote]
|
ConnectionPool -> ZcashAccountId -> IO [Entity WalletOrchNote]
|
||||||
|
@ -1453,10 +1530,42 @@ getWalletUnspentOrchNotes pool za = do
|
||||||
PS.retryOnBusy $
|
PS.retryOnBusy $
|
||||||
flip PS.runSqlPool pool $ do
|
flip PS.runSqlPool pool $ do
|
||||||
select $ do
|
select $ do
|
||||||
n2 <- from $ table @WalletOrchNote
|
(txs :& oNotes) <-
|
||||||
where_ (n2 ^. WalletOrchNoteAccId ==. val za)
|
from $ table @WalletTransaction `innerJoin` table @WalletOrchNote `on`
|
||||||
where_ (n2 ^. WalletOrchNoteSpent ==. val False)
|
(\(txs :& oNotes) ->
|
||||||
pure n2
|
txs ^. WalletTransactionId ==. oNotes ^. WalletOrchNoteTx)
|
||||||
|
where_ (oNotes ^. WalletOrchNoteAccId ==. val za)
|
||||||
|
where_ (oNotes ^. WalletOrchNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((oNotes ^. WalletOrchNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 3) ||.
|
||||||
|
(oNotes ^. WalletOrchNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf >=.
|
||||||
|
val 10))
|
||||||
|
pure oNotes
|
||||||
|
|
||||||
|
getWalletUnspentUnconfirmedOrchNotes ::
|
||||||
|
ConnectionPool -> ZcashAccountId -> IO [Entity WalletOrchNote]
|
||||||
|
getWalletUnspentUnconfirmedOrchNotes pool za = do
|
||||||
|
runNoLoggingT $
|
||||||
|
PS.retryOnBusy $
|
||||||
|
flip PS.runSqlPool pool $ do
|
||||||
|
select $ do
|
||||||
|
(txs :& oNotes) <-
|
||||||
|
from $ table @WalletTransaction `innerJoin` table @WalletOrchNote `on`
|
||||||
|
(\(txs :& oNotes) ->
|
||||||
|
txs ^. WalletTransactionId ==. oNotes ^. WalletOrchNoteTx)
|
||||||
|
where_ (oNotes ^. WalletOrchNoteAccId ==. val za)
|
||||||
|
where_ (oNotes ^. WalletOrchNoteSpent ==. val False)
|
||||||
|
where_
|
||||||
|
((oNotes ^. WalletOrchNoteChange ==. val True &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 3) ||.
|
||||||
|
(oNotes ^. WalletOrchNoteChange ==. val False &&. txs ^.
|
||||||
|
WalletTransactionConf <.
|
||||||
|
val 10))
|
||||||
|
pure oNotes
|
||||||
|
|
||||||
selectUnspentNotes ::
|
selectUnspentNotes ::
|
||||||
ConnectionPool
|
ConnectionPool
|
||||||
|
|
Loading…
Reference in a new issue