Publish Zenith beta version #80
9 changed files with 77 additions and 26 deletions
|
@ -7,12 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## Added
|
||||
### Added
|
||||
|
||||
- `Core` module
|
||||
- `CLI` module
|
||||
- `DB` module
|
||||
- Command line arguments to switch to legacy version
|
||||
- New configuration parameter for Zebra port
|
||||
- New functions to call `getinfo` and `getblockchaininfo` RPC methods
|
||||
|
||||
## [0.4.1]
|
||||
|
||||
|
|
|
@ -202,6 +202,7 @@ main = do
|
|||
dbName <- require config "dbName"
|
||||
nodeUser <- require config "nodeUser"
|
||||
nodePwd <- require config "nodePwd"
|
||||
zebraPort <- require config "zebraPort"
|
||||
if not (null args)
|
||||
then do
|
||||
case head args of
|
||||
|
@ -215,7 +216,7 @@ main = do
|
|||
" ______ _ _ _ \n |___ / (_) | | | \n / / ___ _ __ _| |_| |__ \n / / / _ \\ '_ \\| | __| '_ \\ \n / /_| __/ | | | | |_| | | |\n /_____\\___|_| |_|_|\\__|_| |_|\n Zcash Full Node CLI v0.4.0"
|
||||
}
|
||||
(root nodeUser nodePwd)
|
||||
"cli" -> runZenithCLI dbName
|
||||
"cli" -> runZenithCLI zebraPort dbName
|
||||
_ -> printUsage
|
||||
else printUsage
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ library:
|
|||
- text
|
||||
- bytestring
|
||||
- http-conduit
|
||||
- http-client
|
||||
- scientific
|
||||
- vector
|
||||
- regex-base
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Zenith.CLI where
|
||||
|
||||
|
@ -33,6 +34,8 @@ import Brick.Widgets.Core
|
|||
)
|
||||
import qualified Brick.Widgets.List as L
|
||||
import qualified Data.Vector as Vec
|
||||
import Network.HTTP.Simple
|
||||
import ZcashHaskell.Types
|
||||
import Zenith.Core
|
||||
|
||||
data Name
|
||||
|
@ -85,15 +88,6 @@ listDrawElement sel a =
|
|||
else str s
|
||||
in C.hCenter $ selStr $ show a
|
||||
|
||||
initialState :: State
|
||||
initialState =
|
||||
State
|
||||
"Main"
|
||||
(L.list WList (Vec.fromList ["wall1"]) 1)
|
||||
(L.list AList (Vec.fromList ["addr1", "addr2"]) 1)
|
||||
(L.list TList (Vec.fromList ["tx1", "tx2", "tx3"]) 1)
|
||||
"Start up Ok!"
|
||||
|
||||
customAttr :: A.AttrName
|
||||
customAttr = L.listSelectedAttr <> A.attrName "custom"
|
||||
|
||||
|
@ -129,10 +123,25 @@ theApp =
|
|||
, M.appAttrMap = const theMap
|
||||
}
|
||||
|
||||
runZenithCLI :: T.Text -> IO ()
|
||||
runZenithCLI dbName = do
|
||||
w <- checkWallets dbName
|
||||
if (null w)
|
||||
then void $ M.defaultMain theApp initialState
|
||||
else do
|
||||
print "No wallet found. Create one? Y/N"
|
||||
runZenithCLI :: Int -> T.Text -> IO ()
|
||||
runZenithCLI port dbName = do
|
||||
w <- checkZebra port
|
||||
case (w :: Maybe ZebraGetInfo) of
|
||||
Just zebra -> do
|
||||
bc <- checkBlockChain port
|
||||
case (bc :: Maybe ZebraGetBlockChainInfo) of
|
||||
Nothing -> print "Unable to determine blockchain status"
|
||||
Just chainInfo -> do
|
||||
void $
|
||||
M.defaultMain theApp $
|
||||
State
|
||||
((show . zgb_net) chainInfo)
|
||||
(L.list WList (Vec.fromList ["wall1"]) 1)
|
||||
(L.list AList (Vec.fromList ["addr1", "addr2"]) 1)
|
||||
(L.list TList (Vec.fromList ["tx1", "tx2", "tx3"]) 1)
|
||||
("Start up Ok! Connected to Zebra " ++
|
||||
(T.unpack . zgi_build) zebra ++ " on port " ++ show port ++ ".")
|
||||
Nothing -> do
|
||||
print $
|
||||
"No Zebra node available on port " <>
|
||||
show port <> ". Check your configuration"
|
||||
|
|
|
@ -1,12 +1,48 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
-- Core wallet functionality for Zenith
|
||||
module Zenith.Core where
|
||||
|
||||
import Data.Aeson
|
||||
import qualified Data.Text as T
|
||||
import Database.Persist
|
||||
import Database.Persist.Sqlite
|
||||
import Network.HTTP.Client
|
||||
import ZcashHaskell.Types
|
||||
import ZcashHaskell.Utils
|
||||
import Zenith.DB
|
||||
|
||||
checkWallets :: T.Text -> IO [Entity ZcashWallet]
|
||||
-- * Database functions
|
||||
-- | Returns the list of wallets available in the given database
|
||||
checkWallets ::
|
||||
T.Text -- ^ The database name to check
|
||||
-> IO [Entity ZcashWallet]
|
||||
checkWallets dbName = do
|
||||
runSqlite dbName $ do runMigration migrateAll
|
||||
wallets <- runSqlite dbName $ selectList [ZcashWalletBirthdayHeight >. 0] []
|
||||
return wallets
|
||||
runSqlite dbName $ selectList [ZcashWalletBirthdayHeight >. 0] []
|
||||
|
||||
-- * Zebra Node interaction
|
||||
-- | Checks the status of the `zebrad` node
|
||||
checkZebra ::
|
||||
Int -- ^ Port where `zebrad` is available
|
||||
-> IO (Maybe ZebraGetInfo)
|
||||
checkZebra port = do
|
||||
res <- makeZebraCall port "getinfo" []
|
||||
let body = responseBody (res :: Response (RpcResponse ZebraGetInfo))
|
||||
return $ result body
|
||||
|
||||
-- | Checks the status of the Zcash blockchain
|
||||
checkBlockChain ::
|
||||
Int -- ^ Port where `zebrad` is available
|
||||
-> IO (Maybe ZebraGetBlockChainInfo)
|
||||
checkBlockChain port = do
|
||||
let f = makeZebraCall port
|
||||
result <$> (responseBody <$> f "getblockchaininfo" [])
|
||||
|
||||
-- | Generic RPC call function
|
||||
connectZebra ::
|
||||
FromJSON a => Int -> T.Text -> [Data.Aeson.Value] -> IO (Maybe a)
|
||||
connectZebra port m params = do
|
||||
res <- makeZebraCall port m params
|
||||
let body = responseBody res
|
||||
return $ result body
|
||||
|
|
|
@ -44,7 +44,7 @@ packages:
|
|||
# extra-deps: []
|
||||
extra-deps:
|
||||
- git: https://git.vergara.tech/Vergara_Tech/zcash-haskell.git
|
||||
commit: c4f345b1deb876e19a51c5f7ae1b4402fae14126
|
||||
commit: 09cee9a064219e4be89413ef86341aa18b62be68
|
||||
- git: https://git.vergara.tech/Vergara_Tech/haskell-hexstring.git
|
||||
commit: fd1ddce73c0ad18a2a4509a299c6e93f8c6c383d
|
||||
- git: https://git.vergara.tech/Vergara_Tech/haskell-foreign-rust.git
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
|
||||
packages:
|
||||
- completed:
|
||||
commit: c4f345b1deb876e19a51c5f7ae1b4402fae14126
|
||||
commit: 09cee9a064219e4be89413ef86341aa18b62be68
|
||||
git: https://git.vergara.tech/Vergara_Tech/zcash-haskell.git
|
||||
name: zcash-haskell
|
||||
pantry-tree:
|
||||
sha256: 1bf709484bc488e51e18aa11001abdc06100ed7086b9bbd765d28c4a3d8e9113
|
||||
size: 1366
|
||||
sha256: 6bf1902a377bf9399442de6f0b89219479fa908e70706918e81b88caa28dc0f5
|
||||
size: 1367
|
||||
version: 0.4.1
|
||||
original:
|
||||
commit: c4f345b1deb876e19a51c5f7ae1b4402fae14126
|
||||
commit: 09cee9a064219e4be89413ef86341aa18b62be68
|
||||
git: https://git.vergara.tech/Vergara_Tech/zcash-haskell.git
|
||||
- completed:
|
||||
commit: fd1ddce73c0ad18a2a4509a299c6e93f8c6c383d
|
||||
|
|
|
@ -43,6 +43,7 @@ library
|
|||
, base64-bytestring
|
||||
, brick
|
||||
, bytestring
|
||||
, http-client
|
||||
, http-conduit
|
||||
, http-types
|
||||
, microlens
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
nodeUser = "user"
|
||||
nodePwd = "superSecret"
|
||||
dbName = "zenith.db"
|
||||
zebraPort = 18232
|
||||
|
|
Loading…
Reference in a new issue