packages feed

haskoin-store 0.18.1 → 0.18.2

raw patch · 4 files changed

+51/−93 lines, 4 files

Files

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)