Change Zcash scan to use parser

This commit is contained in:
Rene Vergara 2023-03-14 10:17:31 -05:00
parent e437da2841
commit 63d372c2d5
Signed by: pitmutt
GPG Key ID: 65122AD495A7F5B2
4 changed files with 41 additions and 24 deletions

View File

@ -11,12 +11,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- New type to handle UI translation objects - New type to handle UI translation objects
- New endpoints for API to get/set translation - New endpoints for API to get/set translation
- Tests for translation endpoints - Tests for translation endpoints
- Formal parser of ZGo-related tokens in memos
### Changed ### Changed
- Remove old code for PIN generation - Remove old code for PIN generation
- Xero reference field to include the amount of ZEC received - Xero reference field to include the amount of ZEC received
- Separate periodic tasks from API server - Separate periodic tasks from API server
- Zcash transaction monitoring changed to use memo parser
## [1.2.5] - 2023-02-01 ## [1.2.5] - 2023-02-01

View File

@ -3,7 +3,8 @@
module Server where module Server where
import Config import Config
import Control.Concurrent (forkIO)
--import Control.Concurrent (forkIO)
import Database.MongoDB import Database.MongoDB
import Network.Wai.Handler.Warp (defaultSettings, setPort) import Network.Wai.Handler.Warp (defaultSettings, setPort)
import Network.Wai.Handler.WarpTLS (runTLS, tlsSettings) import Network.Wai.Handler.WarpTLS (runTLS, tlsSettings)
@ -30,12 +31,12 @@ main = do
if j if j
then putStrLn "Connected to MongoDB!" then putStrLn "Connected to MongoDB!"
else fail "MongoDB connection failed!" else fail "MongoDB connection failed!"
_ <- forkIO (setInterval 60 (checkZcashPrices pipe (c_dbName loadedConfig))) {-_ <- forkIO (setInterval 60 (checkZcashPrices pipe (c_dbName loadedConfig)))-}
_ <- forkIO (setInterval 75 (scanZcash loadedConfig pipe)) {-_ <- forkIO (setInterval 75 (scanZcash loadedConfig pipe))-}
_ <- forkIO (setInterval 90 (scanPayments loadedConfig pipe)) {-_ <- forkIO (setInterval 90 (scanPayments loadedConfig pipe))-}
_ <- forkIO (setInterval 60 (checkPayments pipe (c_dbName loadedConfig))) {-_ <- forkIO (setInterval 60 (checkPayments pipe (c_dbName loadedConfig)))-}
_ <- forkIO (setInterval 60 (expireOwners pipe (c_dbName loadedConfig))) {-_ <- forkIO (setInterval 60 (expireOwners pipe (c_dbName loadedConfig)))-}
_ <- forkIO (setInterval 60 (updateLogins pipe loadedConfig)) {-_ <- forkIO (setInterval 60 (updateLogins pipe loadedConfig))-}
let appRoutes = routes pipe loadedConfig let appRoutes = routes pipe loadedConfig
case myTlsSettings of case myTlsSettings of
Nothing -> scotty (c_port loadedConfig) appRoutes Nothing -> scotty (c_port loadedConfig) appRoutes

View File

@ -4,7 +4,6 @@ module Tasks where
import Config import Config
import Database.MongoDB import Database.MongoDB
import Text.Megaparsec hiding (State)
import ZGoBackend import ZGoBackend
main :: IO () main :: IO ()
@ -23,7 +22,7 @@ main = do
then do then do
putStrLn "Connected to MongoDB!" putStrLn "Connected to MongoDB!"
checkZcashPrices pipe (c_dbName loadedConfig) checkZcashPrices pipe (c_dbName loadedConfig)
scanZcash loadedConfig pipe scanZcash' loadedConfig pipe
scanPayments loadedConfig pipe scanPayments loadedConfig pipe
checkPayments pipe (c_dbName loadedConfig) checkPayments pipe (c_dbName loadedConfig)
expireOwners pipe (c_dbName loadedConfig) expireOwners pipe (c_dbName loadedConfig)

View File

@ -357,21 +357,26 @@ zToZGoTx (ZcashTx t a aZ bh bt c conf m) = do
ZGoTx Nothing nAddy sess conf bt a t m ZGoTx Nothing nAddy sess conf bt a t m
else ZGoTx Nothing "" "" conf bt a t m else ZGoTx Nothing "" "" conf bt a t m
zToZGoTx' :: ZcashTx -> ZGoTx zToZGoTx' :: Config -> Pipe -> ZcashTx -> IO ()
zToZGoTx' (ZcashTx t a aZ bh bt c conf m) = do zToZGoTx' config pipe (ZcashTx t a aZ bh bt c conf m) = do
let zM = runParser pZGoMemo (T.unpack t) m when (conf < 100) $ do
case zM of let zM = runParser pZGoMemo (T.unpack t) m
Right zM' -> case zM of
ZGoTx Right zM' -> do
Nothing let tx =
(fromMaybe "" $ m_address zM') ZGoTx
(maybe "" U.toText $ m_session zM') Nothing
conf (fromMaybe "" $ m_address zM')
bt (maybe "" U.toText $ m_session zM')
a conf
t bt
m a
Left e -> error "Failed to parse ZGo memo" t
m
if m_payment zM'
then upsertPayment pipe (c_dbName config) tx
else access pipe master (c_dbName config) $ upsertZGoTx "txs" tx
Left e -> error "Failed to parse ZGo memo"
-- |Type to model a price in the ZGo database -- |Type to model a price in the ZGo database
data ZGoPrice = data ZGoPrice =
@ -1160,6 +1165,16 @@ isRelevant re t
| zconfirmations t < 100 && (matchTest re . T.unpack . zmemo) t = True | zconfirmations t < 100 && (matchTest re . T.unpack . zmemo) t = True
| otherwise = False | otherwise = False
-- | New function to scan transactions with parser
scanZcash' :: Config -> Pipe -> IO ()
scanZcash' config pipe = do
myTxs <-
listTxs (c_nodeUser config) (c_nodePwd config) (c_nodeAddress config) 1
case myTxs of
Right txs -> mapM_ (zToZGoTx' config pipe) txs
Left e -> do
putStrLn $ "Error scanning node transactions: " ++ T.unpack e
-- | Function to scan loaded viewing keys for payments -- | Function to scan loaded viewing keys for payments
scanPayments :: Config -> Pipe -> IO () scanPayments :: Config -> Pipe -> IO ()
scanPayments config pipe = do scanPayments config pipe = do