Docker image #89
4 changed files with 70 additions and 25 deletions
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -5,6 +5,16 @@ 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/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.5.3.0-beta]
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved formatting of sync progress
|
||||
|
||||
### Fixed
|
||||
|
||||
- Wallet sync when no new block has been detected on-chain.
|
||||
|
||||
## [0.5.2.0-beta]
|
||||
|
||||
### Added
|
||||
|
|
|
@ -69,7 +69,7 @@ import Control.Monad (forever, void)
|
|||
import Control.Monad.IO.Class (liftIO)
|
||||
import Control.Monad.Logger (LoggingT, runFileLoggingT, runNoLoggingT)
|
||||
import Data.Aeson
|
||||
import Data.HexString (toText)
|
||||
import Data.HexString (HexString(..), toText)
|
||||
import Data.Maybe
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.Encoding as E
|
||||
|
@ -83,6 +83,7 @@ import Lens.Micro ((&), (.~), (^.), set)
|
|||
import Lens.Micro.Mtl
|
||||
import Lens.Micro.TH
|
||||
import System.Hclip
|
||||
import Text.Printf
|
||||
import Text.Wrap (FillScope(..), FillStrategy(..), WrapSettings(..), wrapText)
|
||||
import ZcashHaskell.Keys (generateWalletSeedPhrase, getWalletSeed)
|
||||
import ZcashHaskell.Orchard (getSaplingFromUA, isValidUnifiedAddress)
|
||||
|
@ -160,6 +161,7 @@ data DisplayType
|
|||
| MsgDisplay
|
||||
| PhraseDisplay
|
||||
| TxDisplay
|
||||
| TxIdDisplay
|
||||
| SyncDisplay
|
||||
| SendDisplay
|
||||
| AdrBookEntryDisplay
|
||||
|
@ -168,6 +170,7 @@ data DisplayType
|
|||
data Tick
|
||||
= TickVal !Float
|
||||
| TickMsg !String
|
||||
| TickTx !HexString
|
||||
|
||||
data State = State
|
||||
{ _network :: !ZcashNet
|
||||
|
@ -195,6 +198,7 @@ data State = State
|
|||
, _abAddresses :: !(L.List Name (Entity AddressBook))
|
||||
, _abForm :: !(Form AdrBookEntry () Name)
|
||||
, _abCurAdrs :: !T.Text -- used for address book CRUD operations
|
||||
, _sentTx :: !(Maybe HexString)
|
||||
}
|
||||
|
||||
makeLenses ''State
|
||||
|
@ -208,14 +212,14 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
withBorderStyle unicode $
|
||||
B.borderWithLabel
|
||||
(str
|
||||
("Zenith - " <>
|
||||
(" Zenith - " <>
|
||||
show (st ^. network) <>
|
||||
" - " <>
|
||||
T.unpack
|
||||
(T.unpack
|
||||
(maybe
|
||||
"(None)"
|
||||
(\(_, w) -> zcashWalletName $ entityVal w)
|
||||
(L.listSelectedElement (st ^. wallets)))))
|
||||
(L.listSelectedElement (st ^. wallets)))) ++ " "))
|
||||
(C.hCenter
|
||||
(str
|
||||
("Account: " ++
|
||||
|
@ -230,10 +234,10 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
if st ^. network == MainNet
|
||||
then displayZec (st ^. balance)
|
||||
else displayTaz (st ^. balance))) <=>
|
||||
listAddressBox "Addresses" (st ^. addresses) <+>
|
||||
listAddressBox " Addresses " (st ^. addresses) <+>
|
||||
B.vBorder <+>
|
||||
(C.hCenter (str ("Last block seen: " ++ show (st ^. syncBlock))) <=>
|
||||
listTxBox "Transactions" (st ^. network) (st ^. transactions))) <=>
|
||||
(C.hCenter (str ("Last block seen: " ++ show (st ^. syncBlock) ++ "\n")) <=>
|
||||
listTxBox " Transactions " (st ^. network) (st ^. transactions))) <=>
|
||||
C.hCenter
|
||||
(hBox
|
||||
[ capCommand "W" "allets"
|
||||
|
@ -281,7 +285,7 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
(hBox
|
||||
[ capCommand "↑↓ " "move"
|
||||
, capCommand "↲ " "select"
|
||||
, capCommand "Tab " "->"
|
||||
, capCommand3 "" "Tab" " ->"
|
||||
])
|
||||
]
|
||||
listTxBox ::
|
||||
|
@ -297,7 +301,7 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
(hBox
|
||||
[ capCommand "↑↓ " "move"
|
||||
, capCommand "T" "x Display"
|
||||
, capCommand "Tab " "<-"
|
||||
, capCommand3 "" "Tab" " <-"
|
||||
])
|
||||
]
|
||||
helpDialog :: State -> Widget Name
|
||||
|
@ -425,7 +429,7 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
(str
|
||||
" _____ _ _ _ \n|__ /___ _ __ (_) |_| |__\n / // _ \\ '_ \\| | __| '_ \\\n / /| __/ | | | | |_| | | |\n/____\\___|_| |_|_|\\__|_| |_|") <=>
|
||||
C.hCenter
|
||||
(withAttr titleAttr (str "Zcash Wallet v0.5.2.0-beta")) <=>
|
||||
(withAttr titleAttr (str "Zcash Wallet v0.5.3.0-beta")) <=>
|
||||
C.hCenter (withAttr blinkAttr $ str "Press any key..."))
|
||||
else emptyWidget
|
||||
|
||||
|
@ -496,6 +500,16 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
D.renderDialog
|
||||
(D.dialog (Just $ txt "Message") Nothing 50)
|
||||
(padAll 1 $ strWrap $ st ^. msg)
|
||||
TxIdDisplay ->
|
||||
withBorderStyle unicodeBold $
|
||||
D.renderDialog
|
||||
(D.dialog (Just $ txt "Success") Nothing 50)
|
||||
(padAll 1 $
|
||||
(txt "Tx ID: " <+>
|
||||
txtWrapWith
|
||||
(WrapSettings False True NoFill FillAfterFirst)
|
||||
(maybe "None" toText (st ^. sentTx))) <=>
|
||||
C.hCenter (hBox [capCommand "C" "opy", xCommand]))
|
||||
TxDisplay ->
|
||||
case L.listSelectedElement $ st ^. transactions of
|
||||
Nothing -> emptyWidget
|
||||
|
@ -537,7 +551,7 @@ drawUI s = [splashDialog s, helpDialog s, displayDialog s, inputDialog s, ui s]
|
|||
, (barToDoAttr, P.progressIncompleteAttr)
|
||||
])
|
||||
(P.progressBar
|
||||
(Just $ show (st ^. barValue * 100))
|
||||
(Just $ printf "%.2f%%" (st ^. barValue * 100))
|
||||
(_barValue st))))
|
||||
SendDisplay ->
|
||||
withBorderStyle unicodeBold $
|
||||
|
@ -715,8 +729,12 @@ scanZebra dbP zHost zPort b eChan = do
|
|||
then liftIO $ BC.writeBChan eChan $ TickMsg "Invalid starting block for scan"
|
||||
else do
|
||||
let bList = [(sb + 1) .. (zgb_blocks bStatus)]
|
||||
let step = (1.0 :: Float) / fromIntegral (zgb_blocks bStatus - (sb + 1))
|
||||
if not (null bList)
|
||||
then do
|
||||
let step =
|
||||
(1.0 :: Float) / fromIntegral (zgb_blocks bStatus - (sb + 1))
|
||||
mapM_ (processBlock pool step) bList
|
||||
else liftIO $ BC.writeBChan eChan $ TickVal 1.0
|
||||
where
|
||||
processBlock :: ConnectionPool -> Float -> Int -> IO ()
|
||||
processBlock pool step bl = do
|
||||
|
@ -763,16 +781,21 @@ appEvent (BT.AppEvent t) = do
|
|||
MsgDisplay -> return ()
|
||||
PhraseDisplay -> return ()
|
||||
TxDisplay -> return ()
|
||||
TxIdDisplay -> return ()
|
||||
SyncDisplay -> return ()
|
||||
SendDisplay -> BT.modify $ set msg m
|
||||
AdrBookEntryDisplay -> return ()
|
||||
BlankDisplay -> return ()
|
||||
TickTx txid -> do
|
||||
BT.modify $ set sentTx (Just txid)
|
||||
BT.modify $ set displayBox TxIdDisplay
|
||||
TickVal v -> do
|
||||
case s ^. displayBox of
|
||||
AddrDisplay -> return ()
|
||||
MsgDisplay -> return ()
|
||||
PhraseDisplay -> return ()
|
||||
TxDisplay -> return ()
|
||||
TxIdDisplay -> return ()
|
||||
SendDisplay -> return ()
|
||||
AdrBookEntryDisplay -> return ()
|
||||
SyncDisplay -> do
|
||||
|
@ -896,6 +919,16 @@ appEvent (BT.VtyEvent e) = do
|
|||
MsgDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
PhraseDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
TxDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
TxIdDisplay -> do
|
||||
case e of
|
||||
V.EvKey (V.KChar 'x') [] ->
|
||||
BT.modify $ set displayBox BlankDisplay
|
||||
V.EvKey (V.KChar 'c') [] -> do
|
||||
liftIO $
|
||||
setClipboard $
|
||||
T.unpack $ maybe "None" toText (s ^. sentTx)
|
||||
BT.modify $ set msg "Copied transaction ID!"
|
||||
_ev -> return ()
|
||||
SendDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
SyncDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
AdrBookEntryDisplay -> BT.modify $ set displayBox BlankDisplay
|
||||
|
@ -1334,7 +1367,9 @@ runZenithCLI config = do
|
|||
(L.list ABList (Vec.fromList abookList) 1)
|
||||
(mkNewABForm (AdrBookEntry "" ""))
|
||||
""
|
||||
Left e -> print $
|
||||
Nothing
|
||||
Left e -> do
|
||||
print $
|
||||
"No Zebra node available on port " <>
|
||||
show port <> ". Check your configuration."
|
||||
|
||||
|
@ -1555,7 +1590,7 @@ sendTransaction pool chan zHost zPort znet accId bl amt ua memo = do
|
|||
[Data.Aeson.String $ toText rawTx]
|
||||
case resp of
|
||||
Left e1 -> BC.writeBChan chan $ TickMsg $ "Zebra error: " ++ show e1
|
||||
Right txId -> BC.writeBChan chan $ TickMsg $ "Tx ID: " ++ txId
|
||||
Right txId -> BC.writeBChan chan $ TickTx txId
|
||||
where
|
||||
parseAddress :: T.Text -> IO UnifiedAddress
|
||||
parseAddress a =
|
||||
|
|
|
@ -26,18 +26,18 @@ jsonNumber i = Number $ scientific (fromIntegral i) 0
|
|||
-- | Helper function to display small amounts of ZEC
|
||||
displayZec :: Integer -> String
|
||||
displayZec s
|
||||
| abs s < 100 = show s ++ " zats "
|
||||
| abs s < 100000 = show (fromIntegral s / 100) ++ " μZEC "
|
||||
| abs s < 100000000 = show (fromIntegral s / 100000) ++ " mZEC "
|
||||
| abs s < 100 = show s ++ " zats"
|
||||
| abs s < 100000 = show (fromIntegral s / 100) ++ " μZEC"
|
||||
| abs s < 100000000 = show (fromIntegral s / 100000) ++ " mZEC"
|
||||
| otherwise = show (fromIntegral s / 100000000) ++ " ZEC "
|
||||
|
||||
-- | Helper function to display small amounts of ZEC
|
||||
displayTaz :: Integer -> String
|
||||
displayTaz s
|
||||
| abs s < 100 = show s ++ " tazs "
|
||||
| abs s < 100000 = show (fromIntegral s / 100) ++ " μTAZ "
|
||||
| abs s < 100000000 = show (fromIntegral s / 100000) ++ " mTAZ "
|
||||
| otherwise = show (fromIntegral s / 100000000) ++ " TAZ "
|
||||
| abs s < 100 = show s ++ " tazs"
|
||||
| abs s < 100000 = show (fromIntegral s / 100) ++ " μTAZ"
|
||||
| abs s < 100000000 = show (fromIntegral s / 100000) ++ " mTAZ"
|
||||
| otherwise = show (fromIntegral s / 100000000) ++ " TAZ"
|
||||
|
||||
-- | Helper function to display abbreviated Unified Address
|
||||
showAddress :: UnifiedAddressDB -> T.Text
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
cabal-version: 3.0
|
||||
name: zenith
|
||||
version: 0.5.2.0-beta
|
||||
version: 0.5.3.0-beta
|
||||
license: MIT
|
||||
license-file: LICENSE
|
||||
author: Rene Vergara
|
||||
|
|
Loading…
Reference in a new issue