Milestone 3: RPC server, ZIP-320 #104

Merged
pitmutt merged 152 commits from milestone3 into master 2024-11-21 15:39:19 +00:00
5 changed files with 51 additions and 23 deletions
Showing only changes of commit 9c2d0aaf20 - Show all commits

View file

@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [0.7.0.0-beta]
### Added ### Added

View file

@ -3,14 +3,18 @@
module Server where module Server where
import Control.Concurrent (forkIO, threadDelay) import Control.Concurrent (forkIO, threadDelay)
import Control.Exception (throwIO, try) import Control.Exception (throwIO, throwTo, try)
import Control.Monad (forever, when) import Control.Monad (forever, when)
import Control.Monad.Logger (runNoLoggingT)
import Data.Configurator import Data.Configurator
import qualified Data.Text as T
import Network.Wai.Handler.Warp (run) import Network.Wai.Handler.Warp (run)
import Servant import Servant
import System.Exit
import System.Posix.Signals
import ZcashHaskell.Types (ZebraGetBlockChainInfo(..), ZebraGetInfo(..)) import ZcashHaskell.Types (ZebraGetBlockChainInfo(..), ZebraGetInfo(..))
import Zenith.Core (checkBlockChain, checkZebra) import Zenith.Core (checkBlockChain, checkZebra)
import Zenith.DB (initDb) import Zenith.DB (getWallets, initDb, initPool)
import Zenith.RPC import Zenith.RPC
( State(..) ( State(..)
, ZenithRPC(..) , ZenithRPC(..)
@ -46,22 +50,39 @@ main = do
Left e2 -> throwIO $ userError e2 Left e2 -> throwIO $ userError e2
Right x' -> do Right x' -> do
when x' $ rescanZebra zebraHost zebraPort dbFilePath when x' $ rescanZebra zebraHost zebraPort dbFilePath
_ <- pool <- runNoLoggingT $ initPool dbFilePath
forkIO $ walList <- getWallets pool $ zgb_net chainInfo
forever $ do if not (null walList)
_ <- then do
scanZebra dbFilePath zebraHost zebraPort (zgb_net chainInfo) scanThread <-
threadDelay 90000000 forkIO $
let myState = forever $ do
State _ <-
(zgb_net chainInfo) scanZebra
zebraHost dbFilePath
zebraPort zebraHost
dbFilePath zebraPort
(zgi_build zebra) (zgb_net chainInfo)
(zgb_blocks chainInfo) threadDelay 90000000
run nodePort $ putStrLn "Zenith RPC Server 0.7.0.0-beta"
serveWithContext putStrLn "------------------------------"
(Proxy :: Proxy ZenithRPC) putStrLn $
ctx "Connected to " ++
(zenithServer myState) show (zgb_net chainInfo) ++
" Zebra " ++
T.unpack (zgi_build zebra) ++ " on port " ++ show zebraPort
let myState =
State
(zgb_net chainInfo)
zebraHost
zebraPort
dbFilePath
(zgi_build zebra)
(zgb_blocks chainInfo)
run nodePort $
serveWithContext
(Proxy :: Proxy ZenithRPC)
ctx
(zenithServer myState)
else putStrLn
"No wallets available. Please start Zenith interactively to create a wallet"

View file

@ -2683,7 +2683,7 @@ completeSync pool st = do
rewindWalletData :: ConnectionPool -> Int -> ZcashNetDB -> LoggingT IO () rewindWalletData :: ConnectionPool -> Int -> ZcashNetDB -> LoggingT IO ()
rewindWalletData pool b net = do rewindWalletData pool b net = do
logDebugN "Starting transaction rewind" logDebugN "Starting transaction rewind"
liftIO $ clearWalletTransactions pool liftIO $ rewindWalletTransactions pool b
logDebugN "Completed transaction rewind" logDebugN "Completed transaction rewind"
logDebugN "Starting data store rewind" logDebugN "Starting data store rewind"
_ <- _ <-

View file

@ -52,6 +52,7 @@ import Zenith.Core
, createZcashAccount , createZcashAccount
, prepareTxV2 , prepareTxV2
, syncWallet , syncWallet
, updateCommitmentTrees
) )
import Zenith.DB import Zenith.DB
( Operation(..) ( Operation(..)
@ -910,6 +911,9 @@ scanZebra dbPath zHost zPort net = do
return () return ()
Right _ -> do Right _ -> do
wals <- getWallets pool net wals <- getWallets pool net
_ <-
runStderrLoggingT $
updateCommitmentTrees pool zHost zPort $ ZcashNetDB net
runStderrLoggingT $ runStderrLoggingT $
mapM_ mapM_
(syncWallet (Config dbPath zHost zPort "user" "pwd" 8080)) (syncWallet (Config dbPath zHost zPort "user" "pwd" 8080))

View file

@ -127,9 +127,12 @@ executable zenithserver
build-depends: build-depends:
base >=4.12 && <5 base >=4.12 && <5
, configurator , configurator
, monad-logger
, wai-extra , wai-extra
, warp , warp
, servant-server , servant-server
, text
, unix
, zcash-haskell , zcash-haskell
, zenith , zenith
pkgconfig-depends: rustzcash_wrapper pkgconfig-depends: rustzcash_wrapper