packages feed

haskoin-store 1.5.13 → 1.5.14

raw patch · 6 files changed

+50/−17 lines, 6 filesdep ~scottyPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: scotty

API changes (from Hackage documentation)

- Haskoin.Store: [block] :: Store -> !BlockStore
- Haskoin.Store: [bloom] :: StoreConfig -> !Bool
- Haskoin.Store: [cache] :: Store -> !Maybe CacheConfig
- Haskoin.Store: [chain] :: CacheConfig -> !Chain
- Haskoin.Store: [connect] :: StoreConfig -> !SockAddr -> WithConnection
- Haskoin.Store: [ctx] :: StoreConfig -> !Ctx
- Haskoin.Store: [db] :: StoreConfig -> !FilePath
- Haskoin.Store: [discover] :: StoreConfig -> !Bool
- Haskoin.Store: [gap] :: StoreConfig -> !Word32
- Haskoin.Store: [initGap] :: StoreConfig -> !Word32
- Haskoin.Store: [initPeers] :: StoreConfig -> ![String]
- Haskoin.Store: [limit] :: Limits -> !Word32
- Haskoin.Store: [maxKeys] :: CacheConfig -> !Integer
- Haskoin.Store: [maxPeerLife] :: StoreConfig -> !NominalDiffTime
- Haskoin.Store: [maxPeers] :: StoreConfig -> !Int
- Haskoin.Store: [metrics] :: CacheConfig -> !Maybe CacheMetrics
- Haskoin.Store: [minAddrs] :: CacheConfig -> !Int
- Haskoin.Store: [net] :: StoreConfig -> !Network
- Haskoin.Store: [noMempool] :: StoreConfig -> !Bool
- Haskoin.Store: [offset] :: Limits -> !Word32
- Haskoin.Store: [peerMgr] :: Store -> !PeerMgr
- Haskoin.Store: [peerTimeout] :: StoreConfig -> !NominalDiffTime
- Haskoin.Store: [pub] :: Store -> !Publisher StoreEvent
- Haskoin.Store: [redisMaxKeys] :: StoreConfig -> !Integer
- Haskoin.Store: [redisMinAddrs] :: StoreConfig -> !Int
- Haskoin.Store: [redisSyncInterval] :: StoreConfig -> !Int
- Haskoin.Store: [redis] :: CacheConfig -> !Connection
- Haskoin.Store: [start] :: Limits -> !Maybe Start
- Haskoin.Store: [stats] :: StoreConfig -> !Maybe Stats
- Haskoin.Store: [syncMempool] :: StoreConfig -> !Bool
- Haskoin.Store: [wipeMempool] :: StoreConfig -> !Bool
- Haskoin.Store.BlockStore: [chain] :: BlockStoreConfig -> !Chain
- Haskoin.Store.BlockStore: [ctx] :: BlockStoreConfig -> !Ctx
- Haskoin.Store.BlockStore: [db] :: BlockStoreConfig -> !DatabaseReader
- Haskoin.Store.BlockStore: [net] :: BlockStoreConfig -> !Network
- Haskoin.Store.BlockStore: [noMempool] :: BlockStoreConfig -> !Bool
- Haskoin.Store.BlockStore: [peerMgr] :: BlockStoreConfig -> !PeerMgr
- Haskoin.Store.BlockStore: [peerTimeout] :: BlockStoreConfig -> !NominalDiffTime
- Haskoin.Store.BlockStore: [pub] :: BlockStoreConfig -> !Publisher StoreEvent
- Haskoin.Store.BlockStore: [stats] :: BlockStoreConfig -> !Maybe Stats
- Haskoin.Store.BlockStore: [syncMempool] :: BlockStoreConfig -> !Bool
- Haskoin.Store.BlockStore: [wipeMempool] :: BlockStoreConfig -> !Bool
- Haskoin.Store.Cache: [chain] :: CacheConfig -> !Chain
- Haskoin.Store.Cache: [maxKeys] :: CacheConfig -> !Integer
- Haskoin.Store.Cache: [metrics] :: CacheConfig -> !Maybe CacheMetrics
- Haskoin.Store.Cache: [minAddrs] :: CacheConfig -> !Int
- Haskoin.Store.Cache: [redis] :: CacheConfig -> !Connection
- Haskoin.Store.Common: [limit] :: Limits -> !Word32
- Haskoin.Store.Common: [offset] :: Limits -> !Word32
- Haskoin.Store.Common: [start] :: Limits -> !Maybe Start
- Haskoin.Store.Database.Reader: [ctx] :: DatabaseReader -> !Ctx
- Haskoin.Store.Database.Reader: [db] :: DatabaseReader -> !DB
- Haskoin.Store.Database.Reader: [initGap] :: DatabaseReader -> !Word32
- Haskoin.Store.Database.Reader: [maxGap] :: DatabaseReader -> !Word32
- Haskoin.Store.Database.Reader: [metrics] :: DatabaseReader -> !Maybe DataMetrics
- Haskoin.Store.Database.Reader: [net] :: DatabaseReader -> !Network
- Haskoin.Store.Database.Types: [address] :: BalKey -> !Address
- Haskoin.Store.Database.Types: [block] :: UnspentVal -> !BlockRef
- Haskoin.Store.Database.Types: [confirmed] :: BalVal -> !Word64
- Haskoin.Store.Database.Types: [hash] :: BlockKey -> BlockHash
- Haskoin.Store.Database.Types: [height] :: HeightKey -> BlockHeight
- Haskoin.Store.Database.Types: [outpoint] :: UnspentKey -> !OutPoint
- Haskoin.Store.Database.Types: [received] :: BalVal -> !Word64
- Haskoin.Store.Database.Types: [script] :: OutVal -> !ByteString
- Haskoin.Store.Database.Types: [short] :: TxKey -> (Word32, Word16)
- Haskoin.Store.Database.Types: [tx] :: AddrTxKey -> !TxRef
- Haskoin.Store.Database.Types: [txid] :: UnspentKey -> !TxHash
- Haskoin.Store.Database.Types: [txs] :: BalVal -> !Word64
- Haskoin.Store.Database.Types: [unconfirmed] :: BalVal -> !Word64
- Haskoin.Store.Database.Types: [utxo] :: BalVal -> !Word64
- Haskoin.Store.Database.Types: [value] :: OutVal -> !Word64
- Haskoin.Store.Manager: [block] :: Store -> !BlockStore
- Haskoin.Store.Manager: [bloom] :: StoreConfig -> !Bool
- Haskoin.Store.Manager: [cache] :: Store -> !Maybe CacheConfig
- Haskoin.Store.Manager: [chain] :: Store -> !Chain
- Haskoin.Store.Manager: [connect] :: StoreConfig -> !SockAddr -> WithConnection
- Haskoin.Store.Manager: [ctx] :: Store -> !Ctx
- Haskoin.Store.Manager: [db] :: Store -> !DatabaseReader
- Haskoin.Store.Manager: [discover] :: StoreConfig -> !Bool
- Haskoin.Store.Manager: [gap] :: StoreConfig -> !Word32
- Haskoin.Store.Manager: [initGap] :: StoreConfig -> !Word32
- Haskoin.Store.Manager: [initPeers] :: StoreConfig -> ![String]
- Haskoin.Store.Manager: [maxPeerLife] :: StoreConfig -> !NominalDiffTime
- Haskoin.Store.Manager: [maxPeers] :: StoreConfig -> !Int
- Haskoin.Store.Manager: [net] :: Store -> !Network
- Haskoin.Store.Manager: [noMempool] :: StoreConfig -> !Bool
- Haskoin.Store.Manager: [peerMgr] :: Store -> !PeerMgr
- Haskoin.Store.Manager: [peerTimeout] :: StoreConfig -> !NominalDiffTime
- Haskoin.Store.Manager: [pub] :: Store -> !Publisher StoreEvent
- Haskoin.Store.Manager: [redisMaxKeys] :: StoreConfig -> !Integer
- Haskoin.Store.Manager: [redisMinAddrs] :: StoreConfig -> !Int
- Haskoin.Store.Manager: [redisSyncInterval] :: StoreConfig -> !Int
- Haskoin.Store.Manager: [redis] :: StoreConfig -> !Maybe String
- Haskoin.Store.Manager: [stats] :: StoreConfig -> !Maybe Stats
- Haskoin.Store.Manager: [syncMempool] :: StoreConfig -> !Bool
- Haskoin.Store.Manager: [wipeMempool] :: StoreConfig -> !Bool
- Haskoin.Store.Web: [blockTimeout] :: WebLimits -> !Word64
- Haskoin.Store.Web: [defItemCount] :: WebLimits -> !Word32
- Haskoin.Store.Web: [healthCheckInterval] :: WebConfig -> !Int
- Haskoin.Store.Web: [host] :: WebConfig -> !String
- Haskoin.Store.Web: [limits] :: WebConfig -> !WebLimits
- Haskoin.Store.Web: [maxFullItemCount] :: WebLimits -> !Word32
- Haskoin.Store.Web: [maxItemCount] :: WebLimits -> !Word32
- Haskoin.Store.Web: [maxLaggingBlocks] :: WebConfig -> !Int
- Haskoin.Store.Web: [maxOffset] :: WebLimits -> !Word32
- Haskoin.Store.Web: [maxPendingTxs] :: WebConfig -> !Int
- Haskoin.Store.Web: [minPeers] :: WebConfig -> !Int
- Haskoin.Store.Web: [noBlockchainInfo] :: WebConfig -> !Bool
- Haskoin.Store.Web: [noMempool] :: WebConfig -> !Bool
- Haskoin.Store.Web: [noSlow] :: WebConfig -> !Bool
- Haskoin.Store.Web: [port] :: WebConfig -> !Int
- Haskoin.Store.Web: [priceHistoryURL] :: WebConfig -> !String
- Haskoin.Store.Web: [stats] :: WebConfig -> !Maybe Stats
- Haskoin.Store.Web: [store] :: WebConfig -> !Store
- Haskoin.Store.Web: [tickerRefresh] :: WebConfig -> !Int
- Haskoin.Store.Web: [tickerURL] :: WebConfig -> !String
- Haskoin.Store.Web: [txTimeout] :: WebLimits -> !Word64
- Haskoin.Store.Web: [version] :: WebConfig -> !String
- Haskoin.Store.Web: [xpubGapInit] :: WebLimits -> !Word32
- Haskoin.Store.Web: [xpubGap] :: WebLimits -> !Word32
+ Haskoin.Store: [$sel:block:Store] :: Store -> !BlockStore
+ Haskoin.Store: [$sel:bloom:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store: [$sel:cache:Store] :: Store -> !Maybe CacheConfig
+ Haskoin.Store: [$sel:chain:CacheConfig] :: CacheConfig -> !Chain
+ Haskoin.Store: [$sel:chain:Store] :: Store -> !Chain
+ Haskoin.Store: [$sel:connect:StoreConfig] :: StoreConfig -> !SockAddr -> WithConnection
+ Haskoin.Store: [$sel:ctx:StoreConfig] :: StoreConfig -> !Ctx
+ Haskoin.Store: [$sel:ctx:Store] :: Store -> !Ctx
+ Haskoin.Store: [$sel:db:StoreConfig] :: StoreConfig -> !FilePath
+ Haskoin.Store: [$sel:db:Store] :: Store -> !DatabaseReader
+ Haskoin.Store: [$sel:discover:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store: [$sel:gap:StoreConfig] :: StoreConfig -> !Word32
+ Haskoin.Store: [$sel:initGap:StoreConfig] :: StoreConfig -> !Word32
+ Haskoin.Store: [$sel:initPeers:StoreConfig] :: StoreConfig -> ![String]
+ Haskoin.Store: [$sel:limit:Limits] :: Limits -> !Word32
+ Haskoin.Store: [$sel:maxKeys:CacheConfig] :: CacheConfig -> !Integer
+ Haskoin.Store: [$sel:maxPeerLife:StoreConfig] :: StoreConfig -> !NominalDiffTime
+ Haskoin.Store: [$sel:maxPeers:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store: [$sel:mempoolTimeout:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store: [$sel:metrics:CacheConfig] :: CacheConfig -> !Maybe CacheMetrics
+ Haskoin.Store: [$sel:minAddrs:CacheConfig] :: CacheConfig -> !Int
+ Haskoin.Store: [$sel:net:StoreConfig] :: StoreConfig -> !Network
+ Haskoin.Store: [$sel:net:Store] :: Store -> !Network
+ Haskoin.Store: [$sel:noMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store: [$sel:offset:Limits] :: Limits -> !Word32
+ Haskoin.Store: [$sel:peerMgr:Store] :: Store -> !PeerMgr
+ Haskoin.Store: [$sel:peerTimeout:StoreConfig] :: StoreConfig -> !NominalDiffTime
+ Haskoin.Store: [$sel:pub:Store] :: Store -> !Publisher StoreEvent
+ Haskoin.Store: [$sel:redis:CacheConfig] :: CacheConfig -> !Connection
+ Haskoin.Store: [$sel:redis:StoreConfig] :: StoreConfig -> !Maybe String
+ Haskoin.Store: [$sel:redisMaxKeys:StoreConfig] :: StoreConfig -> !Integer
+ Haskoin.Store: [$sel:redisMinAddrs:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store: [$sel:redisSyncInterval:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store: [$sel:start:Limits] :: Limits -> !Maybe Start
+ Haskoin.Store: [$sel:stats:StoreConfig] :: StoreConfig -> !Maybe Stats
+ Haskoin.Store: [$sel:syncMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store: [$sel:wipeMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.BlockStore: [$sel:chain:BlockStoreConfig] :: BlockStoreConfig -> !Chain
+ Haskoin.Store.BlockStore: [$sel:ctx:BlockStoreConfig] :: BlockStoreConfig -> !Ctx
+ Haskoin.Store.BlockStore: [$sel:db:BlockStoreConfig] :: BlockStoreConfig -> !DatabaseReader
+ Haskoin.Store.BlockStore: [$sel:mempoolTimeout:BlockStoreConfig] :: BlockStoreConfig -> !Int
+ Haskoin.Store.BlockStore: [$sel:net:BlockStoreConfig] :: BlockStoreConfig -> !Network
+ Haskoin.Store.BlockStore: [$sel:noMempool:BlockStoreConfig] :: BlockStoreConfig -> !Bool
+ Haskoin.Store.BlockStore: [$sel:peerMgr:BlockStoreConfig] :: BlockStoreConfig -> !PeerMgr
+ Haskoin.Store.BlockStore: [$sel:peerTimeout:BlockStoreConfig] :: BlockStoreConfig -> !NominalDiffTime
+ Haskoin.Store.BlockStore: [$sel:pub:BlockStoreConfig] :: BlockStoreConfig -> !Publisher StoreEvent
+ Haskoin.Store.BlockStore: [$sel:stats:BlockStoreConfig] :: BlockStoreConfig -> !Maybe Stats
+ Haskoin.Store.BlockStore: [$sel:syncMempool:BlockStoreConfig] :: BlockStoreConfig -> !Bool
+ Haskoin.Store.BlockStore: [$sel:wipeMempool:BlockStoreConfig] :: BlockStoreConfig -> !Bool
+ Haskoin.Store.Cache: [$sel:chain:CacheConfig] :: CacheConfig -> !Chain
+ Haskoin.Store.Cache: [$sel:maxKeys:CacheConfig] :: CacheConfig -> !Integer
+ Haskoin.Store.Cache: [$sel:metrics:CacheConfig] :: CacheConfig -> !Maybe CacheMetrics
+ Haskoin.Store.Cache: [$sel:minAddrs:CacheConfig] :: CacheConfig -> !Int
+ Haskoin.Store.Cache: [$sel:redis:CacheConfig] :: CacheConfig -> !Connection
+ Haskoin.Store.Common: [$sel:limit:Limits] :: Limits -> !Word32
+ Haskoin.Store.Common: [$sel:offset:Limits] :: Limits -> !Word32
+ Haskoin.Store.Common: [$sel:start:Limits] :: Limits -> !Maybe Start
+ Haskoin.Store.Database.Reader: [$sel:ctx:DatabaseReader] :: DatabaseReader -> !Ctx
+ Haskoin.Store.Database.Reader: [$sel:db:DatabaseReader] :: DatabaseReader -> !DB
+ Haskoin.Store.Database.Reader: [$sel:initGap:DatabaseReader] :: DatabaseReader -> !Word32
+ Haskoin.Store.Database.Reader: [$sel:maxGap:DatabaseReader] :: DatabaseReader -> !Word32
+ Haskoin.Store.Database.Reader: [$sel:metrics:DatabaseReader] :: DatabaseReader -> !Maybe DataMetrics
+ Haskoin.Store.Database.Reader: [$sel:net:DatabaseReader] :: DatabaseReader -> !Network
+ Haskoin.Store.Database.Types: [$sel:address:AddrOutKey] :: AddrOutKey -> !Address
+ Haskoin.Store.Database.Types: [$sel:address:AddrTxKey] :: AddrTxKey -> !Address
+ Haskoin.Store.Database.Types: [$sel:address:BalKey] :: BalKey -> !Address
+ Haskoin.Store.Database.Types: [$sel:block:AddrOutKey] :: AddrOutKey -> !BlockRef
+ Haskoin.Store.Database.Types: [$sel:block:AddrTxKey] :: AddrTxKey -> !BlockRef
+ Haskoin.Store.Database.Types: [$sel:block:UnspentVal] :: UnspentVal -> !BlockRef
+ Haskoin.Store.Database.Types: [$sel:confirmed:BalVal] :: BalVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:hash:BlockKey] :: BlockKey -> BlockHash
+ Haskoin.Store.Database.Types: [$sel:height:HeightKey] :: HeightKey -> BlockHeight
+ Haskoin.Store.Database.Types: [$sel:outpoint:AddrOutKey] :: AddrOutKey -> !OutPoint
+ Haskoin.Store.Database.Types: [$sel:outpoint:UnspentKey] :: UnspentKey -> !OutPoint
+ Haskoin.Store.Database.Types: [$sel:received:BalVal] :: BalVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:script:OutVal] :: OutVal -> !ByteString
+ Haskoin.Store.Database.Types: [$sel:script:UnspentVal] :: UnspentVal -> !ByteString
+ Haskoin.Store.Database.Types: [$sel:short:TxKey] :: TxKey -> (Word32, Word16)
+ Haskoin.Store.Database.Types: [$sel:tx:AddrTxKey] :: AddrTxKey -> !TxRef
+ Haskoin.Store.Database.Types: [$sel:txid:TxKey] :: TxKey -> TxHash
+ Haskoin.Store.Database.Types: [$sel:txid:UnspentKey] :: UnspentKey -> !TxHash
+ Haskoin.Store.Database.Types: [$sel:txs:BalVal] :: BalVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:unconfirmed:BalVal] :: BalVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:utxo:BalVal] :: BalVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:value:OutVal] :: OutVal -> !Word64
+ Haskoin.Store.Database.Types: [$sel:value:UnspentVal] :: UnspentVal -> !Word64
+ Haskoin.Store.Manager: [$sel:block:Store] :: Store -> !BlockStore
+ Haskoin.Store.Manager: [$sel:bloom:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.Manager: [$sel:cache:Store] :: Store -> !Maybe CacheConfig
+ Haskoin.Store.Manager: [$sel:chain:Store] :: Store -> !Chain
+ Haskoin.Store.Manager: [$sel:connect:StoreConfig] :: StoreConfig -> !SockAddr -> WithConnection
+ Haskoin.Store.Manager: [$sel:ctx:StoreConfig] :: StoreConfig -> !Ctx
+ Haskoin.Store.Manager: [$sel:ctx:Store] :: Store -> !Ctx
+ Haskoin.Store.Manager: [$sel:db:StoreConfig] :: StoreConfig -> !FilePath
+ Haskoin.Store.Manager: [$sel:db:Store] :: Store -> !DatabaseReader
+ Haskoin.Store.Manager: [$sel:discover:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.Manager: [$sel:gap:StoreConfig] :: StoreConfig -> !Word32
+ Haskoin.Store.Manager: [$sel:initGap:StoreConfig] :: StoreConfig -> !Word32
+ Haskoin.Store.Manager: [$sel:initPeers:StoreConfig] :: StoreConfig -> ![String]
+ Haskoin.Store.Manager: [$sel:maxPeerLife:StoreConfig] :: StoreConfig -> !NominalDiffTime
+ Haskoin.Store.Manager: [$sel:maxPeers:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store.Manager: [$sel:mempoolTimeout:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store.Manager: [$sel:net:StoreConfig] :: StoreConfig -> !Network
+ Haskoin.Store.Manager: [$sel:net:Store] :: Store -> !Network
+ Haskoin.Store.Manager: [$sel:noMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.Manager: [$sel:peerMgr:Store] :: Store -> !PeerMgr
+ Haskoin.Store.Manager: [$sel:peerTimeout:StoreConfig] :: StoreConfig -> !NominalDiffTime
+ Haskoin.Store.Manager: [$sel:pub:Store] :: Store -> !Publisher StoreEvent
+ Haskoin.Store.Manager: [$sel:redis:StoreConfig] :: StoreConfig -> !Maybe String
+ Haskoin.Store.Manager: [$sel:redisMaxKeys:StoreConfig] :: StoreConfig -> !Integer
+ Haskoin.Store.Manager: [$sel:redisMinAddrs:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store.Manager: [$sel:redisSyncInterval:StoreConfig] :: StoreConfig -> !Int
+ Haskoin.Store.Manager: [$sel:stats:StoreConfig] :: StoreConfig -> !Maybe Stats
+ Haskoin.Store.Manager: [$sel:syncMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.Manager: [$sel:wipeMempool:StoreConfig] :: StoreConfig -> !Bool
+ Haskoin.Store.Web: [$sel:blockTimeout:WebLimits] :: WebLimits -> !Word64
+ Haskoin.Store.Web: [$sel:defItemCount:WebLimits] :: WebLimits -> !Word32
+ Haskoin.Store.Web: [$sel:healthCheckInterval:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:host:WebConfig] :: WebConfig -> !String
+ Haskoin.Store.Web: [$sel:limits:WebConfig] :: WebConfig -> !WebLimits
+ Haskoin.Store.Web: [$sel:maxFullItemCount:WebLimits] :: WebLimits -> !Word32
+ Haskoin.Store.Web: [$sel:maxItemCount:WebLimits] :: WebLimits -> !Word32
+ Haskoin.Store.Web: [$sel:maxLaggingBlocks:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:maxOffset:WebLimits] :: WebLimits -> !Word32
+ Haskoin.Store.Web: [$sel:maxPendingTxs:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:minPeers:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:noBlockchainInfo:WebConfig] :: WebConfig -> !Bool
+ Haskoin.Store.Web: [$sel:noMempool:WebConfig] :: WebConfig -> !Bool
+ Haskoin.Store.Web: [$sel:noSlow:WebConfig] :: WebConfig -> !Bool
+ Haskoin.Store.Web: [$sel:port:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:priceHistoryURL:WebConfig] :: WebConfig -> !String
+ Haskoin.Store.Web: [$sel:stats:WebConfig] :: WebConfig -> !Maybe Stats
+ Haskoin.Store.Web: [$sel:store:WebConfig] :: WebConfig -> !Store
+ Haskoin.Store.Web: [$sel:tickerRefresh:WebConfig] :: WebConfig -> !Int
+ Haskoin.Store.Web: [$sel:tickerURL:WebConfig] :: WebConfig -> !String
+ Haskoin.Store.Web: [$sel:txTimeout:WebLimits] :: WebLimits -> !Word64
+ Haskoin.Store.Web: [$sel:version:WebConfig] :: WebConfig -> !String
+ Haskoin.Store.Web: [$sel:xpubGap:WebLimits] :: WebLimits -> !Word32
+ Haskoin.Store.Web: [$sel:xpubGapInit:WebLimits] :: WebLimits -> !Word32
- Haskoin.Store: StoreConfig :: !Int -> ![String] -> !Bool -> !FilePath -> !Network -> !Maybe String -> !Ctx -> !Word32 -> !Word32 -> !Int -> !Integer -> !Bool -> !Bool -> !Bool -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> !Maybe Stats -> !Int -> !Bool -> StoreConfig
+ Haskoin.Store: StoreConfig :: !Int -> ![String] -> !Bool -> !FilePath -> !Network -> !Maybe String -> !Ctx -> !Word32 -> !Word32 -> !Int -> !Integer -> !Bool -> !Bool -> !Bool -> !Int -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> !Maybe Stats -> !Int -> !Bool -> StoreConfig
- Haskoin.Store: class Monad m => StoreReadBase (m :: Type -> Type)
+ Haskoin.Store: class (Monad m) => StoreReadBase m
- Haskoin.Store: class StoreReadBase m => StoreReadExtra (m :: Type -> Type)
+ Haskoin.Store: class (StoreReadBase m) => StoreReadExtra m
- Haskoin.Store: isInCache :: forall (m :: Type -> Type). MonadLoggerIO m => XPubSpec -> CacheT m Bool
+ Haskoin.Store: isInCache :: MonadLoggerIO m => XPubSpec -> CacheT m Bool
- Haskoin.Store: type CacheT = ReaderT Maybe CacheConfig
+ Haskoin.Store: type CacheT = ReaderT (Maybe CacheConfig)
- Haskoin.Store.BlockStore: BlockStoreConfig :: !Ctx -> !PeerMgr -> !Chain -> !Publisher StoreEvent -> !DatabaseReader -> !Network -> !Bool -> !Bool -> !Bool -> !NominalDiffTime -> !Maybe Stats -> BlockStoreConfig
+ Haskoin.Store.BlockStore: BlockStoreConfig :: !Ctx -> !PeerMgr -> !Chain -> !Publisher StoreEvent -> !DatabaseReader -> !Network -> !Bool -> !Bool -> !Bool -> !Int -> !NominalDiffTime -> !Maybe Stats -> BlockStoreConfig
- Haskoin.Store.Cache: cacheDelXPubs :: forall (m :: Type -> Type). (MonadLoggerIO m, StoreReadBase m) => [XPubSpec] -> CacheT m Integer
+ Haskoin.Store.Cache: cacheDelXPubs :: (MonadLoggerIO m, StoreReadBase m) => [XPubSpec] -> CacheT m Integer
- Haskoin.Store.Cache: isInCache :: forall (m :: Type -> Type). MonadLoggerIO m => XPubSpec -> CacheT m Bool
+ Haskoin.Store.Cache: isInCache :: MonadLoggerIO m => XPubSpec -> CacheT m Bool
- Haskoin.Store.Cache: type CacheT = ReaderT Maybe CacheConfig
+ Haskoin.Store.Cache: type CacheT = ReaderT (Maybe CacheConfig)
- Haskoin.Store.Common: applyLimitC :: forall (m :: Type -> Type) i. Monad m => Limit -> ConduitT i i m ()
+ Haskoin.Store.Common: applyLimitC :: Monad m => Limit -> ConduitT i i m ()
- Haskoin.Store.Common: applyLimitsC :: forall (m :: Type -> Type) i. Monad m => Limits -> ConduitT i i m ()
+ Haskoin.Store.Common: applyLimitsC :: Monad m => Limits -> ConduitT i i m ()
- Haskoin.Store.Common: class Monad m => StoreReadBase (m :: Type -> Type)
+ Haskoin.Store.Common: class (Monad m) => StoreReadBase m
- Haskoin.Store.Common: class StoreReadBase m => StoreReadExtra (m :: Type -> Type)
+ Haskoin.Store.Common: class (StoreReadBase m) => StoreReadExtra m
- Haskoin.Store.Common: class StoreWrite (m :: Type -> Type)
+ Haskoin.Store.Common: class StoreWrite m
- Haskoin.Store.Common: joinDescStreams :: forall (m :: Type -> Type) a. (Monad m, Ord a) => [ConduitT () a m ()] -> ConduitT () a m ()
+ Haskoin.Store.Common: joinDescStreams :: (Monad m, Ord a) => [ConduitT () a m ()] -> ConduitT () a m ()
- Haskoin.Store.Logic: type MonadImport (m :: Type -> Type) = (MonadError ImportException m, MonadLoggerIO m, StoreReadBase m, StoreWrite m)
+ Haskoin.Store.Logic: type MonadImport m = (MonadError ImportException m, MonadLoggerIO m, StoreReadBase m, StoreWrite m)
- Haskoin.Store.Manager: StoreConfig :: !Int -> ![String] -> !Bool -> !FilePath -> !Network -> !Maybe String -> !Ctx -> !Word32 -> !Word32 -> !Int -> !Integer -> !Bool -> !Bool -> !Bool -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> !Maybe Stats -> !Int -> !Bool -> StoreConfig
+ Haskoin.Store.Manager: StoreConfig :: !Int -> ![String] -> !Bool -> !FilePath -> !Network -> !Maybe String -> !Ctx -> !Word32 -> !Word32 -> !Int -> !Integer -> !Bool -> !Bool -> !Bool -> !Int -> !NominalDiffTime -> !NominalDiffTime -> !SockAddr -> WithConnection -> !Maybe Stats -> !Int -> !Bool -> StoreConfig
- Haskoin.Store.Web: data Except
+ Haskoin.Store.Web: data () => Except

Files

app/Main.hs view
@@ -115,6 +115,7 @@     syncMempool :: !Bool,     peerTimeout :: !Int,     maxPeerLife :: !Int,+    mempoolTimeout :: !Int,     maxPeers :: !Int,     statsd :: !Bool,     statsdHost :: !String,@@ -176,6 +177,8 @@     env "WIPE_MEMPOOL" False parseBool   syncMempool <-     env "SYNC_MEMPOOL" False parseBool+  mempoolTimeout <-+    env "MEMPOOL_TIMEOUT" 14 readMaybe   peerTimeout <-     env "PEER_TIMEOUT" 120 readMaybe   maxPeerLife <-@@ -427,6 +430,13 @@     flag c.syncMempool True $       long "sync-mempool"         <> help "Attempt to download peer mempools"+  mempoolTimeout <-+    option auto $+      metavar "DAYS"+        <> long "mempool-timeout"+        <> help "Cull old mempool transactions"+        <> showDefault+        <> value c.mempoolTimeout   peerTimeout <-     option auto $       metavar "SECONDS"@@ -574,6 +584,7 @@                 wipeMempool = cfg.wipeMempool,                 noMempool = cfg.noMempool,                 syncMempool = cfg.syncMempool,+                mempoolTimeout = cfg.mempoolTimeout,                 peerTimeout = fromIntegral cfg.peerTimeout,                 maxPeerLife = fromIntegral cfg.maxPeerLife,                 connect = withConnection,
haskoin-store.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           haskoin-store-version:        1.5.13+version:        1.5.14 synopsis:       Storage and index for Bitcoin and Bitcoin Cash description:    Please see the README on GitHub at <https://github.com/haskoin/haskoin-store#readme> category:       Bitcoin, Finance, Network@@ -66,7 +66,7 @@     , random >=1.1     , rocksdb-haskell-jprupp >=2.1.3     , rocksdb-query >=0.4.0-    , scotty >=0.20+    , scotty >=0.22     , statsd-rupp >=0.4     , stm >=2.5.0.0     , string-conversions >=0.4.0.1@@ -121,7 +121,7 @@     , random >=1.1     , rocksdb-haskell-jprupp >=2.1.3     , rocksdb-query >=0.4.0-    , scotty >=0.20+    , scotty >=0.22     , statsd-rupp >=0.4     , stm >=2.5.0.0     , string-conversions >=0.4.0.1@@ -180,7 +180,7 @@     , random >=1.1     , rocksdb-haskell-jprupp >=2.1.3     , rocksdb-query >=0.4.0-    , scotty >=0.20+    , scotty >=0.22     , statsd-rupp >=0.4     , stm >=2.5.0.0     , string-conversions >=0.4.0.1
src/Haskoin/Store/BlockStore.hs view
@@ -323,6 +323,8 @@     -- | sync mempool from peers     syncMempool :: !Bool,     -- | disconnect syncing peer if inactive for this long+    mempoolTimeout :: !Int,+    -- | delete transactions older than this number of days from mempool     peerTimeout :: !NominalDiffTime,     stats :: !(Maybe Stats)   }@@ -823,10 +825,30 @@               Left e -> report_error e               Right _ -> return ()     report_error e = do-      $(logErrorS) "BlockImport" $+      $(logErrorS) "BlockStore" $         "Error processing mempool: " <> cs (show e)       throwIO e +pruneMempool :: (MonadLoggerIO m) => BlockT m ()+pruneMempool =+  guardMempool . notify Nothing $ do+  days <- asks (.config.mempoolTimeout)+  when (days > 0) $ do+    mempool <- reverse <$> getMempool+    time <- (floor . utcTimeToPOSIXSeconds) <$> liftIO getCurrentTime+    let thresh = time - (fromIntegral days * 24 * 60 * 60)+        txs = take 1000 $ map snd $ takeWhile ((< thresh) . fst) mempool+    net <- getNetwork+    ctx <- getCtx+    when (length txs > 0) $ do+      $(logInfoS) "BlockStore" $+        "Deleting " <> cs (show (length txs)) <> " old transactions from mempool"+      runImport net ctx (mapM_ (deleteUnconfirmedTx False) txs) >>= \case+        Left e ->+          $(logErrorS) "BlockStore" $+            "Error pruning mempool: " <> cs (show e)+        Right () -> return ()+ processTxs ::   (MonadLoggerIO m) =>   Peer ->@@ -1184,6 +1206,7 @@   trySyncing   processMempool   pruneOrphans+  pruneMempool   checkTime   atomically (r ()) @@ -1191,12 +1214,7 @@ pingMe mbox =   forever $ do     BlockPing `query` mbox-    delay <--      liftIO $-        randomRIO-          ( 100 * 1000,-            1000 * 1000-          )+    delay <- liftIO $ randomRIO (100 * 1000, 1000 * 1000)     threadDelay delay  blockStorePeerConnect :: (MonadIO m) => Peer -> BlockStore -> m ()
src/Haskoin/Store/Manager.hs view
@@ -146,6 +146,8 @@     -- | sync mempool from peers     syncMempool :: !Bool,     -- | disconnect peer if message not received for this many seconds+    mempoolTimeout :: !Int,+    -- | delete mempool transactions older than this number of days     peerTimeout :: !NominalDiffTime,     -- | disconnect peer if it has been connected this long     maxPeerLife :: !NominalDiffTime,@@ -222,6 +224,7 @@       noMempool = cfg.noMempool,       wipeMempool = cfg.wipeMempool,       syncMempool = cfg.syncMempool,+      mempoolTimeout = cfg.mempoolTimeout,       peerTimeout = cfg.peerTimeout,       stats = cfg.stats     }
src/Haskoin/Store/Web.hs view
@@ -649,11 +649,6 @@     toEncoding     toJSON   pathCompact-    (GetMempool <$> paramOptional <*> parseOffset)-    (fmap SerialList . scottyMempool)-    toEncoding-    toJSON-  pathCompact     (GetAddrTxs <$> paramCapture <*> parseLimits)     (fmap SerialList . scottyAddrTxs)     toEncoding@@ -679,8 +674,13 @@     toEncoding     toJSON   S.get "/events" scottyEvents-  S.get "/dbstats" scottyDbStats   unless cfg.noSlow $ do+    S.get "/dbstats" scottyDbStats+    pathCompact+      (GetMempool <$> paramOptional <*> parseOffset)+      (fmap SerialList . scottyMempool)+      toEncoding+      toJSON     pathCompact       (GetBlocks <$> paramRequired <*> paramDef)       (fmap SerialList . scottyBlocks)
test/Haskoin/StoreSpec.hs view
@@ -104,6 +104,7 @@                 noMempool = False,                 wipeMempool = False,                 syncMempool = False,+                mempoolTimeout = 14,                 peerTimeout = 60,                 maxPeerLife = 48 * 3600,                 connect = dummyPeerConnect net ad,