haskoin-store 0.18.1 → 0.18.2
raw patch · 4 files changed
+51/−93 lines, 4 files
Files
- CHANGELOG.md +4/−0
- app/Main.hs +2/−2
- haskoin-store.cabal +2/−2
- src/Network/Haskoin/Store/Web.hs +43/−89
CHANGELOG.md view
@@ -4,6 +4,10 @@ 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.18.2+### Changed+- Fix for memory leak.+ ## 0.18.1 ### Removed - Remove transaction count from xpub summary object.
app/Main.hs view
@@ -170,7 +170,7 @@ exitSuccess when (null (configPeers conf) && not (configDiscover conf)) . liftIO $ die "ERROR: Specify peers to connect or enable peer discovery."- runResourceT $ run conf+ run conf where opts = info (helper <*> config) $@@ -182,7 +182,7 @@ cacheDir net "" = Nothing cacheDir net ch = Just (ch </> getNetworkName net </> "cache") -run :: (MonadUnliftIO m, MonadResource m) => Config -> m ()+run :: MonadUnliftIO m => Config -> m () run Config { configPort = port , configNetwork = net , configDiscover = disc
haskoin-store.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 066447f4e026bf4245ce352b8b226fb902985a6fe266ee826552123b8b3c4792+-- hash: 7e10641ad38c5c5cdcbe8698e96212227b3a9250f8d2f3ea491700e33652483d name: haskoin-store-version: 0.18.1+version: 0.18.2 synopsis: Storage and index for Bitcoin and Bitcoin Cash description: Store blocks, transactions, and balances for Bitcoin or Bitcoin Cash, and make that information via REST API. category: Bitcoin, Finance, Network
src/Network/Haskoin/Store/Web.hs view
@@ -174,18 +174,12 @@ getUnspent = lift . getUnspent getBalance = lift . getBalance -instance (MonadResource m, MonadUnliftIO m) =>- StoreStream (WebT m) where- getMempool = transPipe lift getMempool- getOrphans = transPipe lift getOrphans- getAddressUnspents a x = transPipe lift $ getAddressUnspents a x- getAddressTxs a x = transPipe lift $ getAddressTxs a x- getAddressBalances = transPipe lift getAddressBalances- getUnspents = transPipe lift getUnspents- askDB :: Monad m => WebT m LayeredDB askDB = lift R.ask +runStream :: MonadUnliftIO m => s -> ReaderT s (ResourceT m) a -> m a+runStream s f = runResourceT (R.runReaderT f s)+ defHandler :: Monad m => Network -> Except -> WebT m () defHandler net e = do proto <- setupBin@@ -238,10 +232,7 @@ return $ pruneTx n b maybeSerial net proto res -scottyBlockHeight ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyBlockHeight :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyBlockHeight net = do cors height <- param "height"@@ -255,10 +246,7 @@ streamAny net proto io flush' -scottyBlockHeights ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyBlockHeights :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyBlockHeights net = do cors heights <- param "heights"@@ -274,10 +262,7 @@ streamAny net proto io flush' -scottyBlockLatest ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyBlockLatest :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyBlockLatest net = do cors n <- parseNoTx@@ -301,10 +286,7 @@ else f n (prevBlock (blockDataHeader b)) (i - 1) -scottyBlocks ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyBlocks :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyBlocks net = do cors blocks <- param "blocks"@@ -317,16 +299,14 @@ streamAny net proto io flush' -scottyMempool ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyMempool :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyMempool net = do cors proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $ getMempoolStream .| streamAny net proto io+ runStream db . runConduit $+ getMempoolStream .| streamAny net proto io flush' scottyTransaction :: MonadLoggerIO m => Network -> WebT m ()@@ -354,10 +334,7 @@ res <- cbAfterHeight 10000 height txid protoSerial net proto res -scottyTransactions ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+scottyTransactions :: (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyTransactions net = do cors txids <- param "txids"@@ -370,9 +347,7 @@ flush' scottyBlockTransactions ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyBlockTransactions net = do cors h <- param "block"@@ -388,9 +363,7 @@ Nothing -> raise ThingNotFound scottyRawTransactions ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyRawTransactions net = do cors txids <- param "txids"@@ -404,9 +377,7 @@ flush' scottyRawBlockTransactions ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyRawBlockTransactions net = do cors h <- param "block"@@ -423,7 +394,7 @@ Nothing -> raise ThingNotFound scottyAddressTxs ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> Bool@@ -435,9 +406,9 @@ o <- getOffset limits l <- getLimit limits full proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $ f proto o l s a io+ runStream db . runConduit $ f proto o l s a io flush' where f proto o l s a io@@ -445,7 +416,7 @@ | otherwise = getAddressTxsLimit o l s a .| streamAny net proto io scottyAddressesTxs ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> Bool@@ -456,9 +427,9 @@ s <- getStart l <- getLimit limits full proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $ f proto l s as io+ runStream db . runConduit $ f proto l s as io flush' where f proto l s as io@@ -466,10 +437,7 @@ | otherwise = getAddressesTxsLimit l s as .| streamAny net proto io scottyAddressUnspent ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)- => Network- -> MaxLimits- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> WebT m () scottyAddressUnspent net limits = do cors a <- parseAddress net@@ -477,26 +445,23 @@ o <- getOffset limits l <- getLimit limits False proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $+ runStream db . runConduit $ getAddressUnspentsLimit o l s a .| streamAny net proto io flush' scottyAddressesUnspent ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)- => Network- -> MaxLimits- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> WebT m () scottyAddressesUnspent net limits = do cors as <- parseAddresses net s <- getStart l <- getLimit limits False proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $+ runStream db . runConduit $ getAddressesUnspentsLimit l s as .| streamAny net proto io flush' @@ -521,9 +486,7 @@ protoSerial net proto res scottyAddressesBalances ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> WebT m () scottyAddressesBalances net = do cors as <- parseAddresses net@@ -546,22 +509,19 @@ flush' scottyXpubBalances ::- (MonadUnliftIO m, MonadLoggerIO m, MonadResource m)- => Network- -> MaxLimits- -> WebT m ()+ (MonadUnliftIO m, MonadLoggerIO m) => Network -> MaxLimits -> WebT m () scottyXpubBalances net max_limits = do cors xpub <- parseXpub net proto <- setupBin- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $+ runStream db . runConduit $ xpubBals max_limits xpub .| streamAny net proto io flush' scottyXpubTxs ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> Bool@@ -572,12 +532,12 @@ s <- getStart l <- getLimit limits full proto <- setupBin+ db <- askDB as <-- lift . runConduit $+ liftIO . runStream db . runConduit $ xpubBals limits x .| mapC (balanceAddress . xPubBal) .| sinkList- runner <- lift askRunInIO stream $ \io flush' -> do- runner . runConduit $ f proto l s as io+ runStream db . runConduit $ f proto l s as io flush' where f proto l s as io@@ -585,32 +545,27 @@ | otherwise = getAddressesTxsLimit l s as .| streamAny net proto io scottyXpubUnspents ::- (MonadLoggerIO m, MonadResource m, MonadUnliftIO m)- => Network- -> MaxLimits- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> WebT m () scottyXpubUnspents net limits = do cors x <- parseXpub net proto <- setupBin s <- getStart l <- getLimit limits False- runner <- lift askRunInIO+ db <- askDB stream $ \io flush' -> do- runner . runConduit $+ runStream db . runConduit $ xpubUnspentLimit net limits l s x .| streamAny net proto io flush' scottyXpubSummary ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m)- => Network- -> MaxLimits- -> WebT m ()+ (MonadLoggerIO m, MonadUnliftIO m) => Network -> MaxLimits -> WebT m () scottyXpubSummary net max_limits = do cors x <- parseXpub net proto <- setupBin- res <- lift $ xpubSummary max_limits x+ db <- askDB+ res <- liftIO . runStream db $ xpubSummary max_limits x protoSerial net proto res scottyPostTx ::@@ -696,8 +651,7 @@ when (not (healthOK h) || not (healthSynced h)) $ status status503 protoSerial net proto h -runWeb ::- (MonadLoggerIO m, MonadUnliftIO m, MonadResource m) => WebConfig -> m ()+runWeb :: (MonadLoggerIO m, MonadUnliftIO m) => WebConfig -> m () runWeb WebConfig { webDB = db , webPort = port , webNetwork = net@@ -746,7 +700,7 @@ S.get "/health" $ scottyHealth net st notFound $ raise ThingNotFound -getStart :: (MonadResource m, MonadUnliftIO m) => WebT m (Maybe BlockRef)+getStart :: MonadUnliftIO m => WebT m (Maybe BlockRef) getStart = runMaybeT $ do s <- MaybeT $ (Just <$> param "height") `rescue` const (return Nothing)