haskoin-store-data 0.52.6 → 0.52.9
raw patch · 4 files changed
+106/−2 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Haskoin.Store.Data: BinfoBlocks :: [BinfoBlockInfo] -> BinfoBlocks
+ Haskoin.Store.Data: BinfoHeader :: !BlockHash -> !Timestamp -> !Word32 -> !BlockHeight -> ![BinfoTxId] -> BinfoHeader
+ Haskoin.Store.Data: BinfoMempool :: [BinfoTx] -> BinfoMempool
+ Haskoin.Store.Data: [binfoBlocks] :: BinfoBlocks -> [BinfoBlockInfo]
+ Haskoin.Store.Data: [binfoHeaderHash] :: BinfoHeader -> !BlockHash
+ Haskoin.Store.Data: [binfoHeaderHeight] :: BinfoHeader -> !BlockHeight
+ Haskoin.Store.Data: [binfoHeaderIndex] :: BinfoHeader -> !Word32
+ Haskoin.Store.Data: [binfoHeaderTime] :: BinfoHeader -> !Timestamp
+ Haskoin.Store.Data: [binfoTxIndices] :: BinfoHeader -> ![BinfoTxId]
+ Haskoin.Store.Data: [getBinfoMempool] :: BinfoMempool -> [BinfoTx]
+ Haskoin.Store.Data: binfoMempoolParseJSON :: Network -> Value -> Parser BinfoMempool
+ Haskoin.Store.Data: binfoMempoolToEncoding :: Network -> BinfoMempool -> Encoding
+ Haskoin.Store.Data: binfoMempoolToJSON :: Network -> BinfoMempool -> Value
+ Haskoin.Store.Data: data BinfoHeader
+ Haskoin.Store.Data: instance Control.DeepSeq.NFData Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance Control.DeepSeq.NFData Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance Control.DeepSeq.NFData Haskoin.Store.Data.BinfoMempool
+ Haskoin.Store.Data: instance Data.Aeson.Types.FromJSON.FromJSON Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance Data.Aeson.Types.FromJSON.FromJSON Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance Data.Aeson.Types.ToJSON.ToJSON Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance Data.Aeson.Types.ToJSON.ToJSON Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance GHC.Classes.Eq Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance GHC.Classes.Eq Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance GHC.Classes.Eq Haskoin.Store.Data.BinfoMempool
+ Haskoin.Store.Data: instance GHC.Generics.Generic Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance GHC.Generics.Generic Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance GHC.Generics.Generic Haskoin.Store.Data.BinfoMempool
+ Haskoin.Store.Data: instance GHC.Show.Show Haskoin.Store.Data.BinfoBlocks
+ Haskoin.Store.Data: instance GHC.Show.Show Haskoin.Store.Data.BinfoHeader
+ Haskoin.Store.Data: instance GHC.Show.Show Haskoin.Store.Data.BinfoMempool
+ Haskoin.Store.Data: newtype BinfoBlocks
+ Haskoin.Store.Data: newtype BinfoMempool
+ Haskoin.Store.Data: toBinfoBlockInfo :: BlockData -> BinfoBlockInfo
Files
- CHANGELOG.md +14/−0
- haskoin-store-data.cabal +2/−2
- src/Haskoin/Store/Data.hs +69/−0
- test/Haskoin/Store/DataSpec.hs +21/−0
CHANGELOG.md view
@@ -4,6 +4,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) +## 0.52.9+### Added+- Add Blockchain.info latest block endpoint.+- Add Blockchain.info unconfirmed-transactions endpoint.+- Add Blockchain.info blocks for one day endpoint.++## 0.52.8+### Fixed+- Fix special case for zero limit.++## 0.52.7+### Fixed+- Fix cache bug when too many transactions in mempool.+ ## 0.52.6 ### Changed - Use rationals for Blockchain.info export-history endpoint arithmetics.
haskoin-store-data.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 9e77d20377455e8ad001eb7c7c5a39002f65f14e46954075ce6dba24f521cd96+-- hash: 4068f11ea0427ac6c0846205b45263f5142f7cd3f8055993078495e8c1bd16e1 name: haskoin-store-data-version: 0.52.6+version: 0.52.9 synopsis: Data for Haskoin Store description: Please see the README on GitHub at <https://github.com/haskoin/haskoin-store#readme> category: Bitcoin, Finance, Network
src/Haskoin/Store/Data.hs view
@@ -144,12 +144,19 @@ , binfoXPubPathParseJSON , BinfoInfo(..) , BinfoBlockInfo(..)+ , toBinfoBlockInfo , BinfoSymbol(..) , BinfoTicker(..) , BinfoRate(..) , BinfoHistory(..) , toBinfoHistory , BinfoDate(..)+ , BinfoHeader(..)+ , BinfoMempool(..)+ , binfoMempoolToJSON+ , binfoMempoolToEncoding+ , binfoMempoolParseJSON+ , BinfoBlocks(..) ) where@@ -3036,6 +3043,15 @@ getBinfoBlockInfoIndex <- o .: "block_index" return BinfoBlockInfo {..} +toBinfoBlockInfo :: BlockData -> BinfoBlockInfo+toBinfoBlockInfo BlockData {..} =+ BinfoBlockInfo+ { getBinfoBlockInfoHash = headerHash blockDataHeader+ , getBinfoBlockInfoHeight = blockDataHeight+ , getBinfoBlockInfoTime = blockTimestamp blockDataHeader+ , getBinfoBlockInfoIndex = blockDataHeight+ }+ data BinfoRate = BinfoRate { binfoRateTime :: !Word64@@ -3468,3 +3484,56 @@ concatMap (T.splitOn ",") (T.splitOn "|" s) where f x = BinfoAddr <$> textToAddr net x <|> BinfoXpub <$> xPubImport net x++data BinfoHeader+ = BinfoHeader+ { binfoHeaderHash :: !BlockHash+ , binfoHeaderTime :: !Timestamp+ , binfoHeaderIndex :: !Word32+ , binfoHeaderHeight :: !BlockHeight+ , binfoTxIndices :: ![BinfoTxId]+ } deriving (Eq, Show, Generic, NFData)++instance ToJSON BinfoHeader where+ toJSON BinfoHeader{..} =+ A.object+ [ "hash" .= binfoHeaderHash+ , "time" .= binfoHeaderTime+ , "block_index" .= binfoHeaderIndex+ , "height" .= binfoHeaderHeight+ , "txIndexes" .= binfoTxIndices+ ]++instance FromJSON BinfoHeader where+ parseJSON = A.withObject "header" $ \o -> do+ binfoHeaderHash <- o .: "hash"+ binfoHeaderTime <- o .: "time"+ binfoHeaderIndex <- o .: "block_index"+ binfoHeaderHeight <- o .: "height"+ binfoTxIndices <- o .: "txIndexes"+ return BinfoHeader{..}++newtype BinfoMempool = BinfoMempool { getBinfoMempool :: [BinfoTx] }+ deriving (Eq, Show, Generic, NFData)++binfoMempoolToJSON :: Network -> BinfoMempool -> Value+binfoMempoolToJSON net (BinfoMempool txs) =+ A.object ["txs" .= map (binfoTxToJSON net) txs]++binfoMempoolToEncoding :: Network -> BinfoMempool -> Encoding+binfoMempoolToEncoding net (BinfoMempool txs) =+ AE.pairs $ AE.pair "txs" (AE.list (binfoTxToEncoding net) txs)++binfoMempoolParseJSON :: Network -> Value -> Parser BinfoMempool+binfoMempoolParseJSON net =+ A.withObject "mempool" $ \o ->+ BinfoMempool <$> (mapM (binfoTxParseJSON net) =<< o .: "txs")++newtype BinfoBlocks = BinfoBlocks { binfoBlocks :: [BinfoBlockInfo] }+ deriving (Eq, Show, Generic, NFData)++instance ToJSON BinfoBlocks where+ toJSON BinfoBlocks {..} = A.object [ "blocks" .= binfoBlocks ]++instance FromJSON BinfoBlocks where+ parseJSON = A.withObject "blocks" $ \o -> BinfoBlocks <$> o .: "blocks"
test/Haskoin/Store/DataSpec.hs view
@@ -73,6 +73,8 @@ , JsonBox (arbitrary :: Gen BinfoTxId) , JsonBox (arbitrary :: Gen BinfoShortBal) , JsonBox (arbitrary :: Gen BinfoHistory)+ , JsonBox (arbitrary :: Gen BinfoHeader)+ , JsonBox (arbitrary :: Gen BinfoBlocks) ] netVals :: [NetBox]@@ -149,6 +151,10 @@ , binfoRawAddrToEncoding , binfoRawAddrParseJSON , arbitraryNetData)+ , NetBox ( binfoMempoolToJSON+ , binfoMempoolToEncoding+ , binfoMempoolParseJSON+ , arbitraryNetData) ] spec :: Spec@@ -590,3 +596,18 @@ instance Arbitrary BinfoUnspents where arbitrary = BinfoUnspents <$> arbitrary++instance Arbitrary BinfoHeader where+ arbitrary =+ BinfoHeader+ <$> arbitraryBlockHash+ <*> arbitrary+ <*> arbitrary+ <*> arbitrary+ <*> arbitrary++instance Arbitrary BinfoMempool where+ arbitrary = BinfoMempool <$> arbitrary++instance Arbitrary BinfoBlocks where+ arbitrary = BinfoBlocks <$> arbitrary