packages feed

haskoin-store 0.13.1 → 0.14.0

raw patch · 46 files changed

+1480/−4906 lines, 46 files

Files

CHANGELOG.md view
@@ -4,6 +4,17 @@ 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.14.0+### Removed+- Dump slow protobuf serialization.++### Added+- Add custom serialization.+- Extra debug logging.++### Changed+- Bump `haskoin-core` nad `haskoin-node`.+ ## 0.13.1 ### Changed - Bump `haskoin-node` in `stack.yaml`.
app/Main.hs view
@@ -12,6 +12,8 @@ import           Control.Monad import           Control.Monad.Logger import           Control.Monad.Trans.Maybe+import           Data.Aeson.Encoding        (encodingToLazyByteString,+                                             fromEncoding) import           Data.Bits import           Data.ByteString.Builder import qualified Data.ByteString.Lazy       as L@@ -121,16 +123,16 @@  defHandler :: Monad m => Network -> Except -> ActionT Except m () defHandler net e = do-    proto <- setupProto+    proto <- setupBin     case e of         ThingNotFound -> status status404-        BadRequest -> status status400-        UserError _ -> status status400+        BadRequest    -> status status400+        UserError _   -> status status400         StringError _ -> status status400-        ServerError -> status status500+        ServerError   -> status status500     S.raw $ serialAny net proto e -maybeSerial :: (Monad m, JsonSerial a, ProtoSerial a) => Network -> Bool -- ^ protobuf+maybeSerial :: (Monad m, JsonSerial a, BinSerial a) => Network -> Bool -- ^ protobuf             -> Maybe a -> ActionT Except m () maybeSerial _ _ Nothing        = raise ThingNotFound maybeSerial net proto (Just x) = S.raw $ serialAny net proto x@@ -195,12 +197,13 @@         S.get "/block/best" $ do             cors             n <- parse_no_tx-            proto <- setupProto+            proto <- setupBin             res <-                 runMaybeT $ do-                    let d = (db, defaultReadOptions)-                    bh <- MaybeT $ getBestBlock d-                    b <- MaybeT $ getBlock d bh+                    bh <-+                        MaybeT $ withBlockDB defaultReadOptions db getBestBlock+                    b <-+                        MaybeT . withBlockDB defaultReadOptions db $ getBlock bh                     if n                         then return b {blockDataTxs = take 1 (blockDataTxs b)}                         else return b@@ -209,11 +212,12 @@             cors             block <- param "block"             n <- parse_no_tx-            proto <- setupProto+            proto <- setupBin             res <-                 runMaybeT $ do-                    let d = (db, defaultReadOptions)-                    b <- MaybeT $ getBlock d block+                    b <-+                        MaybeT . withBlockDB defaultReadOptions db $+                        getBlock block                     if n                         then return b {blockDataTxs = take 1 (blockDataTxs b)}                         else return b@@ -222,13 +226,16 @@             cors             height <- param "height"             no_tx <- parse_no_tx-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   bs <- getBlocksAtHeight d height+                do bs <-+                       withBlockDB defaultReadOptions db $+                       getBlocksAtHeight height                    fmap catMaybes . forM bs $ \bh ->                        runMaybeT $ do-                           b <- MaybeT $ getBlock d bh+                           b <-+                               MaybeT . withBlockDB defaultReadOptions db $+                               getBlock bh                            return                                b                                    { blockDataTxs =@@ -241,38 +248,38 @@             cors             heights <- param "heights"             no_tx <- parse_no_tx-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   bs <- concat <$> mapM (getBlocksAtHeight d) (nub heights)-                   fmap catMaybes . forM bs $ \bh ->-                       runMaybeT $ do-                           b <- MaybeT $ getBlock d bh-                           return-                               b-                                   { blockDataTxs =-                                         if no_tx-                                             then take 1 (blockDataTxs b)-                                             else blockDataTxs b-                                   }+                withBlockDB defaultReadOptions db $ do+                    bs <- concat <$> mapM getBlocksAtHeight (nub heights)+                    fmap catMaybes . forM bs $ \bh ->+                        runMaybeT $ do+                            b <- MaybeT $ getBlock bh+                            return+                                b+                                    { blockDataTxs =+                                          if no_tx+                                              then take 1 (blockDataTxs b)+                                              else blockDataTxs b+                                    }             S.raw $ serialAny net proto res         S.get "/blocks" $ do             cors             blocks <- param "blocks"             no_tx <- parse_no_tx-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   fmap catMaybes . forM blocks $ \bh ->-                       runMaybeT $ do-                           b <- MaybeT $ getBlock d bh-                           return-                               b-                                   { blockDataTxs =-                                         if no_tx-                                             then take 1 (blockDataTxs b)-                                             else blockDataTxs b-                                   }+                withBlockDB defaultReadOptions db $+                fmap catMaybes . forM blocks $ \bh ->+                    runMaybeT $ do+                        b <- MaybeT $ getBlock bh+                        return+                            b+                                { blockDataTxs =+                                      if no_tx+                                          then take 1 (blockDataTxs b)+                                          else blockDataTxs b+                                }             S.raw $ serialAny net proto res         S.get "/mempool" $ do             cors@@ -284,27 +291,23 @@                         UserError "mempool transactions do not have height"                     Just (MemRef t) -> return $ Just t                     Nothing -> return Nothing-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    getMempool d mpu .| mapC snd .| apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        getMempool mpu .| mapC snd .| apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/transaction/:txid" $ do             cors             txid <- param "txid"-            proto <- setupProto-            res <--                do let d = (db, defaultReadOptions)-                   getTransaction d txid+            proto <- setupBin+            res <- withBlockDB defaultReadOptions db $ getTransaction txid             maybeSerial net proto res         S.get "/transaction/:txid/hex" $ do             cors             txid <- param "txid"-            res <--                do let d = (db, defaultReadOptions)-                   getTransaction d txid+            res <- withBlockDB defaultReadOptions db $ getTransaction txid             case res of                 Nothing -> raise ThingNotFound                 Just x ->@@ -312,9 +315,7 @@         S.get "/transaction/:txid/bin" $ do             cors             txid <- param "txid"-            res <--                do let d = (db, defaultReadOptions)-                   getTransaction d txid+            res <- withBlockDB defaultReadOptions db $ getTransaction txid             case res of                 Nothing -> raise ThingNotFound                 Just x -> do@@ -324,171 +325,169 @@             cors             txid <- param "txid"             height <- param "height"-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   cbAfterHeight d 10000 height txid+                withBlockDB defaultReadOptions db $+                cbAfterHeight 10000 height txid             S.raw $ serialAny net proto res         S.get "/transactions" $ do             cors             txids <- param "txids"-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   catMaybes <$> mapM (getTransaction d) (nub txids)+                withBlockDB defaultReadOptions db $+                catMaybes <$> mapM getTransaction (nub txids)             S.raw $ serialAny net proto res         S.get "/transactions/hex" $ do             cors             txids <- param "txids"             res <--                do let d = (db, defaultReadOptions)-                   catMaybes <$> mapM (getTransaction d) (nub txids)+                withBlockDB defaultReadOptions db $+                catMaybes <$> mapM getTransaction (nub txids)             S.json $ map (encodeHex . Serialize.encode . transactionData) res         S.get "/transactions/bin" $ do             cors             txids <- param "txids"             res <--                do let d = (db, defaultReadOptions)-                   catMaybes <$> mapM (getTransaction d) (nub txids)+                withBlockDB defaultReadOptions db $+                catMaybes <$> mapM getTransaction (nub txids)             S.setHeader "Content-Type" "application/octet-stream"             S.raw . L.concat $ map (Serialize.encodeLazy . transactionData) res         S.get "/address/:address/transactions" $ do             cors             address <- parse_address             (mlimit, mbr) <- parse_limits-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    getAddressTxs d address mbr .| apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        getAddressTxs address mbr .| apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/address/transactions" $ do             cors             addresses <- parse_addresses             (mlimit, mbr) <- parse_limits-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    mergeSourcesBy-                        (flip compare `on` blockTxBlock)-                        (map (\a -> getAddressTxs d a mbr) addresses) .|-                    dedup .|-                    apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        mergeSourcesBy+                            (flip compare `on` blockTxBlock)+                            (map (`getAddressTxs` mbr) addresses) .|+                        dedup .|+                        apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/address/:address/unspent" $ do             cors             address <- parse_address             (mlimit, mbr) <- parse_limits-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    getAddressUnspents d address mbr .| apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        getAddressUnspents address mbr .| apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/address/unspent" $ do             cors             addresses <- parse_addresses             (mlimit, mbr) <- parse_limits-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    mergeSourcesBy-                        (flip compare `on` unspentBlock)-                        (map (\a -> getAddressUnspents d a mbr) addresses) .|-                    apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        mergeSourcesBy+                            (flip compare `on` unspentBlock)+                            (map (`getAddressUnspents` mbr) addresses) .|+                        apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/address/:address/balance" $ do             cors             address <- parse_address-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                   getBalance d address >>= \case-                       Just b -> return b-                       Nothing ->-                           return-                               Balance-                                   { balanceAddress = address-                                   , balanceAmount = 0-                                   , balanceUnspentCount = 0-                                   , balanceZero = 0-                                   , balanceTxCount = 0-                                   , balanceTotalReceived = 0-                                   }+                withBlockDB defaultReadOptions db $+                getBalance address >>= \case+                    Just b -> return b+                    Nothing ->+                        return+                            Balance+                                { balanceAddress = address+                                , balanceAmount = 0+                                , balanceUnspentCount = 0+                                , balanceZero = 0+                                , balanceTxCount = 0+                                , balanceTotalReceived = 0+                                }             S.raw $ serialAny net proto res         S.get "/address/balances" $ do             cors             addresses <- parse_addresses-            proto <- setupProto+            proto <- setupBin             res <--                do let d = (db, defaultReadOptions)-                       f a Nothing =-                           Balance-                               { balanceAddress = a-                               , balanceAmount = 0-                               , balanceUnspentCount = 0-                               , balanceZero = 0-                               , balanceTxCount = 0-                               , balanceTotalReceived = 0-                               }-                       f _ (Just b) = b-                   mapM (\a -> f a <$> getBalance d a) addresses+                withBlockDB defaultReadOptions db $ do+                    let f a Nothing =+                            Balance+                                { balanceAddress = a+                                , balanceAmount = 0+                                , balanceUnspentCount = 0+                                , balanceZero = 0+                                , balanceTxCount = 0+                                , balanceTotalReceived = 0+                                }+                        f _ (Just b) = b+                    mapM (\a -> f a <$> getBalance a) addresses             S.raw $ serialAny net proto res         S.get "/xpub/:xpub/balances" $ do             cors             xpub <- parse_xpub-            proto <- setupProto-            res <--                do let d = (db, defaultReadOptions)-                   xpubBals d xpub+            proto <- setupBin+            res <- withBlockDB defaultReadOptions db $ xpubBals xpub             S.raw $ serialAny net proto res         S.get "/xpub/:xpub/transactions" $ do             cors             xpub <- parse_xpub             (mlimit, mbr) <- parse_limits-            proto <- setupProto-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    xpubTxs d mbr xpub .| dedup .| apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            proto <- setupBin+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        xpubTxs mbr xpub .| dedup .| apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.get "/xpub/:xpub/unspent" $ do             cors             xpub <- parse_xpub-            proto <- setupProto+            proto <- setupBin             (mlimit, mbr) <- parse_limits-            stream $ \io flush' -> do-                let d = (db, defaultReadOptions)-                runResourceT . runConduit $-                    xpubUnspent d mbr xpub .| apply_limit mlimit .|-                    streamAny net proto io-                liftIO flush'+            stream $ \io flush' ->+                runResourceT . withBlockDB defaultReadOptions db $ do+                    runConduit $+                        xpubUnspent mbr xpub .| apply_limit mlimit .|+                        streamAny net proto io+                    liftIO flush'         S.post "/transactions" $ do             cors-            proto <- setupProto+            proto <- setupBin             b <- body             let bin = eitherToMaybe . Serialize.decode                 hex = bin <=< decodeHex . cs . C.filter (not . isSpace)             tx <-                 case hex b <|> bin (L.toStrict b) of                     Nothing -> raise (UserError "decode tx fail")-                    Just x  -> return x+                    Just x -> return x             lift (publishTx pub st db tx) >>= \case                 Right () -> S.raw $ serialAny net proto (TxId (txHash tx))                 Left e -> do                     case e of-                        PubNoPeers          -> status status500-                        PubTimeout          -> status status500+                        PubNoPeers -> status status500+                        PubTimeout -> status status500                         PubPeerDisconnected -> status status500-                        PubNotFound         -> status status500-                        PubReject _         -> status status400+                        PubNotFound -> status status500+                        PubReject _ -> status status400                     S.raw $ serialAny net proto (UserError (show e))                     finish         S.get "/dbstats" $ do@@ -496,7 +495,7 @@             getProperty db Stats >>= text . cs . fromJust         S.get "/events" $ do             cors-            proto <- setupProto+            proto <- setupBin             stream $ \io flush' ->                 withSubscription pub $ \sub ->                     forever $@@ -519,19 +518,15 @@                                 io (lazyByteString bs)         S.get "/peers" $ do             cors-            proto <- setupProto+            proto <- setupBin             ps <- getPeersInformation (storeManager st)             S.raw $ serialAny net proto ps         S.get "/health" $ do             cors-            proto <- setupProto+            proto <- setupBin             h <--                liftIO $-                healthCheck-                    net-                    (db, defaultReadOptions)-                    (storeManager st)-                    (storeChain st)+                liftIO . withBlockDB defaultReadOptions db $+                healthCheck net (storeManager st) (storeChain st)             when (not (healthOK h) || not (healthSynced h)) $ status status503             S.raw $ serialAny net proto h         notFound $ raise ThingNotFound@@ -551,7 +546,7 @@             _ -> return ()         mbr <- Just <$> b <|> Just <$> m <|> return Nothing         return (mlimit, mbr)-    apply_limit Nothing  = mapC id+    apply_limit Nothing = mapC id     apply_limit (Just l) = takeC l     dedup =         let dd Nothing =@@ -573,7 +568,7 @@         address <- param "address"         case stringToAddr net address of             Nothing -> next-            Just a  -> return a+            Just a -> return a     parse_addresses = do         addresses <- param "addresses"         let as = mapMaybe (stringToAddr net) addresses@@ -583,7 +578,7 @@         t <- param "xpub"         case xPubImport net t of             Nothing -> next-            Just x  -> return x+            Just x -> return x     net = configNetwork conf     parse_no_tx = param "notx" `rescue` const (return False)     runner f l = do@@ -591,35 +586,38 @@         unliftIO u (runLoggingT l f)     cors = setHeader "Access-Control-Allow-Origin" "*" -serialAny :: (JsonSerial a, ProtoSerial a) => Network -> Bool -- ^ protobuf-          -> a -> L.ByteString-serialAny net True  = protoSerial net-serialAny net False = toLazyByteString . jsonSerial net+serialAny ::+       (JsonSerial a, BinSerial a)+    => Network+    -> Bool -- ^ binary+    -> a+    -> L.ByteString+serialAny net True  = runPutLazy . binSerial net+serialAny net False = encodingToLazyByteString . jsonSerial net  streamAny ::-       (JsonSerial i, ProtoSerial [i], MonadIO m)+       (JsonSerial i, BinSerial i, MonadIO m)     => Network     -> Bool -- ^ protobuf     -> (Builder -> IO ())     -> ConduitT i o m ()-streamAny net True io = protoConduit net .| mapC lazyByteString .| streamConduit io+streamAny net True io = binConduit net .| mapC lazyByteString .| streamConduit io streamAny net False io = jsonListConduit net .| streamConduit io  jsonListConduit :: (JsonSerial a, Monad m) => Network -> ConduitT a Builder m () jsonListConduit net =-    yield "[" >> mapC (jsonSerial net) .| intersperseC "," >> yield "]"+    yield "[" >> mapC (fromEncoding . jsonSerial net) .| intersperseC "," >> yield "]" -protoConduit ::-       (ProtoSerial [a], Monad m) => Network -> ConduitT a L.ByteString m ()-protoConduit net = mapC (protoSerial net . (: []))+binConduit :: (BinSerial i, Monad m) => Network -> ConduitT i L.ByteString m ()+binConduit net = mapC (runPutLazy . binSerial net)  streamConduit :: MonadIO m => (i -> IO ()) -> ConduitT i o m () streamConduit io = mapM_C (liftIO . io) -setupProto :: Monad m => ActionT Except m Bool-setupProto =+setupBin :: Monad m => ActionT Except m Bool+setupBin =     let p = do-            setHeader "Content-Type" "application/x-protobuf"+            setHeader "Content-Type" "application/octet-stream"             return True         j = do             setHeader "Content-Type" "application/json"@@ -627,18 +625,13 @@      in S.header "accept" >>= \case             Nothing -> j             Just x ->-                if is_proto x+                if is_binary x                     then p                     else j   where-    is_proto x =+    is_binary x =         let ts =                 map                     (T.takeWhile (/= ';'))                     (T.splitOn "," (T.filter (not . isSpace) x))-            ps =-                [ "application/x-protobuf"-                , "application/protobuf"-                , "application/vnd.google.protobuf"-                ]-         in any (`elem` ps) ts+         in elem "application/octet-stream" ts
haskoin-store.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: b700d8634d497c251ec017815799d98a980e0be0531db74b2ebfcbb733bd9b60+-- hash: 73e4ade5ce40c1a0dd2274fe3a2072c7dd75edd5c9ce325cd27f67b5966d7069  name:           haskoin-store-version:        0.13.1+version:        0.14.0 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@@ -32,45 +32,12 @@   other-modules:       Network.Haskoin.Store.Block       Network.Haskoin.Store.Data-      Network.Haskoin.Store.Data.HashMap       Network.Haskoin.Store.Data.ImportDB       Network.Haskoin.Store.Data.KeyValue       Network.Haskoin.Store.Data.RocksDB+      Network.Haskoin.Store.Data.STM       Network.Haskoin.Store.Logic       Network.Haskoin.Store.Messages-      Network.Haskoin.Store.Proto-      Network.Haskoin.Store.ProtocolBuffers-      Network.Haskoin.Store.ProtocolBuffers.Balance-      Network.Haskoin.Store.ProtocolBuffers.BalanceList-      Network.Haskoin.Store.ProtocolBuffers.BlockData-      Network.Haskoin.Store.ProtocolBuffers.BlockDataList-      Network.Haskoin.Store.ProtocolBuffers.BlockRef-      Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block-      Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block_ref-      Network.Haskoin.Store.ProtocolBuffers.BlockRef.Mempool-      Network.Haskoin.Store.ProtocolBuffers.BlockTx-      Network.Haskoin.Store.ProtocolBuffers.BlockTxList-      Network.Haskoin.Store.ProtocolBuffers.Error-      Network.Haskoin.Store.ProtocolBuffers.Event-      Network.Haskoin.Store.ProtocolBuffers.Event.Type-      Network.Haskoin.Store.ProtocolBuffers.EventList-      Network.Haskoin.Store.ProtocolBuffers.HealthCheck-      Network.Haskoin.Store.ProtocolBuffers.Input-      Network.Haskoin.Store.ProtocolBuffers.Output-      Network.Haskoin.Store.ProtocolBuffers.Peer-      Network.Haskoin.Store.ProtocolBuffers.PeerList-      Network.Haskoin.Store.ProtocolBuffers.Spender-      Network.Haskoin.Store.ProtocolBuffers.Transaction-      Network.Haskoin.Store.ProtocolBuffers.TransactionList-      Network.Haskoin.Store.ProtocolBuffers.TxAfterHeight-      Network.Haskoin.Store.ProtocolBuffers.TxId-      Network.Haskoin.Store.ProtocolBuffers.TxIdList-      Network.Haskoin.Store.ProtocolBuffers.Unspent-      Network.Haskoin.Store.ProtocolBuffers.UnspentList-      Network.Haskoin.Store.ProtocolBuffers.XPubBalance-      Network.Haskoin.Store.ProtocolBuffers.XPubBalanceList-      Network.Haskoin.Store.ProtocolBuffers.XPubUnspent-      Network.Haskoin.Store.ProtocolBuffers.XPubUnspentList       Paths_haskoin_store   hs-source-dirs:       src
src/Haskoin/Store.hs view
@@ -28,7 +28,7 @@     , Event(..)     , TxAfterHeight(..)     , JsonSerial(..)-    , ProtoSerial(..)+    , BinSerial(..)     , Except(..)     , TxId(..)     , withStore@@ -54,45 +54,34 @@     , transactionData     , isCoinbase     , confirmed-    , blockDataToJSON-    , blockDataToEncoding-    , transactionToJSON-    , transactionToEncoding-    , outputToJSON-    , outputToEncoding-    , inputToJSON-    , inputToEncoding-    , unspentToJSON-    , unspentToEncoding-    , balanceToJSON-    , balanceToEncoding-    , xPubBalToJSON-    , xPubBalToEncoding-    , xPubUnspentToJSON-    , xPubUnspentToEncoding     , cbAfterHeight     , healthCheck     , mergeSourcesBy+    , withBlockDB+    , withBlockSTM+    , withBalanceSTM+    , withUnspentSTM     ) where  import           Conduit import           Control.Monad-import qualified Control.Monad.Except           as E+import qualified Control.Monad.Except                as E import           Control.Monad.Logger import           Control.Monad.Trans.Maybe import           Data.Foldable import           Data.Function import           Data.List import           Data.Maybe-import           Data.Serialize                 (decode)-import           Database.RocksDB               as R+import           Data.Serialize                      (decode)+import           Database.RocksDB                    as R import           Haskoin import           Haskoin.Node import           Network.Haskoin.Store.Block import           Network.Haskoin.Store.Data+import           Network.Haskoin.Store.Data.RocksDB+import           Network.Haskoin.Store.Data.STM import           Network.Haskoin.Store.Messages-import           Network.Haskoin.Store.Proto-import           Network.Socket                 (SockAddr (..))+import           Network.Socket                      (SockAddr (..)) import           NQE import           System.Random import           UnliftIO@@ -227,18 +216,17 @@ storeDispatch _ _ (PeerEvent _) = return ()  healthCheck ::-       (MonadUnliftIO m, StoreRead r m)+       (MonadUnliftIO m, StoreRead m)     => Network-    -> r     -> Manager     -> Chain     -> m HealthCheck-healthCheck net i mgr ch = do+healthCheck net mgr ch = do     n <- timeout (5 * 1000 * 1000) $ chainGetBest ch     b <-         runMaybeT $ do-            h <- MaybeT $ getBestBlock i-            MaybeT $ getBlock i h+            h <- MaybeT getBestBlock+            MaybeT $ getBlock h     p <- timeout (5 * 1000 * 1000) $ managerGetPeers mgr     let k = isNothing n || isNothing b || maybe False (not . null) p         s =@@ -267,9 +255,9 @@     -> Tx     -> m (Either PubExcept ()) publishTx pub st db tx =-    withSubscription pub $ \s -> do-        let d = (db, defaultReadOptions)-        getTransaction d (txHash tx) >>= \case+    withSubscription pub $ \s ->+        withBlockDB defaultReadOptions db $+        getTransaction (txHash tx) >>= \case             Just _ -> return $ Right ()             Nothing ->                 E.runExceptT $@@ -317,17 +305,16 @@                 , peerRelay = rl                 } -xpubBals :: (Monad m, BalanceRead i m) => i -> XPubKey -> m [XPubBal]-xpubBals i xpub = (<>) <$> go 0 0 <*> go 1 0+xpubBals :: (Monad m, BalanceRead m) => XPubKey -> m [XPubBal]+xpubBals xpub = (<>) <$> go 0 0 <*> go 1 0   where-    g = getBalance i     go m n = do         xs <- catMaybes <$> mapM (uncurry b) (as m n)         case xs of             [] -> return []             _  -> (xs <>) <$> go m (n + 20)     b a p =-        g a >>= \case+        getBalance a >>= \case             Nothing -> return Nothing             Just b' -> return $ Just XPubBal {xPubBalPath = p, xPubBal = b'}     as m n =@@ -336,29 +323,27 @@             (take 20 (deriveAddrs (pubSubKey xpub m) n))  xpubTxs ::-       (Monad m, BalanceRead i m, StoreStream i m)-    => i-    -> Maybe BlockRef+       (Monad m, BalanceRead m, StoreStream m)+    => Maybe BlockRef     -> XPubKey     -> ConduitT () BlockTx m ()-xpubTxs i mbr xpub = do-    bals <- lift $ xpubBals i xpub+xpubTxs mbr xpub = do+    bals <- lift $ xpubBals xpub     xs <-         forM bals $ \XPubBal {xPubBal = b} ->-            return $ getAddressTxs i (balanceAddress b) mbr+            return $ getAddressTxs (balanceAddress b) mbr     mergeSourcesBy (flip compare `on` blockTxBlock) xs  xpubUnspent ::-       (Monad m, StoreStream i m, BalanceRead i m, StoreRead i m)-    => i-    -> Maybe BlockRef+       (Monad m, StoreStream m, BalanceRead m, StoreRead m)+    => Maybe BlockRef     -> XPubKey     -> ConduitT () XPubUnspent m ()-xpubUnspent i mbr xpub = do-    bals <- lift $ xpubBals i xpub+xpubUnspent mbr xpub = do+    bals <- lift $ xpubBals xpub     xs <-         forM bals $ \XPubBal {xPubBalPath = p, xPubBal = b} ->-            return $ getAddressUnspents i (balanceAddress b) mbr .| mapC (f p)+            return $ getAddressUnspents (balanceAddress b) mbr .| mapC (f p)     mergeSourcesBy (flip compare `on` (unspentBlock . xPubUnspent)) xs   where     f p t = XPubUnspent {xPubUnspentPath = p, xPubUnspent = t}@@ -367,13 +352,12 @@ -- specified height. Returns 'Nothing' if answer cannot be computed before -- hitting limits. cbAfterHeight ::-       (Monad m, StoreRead i m)-    => i-    -> Int -- ^ how many ancestors to test before giving up+       (Monad m, StoreRead m)+    => Int -- ^ how many ancestors to test before giving up     -> BlockHeight     -> TxHash     -> m TxAfterHeight-cbAfterHeight i d h t+cbAfterHeight d h t     | d <= 0 = return $ TxAfterHeight Nothing     | otherwise = TxAfterHeight <$> runMaybeT (snd <$> tst d t)   where@@ -381,7 +365,7 @@         | e <= 0 = MaybeT $ return Nothing         | otherwise = do             let e' = e - 1-            tx <- MaybeT $ getTransaction i x+            tx <- MaybeT $ getTransaction x             if any isCoinbase (transactionInputs tx)                 then return (e', blockRefHeight (transactionBlock tx) > h)                 else case transactionBlock tx of
src/Network/Haskoin/Store/Block.hs view
@@ -9,6 +9,7 @@       ( blockStore       ) where +import           Control.Arrow import           Control.Monad.Except import           Control.Monad.Logger import           Control.Monad.Reader@@ -16,13 +17,15 @@ import qualified Data.HashMap.Strict                 as M import           Data.Maybe import           Data.String+import           Data.String.Conversions import           Data.Time.Clock.System import           Database.RocksDB import           Haskoin import           Haskoin.Node import           Network.Haskoin.Store.Data-import           Network.Haskoin.Store.Data.HashMap import           Network.Haskoin.Store.Data.ImportDB+import           Network.Haskoin.Store.Data.RocksDB+import           Network.Haskoin.Store.Data.STM import           Network.Haskoin.Store.Logic import           Network.Haskoin.Store.Messages import           NQE@@ -76,10 +79,8 @@             }   where     ini = do-        db <- blockConfDB <$> asks myConfig-        net <- blockConfNet <$> asks myConfig-        um <- asks myUnspent-        bm <- asks myBalances+        (db, net) <- (blockConfDB &&& blockConfNet) <$> asks myConfig+        (um, bm) <- asks (myUnspent &&& myBalances)         runExceptT (initDB net db um bm) >>= \case             Left e -> do                 $(logErrorS) "Block" $@@ -87,51 +88,54 @@                 throwIO e             Right () -> $(logInfoS) "Block" "Initialization complete"     run =-        withAsync (pingMe (inboxToMailbox inbox)) $ \_ ->-            forever $ receive inbox >>= processBlockMessage+        withAsync (pingMe (inboxToMailbox inbox)) . const . forever $ do+            $(logDebugS) "Block" "Awaiting message..."+            receive inbox >>= processBlockMessage -isSynced :: (MonadReader BlockRead m, MonadUnliftIO m) => m Bool+isSynced :: (MonadUnliftIO m) => ReaderT BlockRead m Bool isSynced = do-    db <- blockConfDB <$> asks myConfig-    getBestBlock (db, defaultReadOptions) >>= \case-        Nothing -> throwIO Uninitialized-        Just bb -> do-            ch <- blockConfChain <$> asks myConfig-            chainGetBest ch >>= \cb -> return (headerHash (nodeHeader cb) == bb)+    (db, ch) <- (blockConfDB &&& blockConfChain) <$> asks myConfig+    withBlockDB defaultReadOptions db $+        getBestBlock >>= \case+            Nothing -> throwIO Uninitialized+            Just bb ->+                chainGetBest ch >>= \cb ->+                    return (headerHash (nodeHeader cb) == bb)  mempool ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m) => Peer -> m ()+       (MonadUnliftIO m, MonadLoggerIO m) => Peer -> ReaderT BlockRead m () mempool p = MMempool `sendMessage` p -pruneCache :: (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m) => m ()+pruneCache :: (MonadUnliftIO m, MonadLoggerIO m) => ReaderT BlockRead m () pruneCache = do     um <- asks myUnspent     bm <- asks myBalances-    u <- readTVarIO um-    b <- readTVarIO bm-    $(logDebugS) "Block" $-        "Unspent output cache pre-prune tx count: " <>-        fromString (show (M.size u))-    $(logDebugS) "Block" $-        "Address cache pre-prune count: " <> fromString (show (M.size (fst b)))-    pruneUnspent um-    pruneBalance bm-    u' <- readTVarIO um-    b' <- readTVarIO bm-    $(logDebugS) "Block" $-        "Unspent output cache post-prune tx count: " <>-        fromString (show (M.size u'))-    $(logDebugS) "Block" $-        "Address cache post-prune count: " <>-        fromString (show (M.size (fst b')))+    do u <- readTVarIO um+       b <- readTVarIO bm+       $(logDebugS) "Block" $+           "Unspent output cache pre-prune tx count: " <>+           fromString (show (M.size u))+       $(logDebugS) "Block" $+           "Address cache pre-prune count: " <>+           fromString (show (M.size (fst b)))+    atomically $+        withUnspentSTM um pruneUnspent >> withBalanceSTM bm pruneBalance+    do u <- readTVarIO um+       b <- readTVarIO bm+       $(logDebugS) "Block" $+           "Unspent output cache post-prune tx count: " <>+           fromString (show (M.size u))+       $(logDebugS) "Block" $+           "Address cache post-prune count: " <>+           fromString (show (M.size (fst b)))  processBlock ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => Peer     -> Block-    -> m ()+    -> ReaderT BlockRead m () processBlock p b = do-    $(logDebugS) "Block" ("Processing incoming block " <> hex)+    $(logDebugS) "Block" ("Processing incoming block: " <> hex)     void . runMaybeT $ do         iss >>= \x ->             unless x $ do@@ -162,16 +166,16 @@   where     hex = blockHashToHex (headerHash (blockHeader b))     upr =-        asks myPeer >>= \box ->-            readTVarIO box >>= \case-                Nothing -> throwIO SyncingPeerExpected-                Just s@Syncing {syncingHead = h} ->-                    if nodeHeader h == blockHeader b-                        then resetPeer-                        else do-                            now <- systemSeconds <$> liftIO getSystemTime-                            atomically . writeTVar box $-                                Just s {syncingTime = now}+        asks myPeer >>= readTVarIO >>= \case+            Nothing -> throwIO SyncingPeerExpected+            Just s@Syncing {syncingHead = h} ->+                if nodeHeader h == blockHeader b+                    then resetPeer+                    else do+                        now <- systemSeconds <$> liftIO getSystemTime+                        asks myPeer >>=+                            atomically .+                            (`writeTVar` Just s {syncingTime = now})     iss =         asks myPeer >>= readTVarIO >>= \case             Just Syncing {syncingPeer = p'} -> return $ p == p'@@ -188,46 +192,56 @@             Just n -> return n  processNoBlocks ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => Peer     -> [BlockHash]-    -> m ()+    -> ReaderT BlockRead m () processNoBlocks p _bs = do-    $(logErrorS) "Block" "Killing peer that could not find blocks"-    killPeer (PeerMisbehaving "Sent notfound message with block hashes") p+    $(logErrorS) "Block" "We do not like peers that cannot find them blocks"+    killPeer+        (PeerMisbehaving "We do not like peers that cannot find them blocks")+        p  processTx ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => Peer     -> Tx-    -> m ()+    -> ReaderT BlockRead m () processTx _p tx =-    isSynced >>= \x ->-        when x $ do+    isSynced >>= \case+        False ->+            $(logDebugS) "Block" $+            "Ignoring incoming tx (not synced yet): " <> txHashToHex (txHash tx)+        True -> do             $(logInfoS) "Block" $ "Incoming tx: " <> txHashToHex (txHash tx)             now <- preciseUnixTime <$> liftIO getSystemTime-            net <- blockConfNet <$> asks myConfig-            db <- blockConfDB <$> asks myConfig+            (net, db) <- (blockConfNet &&& blockConfDB) <$> asks myConfig             um <- asks myUnspent             bm <- asks myBalances-            runExceptT (runImportDB db um bm $ \i -> newMempoolTx net i tx now) >>= \case+            runExceptT (runImportDB db um bm $ newMempoolTx net tx now) >>= \case                 Left e ->                     $(logErrorS) "Block" $                     "Error importing tx: " <> txHashToHex (txHash tx) <> ": " <>                     fromString (show e)                 Right True -> do                     l <- blockConfListener <$> asks myConfig+                    $(logDebugS) "Block" $+                        "Received mempool tx: " <> txHashToHex (txHash tx)                     atomically $ l (StoreMempoolNew (txHash tx))-                Right False -> return ()+                Right False ->+                    $(logDebugS) "Block" $+                    "Received invalid mempool tx: " <> txHashToHex (txHash tx)  processTxs ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => Peer     -> [TxHash]-    -> m ()+    -> ReaderT BlockRead m () processTxs p hs =-    isSynced >>= \x ->-        when x $ do+    isSynced >>= \case+        False ->+            $(logDebugS) "Block" "Ignoring incoming tx inv (not synced yet)"+        True -> do             db <- blockConfDB <$> asks myConfig             $(logDebugS) "Block" $                 "Received " <> fromString (show (length hs)) <>@@ -235,7 +249,7 @@             xs <-                 fmap catMaybes . forM hs $ \h ->                     runMaybeT $ do-                        t <- getTxData (db, defaultReadOptions) h+                        t <- withBlockDB defaultReadOptions db $ getTxData h                         guard (isNothing t)                         return (getTxHash h)             unless (null xs) $ do@@ -249,35 +263,38 @@                             else InvTx                 MGetData (GetData (map (InvVector inv) xs)) `sendMessage` p -checkTime :: (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m) => m ()+checkTime :: (MonadUnliftIO m, MonadLoggerIO m) => ReaderT BlockRead m () checkTime =     asks myPeer >>= readTVarIO >>= \case-        Nothing -> return ()+        Nothing -> $(logDebugS) "Block" "Peer timeout check: no syncing peer"         Just Syncing {syncingTime = t, syncingPeer = p} -> do             n <- systemSeconds <$> liftIO getSystemTime-            when (n > t + 60) $ do-                $(logErrorS) "Block" "Peer timeout"-                killPeer PeerTimeout p+            if n > t + 60+                then do+                    $(logErrorS) "Block" "Peer timeout"+                    killPeer PeerTimeout p+                else $(logDebugS) "Block" "Peer timeout not reached"  processDisconnect ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => Peer-    -> m ()+    -> ReaderT BlockRead m () processDisconnect p =     asks myPeer >>= readTVarIO >>= \case-        Nothing -> return ()+        Nothing ->+            $(logDebugS) "Block" "Ignoring peer disconnection notification"         Just Syncing {syncingPeer = p'}             | p == p' -> do                 $(logErrorS) "Block" "Syncing peer disconnected"                 resetPeer                 syncMe-            | otherwise -> return ()+            | otherwise -> $(logDebugS) "Block" "Non-syncing peer disconnected"  purgeMempool ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m) => m ()+       (MonadUnliftIO m, MonadLoggerIO m) => ReaderT BlockRead m () purgeMempool = $(logErrorS) "Block" "Mempool purging not implemented" -syncMe :: (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m) => m ()+syncMe :: (MonadUnliftIO m, MonadLoggerIO m) => ReaderT BlockRead m () syncMe =     void . runMaybeT $ do         rev@@ -289,10 +306,15 @@                         "Not syncing blocks as no peers available"                     mzero                 Just p -> return p+        $(logDebugS) "Block" "Syncing blocks against network peer"         b <- mbn         d <- dbn         c <- cbn-        when (end b d c) mzero+        when (end b d c) $ do+            $(logDebugS) "Block" $+                "Already requested up to block height: " <>+                cs (show (nodeHeight b))+            mzero         ns <- bls c b         setPeer p (last ns)         net <- blockConfNet <$> asks myConfig@@ -316,7 +338,7 @@     dbn = do         db <- blockConfDB <$> asks myConfig         bb <--            getBestBlock (db, defaultReadOptions) >>= \case+            withBlockDB defaultReadOptions db getBestBlock >>= \case                 Nothing -> do                     $(logErrorS) "Block" "Best block not in database"                     throwIO Uninitialized@@ -377,7 +399,7 @@                 um <- asks myUnspent                 bm <- asks myBalances                 net <- blockConfNet <$> asks myConfig-                runExceptT (runImportDB db um bm $ \i -> revertBlock net i d) >>= \case+                runExceptT (runImportDB db um bm $ revertBlock net d) >>= \case                     Left e -> do                         $(logErrorS) "Block" $                             "Could not revert best block: " <>@@ -385,13 +407,13 @@                         throwIO e                     Right () -> rev -resetPeer :: (MonadReader BlockRead m, MonadLoggerIO m) => m ()+resetPeer :: (MonadLoggerIO m, MonadReader BlockRead m) => m () resetPeer = do     $(logDebugS) "Block" "Resetting syncing peer..."     box <- asks myPeer     atomically $ writeTVar box Nothing -setPeer :: (MonadReader BlockRead m, MonadIO m) => Peer -> BlockNode -> m ()+setPeer :: (MonadIO m, MonadReader BlockRead m) => Peer -> BlockNode -> m () setPeer p b = do     box <- asks myPeer     now <- systemSeconds <$> liftIO getSystemTime@@ -399,9 +421,9 @@         Just Syncing {syncingPeer = p, syncingHead = b, syncingTime = now}  processBlockMessage ::-       (MonadReader BlockRead m, MonadUnliftIO m, MonadLoggerIO m)+       (MonadUnliftIO m, MonadLoggerIO m)     => BlockMessage-    -> m ()+    -> ReaderT BlockRead m () processBlockMessage (BlockNewBest bn) = do     $(logDebugS) "Block" $         "New best block header " <> fromString (show (nodeHeight bn)) <> ": " <>@@ -418,7 +440,8 @@ processBlockMessage BlockPing = checkTime processBlockMessage PurgeMempool = purgeMempool -pingMe :: MonadIO m => Mailbox BlockMessage -> m ()+pingMe :: MonadLoggerIO m => Mailbox BlockMessage -> m () pingMe mbox = forever $ do     threadDelay =<< liftIO (randomRIO (5 * 1000 * 1000, 10 * 1000 * 1000))+    $(logDebugS) "Block" "Pinging block"     BlockPing `send` mbox
src/Network/Haskoin/Store/Data.hs view
@@ -10,9 +10,9 @@ import           Control.Monad import           Control.Monad.Trans.Maybe import           Data.Aeson                as A+import qualified Data.Aeson.Encoding       as A import           Data.ByteString           (ByteString) import qualified Data.ByteString           as B-import           Data.ByteString.Builder import           Data.ByteString.Short     (ShortByteString) import qualified Data.ByteString.Short     as B.Short import           Data.Hashable@@ -22,11 +22,13 @@ import           Data.Maybe import           Data.Serialize            as S import           Data.String.Conversions-import qualified Data.Text.Lazy                 as T+import qualified Data.Text                 as T+import qualified Data.Text.Encoding        as T+import qualified Data.Text.Lazy            as T.Lazy import           Data.Time.Clock.System import           Data.Word import           GHC.Generics-import           Haskoin+import           Haskoin                   as H import           Network.Socket            (SockAddr) import           Paths_haskoin_store       as P import           UnliftIO.Exception@@ -37,63 +39,57 @@ newtype InitException = IncorrectVersion Word32     deriving (Show, Read, Eq, Ord, Exception) -class Applicative m => UnspentWrite u m where-    addUnspent :: u -> Unspent -> m ()-    delUnspent :: u -> OutPoint -> m ()-    pruneUnspent :: u -> m ()-    pruneUnspent _ = pure ()+class UnspentWrite m where+    addUnspent :: Unspent -> m ()+    delUnspent :: OutPoint -> m ()+    pruneUnspent :: m () -class UnspentRead u m where-    getUnspent :: u -> OutPoint -> m (Maybe Unspent)+class UnspentRead m where+    getUnspent :: OutPoint -> m (Maybe Unspent) -class Applicative m => BalanceWrite b m where-    setBalance :: b -> Balance -> m ()-    pruneBalance :: b -> m ()-    pruneBalance _ = pure ()+class BalanceWrite m where+    setBalance :: Balance -> m ()+    pruneBalance :: m () -class BalanceRead b m where-    getBalance :: b -> Address -> m (Maybe Balance)+class BalanceRead m where+    getBalance :: Address -> m (Maybe Balance) -class StoreRead r m where-    isInitialized :: r -> m (Either InitException Bool)-    getBestBlock :: r -> m (Maybe BlockHash)-    getBlocksAtHeight :: r -> BlockHeight -> m [BlockHash]-    getBlock :: r -> BlockHash -> m (Maybe BlockData)-    getTxData :: r -> TxHash -> m (Maybe TxData)-    getSpenders :: r -> TxHash -> m (IntMap Spender)-    getSpender :: r -> OutPoint -> m (Maybe Spender)+class StoreRead m where+    isInitialized :: m (Either InitException Bool)+    getBestBlock :: m (Maybe BlockHash)+    getBlocksAtHeight :: BlockHeight -> m [BlockHash]+    getBlock :: BlockHash -> m (Maybe BlockData)+    getTxData :: TxHash -> m (Maybe TxData)+    getSpenders :: TxHash -> m (IntMap Spender)+    getSpender :: OutPoint -> m (Maybe Spender)  getTransaction ::-       (Monad m, StoreRead r m) => r -> TxHash -> m (Maybe Transaction)-getTransaction r h = runMaybeT $ do-    d <- MaybeT $ getTxData r h-    sm <- lift $ getSpenders r h+       (Monad m, StoreRead m) => TxHash -> m (Maybe Transaction)+getTransaction h = runMaybeT $ do+    d <- MaybeT $ getTxData h+    sm <- lift $ getSpenders h     return $ toTransaction d sm -class StoreStream r m where+class StoreStream m where     getMempool ::-           r-        -> Maybe PreciseUnixTime-        -> ConduitT () (PreciseUnixTime, TxHash) m ()-    getAddressUnspents ::-           r -> Address -> Maybe BlockRef -> ConduitT () Unspent m ()-    getAddressTxs ::-           r -> Address -> Maybe BlockRef -> ConduitT () BlockTx m ()+           Maybe PreciseUnixTime -> ConduitT () (PreciseUnixTime, TxHash) m ()+    getAddressUnspents :: Address -> Maybe BlockRef -> ConduitT () Unspent m ()+    getAddressTxs :: Address -> Maybe BlockRef -> ConduitT () BlockTx m () -class StoreWrite w m where-    setInit :: w -> m ()-    setBest :: w -> BlockHash -> m ()-    insertBlock :: w -> BlockData -> m ()-    insertAtHeight :: w -> BlockHash -> BlockHeight -> m ()-    insertTx :: w -> TxData -> m ()-    insertSpender :: w -> OutPoint -> Spender -> m ()-    deleteSpender :: w -> OutPoint -> m ()-    insertAddrTx :: w -> Address -> BlockTx -> m ()-    removeAddrTx :: w -> Address -> BlockTx -> m ()-    insertAddrUnspent :: w -> Address -> Unspent -> m ()-    removeAddrUnspent :: w -> Address -> Unspent -> m ()-    insertMempoolTx :: w -> TxHash -> PreciseUnixTime -> m ()-    deleteMempoolTx :: w -> TxHash -> PreciseUnixTime -> m ()+class StoreWrite m where+    setInit :: m ()+    setBest :: BlockHash -> m ()+    insertBlock :: BlockData -> m ()+    insertAtHeight :: BlockHash -> BlockHeight -> m ()+    insertTx :: TxData -> m ()+    insertSpender :: OutPoint -> Spender -> m ()+    deleteSpender :: OutPoint -> m ()+    insertAddrTx :: Address -> BlockTx -> m ()+    removeAddrTx :: Address -> BlockTx -> m ()+    insertAddrUnspent :: Address -> Unspent -> m ()+    removeAddrUnspent :: Address -> Unspent -> m ()+    insertMempoolTx :: TxHash -> PreciseUnixTime -> m ()+    deleteMempoolTx :: TxHash -> PreciseUnixTime -> m ()  -- | Unix time with nanosecond precision for mempool transactions. newtype PreciseUnixTime = PreciseUnixTime Word64@@ -115,13 +111,26 @@     toEncoding (PreciseUnixTime w) = toEncoding w  class JsonSerial a where-    jsonSerial :: Network -> a -> Builder+    jsonSerial :: Network -> a -> Encoding     jsonValue :: Network -> a -> Value +instance JsonSerial a => JsonSerial [a] where+    jsonSerial net = A.list (jsonSerial net)+    jsonValue net = toJSON . map (jsonValue net)+ instance JsonSerial TxHash where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial TxHash where+    binSerial _ = put++class BinSerial a where+    binSerial :: Network -> Putter a++instance BinSerial a => BinSerial [a] where+    binSerial net = putListOf (binSerial net)+ -- | Reference to a block where a transaction is stored. data BlockRef     = BlockRef { blockRefHeight :: !BlockHeight@@ -145,14 +154,22 @@       where         getmemref = do             guard . (== 0x00) =<< getWord8-            w <- (maxBound -) <$> getWord64be-            return MemRef {memRefTime = PreciseUnixTime w}+            MemRef . PreciseUnixTime <$> get         getblockref = do             guard . (== 0x01) =<< getWord8             h <- (maxBound -) <$> getWord32be             p <- (maxBound -) <$> getWord32be             return BlockRef {blockRefHeight = h, blockRefPos = p} +instance BinSerial BlockRef where+    binSerial _ BlockRef {blockRefHeight = h, blockRefPos = p} = do+        putWord8 0x00+        putWord32be h+        putWord32be p+    binSerial _ MemRef {memRefTime = PreciseUnixTime t} = do+        putWord8 0x01+        putWord64be t+ -- | JSON serialization for 'BlockRef'. blockRefPairs :: A.KeyValue kv => BlockRef -> [kv] blockRefPairs BlockRef {blockRefHeight = h, blockRefPos = p} =@@ -187,9 +204,14 @@     toEncoding = pairs . mconcat . blockTxPairs  instance JsonSerial BlockTx where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial BlockTx where+    binSerial net BlockTx { blockTxBlock = b, blockTxHash = h }= do+        binSerial net b+        put h+ -- | Address balance information. data Balance = Balance     { balanceAddress       :: !Address@@ -224,12 +246,23 @@ balanceToEncoding net = pairs . mconcat . balancePairs net  instance JsonSerial Balance where-    jsonSerial net = fromEncoding . balanceToEncoding net+    jsonSerial = balanceToEncoding     jsonValue = balanceToJSON -instance JsonSerial [Balance] where-    jsonSerial net = fromEncoding . toEncoding . map (balanceToJSON net)-    jsonValue net = toJSON . map (balanceToJSON net)+instance BinSerial Balance where+    binSerial net Balance { balanceAddress = a+                          , balanceAmount = v+                          , balanceZero = z+                          , balanceUnspentCount = u+                          , balanceTxCount = c+                          , balanceTotalReceived = t+                          } = do+        put $ T.encodeUtf8 <$> (addrToString net a)+        putWord64be v+        putWord64be z+        putWord64be u+        putWord64be c+        putWord64be t  -- | Unspent output. data Unspent = Unspent@@ -273,9 +306,20 @@ unspentToEncoding net = pairs . mconcat . unspentPairs net  instance JsonSerial Unspent where-    jsonSerial net = fromEncoding . unspentToEncoding net+    jsonSerial = unspentToEncoding     jsonValue = unspentToJSON +instance BinSerial Unspent where+    binSerial net Unspent { unspentBlock = b+                          , unspentPoint = p+                          , unspentAmount = v+                          , unspentScript = s+                          } = do+        binSerial net b+        put p+        putWord64be v+        put s+ -- | Database value for a block entry. data BlockData = BlockData     { blockDataHeight    :: !BlockHeight@@ -326,55 +370,71 @@ blockDataToEncoding net = pairs . mconcat . blockDataPairs net  instance JsonSerial BlockData where-    jsonSerial net = fromEncoding . blockDataToEncoding net+    jsonSerial = blockDataToEncoding     jsonValue = blockDataToJSON -instance JsonSerial [BlockData] where-    jsonSerial net = fromEncoding . toEncoding . map (blockDataToJSON net)-    jsonValue net = toJSON . map (blockDataToJSON net)+instance BinSerial BlockData where+    binSerial _ BlockData { blockDataHeight = e+                          , blockDataMainChain = m+                          , blockDataHeader = h+                          , blockDataSize = z+                          , blockDataWeight = g+                          , blockDataTxs = t+                          , blockDataOutputs = o+                          , blockDataFees = f+                          , blockDataSubsidy = y+                          } = do+        put m+        putWord32be e+        put h+        putWord32be z+        putWord32be g+        putWord64be o+        putWord64be f+        putWord64be y+        put t + -- | Input information.-data Input-    = Coinbase { inputPoint     :: !OutPoint+data StoreInput+    = StoreCoinbase { inputPoint     :: !OutPoint                  -- ^ output being spent (should be null)-               , inputSequence  :: !Word32+                    , inputSequence  :: !Word32                  -- ^ sequence-               , inputSigScript :: !ByteString+                    , inputSigScript :: !ByteString                  -- ^ input script data (not valid script)-               , inputWitness   :: !(Maybe WitnessStack)+                    , inputWitness   :: !(Maybe WitnessStack)                  -- ^ witness data for this input (only segwit)-                }+                     }     -- ^ coinbase details-    | Input { inputPoint     :: !OutPoint+    | StoreInput { inputPoint     :: !OutPoint               -- ^ output being spent-            , inputSequence  :: !Word32+                 , inputSequence  :: !Word32               -- ^ sequence-            , inputSigScript :: !ByteString+                 , inputSigScript :: !ByteString               -- ^ signature (input) script-            , inputPkScript  :: !ByteString+                 , inputPkScript  :: !ByteString               -- ^ pubkey (output) script from previous tx-            , inputAmount    :: !Word64+                 , inputAmount    :: !Word64               -- ^ amount in satoshi being spent spent-            , inputWitness   :: !(Maybe WitnessStack)+                 , inputWitness   :: !(Maybe WitnessStack)               -- ^ witness data for this input (only segwit)-             }+                  }     -- ^ input details     deriving (Show, Read, Eq, Ord, Generic, Serialize, Hashable) --- | Is 'Input' a Coinbase?-isCoinbase :: Input -> Bool-isCoinbase Coinbase {} = True-isCoinbase Input {}    = False+isCoinbase :: StoreInput -> Bool+isCoinbase StoreCoinbase {} = True+isCoinbase StoreInput {}    = False --- | JSON serialization for 'Input'.-inputPairs :: A.KeyValue kv => Network -> Input -> [kv]-inputPairs net Input { inputPoint = OutPoint oph opi-                     , inputSequence = sq-                     , inputSigScript = ss-                     , inputPkScript = ps-                     , inputAmount = val-                     , inputWitness = wit-                     } =+inputPairs :: A.KeyValue kv => Network -> StoreInput -> [kv]+inputPairs net StoreInput { inputPoint = OutPoint oph opi+                          , inputSequence = sq+                          , inputSigScript = ss+                          , inputPkScript = ps+                          , inputAmount = val+                          , inputWitness = wit+                          } =     [ "coinbase" .= False     , "txid" .= oph     , "output" .= opi@@ -386,11 +446,11 @@     ] ++     ["witness" .= fmap (map encodeHex) wit | getSegWit net] -inputPairs net Coinbase { inputPoint = OutPoint oph opi-                        , inputSequence = sq-                        , inputSigScript = ss-                        , inputWitness = wit-                        } =+inputPairs net StoreCoinbase { inputPoint = OutPoint oph opi+                             , inputSequence = sq+                             , inputSigScript = ss+                             , inputWitness = wit+                             } =     [ "coinbase" .= True     , "txid" .= oph     , "output" .= opi@@ -402,12 +462,37 @@     ] ++     ["witness" .= fmap (map encodeHex) wit | getSegWit net] -inputToJSON :: Network -> Input -> Value+inputToJSON :: Network -> StoreInput -> Value inputToJSON net = object . inputPairs net -inputToEncoding :: Network -> Input -> Encoding+inputToEncoding :: Network -> StoreInput -> Encoding inputToEncoding net = pairs . mconcat . inputPairs net +instance BinSerial StoreInput where+    binSerial net i = do+        put $+            case i of+                StoreCoinbase {} -> True+                StoreInput {}    -> False+        put $ inputPoint i+        putWord32be $ inputSequence i+        put $ inputSigScript i+        put $ inputWitness i+        put $+            case i of+                StoreCoinbase {} -> Nothing+                StoreInput {inputPkScript = s} ->+                    fmap T.encodeUtf8 <$> addrToString net =<<+                    eitherToMaybe (scriptToAddressBS s)+        putWord64be $+            case i of+                StoreCoinbase {}             -> 0+                StoreInput {inputAmount = v} -> v+        put $+            case i of+                StoreCoinbase {}               -> B.empty+                StoreInput {inputPkScript = s} -> s+ -- | Information about input spending output. data Spender = Spender     { spenderHash  :: !TxHash@@ -426,7 +511,7 @@     toEncoding = pairs . mconcat . spenderPairs  -- | Output information.-data Output = Output+data StoreOutput = StoreOutput     { outputAmount  :: !Word64       -- ^ amount in satoshi     , outputScript  :: !ByteString@@ -435,8 +520,7 @@       -- ^ input spending this transaction     } deriving (Show, Read, Eq, Ord, Generic, Serialize, Hashable) --- | JSON serialization for 'Output'.-outputPairs :: A.KeyValue kv => Network -> Output -> [kv]+outputPairs :: A.KeyValue kv => Network -> StoreOutput -> [kv] outputPairs net d =     [ "address" .=       eitherToMaybe (addrToJSON net <$> scriptToAddressBS (outputScript d))@@ -446,10 +530,10 @@     ] ++     ["spender" .= outputSpender d | isJust (outputSpender d)] -outputToJSON :: Network -> Output -> Value+outputToJSON :: Network -> StoreOutput -> Value outputToJSON net = object . outputPairs net -outputToEncoding :: Network -> Output -> Encoding+outputToEncoding :: Network -> StoreOutput -> Encoding outputToEncoding net = pairs . mconcat . outputPairs net  data Prev = Prev@@ -457,16 +541,16 @@     , prevAmount :: !Word64     } deriving (Show, Eq, Ord, Generic, Hashable, Serialize) -toInput :: TxIn -> Maybe Prev -> Maybe WitnessStack -> Input+toInput :: TxIn -> Maybe Prev -> Maybe WitnessStack -> StoreInput toInput i Nothing w =-    Coinbase+    StoreCoinbase         { inputPoint = prevOutput i         , inputSequence = txInSequence i         , inputSigScript = scriptInput i         , inputWitness = w         } toInput i (Just p) w =-    Input+    StoreInput         { inputPoint = prevOutput i         , inputSequence = txInSequence i         , inputSigScript = scriptInput i@@ -475,9 +559,9 @@         , inputWitness = w         } -toOutput :: TxOut -> Maybe Spender -> Output+toOutput :: TxOut -> Maybe Spender -> StoreOutput toOutput o s =-    Output+    StoreOutput         { outputAmount = outValue o         , outputScript = scriptOutput o         , outputSpender = s@@ -525,12 +609,12 @@             , txDataRBF = transactionRBF t             , txDataTime = transactionTime t             }-    f _ Coinbase {} = Nothing-    f n Input {inputPkScript = s, inputAmount = v} =+    f _ StoreCoinbase {} = Nothing+    f n StoreInput {inputPkScript = s, inputAmount = v} =         Just (n, Prev {prevScript = s, prevAmount = v})     ps = I.fromList . catMaybes $ zipWith f [0 ..] (transactionInputs t)-    g _ Output {outputSpender = Nothing} = Nothing-    g n Output {outputSpender = Just s}  = Just (n, s)+    g _ StoreOutput {outputSpender = Nothing} = Nothing+    g n StoreOutput {outputSpender = Just s}  = Just (n, s)     sm = I.fromList . catMaybes $ zipWith g [0 ..] (transactionOutputs t)  -- | Detailed transaction information.@@ -541,9 +625,9 @@       -- ^ transaction version     , transactionLockTime :: !Word32       -- ^ lock time-    , transactionInputs   :: ![Input]+    , transactionInputs   :: ![StoreInput]       -- ^ transaction inputs-    , transactionOutputs  :: ![Output]+    , transactionOutputs  :: ![StoreOutput]       -- ^ transaction outputs     , transactionDeleted  :: !Bool       -- ^ this transaction has been deleted and is no longer valid@@ -563,11 +647,11 @@         , txLockTime = transactionLockTime t         }   where-    i Coinbase {inputPoint = p, inputSequence = q, inputSigScript = s} =+    i StoreCoinbase {inputPoint = p, inputSequence = q, inputSigScript = s} =         TxIn {prevOutput = p, scriptInput = s, txInSequence = q}-    i Input {inputPoint = p, inputSequence = q, inputSigScript = s} =+    i StoreInput {inputPoint = p, inputSequence = q, inputSigScript = s} =         TxIn {prevOutput = p, scriptInput = s, txInSequence = q}-    o Output {outputAmount = v, outputScript = s} =+    o StoreOutput {outputAmount = v, outputScript = s} =         TxOut {outValue = v, scriptOutput = s}  -- | JSON serialization for 'Transaction'.@@ -602,12 +686,27 @@ transactionToEncoding net = pairs . mconcat . transactionPairs net  instance JsonSerial Transaction where-    jsonSerial net = fromEncoding . transactionToEncoding net+    jsonSerial = transactionToEncoding     jsonValue = transactionToJSON -instance JsonSerial [Transaction] where-    jsonSerial net = fromEncoding . toEncoding . map (transactionToJSON net)-    jsonValue net = toJSON . map (transactionToJSON net)+instance BinSerial Transaction where+    binSerial net Transaction { transactionBlock = b+                              , transactionVersion = v+                              , transactionLockTime = l+                              , transactionInputs = is+                              , transactionOutputs = os+                              , transactionDeleted = d+                              , transactionRBF = r+                              , transactionTime = t+                              } = do+        binSerial net b+        putWord32be v+        putWord32be l+        put d+        put r+        putWord64be t+        put is+        put os  -- | Information about a connected peer. data PeerInformation@@ -639,12 +738,21 @@     toEncoding = pairs . mconcat . peerInformationPairs  instance JsonSerial PeerInformation where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON -instance JsonSerial [PeerInformation] where-    jsonSerial _ = fromEncoding . toEncoding-    jsonValue _ = toJSON+instance BinSerial PeerInformation where+    binSerial _ PeerInformation { peerUserAgent = u+                                , peerAddress = a+                                , peerVersion = v+                                , peerServices = s+                                , peerRelay = b+                                } = do+        putWord32be v+        putWord64be s+        put b+        put $ show a+        put u  -- | Address balances for an extended public key. data XPubBal = XPubBal@@ -666,12 +774,13 @@ xPubBalToEncoding net = pairs . mconcat . xPubBalPairs net  instance JsonSerial XPubBal where-    jsonSerial net = fromEncoding . xPubBalToEncoding net+    jsonSerial = xPubBalToEncoding     jsonValue = xPubBalToJSON -instance JsonSerial [XPubBal] where-    jsonSerial net = fromEncoding . toEncoding . map (xPubBalToJSON net)-    jsonValue net = toJSON . map (xPubBalToJSON net)+instance BinSerial XPubBal where+    binSerial net XPubBal {xPubBalPath = p, xPubBal = b} = do+        put p+        binSerial net b  -- | Unspent transaction for extended public key. data XPubUnspent = XPubUnspent@@ -695,9 +804,14 @@ xPubUnspentToEncoding net = pairs . mconcat . xPubUnspentPairs net  instance JsonSerial XPubUnspent where-    jsonSerial net = fromEncoding . xPubUnspentToEncoding net+    jsonSerial = xPubUnspentToEncoding     jsonValue = xPubUnspentToJSON +instance BinSerial XPubUnspent where+    binSerial net XPubUnspent {xPubUnspentPath = p, xPubUnspent = u} = do+        put p+        binSerial net u+ data HealthCheck = HealthCheck     { healthHeaderBest   :: !(Maybe BlockHash)     , healthHeaderHeight :: !(Maybe BlockHeight)@@ -727,9 +841,28 @@     toEncoding = pairs . mconcat . healthCheckPairs  instance JsonSerial HealthCheck where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial HealthCheck where+    binSerial _ HealthCheck { healthHeaderBest = hbest+                            , healthHeaderHeight = hheight+                            , healthBlockBest = bbest+                            , healthBlockHeight = bheight+                            , healthPeers = peers+                            , healthNetwork = net+                            , healthOK = ok+                            , healthSynced = synced+                            } = do+        put hbest+        put hheight+        put bbest+        put bheight+        put peers+        put net+        put ok+        put synced+ data Event     = EventBlock BlockHash     | EventTx TxHash@@ -740,20 +873,27 @@     toJSON (EventBlock h) = object ["type" .= String "block", "id" .= h]  instance JsonSerial Event where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial Event where+    binSerial _ (EventBlock bh) = putWord8 0x00 >> put bh+    binSerial _ (EventTx th)    = putWord8 0x01 >> put th+ newtype TxAfterHeight = TxAfterHeight     { txAfterHeight :: Maybe Bool     } deriving (Show, Eq, Generic)  instance ToJSON TxAfterHeight where-  toJSON (TxAfterHeight b) = object ["result" .= b]+    toJSON (TxAfterHeight b) = object ["result" .= b]  instance JsonSerial TxAfterHeight where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial TxAfterHeight where+    binSerial _ TxAfterHeight {txAfterHeight = a} = put a+ data Except     = ThingNotFound     | ServerError@@ -763,30 +903,36 @@     deriving Eq  instance Show Except where-    show ThingNotFound = "not found"-    show ServerError = "you made me kill a unicorn"-    show BadRequest = "bad request"-    show (UserError s) = s+    show ThingNotFound   = "not found"+    show ServerError     = "you made me kill a unicorn"+    show BadRequest      = "bad request"+    show (UserError s)   = s     show (StringError _) = "you made me kill a unicorn"  instance Exception Except  instance Scotty.ScottyError Except where     stringError = StringError-    showError = T.pack . show+    showError = T.Lazy.pack . show  instance ToJSON Except where     toJSON e = object ["error" .= T.pack (show e)]  instance JsonSerial Except where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON +instance BinSerial Except where+    binSerial _ = put . T.encodeUtf8 . T.pack . show+ newtype TxId = TxId TxHash deriving (Show, Eq, Generic)  instance ToJSON TxId where     toJSON h = object ["txid" .= h]  instance JsonSerial TxId where-    jsonSerial _ = fromEncoding . toEncoding+    jsonSerial _ = toEncoding     jsonValue _ = toJSON++instance BinSerial TxId where+    binSerial _ (TxId th) = put th
− src/Network/Haskoin/Store/Data/HashMap.hs
@@ -1,431 +0,0 @@-{-# LANGUAGE FlexibleContexts      #-}-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables   #-}-{-# LANGUAGE TupleSections         #-}-{-# OPTIONS_GHC -Wno-orphans #-}-module Network.Haskoin.Store.Data.HashMap where--import           Conduit-import           Control.Monad-import qualified Data.ByteString.Short               as B.Short-import           Data.Function-import           Data.HashMap.Strict                 (HashMap)-import qualified Data.HashMap.Strict                 as M-import           Data.IntMap.Strict                  (IntMap)-import qualified Data.IntMap.Strict                  as I-import           Data.List-import           Data.Maybe-import           Haskoin-import           Network.Haskoin.Store.Data-import           Network.Haskoin.Store.Data.KeyValue-import           UnliftIO--type UnspentMap = HashMap TxHash (IntMap Unspent)-type BalanceMap = (HashMap Address Balance, [Address])--data HashMapDB = HashMapDB-    { hBest :: !(Maybe BlockHash)-    , hBlock :: !(HashMap BlockHash BlockData)-    , hHeight :: !(HashMap BlockHeight [BlockHash])-    , hTx :: !(HashMap TxHash TxData)-    , hSpender :: !(HashMap TxHash (IntMap (Maybe Spender)))-    , hUnspent :: !(HashMap TxHash (IntMap (Maybe Unspent)))-    , hBalance :: !(HashMap Address BalVal)-    , hAddrTx :: !(HashMap Address (HashMap BlockRef (HashMap TxHash Bool)))-    , hAddrOut :: !(HashMap Address (HashMap BlockRef (HashMap OutPoint (Maybe OutVal))))-    , hMempool :: !(HashMap PreciseUnixTime (HashMap TxHash Bool))-    , hInit :: !Bool-    } deriving (Eq, Show)--emptyHashMapDB :: HashMapDB-emptyHashMapDB =-    HashMapDB-        { hBest = Nothing-        , hBlock = M.empty-        , hHeight = M.empty-        , hTx = M.empty-        , hSpender = M.empty-        , hUnspent = M.empty-        , hBalance = M.empty-        , hAddrTx = M.empty-        , hAddrOut = M.empty-        , hMempool = M.empty-        , hInit = False-        }--isInitializedH :: HashMapDB -> Either InitException Bool-isInitializedH = Right . hInit--getBestBlockH :: HashMapDB -> Maybe BlockHash-getBestBlockH = hBest--getBlocksAtHeightH ::-       HashMapDB -> BlockHeight -> [BlockHash]-getBlocksAtHeightH db h = M.lookupDefault [] h (hHeight db)--getBlockH :: HashMapDB -> BlockHash -> Maybe BlockData-getBlockH db h = M.lookup h (hBlock db)--getTxDataH :: HashMapDB -> TxHash -> Maybe TxData-getTxDataH db t = M.lookup t (hTx db)--getSpenderH :: HashMapDB -> OutPoint -> Maybe (Maybe Spender)-getSpenderH db op = do-    m <- M.lookup (outPointHash op) (hSpender db)-    I.lookup (fromIntegral (outPointIndex op)) m--getSpendersH :: HashMapDB -> TxHash -> IntMap (Maybe Spender)-getSpendersH db t = M.lookupDefault I.empty t (hSpender db)--getBalanceH :: HashMapDB -> Address -> Maybe Balance-getBalanceH db a = f <$> M.lookup a (hBalance db)-  where-    f b =-        Balance-            { balanceAddress = a-            , balanceAmount = balValAmount b-            , balanceZero = balValZero b-            , balanceUnspentCount = balValUnspentCount b-            , balanceTxCount = balValTxCount b-            , balanceTotalReceived = balValTotalReceived b-            }--getMempoolH ::-       Monad m-    => HashMapDB-    -> Maybe PreciseUnixTime-    -> ConduitT () (PreciseUnixTime, TxHash) m ()-getMempoolH db mpu =-    let f ts =-            case mpu of-                Nothing -> False-                Just pu -> ts > pu-        ls =-            dropWhile (f . fst) .-            sortBy (flip compare) . M.toList . M.map (M.keys . M.filter id) $-            hMempool db-     in yieldMany [(u, h) | (u, hs) <- ls, h <- hs]--getAddressTxsH :: HashMapDB -> Address -> Maybe BlockRef -> [BlockTx]-getAddressTxsH db a mbr =-    dropWhile h .-    sortBy (flip compare) . catMaybes . concatMap (uncurry f) . M.toList $-    M.lookupDefault M.empty a (hAddrTx db)-  where-    f b hm = map (uncurry (g b)) $ M.toList hm-    g b h' True =-        Just-            BlockTx-                {blockTxBlock = b, blockTxHash = h'}-    g _ _ False = Nothing-    h BlockTx {blockTxBlock = b} =-        case mbr of-            Nothing -> False-            Just br -> b > br--getAddressUnspentsH ::-       HashMapDB -> Address -> Maybe BlockRef -> [Unspent]-getAddressUnspentsH db a mbr =-    dropWhile h .-    sortBy (flip compare) . catMaybes . concatMap (uncurry f) . M.toList $-    M.lookupDefault M.empty a (hAddrOut db)-  where-    f b hm = map (uncurry (g b)) $ M.toList hm-    g b p (Just u) =-        Just-            Unspent-                { unspentBlock = b-                , unspentAmount = outValAmount u-                , unspentScript = B.Short.toShort (outValScript u)-                , unspentPoint = p-                }-    g _ _ Nothing = Nothing-    h Unspent {unspentBlock = b} =-        case mbr of-            Nothing -> False-            Just br -> b > br--setInitH :: HashMapDB -> HashMapDB-setInitH db = db {hInit = True}--setBestH :: BlockHash -> HashMapDB -> HashMapDB-setBestH h db = db {hBest = Just h}--insertBlockH :: BlockData -> HashMapDB -> HashMapDB-insertBlockH bd db =-    db {hBlock = M.insert (headerHash (blockDataHeader bd)) bd (hBlock db)}--insertAtHeightH :: BlockHash -> BlockHeight -> HashMapDB -> HashMapDB-insertAtHeightH h g db = db {hHeight = M.insertWith f g [h] (hHeight db)}-  where-    f xs ys = nub $ xs <> ys--insertTxH :: TxData -> HashMapDB -> HashMapDB-insertTxH tx db = db {hTx = M.insert (txHash (txData tx)) tx (hTx db)}--insertSpenderH :: OutPoint -> Spender -> HashMapDB -> HashMapDB-insertSpenderH op s db =-    db-        { hSpender =-              M.insertWith-                  (<>)-                  (outPointHash op)-                  (I.singleton (fromIntegral (outPointIndex op)) (Just s))-                  (hSpender db)-        }--deleteSpenderH :: OutPoint -> HashMapDB -> HashMapDB-deleteSpenderH op db =-    db-        { hSpender =-              M.insertWith-                  (<>)-                  (outPointHash op)-                  (I.singleton (fromIntegral (outPointIndex op)) Nothing)-                  (hSpender db)-        }--setBalanceH :: Balance -> HashMapDB -> HashMapDB-setBalanceH b db = db {hBalance = M.insert (balanceAddress b) x (hBalance db)}-  where-    x =-                BalVal-                    { balValAmount = balanceAmount b-                    , balValZero = balanceZero b-                    , balValUnspentCount = balanceUnspentCount b-                    , balValTxCount = balanceTxCount b-                    , balValTotalReceived = balanceTotalReceived b-                    }--insertAddrTxH :: Address -> BlockTx -> HashMapDB -> HashMapDB-insertAddrTxH a btx db =-    let s =-            M.singleton-                a-                (M.singleton-                     (blockTxBlock btx)-                     (M.singleton (blockTxHash btx) True))-     in db {hAddrTx = M.unionWith (M.unionWith M.union) s (hAddrTx db)}--removeAddrTxH :: Address -> BlockTx -> HashMapDB -> HashMapDB-removeAddrTxH a btx db =-    let s =-            M.singleton-                a-                (M.singleton-                     (blockTxBlock btx)-                     (M.singleton (blockTxHash btx) False))-     in db {hAddrTx = M.unionWith (M.unionWith M.union) s (hAddrTx db)}--insertAddrUnspentH :: Address -> Unspent -> HashMapDB -> HashMapDB-insertAddrUnspentH a u db =-    let uns =-            OutVal-                { outValAmount = unspentAmount u-                , outValScript = B.Short.fromShort (unspentScript u)-                }-        s =-            M.singleton-                a-                (M.singleton-                     (unspentBlock u)-                     (M.singleton (unspentPoint u) (Just uns)))-     in db {hAddrOut = M.unionWith (M.unionWith M.union) s (hAddrOut db)}--removeAddrUnspentH :: Address -> Unspent -> HashMapDB -> HashMapDB-removeAddrUnspentH a u db =-    let s =-            M.singleton-                a-                (M.singleton-                     (unspentBlock u)-                     (M.singleton (unspentPoint u) Nothing))-     in db {hAddrOut = M.unionWith (M.unionWith M.union) s (hAddrOut db)}--insertMempoolTxH :: TxHash -> PreciseUnixTime -> HashMapDB -> HashMapDB-insertMempoolTxH h u db =-    let s = M.singleton u (M.singleton h True)-     in db {hMempool = M.unionWith M.union s (hMempool db)}--deleteMempoolTxH :: TxHash -> PreciseUnixTime -> HashMapDB -> HashMapDB-deleteMempoolTxH h u db =-    let s = M.singleton u (M.singleton h False)-     in db {hMempool = M.unionWith M.union s (hMempool db)}--getUnspentH :: HashMapDB -> OutPoint -> Maybe (Maybe Unspent)-getUnspentH db op = do-    m <- M.lookup (outPointHash op) (hUnspent db)-    I.lookup (fromIntegral (outPointIndex op)) m--addUnspentH :: Unspent -> HashMapDB -> HashMapDB-addUnspentH u db =-    db-        { hUnspent =-              M.insertWith-                  (<>)-                  (outPointHash (unspentPoint u))-                  (I.singleton-                       (fromIntegral (outPointIndex (unspentPoint u)))-                       (Just u))-                  (hUnspent db)-        }--delUnspentH :: OutPoint -> HashMapDB -> HashMapDB-delUnspentH op db =-    db-        { hUnspent =-              M.insertWith-                  (<>)-                  (outPointHash op)-                  (I.singleton (fromIntegral (outPointIndex op)) Nothing)-                  (hUnspent db)-        }--instance Applicative m => StoreRead HashMapDB m where-    isInitialized = pure . isInitializedH-    getBestBlock = pure . getBestBlockH-    getBlocksAtHeight db = pure . getBlocksAtHeightH db-    getBlock db = pure . getBlockH db-    getTxData db = pure . getTxDataH db-    getSpenders db = pure . I.map fromJust . I.filter isJust . getSpendersH db-    getSpender db = pure . join . getSpenderH db--instance Applicative m => BalanceRead HashMapDB m where-    getBalance db = pure . getBalanceH db--instance Applicative m => UnspentRead HashMapDB m where-    getUnspent db = pure . join . getUnspentH db--instance Monad m => StoreStream HashMapDB m where-    getMempool = getMempoolH-    getAddressUnspents db a = yieldMany . getAddressUnspentsH db a-    getAddressTxs db a = yieldMany . getAddressTxsH db a--instance MonadIO m => StoreRead (TVar HashMapDB) m where-    isInitialized v = readTVarIO v >>= isInitialized-    getBestBlock v = readTVarIO v >>= getBestBlock-    getBlocksAtHeight v h = readTVarIO v >>= \db -> getBlocksAtHeight db h-    getBlock v b = readTVarIO v >>= \db -> getBlock db b-    getTxData v t = readTVarIO v >>= \db -> getTxData db t-    getSpender v t = readTVarIO v >>= \db -> getSpender db t-    getSpenders v t = readTVarIO v >>= \db -> getSpenders db t--instance MonadIO m => BalanceRead (TVar HashMapDB) m where-    getBalance v a =-        readTVarIO v >>= \db -> getBalance db a--instance MonadIO m => UnspentRead (TVar HashMapDB) m where-    getUnspent v op = readTVarIO v >>= \db -> getUnspent db op--instance MonadIO m => BalanceWrite (TVar HashMapDB) m where-    setBalance v b = atomically $ modifyTVar v (setBalanceH b)--instance MonadIO m => StoreStream (TVar HashMapDB) m where-    getMempool v m = readTVarIO v >>= \db -> getMempool db m-    getAddressTxs v a m = readTVarIO v >>= \db -> getAddressTxs db a m-    getAddressUnspents v a m = readTVarIO v >>= \db -> getAddressUnspents db a m--instance StoreWrite ((HashMapDB -> HashMapDB) -> m ()) m where-    setInit f = f setInitH-    setBest f = f . setBestH-    insertBlock f = f . insertBlockH-    insertAtHeight f h = f . insertAtHeightH h-    insertTx f = f . insertTxH-    insertSpender f p = f . insertSpenderH p-    deleteSpender f = f . deleteSpenderH-    insertAddrTx f a = f . insertAddrTxH a-    removeAddrTx f a = f . removeAddrTxH a-    insertAddrUnspent f a = f . insertAddrUnspentH a-    removeAddrUnspent f a = f . removeAddrUnspentH a-    insertMempoolTx f h = f . insertMempoolTxH h-    deleteMempoolTx f h = f . deleteMempoolTxH h--instance Applicative m => UnspentWrite ((HashMapDB -> HashMapDB) -> m ()) m where-    addUnspent f = f . addUnspentH-    delUnspent f = f . delUnspentH--instance MonadIO m => StoreWrite (TVar HashMapDB) m where-    setInit v = atomically $ setInit (modifyTVar v)-    setBest v = atomically . setBest (modifyTVar v)-    insertBlock v = atomically . insertBlock (modifyTVar v)-    insertAtHeight v h = atomically . insertAtHeight (modifyTVar v) h-    insertTx v = atomically . insertTx (modifyTVar v)-    insertSpender v p = atomically . insertSpender (modifyTVar v) p-    deleteSpender v = atomically . deleteSpender (modifyTVar v)-    insertAddrTx v a = atomically . insertAddrTx (modifyTVar v) a-    removeAddrTx v a = atomically . removeAddrTx (modifyTVar v) a-    insertAddrUnspent v a = atomically . insertAddrUnspent (modifyTVar v) a-    removeAddrUnspent v a = atomically . removeAddrUnspent (modifyTVar v) a-    insertMempoolTx v h = atomically . insertMempoolTx (modifyTVar v) h-    deleteMempoolTx v h = atomically . deleteMempoolTx (modifyTVar v) h--instance MonadIO m => UnspentWrite (TVar HashMapDB) m where-    addUnspent v = atomically . addUnspent (modifyTVar v)-    delUnspent v = atomically . delUnspent (modifyTVar v)--instance Applicative m => UnspentRead UnspentMap m where-    getUnspent um op = pure $ do-        m <- M.lookup (outPointHash op) um-        I.lookup (fromIntegral (outPointIndex op)) m--instance MonadIO m => UnspentRead (TVar UnspentMap) m where-    getUnspent v op = readTVarIO v >>= \um -> getUnspent um op--instance Applicative m =>-         UnspentWrite ((UnspentMap -> UnspentMap) -> m ()) m where-    addUnspent f u =-        f $-        M.insertWith-            (<>)-            (outPointHash (unspentPoint u))-            (I.singleton (fromIntegral (outPointIndex (unspentPoint u))) u)-    delUnspent f op = f $ M.update g (outPointHash op)-      where-        g m =-            let n = I.delete (fromIntegral (outPointIndex op)) m-             in if I.null n-                    then Nothing-                    else Just n-    pruneUnspent f =-        f $ \um ->-            if M.size um > 2000 * 1000-                then let g is = unspentBlock (head (I.elems is))-                         ls =-                             sortBy-                                 (compare `on` (g . snd))-                                 (filter (not . I.null . snd) (M.toList um))-                      in M.fromList (drop (1000 * 1000) ls)-                else um--instance MonadIO m => UnspentWrite (TVar UnspentMap) m where-    addUnspent v = atomically . addUnspent (modifyTVar v)-    delUnspent v = atomically . delUnspent (modifyTVar v)-    pruneUnspent = atomically . pruneUnspent . modifyTVar--instance Applicative m => BalanceRead BalanceMap m where-    getBalance m a = pure $ M.lookup a (fst m)--instance Applicative m =>-         BalanceWrite ((BalanceMap -> BalanceMap) -> m ()) m where-    setBalance f b =-        f $ \(m, s) ->-            let m' = M.insert (balanceAddress b) b m-                s' = balanceAddress b : s-             in (m', s')-    pruneBalance f =-        f $ \(m, s) ->-            if length s > 2000 * 1000-                then let s' = take (1000 * 1000) s-                         m' = M.fromList (mapMaybe (g m) s')-                      in (m', s')-                else (m, s)-      where-        g m a = (a, ) <$> M.lookup a m--instance MonadIO m => BalanceWrite (TVar BalanceMap) m where-    setBalance v = atomically . setBalance (modifyTVar v)-    pruneBalance = atomically . pruneBalance . modifyTVar--instance MonadIO m => BalanceRead (TVar BalanceMap) m where-    getBalance v a = readTVarIO v >>= \m -> getBalance m a
src/Network/Haskoin/Store/Data/ImportDB.hs view
@@ -1,12 +1,13 @@ {-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE LambdaCase            #-}-{-# LANGUAGE MultiParamTypeClasses #-} module Network.Haskoin.Store.Data.ImportDB where  import           Conduit import           Control.Applicative import           Control.Monad.Except+import           Control.Monad.Reader                (ReaderT)+import qualified Control.Monad.Reader                as R import           Control.Monad.Trans.Maybe import qualified Data.ByteString.Short               as B.Short import           Data.HashMap.Strict                 (HashMap)@@ -19,13 +20,13 @@ import           Database.RocksDB.Query              as R import           Haskoin import           Network.Haskoin.Store.Data-import           Network.Haskoin.Store.Data.HashMap import           Network.Haskoin.Store.Data.KeyValue import           Network.Haskoin.Store.Data.RocksDB+import           Network.Haskoin.Store.Data.STM import           UnliftIO  data ImportDB = ImportDB-    { importRocksDB    :: !(DB, ReadOptions)+    { importRocksDB    :: !(ReadOptions, DB)     , importHashMap    :: !(TVar HashMapDB)     , importUnspentMap :: !(TVar UnspentMap)     , importBalanceMap :: !(TVar BalanceMap)@@ -36,14 +37,15 @@     => DB     -> TVar UnspentMap     -> TVar BalanceMap-    -> (ImportDB -> m a)+    -> ReaderT ImportDB m a     -> m a runImportDB db um bm f = do     hm <- newTVarIO emptyHashMapDB     x <--        f+        R.runReaderT+            f             ImportDB-                { importRocksDB = d+                { importRocksDB = (defaultReadOptions, db)                 , importHashMap = hm                 , importUnspentMap = um                 , importBalanceMap = bm@@ -51,8 +53,6 @@     ops <- hashMapOps <$> readTVarIO hm     writeBatch db ops     return x-  where-    d = (db, defaultReadOptions)  hashMapOps :: HashMapDB -> [BatchOp] hashMapOps db =@@ -163,98 +163,181 @@     g h i Nothing = deleteOp (UnspentKey (OutPoint h (fromIntegral i)))  isInitializedI :: MonadIO m => ImportDB -> m (Either InitException Bool)-isInitializedI ImportDB {importRocksDB = db}= isInitialized db+isInitializedI ImportDB {importRocksDB = db} =+    uncurry withBlockDB db isInitialized +setInitI :: MonadIO m => ImportDB -> m ()+setInitI ImportDB {importRocksDB = (_, db), importHashMap = hm} = do+    atomically $ withBlockSTM hm setInit+    setInitDB db++setBestI :: MonadIO m => BlockHash -> ImportDB -> m ()+setBestI bh ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ setBest bh++insertBlockI :: MonadIO m => BlockData -> ImportDB -> m ()+insertBlockI b ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertBlock b++insertAtHeightI :: MonadIO m => BlockHash -> BlockHeight -> ImportDB -> m ()+insertAtHeightI b h ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertAtHeight b h++insertTxI :: MonadIO m => TxData -> ImportDB -> m ()+insertTxI t ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertTx t++insertSpenderI :: MonadIO m => OutPoint -> Spender -> ImportDB -> m ()+insertSpenderI p s ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertSpender p s++deleteSpenderI :: MonadIO m => OutPoint -> ImportDB -> m ()+deleteSpenderI p ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ deleteSpender p++insertAddrTxI :: MonadIO m => Address -> BlockTx -> ImportDB -> m ()+insertAddrTxI a t ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertAddrTx a t++removeAddrTxI :: MonadIO m => Address -> BlockTx -> ImportDB -> m ()+removeAddrTxI a t ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ removeAddrTx a t++insertAddrUnspentI :: MonadIO m => Address -> Unspent -> ImportDB -> m ()+insertAddrUnspentI a u ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertAddrUnspent a u++removeAddrUnspentI :: MonadIO m => Address -> Unspent -> ImportDB -> m ()+removeAddrUnspentI a u ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ removeAddrUnspent a u++insertMempoolTxI :: MonadIO m => TxHash -> PreciseUnixTime -> ImportDB -> m ()+insertMempoolTxI t p ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ insertMempoolTx t p++deleteMempoolTxI :: MonadIO m => TxHash -> PreciseUnixTime -> ImportDB -> m ()+deleteMempoolTxI t p ImportDB {importHashMap = hm} =+    atomically . withBlockSTM hm $ deleteMempoolTx t p+ getBestBlockI :: MonadIO m => ImportDB -> m (Maybe BlockHash) getBestBlockI ImportDB {importHashMap = hm, importRocksDB = db} =-    runMaybeT $ MaybeT (getBestBlock hm) <|> MaybeT (getBestBlock db)+    runMaybeT $ MaybeT f <|> MaybeT g+  where+    f = atomically $ withBlockSTM hm getBestBlock+    g = uncurry withBlockDB db getBestBlock -getBlocksAtHeightI :: MonadIO m => ImportDB -> BlockHeight -> m [BlockHash]-getBlocksAtHeightI ImportDB {importHashMap = hm, importRocksDB = db} bh = do-    xs <- getBlocksAtHeight hm bh-    ys <- getBlocksAtHeight db bh+getBlocksAtHeightI :: MonadIO m => BlockHeight -> ImportDB -> m [BlockHash]+getBlocksAtHeightI bh ImportDB {importHashMap = hm, importRocksDB = db} = do+    xs <- atomically . withBlockSTM hm $ getBlocksAtHeight bh+    ys <- uncurry withBlockDB db $ getBlocksAtHeight bh     return . nub $ xs <> ys -getBlockI :: MonadIO m => ImportDB -> BlockHash -> m (Maybe BlockData)-getBlockI ImportDB {importRocksDB = db, importHashMap = hm} bh =-    runMaybeT $ MaybeT (getBlock hm bh) <|> MaybeT (getBlock db bh)+getBlockI :: MonadIO m => BlockHash -> ImportDB -> m (Maybe BlockData)+getBlockI bh ImportDB {importRocksDB = db, importHashMap = hm} =+    runMaybeT $ MaybeT f <|> MaybeT g+  where+    f = atomically . withBlockSTM hm $ getBlock bh+    g = uncurry withBlockDB db $ getBlock bh  getTxDataI ::-       MonadIO m => ImportDB -> TxHash -> m (Maybe TxData)-getTxDataI ImportDB {importRocksDB = db, importHashMap = hm} th =-    runMaybeT $ MaybeT (getTxData hm th) <|> MaybeT (getTxData db th)+       MonadIO m => TxHash -> ImportDB -> m (Maybe TxData)+getTxDataI th ImportDB {importRocksDB = db, importHashMap = hm} =+    runMaybeT $ MaybeT f <|> MaybeT g+  where+    f = atomically . withBlockSTM hm $ getTxData th+    g = uncurry withBlockDB db $ getTxData th -getSpenderI :: MonadIO m => ImportDB -> OutPoint -> m (Maybe Spender)-getSpenderI ImportDB {importRocksDB = db, importHashMap = hm} op =-    getSpenderH <$> readTVarIO hm <*> pure op >>= \case+getSpenderI :: MonadIO m => OutPoint -> ImportDB -> m (Maybe Spender)+getSpenderI op ImportDB {importRocksDB = db, importHashMap = hm} =+    getSpenderH op <$> readTVarIO hm >>= \case         Just s -> return s-        Nothing -> getSpender db op+        Nothing -> uncurry withBlockDB db $ getSpender op -getSpendersI :: MonadIO m => ImportDB -> TxHash -> m (IntMap Spender)-getSpendersI ImportDB {importRocksDB = db, importHashMap = hm} t = do-    hsm <- getSpendersH <$> readTVarIO hm <*> pure t-    dsm <- I.map Just <$> getSpenders db t+getSpendersI :: MonadIO m => TxHash -> ImportDB -> m (IntMap Spender)+getSpendersI t ImportDB {importRocksDB = db, importHashMap = hm} = do+    hsm <- getSpendersH t <$> readTVarIO hm+    dsm <- I.map Just <$> uncurry withBlockDB db (getSpenders t)     return . I.map fromJust . I.filter isJust $ hsm <> dsm -getBalanceI :: MonadIO m => ImportDB -> Address -> m (Maybe Balance)-getBalanceI ImportDB { importRocksDB = db-                     , importHashMap = hm-                     , importBalanceMap = bm-                     } a = runMaybeT $ cachemap <|> hashmap <|> database+getBalanceI :: MonadIO m => Address -> ImportDB -> m (Maybe Balance)+getBalanceI a ImportDB { importRocksDB = db+                       , importHashMap = hm+                       , importBalanceMap = bm+                       } =+    runMaybeT $+    MaybeT (atomically . runMaybeT $ cachemap <|> hashmap) <|> database   where-    cachemap = MaybeT $ getBalance bm a-    hashmap = MaybeT $ getBalance hm a-    database = MaybeT $ getBalance db a+    cachemap = MaybeT . withBalanceSTM bm $ getBalance a+    hashmap = MaybeT . withBlockSTM hm $ getBalance a+    database = MaybeT . uncurry withBlockDB db $ getBalance a -getUnspentI :: MonadIO m => ImportDB -> OutPoint -> m (Maybe Unspent)-getUnspentI ImportDB { importRocksDB = db-                     , importHashMap = hm-                     , importUnspentMap = um-                     } op =-    getUnspent um op >>= \case-        Just b -> return (Just b)-        Nothing ->-            getUnspentH <$> readTVarIO hm <*> pure op >>= \case-                Just x -> return x-                Nothing -> getUnspent db op+setBalanceI :: MonadIO m => Balance -> ImportDB -> m ()+setBalanceI b ImportDB {importHashMap = hm, importBalanceMap = bm} =+    atomically $ do+        withBlockSTM hm $ setBalance b+        withBalanceSTM bm $ setBalance b -instance MonadIO m => StoreRead ImportDB m where-    isInitialized = isInitializedI-    getBestBlock = getBestBlockI-    getBlocksAtHeight = getBlocksAtHeightI-    getBlock = getBlockI-    getTxData = getTxDataI-    getSpender = getSpenderI-    getSpenders = getSpendersI+getUnspentI :: MonadIO m => OutPoint -> ImportDB -> m (Maybe Unspent)+getUnspentI op ImportDB { importRocksDB = db+                        , importHashMap = hm+                        , importUnspentMap = um+                        } = do+    u <-+        atomically . runMaybeT $ do+            let x = withUnspentSTM um (getUnspent op)+                y = getUnspentH op <$> readTVar hm+            Just <$> MaybeT x <|> MaybeT y+    case u of+        Nothing -> uncurry withBlockDB db $ getUnspent op+        Just x  -> return x -instance MonadIO m => StoreWrite ImportDB m where-    setInit ImportDB {importHashMap = hm, importRocksDB = (db, _)} =-        setInit hm >> setInitDB db-    setBest ImportDB {importHashMap = hm} = setBest hm-    insertBlock ImportDB {importHashMap = hm} = insertBlock hm-    insertAtHeight ImportDB {importHashMap = hm} = insertAtHeight hm-    insertTx ImportDB {importHashMap = hm} = insertTx hm-    insertSpender ImportDB {importHashMap = hm} = insertSpender hm-    deleteSpender ImportDB {importHashMap = hm} = deleteSpender hm-    insertAddrTx ImportDB {importHashMap = hm} = insertAddrTx hm-    removeAddrTx ImportDB {importHashMap = hm} = removeAddrTx hm-    insertAddrUnspent ImportDB {importHashMap = hm} = insertAddrUnspent hm-    removeAddrUnspent ImportDB {importHashMap = hm} = removeAddrUnspent hm-    insertMempoolTx ImportDB {importHashMap = hm} = insertMempoolTx hm-    deleteMempoolTx ImportDB {importHashMap = hm} = deleteMempoolTx hm+addUnspentI :: MonadIO m => Unspent -> ImportDB -> m ()+addUnspentI u ImportDB {importHashMap = hm, importUnspentMap = um} =+    atomically $ do+        withBlockSTM hm $ addUnspent u+        withUnspentSTM um $ addUnspent u -instance MonadIO m => UnspentRead ImportDB m where-    getUnspent = getUnspentI+delUnspentI :: MonadIO m => OutPoint -> ImportDB -> m ()+delUnspentI p ImportDB {importHashMap = hm, importUnspentMap = um} =+    atomically $ do+        withUnspentSTM um $ delUnspent p+        withBlockSTM hm $ delUnspent p -instance MonadIO m => UnspentWrite ImportDB m where-    addUnspent ImportDB {importHashMap = hm, importUnspentMap = um} u =-        addUnspent hm u >> addUnspent um u-    delUnspent ImportDB {importHashMap = hm, importUnspentMap = um} op =-        delUnspent um op >> delUnspent hm op+instance (MonadIO m) => StoreRead (ReaderT ImportDB m) where+    isInitialized = R.ask >>= isInitializedI+    getBestBlock = R.ask >>= getBestBlockI+    getBlocksAtHeight h = R.ask >>= getBlocksAtHeightI h+    getBlock b = R.ask >>= getBlockI b+    getTxData t = R.ask >>= getTxDataI t+    getSpender p = R.ask >>= getSpenderI p+    getSpenders t = R.ask >>= getSpendersI t -instance MonadIO m => BalanceRead ImportDB m where-    getBalance = getBalanceI+instance (MonadIO m) => StoreWrite (ReaderT ImportDB m) where+    setInit = R.ask >>= setInitI+    setBest h = R.ask >>= setBestI h+    insertBlock b = R.ask >>= insertBlockI b+    insertAtHeight b h = R.ask >>= insertAtHeightI b h+    insertTx t = R.ask >>= insertTxI t+    insertSpender p s = R.ask >>= insertSpenderI p s+    deleteSpender p = R.ask >>= deleteSpenderI p+    insertAddrTx a t = R.ask >>= insertAddrTxI a t+    removeAddrTx a t = R.ask >>= removeAddrTxI a t+    insertAddrUnspent a u = R.ask >>= insertAddrUnspentI a u+    removeAddrUnspent a u = R.ask >>= removeAddrUnspentI a u+    insertMempoolTx t p = R.ask >>= insertMempoolTxI t p+    deleteMempoolTx t p = R.ask >>= deleteMempoolTxI t p -instance MonadIO m => BalanceWrite ImportDB m where-    setBalance ImportDB {importHashMap = hm, importBalanceMap = bm} b =-        setBalance hm b >> setBalance bm b+instance (MonadIO m) => UnspentRead (ReaderT ImportDB m) where+    getUnspent a = R.ask >>= getUnspentI a++instance (MonadIO m) => UnspentWrite (ReaderT ImportDB m) where+    addUnspent u = R.ask >>= addUnspentI u+    delUnspent p = R.ask >>= delUnspentI p+    pruneUnspent = return ()++instance (MonadIO m) => BalanceRead (ReaderT ImportDB m) where+    getBalance a = R.ask >>= getBalanceI a++instance (MonadIO m) => BalanceWrite (ReaderT ImportDB m) where+    setBalance b = R.ask >>= setBalanceI b+    pruneBalance = return ()
src/Network/Haskoin/Store/Data/KeyValue.hs view
@@ -1,7 +1,5 @@-{-# LANGUAGE ConstraintKinds       #-} {-# LANGUAGE DeriveAnyClass        #-} {-# LANGUAGE DeriveGeneric         #-}-{-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-} module Network.Haskoin.Store.Data.KeyValue where@@ -13,7 +11,7 @@ import           Data.Hashable import           Data.Serialize             as S import           Data.Word-import           Database.RocksDB.Query+import qualified Database.RocksDB.Query     as R import           GHC.Generics import           Haskoin import           Network.Haskoin.Store.Data@@ -67,9 +65,9 @@                           }                 } -instance Key AddrTxKey+instance R.Key AddrTxKey -instance KeyValue AddrTxKey ()+instance R.KeyValue AddrTxKey ()  -- | Database key for an address output. data AddrOutKey@@ -105,14 +103,14 @@         guard . (== 0x06) =<< getWord8         AddrOutKey <$> get <*> get <*> get -instance Key AddrOutKey+instance R.Key AddrOutKey  data OutVal = OutVal     { outValAmount :: !Word64     , outValScript :: !ByteString     } deriving (Show, Read, Eq, Ord, Generic, Hashable, Serialize) -instance KeyValue AddrOutKey OutVal+instance R.KeyValue AddrOutKey OutVal  -- | Transaction database key. newtype TxKey = TxKey@@ -128,9 +126,9 @@         guard . (== 0x02) =<< getWord8         TxKey <$> get -instance Key TxKey+instance R.Key TxKey -instance KeyValue TxKey TxData+instance R.KeyValue TxKey TxData  data SpenderKey     = SpenderKey { outputPoint :: !OutPoint }@@ -151,9 +149,9 @@         op <- OutPoint <$> get <*> get         return $ SpenderKey op -instance Key SpenderKey+instance R.Key SpenderKey -instance KeyValue SpenderKey Spender+instance R.KeyValue SpenderKey Spender  -- | Unspent output database key. data UnspentKey@@ -182,9 +180,9 @@     , unspentValScript :: !ByteString     } deriving (Show, Read, Eq, Ord, Generic, Hashable, Serialize) -instance Key UnspentKey+instance R.Key UnspentKey -instance KeyValue UnspentKey UnspentVal+instance R.KeyValue UnspentKey UnspentVal  -- | Mempool transaction database key. data MemKey@@ -209,8 +207,8 @@         guard . (== 0x07) =<< getWord8         MemKey <$> get <*> get -instance Key MemKey-instance KeyValue MemKey ()+instance R.Key MemKey+instance R.KeyValue MemKey ()  -- | Block entry database key. newtype BlockKey = BlockKey@@ -226,7 +224,7 @@         guard . (== 0x01) =<< getWord8         BlockKey <$> get -instance KeyValue BlockKey BlockData+instance R.KeyValue BlockKey BlockData  -- | Block height database key. newtype HeightKey = HeightKey@@ -242,9 +240,9 @@         guard . (== 0x03) =<< getWord8         HeightKey <$> get -instance Key HeightKey+instance R.Key HeightKey -instance KeyValue HeightKey [BlockHash]+instance R.KeyValue HeightKey [BlockHash]  -- | Address balance database key. newtype BalKey@@ -260,7 +258,7 @@         guard . (== 0x04) =<< getWord8         BalKey <$> get -instance Key BalKey+instance R.Key BalKey  -- | Address balance database value. data BalVal = BalVal@@ -287,7 +285,7 @@             , balValTotalReceived = 0             } -instance KeyValue BalKey BalVal+instance R.KeyValue BalKey BalVal  -- | Key for best block in database. data BestKey =@@ -301,9 +299,9 @@         guard . (== B.replicate 32 0x00) =<< getBytes 32         return BestKey -instance Key BestKey+instance R.Key BestKey -instance KeyValue BestKey BlockHash+instance R.KeyValue BestKey BlockHash  -- | Key for database version. data VersionKey =@@ -317,6 +315,6 @@         guard . (== 0x0a) =<< getWord8         return VersionKey -instance Key VersionKey+instance R.Key VersionKey -instance KeyValue VersionKey Word32+instance R.KeyValue VersionKey Word32
src/Network/Haskoin/Store/Data/RocksDB.hs view
@@ -1,12 +1,12 @@ {-# LANGUAGE DeriveAnyClass        #-}-{-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE LambdaCase            #-}-{-# LANGUAGE MultiParamTypeClasses #-} {-# OPTIONS_GHC -Wno-orphans #-} module Network.Haskoin.Store.Data.RocksDB where  import           Conduit+import           Control.Monad.Reader                (ReaderT)+import qualified Control.Monad.Reader                as R import qualified Data.ByteString.Short               as B.Short import           Data.IntMap                         (IntMap) import qualified Data.IntMap.Strict                  as I@@ -18,51 +18,57 @@ import           Network.Haskoin.Store.Data.KeyValue import           UnliftIO +type BlockDB = (ReadOptions, DB)+ dataVersion :: Word32 dataVersion = 14 +withBlockDB :: ReadOptions -> DB -> ReaderT BlockDB m a -> m a+withBlockDB opts db f = R.runReaderT f (opts, db)+ data ExceptRocksDB =     MempoolTxNotFound     deriving (Eq, Show, Read, Exception) -isInitializedDB :: MonadIO m => DB -> ReadOptions -> m (Either InitException Bool)-isInitializedDB db opts =+isInitializedDB ::+       MonadIO m => ReadOptions -> DB -> m (Either InitException Bool)+isInitializedDB opts db =     retrieve db opts VersionKey >>= \case         Just v             | v == dataVersion -> return (Right True)             | otherwise -> return (Left (IncorrectVersion v))         Nothing -> return (Right False) -getBestBlockDB :: MonadIO m => DB -> ReadOptions -> m (Maybe BlockHash)-getBestBlockDB db opts = retrieve db opts BestKey+getBestBlockDB :: MonadIO m => ReadOptions -> DB -> m (Maybe BlockHash)+getBestBlockDB opts db = retrieve db opts BestKey  getBlocksAtHeightDB ::-       MonadIO m => DB -> ReadOptions -> BlockHeight -> m [BlockHash]-getBlocksAtHeightDB db opts h =+       MonadIO m => BlockHeight -> ReadOptions -> DB -> m [BlockHash]+getBlocksAtHeightDB h opts db =     retrieve db opts (HeightKey h) >>= \case         Nothing -> return []         Just ls -> return ls -getBlockDB :: MonadIO m => DB -> ReadOptions -> BlockHash -> m (Maybe BlockData)-getBlockDB db opts h = retrieve db opts (BlockKey h)+getBlockDB :: MonadIO m => BlockHash -> ReadOptions -> DB -> m (Maybe BlockData)+getBlockDB h opts db = retrieve db opts (BlockKey h)  getTxDataDB ::-       MonadIO m => DB -> ReadOptions -> TxHash -> m (Maybe TxData)-getTxDataDB db opts th = retrieve db opts (TxKey th)+       MonadIO m => TxHash -> ReadOptions -> DB -> m (Maybe TxData)+getTxDataDB th opts db = retrieve db opts (TxKey th) -getSpenderDB :: MonadIO m => DB -> ReadOptions -> OutPoint -> m (Maybe Spender)-getSpenderDB db opts = retrieve db opts . SpenderKey+getSpenderDB :: MonadIO m => OutPoint -> ReadOptions -> DB -> m (Maybe Spender)+getSpenderDB op opts db = retrieve db opts $ SpenderKey op -getSpendersDB :: MonadIO m => DB -> ReadOptions -> TxHash -> m (IntMap Spender)-getSpendersDB db opts th =+getSpendersDB :: MonadIO m => TxHash -> ReadOptions -> DB -> m (IntMap Spender)+getSpendersDB th opts db =     I.fromList . map (uncurry f) <$>     liftIO (matchingAsList db opts (SpenderKeyS th))   where     f (SpenderKey op) s = (fromIntegral (outPointIndex op), s)-    f _ _ = undefined+    f _ _               = undefined -getBalanceDB :: MonadIO m => DB -> ReadOptions -> Address -> m (Maybe Balance)-getBalanceDB db opts a = fmap f <$> retrieve db opts (BalKey a)+getBalanceDB :: MonadIO m => Address -> ReadOptions -> DB -> m (Maybe Balance)+getBalanceDB a opts db = fmap f <$> retrieve db opts (BalKey a)   where     f BalVal { balValAmount = v              , balValZero = z@@ -81,43 +87,43 @@  getMempoolDB ::        (MonadIO m, MonadResource m)-    => DB+    => Maybe PreciseUnixTime     -> ReadOptions-    -> Maybe PreciseUnixTime+    -> DB     -> ConduitT () (PreciseUnixTime, TxHash) m ()-getMempoolDB db opts mpu = x .| mapC (uncurry f)+getMempoolDB mpu opts db = x .| mapC (uncurry f)   where     x =         case mpu of             Nothing -> matching db opts MemKeyS             Just pu -> matchingSkip db opts MemKeyS (MemKeyT pu)     f (MemKey u t) () = (u, t)-    f _ _ = undefined+    f _ _             = undefined  getAddressTxsDB ::        (MonadIO m, MonadResource m)-    => DB-    -> ReadOptions-    -> Address+    => Address     -> Maybe BlockRef+    -> ReadOptions+    -> DB     -> ConduitT () BlockTx m ()-getAddressTxsDB db opts a mbr = x .| mapC (uncurry f)+getAddressTxsDB a mbr opts db = x .| mapC (uncurry f)   where     x =         case mbr of             Nothing -> matching db opts (AddrTxKeyA a)             Just br -> matchingSkip db opts (AddrTxKeyA a) (AddrTxKeyB a br)     f AddrTxKey {addrTxKeyT = t} () = t-    f _ _ = undefined+    f _ _                           = undefined  getAddressUnspentsDB ::        (MonadIO m, MonadResource m)-    => DB-    -> ReadOptions-    -> Address+    => Address     -> Maybe BlockRef+    -> ReadOptions+    -> DB     -> ConduitT () Unspent m ()-getAddressUnspentsDB db opts a mbr = x .| mapC (uncurry f)+getAddressUnspentsDB a mbr opts db = x .| mapC (uncurry f)   where     x =         case mbr of@@ -134,8 +140,8 @@             }     f _ _ = undefined -getUnspentDB :: MonadIO m => DB -> ReadOptions -> OutPoint -> m (Maybe Unspent)-getUnspentDB db opts op = fmap f <$> retrieve db opts (UnspentKey op)+getUnspentDB :: MonadIO m => OutPoint -> ReadOptions -> DB -> m (Maybe Unspent)+getUnspentDB op opts db = fmap f <$> retrieve db opts (UnspentKey op)   where     f u =         Unspent@@ -145,25 +151,26 @@             , unspentScript = B.Short.toShort (unspentValScript u)             } -instance MonadIO m => StoreRead (DB, ReadOptions) m where-    isInitialized (db, opts) = isInitializedDB db opts-    getBestBlock (db, opts) = getBestBlockDB db opts-    getBlocksAtHeight (db, opts) = getBlocksAtHeightDB db opts-    getBlock (db, opts) = getBlockDB db opts-    getTxData (db, opts) = getTxDataDB db opts-    getSpenders (db, opts) = getSpendersDB db opts-    getSpender (db, opts) = getSpenderDB db opts+setInitDB :: MonadIO m => DB -> m ()+setInitDB db = insert db VersionKey dataVersion -instance (MonadIO m, MonadResource m) => StoreStream (DB, ReadOptions) m where-    getMempool (db, opts) = getMempoolDB db opts-    getAddressTxs (db, opts) = getAddressTxsDB db opts-    getAddressUnspents (db, opts) = getAddressUnspentsDB db opts+instance MonadIO m => StoreRead (ReaderT BlockDB m) where+    isInitialized = R.ask >>= uncurry isInitializedDB+    getBestBlock = R.ask >>= uncurry getBestBlockDB+    getBlocksAtHeight h = R.ask >>= uncurry (getBlocksAtHeightDB h)+    getBlock h = R.ask >>= uncurry (getBlockDB h)+    getTxData t = R.ask >>= uncurry (getTxDataDB t)+    getSpenders p = R.ask >>= uncurry (getSpendersDB p)+    getSpender p = R.ask >>= uncurry (getSpenderDB p) -instance MonadIO m => BalanceRead (DB, ReadOptions) m where-    getBalance (db, opts) = getBalanceDB db opts+instance (MonadIO m, MonadResource m) =>+         StoreStream (ReaderT BlockDB m) where+    getMempool p = lift R.ask >>= uncurry (getMempoolDB p)+    getAddressTxs a b = R.ask >>= uncurry (getAddressTxsDB a b)+    getAddressUnspents a b = R.ask >>= uncurry (getAddressUnspentsDB a b) -instance MonadIO m => UnspentRead (DB, ReadOptions) m where-    getUnspent (db, opts) = getUnspentDB db opts+instance (MonadIO m) => BalanceRead (ReaderT BlockDB m) where+    getBalance a = R.ask >>= uncurry (getBalanceDB a) -setInitDB :: MonadIO m => DB -> m ()-setInitDB db = insert db VersionKey dataVersion+instance (MonadIO m) => UnspentRead (ReaderT BlockDB m) where+    getUnspent p = R.ask >>= uncurry (getUnspentDB p)
+ src/Network/Haskoin/Store/Data/STM.hs view
@@ -0,0 +1,404 @@+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE TupleSections         #-}+{-# OPTIONS_GHC -Wno-orphans #-}+module Network.Haskoin.Store.Data.STM where++import           Conduit+import           Control.Monad+import           Control.Monad.Reader                (ReaderT)+import qualified Control.Monad.Reader                as R+import qualified Data.ByteString.Short               as B.Short+import           Data.Function+import           Data.HashMap.Strict                 (HashMap)+import qualified Data.HashMap.Strict                 as M+import           Data.IntMap.Strict                  (IntMap)+import qualified Data.IntMap.Strict                  as I+import           Data.List+import           Data.Maybe+import           Haskoin+import           Network.Haskoin.Store.Data+import           Network.Haskoin.Store.Data.KeyValue+import           UnliftIO++type BlockSTM = ReaderT (TVar HashMapDB) STM+type UnspentSTM = ReaderT (TVar UnspentMap) STM+type BalanceSTM = ReaderT (TVar BalanceMap) STM+type UnspentMap = HashMap TxHash (IntMap Unspent)+type BalanceMap = (HashMap Address Balance, [Address])++withBlockSTM :: TVar HashMapDB -> ReaderT (TVar HashMapDB) STM a -> STM a+withBlockSTM = flip R.runReaderT++withUnspentSTM :: TVar UnspentMap -> ReaderT (TVar UnspentMap) STM a -> STM a+withUnspentSTM = flip R.runReaderT++withBalanceSTM :: TVar BalanceMap -> ReaderT (TVar BalanceMap) STM a -> STM a+withBalanceSTM = flip R.runReaderT++data HashMapDB = HashMapDB+    { hBest :: !(Maybe BlockHash)+    , hBlock :: !(HashMap BlockHash BlockData)+    , hHeight :: !(HashMap BlockHeight [BlockHash])+    , hTx :: !(HashMap TxHash TxData)+    , hSpender :: !(HashMap TxHash (IntMap (Maybe Spender)))+    , hUnspent :: !(HashMap TxHash (IntMap (Maybe Unspent)))+    , hBalance :: !(HashMap Address BalVal)+    , hAddrTx :: !(HashMap Address (HashMap BlockRef (HashMap TxHash Bool)))+    , hAddrOut :: !(HashMap Address (HashMap BlockRef (HashMap OutPoint (Maybe OutVal))))+    , hMempool :: !(HashMap PreciseUnixTime (HashMap TxHash Bool))+    , hInit :: !Bool+    } deriving (Eq, Show)++emptyHashMapDB :: HashMapDB+emptyHashMapDB =+    HashMapDB+        { hBest = Nothing+        , hBlock = M.empty+        , hHeight = M.empty+        , hTx = M.empty+        , hSpender = M.empty+        , hUnspent = M.empty+        , hBalance = M.empty+        , hAddrTx = M.empty+        , hAddrOut = M.empty+        , hMempool = M.empty+        , hInit = False+        }++isInitializedH :: HashMapDB -> Either InitException Bool+isInitializedH = Right . hInit++getBestBlockH :: HashMapDB -> Maybe BlockHash+getBestBlockH = hBest++getBlocksAtHeightH ::+       BlockHeight -> HashMapDB -> [BlockHash]+getBlocksAtHeightH h = M.lookupDefault [] h . hHeight++getBlockH :: BlockHash -> HashMapDB -> Maybe BlockData+getBlockH h = M.lookup h . hBlock++getTxDataH :: TxHash -> HashMapDB -> Maybe TxData+getTxDataH t = M.lookup t . hTx++getSpenderH :: OutPoint -> HashMapDB -> Maybe (Maybe Spender)+getSpenderH op db = do+    m <- M.lookup (outPointHash op) (hSpender db)+    I.lookup (fromIntegral (outPointIndex op)) m++getSpendersH :: TxHash -> HashMapDB -> IntMap (Maybe Spender)+getSpendersH t = M.lookupDefault I.empty t . hSpender++getBalanceH :: Address -> HashMapDB -> Maybe Balance+getBalanceH a = fmap f . M.lookup a . hBalance+  where+    f b =+        Balance+            { balanceAddress = a+            , balanceAmount = balValAmount b+            , balanceZero = balValZero b+            , balanceUnspentCount = balValUnspentCount b+            , balanceTxCount = balValTxCount b+            , balanceTotalReceived = balValTotalReceived b+            }++getMempoolH ::+       Monad m+    => Maybe PreciseUnixTime+    -> HashMapDB+    -> ConduitT () (PreciseUnixTime, TxHash) m ()+getMempoolH mpu db =+    let f ts =+            case mpu of+                Nothing -> False+                Just pu -> ts > pu+        ls =+            dropWhile (f . fst) .+            sortBy (flip compare) . M.toList . M.map (M.keys . M.filter id) $+            hMempool db+     in yieldMany [(u, h) | (u, hs) <- ls, h <- hs]++getAddressTxsH :: Address -> Maybe BlockRef -> HashMapDB -> [BlockTx]+getAddressTxsH a mbr db =+    dropWhile h .+    sortBy (flip compare) . catMaybes . concatMap (uncurry f) . M.toList $+    M.lookupDefault M.empty a (hAddrTx db)+  where+    f b hm = map (uncurry (g b)) $ M.toList hm+    g b h' True =+        Just+            BlockTx+                {blockTxBlock = b, blockTxHash = h'}+    g _ _ False = Nothing+    h BlockTx {blockTxBlock = b} =+        case mbr of+            Nothing -> False+            Just br -> b > br++getAddressUnspentsH ::+       Address -> Maybe BlockRef -> HashMapDB -> [Unspent]+getAddressUnspentsH a mbr db =+    dropWhile h .+    sortBy (flip compare) . catMaybes . concatMap (uncurry f) . M.toList $+    M.lookupDefault M.empty a (hAddrOut db)+  where+    f b hm = map (uncurry (g b)) $ M.toList hm+    g b p (Just u) =+        Just+            Unspent+                { unspentBlock = b+                , unspentAmount = outValAmount u+                , unspentScript = B.Short.toShort (outValScript u)+                , unspentPoint = p+                }+    g _ _ Nothing = Nothing+    h Unspent {unspentBlock = b} =+        case mbr of+            Nothing -> False+            Just br -> b > br++setInitH :: HashMapDB -> HashMapDB+setInitH db = db {hInit = True}++setBestH :: BlockHash -> HashMapDB -> HashMapDB+setBestH h db = db {hBest = Just h}++insertBlockH :: BlockData -> HashMapDB -> HashMapDB+insertBlockH bd db =+    db {hBlock = M.insert (headerHash (blockDataHeader bd)) bd (hBlock db)}++insertAtHeightH :: BlockHash -> BlockHeight -> HashMapDB -> HashMapDB+insertAtHeightH h g db = db {hHeight = M.insertWith f g [h] (hHeight db)}+  where+    f xs ys = nub $ xs <> ys++insertTxH :: TxData -> HashMapDB -> HashMapDB+insertTxH tx db = db {hTx = M.insert (txHash (txData tx)) tx (hTx db)}++insertSpenderH :: OutPoint -> Spender -> HashMapDB -> HashMapDB+insertSpenderH op s db =+    db+        { hSpender =+              M.insertWith+                  (<>)+                  (outPointHash op)+                  (I.singleton (fromIntegral (outPointIndex op)) (Just s))+                  (hSpender db)+        }++deleteSpenderH :: OutPoint -> HashMapDB -> HashMapDB+deleteSpenderH op db =+    db+        { hSpender =+              M.insertWith+                  (<>)+                  (outPointHash op)+                  (I.singleton (fromIntegral (outPointIndex op)) Nothing)+                  (hSpender db)+        }++setBalanceH :: Balance -> HashMapDB -> HashMapDB+setBalanceH b db = db {hBalance = M.insert (balanceAddress b) x (hBalance db)}+  where+    x =+                BalVal+                    { balValAmount = balanceAmount b+                    , balValZero = balanceZero b+                    , balValUnspentCount = balanceUnspentCount b+                    , balValTxCount = balanceTxCount b+                    , balValTotalReceived = balanceTotalReceived b+                    }++insertAddrTxH :: Address -> BlockTx -> HashMapDB -> HashMapDB+insertAddrTxH a btx db =+    let s =+            M.singleton+                a+                (M.singleton+                     (blockTxBlock btx)+                     (M.singleton (blockTxHash btx) True))+     in db {hAddrTx = M.unionWith (M.unionWith M.union) s (hAddrTx db)}++removeAddrTxH :: Address -> BlockTx -> HashMapDB -> HashMapDB+removeAddrTxH a btx db =+    let s =+            M.singleton+                a+                (M.singleton+                     (blockTxBlock btx)+                     (M.singleton (blockTxHash btx) False))+     in db {hAddrTx = M.unionWith (M.unionWith M.union) s (hAddrTx db)}++insertAddrUnspentH :: Address -> Unspent -> HashMapDB -> HashMapDB+insertAddrUnspentH a u db =+    let uns =+            OutVal+                { outValAmount = unspentAmount u+                , outValScript = B.Short.fromShort (unspentScript u)+                }+        s =+            M.singleton+                a+                (M.singleton+                     (unspentBlock u)+                     (M.singleton (unspentPoint u) (Just uns)))+     in db {hAddrOut = M.unionWith (M.unionWith M.union) s (hAddrOut db)}++removeAddrUnspentH :: Address -> Unspent -> HashMapDB -> HashMapDB+removeAddrUnspentH a u db =+    let s =+            M.singleton+                a+                (M.singleton+                     (unspentBlock u)+                     (M.singleton (unspentPoint u) Nothing))+     in db {hAddrOut = M.unionWith (M.unionWith M.union) s (hAddrOut db)}++insertMempoolTxH :: TxHash -> PreciseUnixTime -> HashMapDB -> HashMapDB+insertMempoolTxH h u db =+    let s = M.singleton u (M.singleton h True)+     in db {hMempool = M.unionWith M.union s (hMempool db)}++deleteMempoolTxH :: TxHash -> PreciseUnixTime -> HashMapDB -> HashMapDB+deleteMempoolTxH h u db =+    let s = M.singleton u (M.singleton h False)+     in db {hMempool = M.unionWith M.union s (hMempool db)}++getUnspentH :: OutPoint -> HashMapDB -> Maybe (Maybe Unspent)+getUnspentH op db = do+    m <- M.lookup (outPointHash op) (hUnspent db)+    I.lookup (fromIntegral (outPointIndex op)) m++addUnspentH :: Unspent -> HashMapDB -> HashMapDB+addUnspentH u db =+    db+        { hUnspent =+              M.insertWith+                  (<>)+                  (outPointHash (unspentPoint u))+                  (I.singleton+                       (fromIntegral (outPointIndex (unspentPoint u)))+                       (Just u))+                  (hUnspent db)+        }++delUnspentH :: OutPoint -> HashMapDB -> HashMapDB+delUnspentH op db =+    db+        { hUnspent =+              M.insertWith+                  (<>)+                  (outPointHash op)+                  (I.singleton (fromIntegral (outPointIndex op)) Nothing)+                  (hUnspent db)+        }++instance StoreRead BlockSTM where+    isInitialized = fmap isInitializedH . lift . readTVar =<< R.ask+    getBestBlock = fmap getBestBlockH . lift . readTVar =<< R.ask+    getBlocksAtHeight h =+        fmap (getBlocksAtHeightH h) . lift . readTVar =<< R.ask+    getBlock b = fmap (getBlockH b) . lift . readTVar =<< R.ask+    getTxData t = fmap (getTxDataH t) . lift . readTVar =<< R.ask+    getSpender t = fmap (join . getSpenderH t) . lift . readTVar =<< R.ask+    getSpenders t =+        fmap (I.map fromJust . I.filter isJust . getSpendersH t) .+        lift . readTVar =<<+        R.ask++instance BalanceRead BlockSTM where+    getBalance a = fmap (getBalanceH a) . lift . readTVar =<< R.ask++instance UnspentRead BlockSTM where+    getUnspent op = fmap (join . getUnspentH op) . lift . readTVar =<< R.ask++instance BalanceWrite BlockSTM where+    setBalance b = lift . (`modifyTVar` setBalanceH b) =<< R.ask+    pruneBalance = return ()++instance StoreStream BlockSTM where+    getMempool m = getMempoolH m =<< lift . lift . readTVar =<< lift R.ask+    getAddressTxs a m =+        yieldMany . getAddressTxsH a m =<< lift . lift . readTVar =<< lift R.ask+    getAddressUnspents a m =+        yieldMany . getAddressUnspentsH a m =<<+        lift . lift . readTVar =<< lift R.ask++instance StoreWrite BlockSTM where+    setInit = lift . (`modifyTVar` setInitH) =<< R.ask+    setBest h = lift . (`modifyTVar` setBestH h) =<< R.ask+    insertBlock b = lift . (`modifyTVar` insertBlockH b) =<< R.ask+    insertAtHeight h g = lift . (`modifyTVar` insertAtHeightH h g) =<< R.ask+    insertTx t = lift . (`modifyTVar` insertTxH t) =<< R.ask+    insertSpender p s = lift . (`modifyTVar` insertSpenderH p s) =<< R.ask+    deleteSpender p = lift . (`modifyTVar` deleteSpenderH p) =<< R.ask+    insertAddrTx a t = lift . (`modifyTVar` insertAddrTxH a t) =<< R.ask+    removeAddrTx a t = lift . (`modifyTVar` removeAddrTxH a t) =<< R.ask+    insertAddrUnspent a u =+        lift . (`modifyTVar` insertAddrUnspentH a u) =<< R.ask+    removeAddrUnspent a u =+        lift . (`modifyTVar` removeAddrUnspentH a u) =<< R.ask+    insertMempoolTx h t = lift . (`modifyTVar` insertMempoolTxH h t) =<< R.ask+    deleteMempoolTx h t = lift . (`modifyTVar` deleteMempoolTxH h t) =<< R.ask++instance UnspentWrite BlockSTM where+    addUnspent h = lift . (`modifyTVar` addUnspentH h) =<< R.ask+    delUnspent p = lift . (`modifyTVar` delUnspentH p) =<< R.ask+    pruneUnspent = return ()++instance UnspentRead UnspentSTM where+    getUnspent op = do+        um <- lift . readTVar =<< R.ask+        return $ do+            m <- M.lookup (outPointHash op) um+            I.lookup (fromIntegral (outPointIndex op)) m++instance UnspentWrite UnspentSTM where+    addUnspent u = do+        v <- R.ask+        lift . modifyTVar v $+            M.insertWith+                (<>)+                (outPointHash (unspentPoint u))+                (I.singleton (fromIntegral (outPointIndex (unspentPoint u))) u)+    delUnspent op = lift . (`modifyTVar` M.update g (outPointHash op)) =<< R.ask+      where+        g m =+            let n = I.delete (fromIntegral (outPointIndex op)) m+             in if I.null n+                    then Nothing+                    else Just n+    pruneUnspent = do+        v <- R.ask+        lift . modifyTVar v $ \um ->+            if M.size um > 2 ^ (21 :: Int)+                then let g is = unspentBlock (head (I.elems is))+                         ls =+                             sortBy+                                 (compare `on` (g . snd))+                                 (filter (not . I.null . snd) (M.toList um))+                      in M.fromList (drop (2 ^ (20 :: Int)) ls)+                else um++instance BalanceRead BalanceSTM where+    getBalance a = do+        b <- fmap fst $ lift . readTVar =<< R.ask+        return $ M.lookup a b++instance BalanceWrite BalanceSTM where+    setBalance b = do+        v <- R.ask+        lift . modifyTVar v $ \(m, s) ->+            let m' = M.insert (balanceAddress b) b m+                s' = balanceAddress b : s+             in (m', s')+    pruneBalance = do+        v <- R.ask+        lift . modifyTVar v $ \(m, s) ->+            if length s > 2 ^ (21 :: Int)+                then let s' = take (2 ^ (20 :: Int)) s+                         m' = M.fromList (mapMaybe (g m) s')+                      in (m', s')+                else (m, s)+      where+        g m a = (a, ) <$> M.lookup a m
src/Network/Haskoin/Store/Logic.hs view
@@ -18,13 +18,14 @@ import           Data.Maybe import           Data.Serialize import           Data.String+import           Data.Text                           (Text) import           Data.Word import           Database.RocksDB import           Haskoin import           Network.Haskoin.Block.Headers       (computeSubsidy) import           Network.Haskoin.Store.Data-import           Network.Haskoin.Store.Data.HashMap import           Network.Haskoin.Store.Data.ImportDB+import           Network.Haskoin.Store.Data.STM import           UnliftIO  data ImportException@@ -59,8 +60,8 @@     -> TVar BalanceMap     -> m () initDB net db um bm =-    runImportDB db um bm $ \i ->-        isInitialized i >>= \case+    runImportDB db um bm $+        isInitialized >>= \case             Left e -> do                 $(logErrorS) "BlockLogic" $                     "Initialization exception: " <> fromString (show e)@@ -72,28 +73,27 @@                 $(logDebugS)                     "BlockLogic"                     "Initializing database by importing genesis block"-                importBlock net i (genesisBlock net) (genesisNode net)-                setInit i+                importBlock net (genesisBlock net) (genesisNode net)+                setInit  newMempoolTx ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> Tx     -> PreciseUnixTime     -> m Bool-newMempoolTx net i tx now@(PreciseUnixTime w) = do+newMempoolTx net tx now@(PreciseUnixTime w) = do     $(logInfoS) "BlockLogic" $         "Adding transaction to mempool: " <> txHashToHex (txHash tx)-    getTxData i (txHash tx) >>= \case+    getTxData (txHash tx) >>= \case         Just x             | not (txDataDeleted x) -> do                 $(logWarnS) "BlockLogic" $@@ -104,7 +104,7 @@     go = do         orp <-             any isNothing <$>-            mapM (getTxData i . outPointHash . prevOutput) (txIn tx)+            mapM (getTxData . outPointHash . prevOutput) (txIn tx)         if orp             then do                 $(logErrorS) "BlockLogic" $@@ -114,12 +114,12 @@     f = do         us <-             forM (txIn tx) $ \TxIn {prevOutput = op} -> do-                t <- getImportTx i (outPointHash op)+                t <- getImportTx (outPointHash op)                 getTxOutput (outPointIndex op) t         let ds = map spenderHash (mapMaybe outputSpender us)         if null ds             then do-                importTx net i (MemRef now) (w `div` 1000) tx+                importTx net (MemRef now) (w `div` 1000) tx                 return True             else g ds     g ds = do@@ -135,16 +135,16 @@     r ds = do         $(logWarnS) "BlockLogic" $             "Replacting RBF transaction with: " <> txHashToHex (txHash tx)-        forM_ ds (deleteTx net i True)-        importTx net i (MemRef now) (w `div` 1000) tx+        forM_ ds (deleteTx net True)+        importTx net (MemRef now) (w `div` 1000) tx         return True     n = do         $(logWarnS) "BlockLogic" $             "Inserting transaction with deleted flag: " <>             txHashToHex (txHash tx)-        insertDeletedMempoolTx i tx now+        insertDeletedMempoolTx tx now         return False-    isrbf th = transactionRBF <$> getImportTx i th+    isrbf th = transactionRBF <$> getImportTx th  newBlock ::        (MonadError ImportException m, MonadIO m, MonadLogger m)@@ -155,30 +155,29 @@     -> Block     -> BlockNode     -> m ()-newBlock net db um bm b n = runImportDB db um bm $ \i -> importBlock net i b n+newBlock net db um bm b n = runImportDB db um bm $ importBlock net b n  revertBlock ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> BlockHash     -> m ()-revertBlock net i bh = do+revertBlock net bh = do     bd <--        getBestBlock i >>= \case+        getBestBlock >>= \case             Nothing -> do                 $(logErrorS) "BlockLogic" "Best block unknown"                 throwError BestBlockUnknown             Just h ->-                getBlock i h >>= \case+                getBlock h >>= \case                     Nothing -> do                         $(logErrorS) "BlockLogic" "Best block not found"                         throwError (BestBlockNotFound h)@@ -189,28 +188,27 @@                                 "Attempted to delete block that isn't best: " <>                                 blockHashToHex h                             throwError (BlockNotBest bh)-    txs <- mapM (fmap transactionData . getImportTx i) (blockDataTxs bd)-    mapM_ (deleteTx net i False . txHash) (reverse (sortTxs txs))-    setBest i (prevBlock (blockDataHeader bd))-    insertBlock i bd {blockDataMainChain = False}+    txs <- mapM (fmap transactionData . getImportTx) (blockDataTxs bd)+    mapM_ (deleteTx net False . txHash) (reverse (sortTxs txs))+    setBest (prevBlock (blockDataHeader bd))+    insertBlock bd {blockDataMainChain = False}  importBlock ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> Block     -> BlockNode     -> m ()-importBlock net i b n = do-    getBestBlock i >>= \case+importBlock net b n = do+    getBestBlock >>= \case         Nothing             | isGenesis n -> do                 $(logInfoS) "BlockLogic" $@@ -231,7 +229,6 @@                     blockHashToHex h                 throwError (PrevBlockNotBest (prevBlock (nodeHeader n)))     insertBlock-        i         BlockData             { blockDataHeight = nodeHeight n             , blockDataMainChain = True@@ -244,13 +241,12 @@             , blockDataFees = cb_out_val - subsidy (nodeHeight n)             , blockDataOutputs = ts_out_val             }-    insertAtHeight i (headerHash (nodeHeader n)) (nodeHeight n)-    setBest i (headerHash (nodeHeader n))+    insertAtHeight (headerHash (nodeHeader n)) (nodeHeight n)+    setBest (headerHash (nodeHeader n))     zipWithM_         (\x t ->              importTx                  net-                 i                  (br x)                  (fromIntegral (blockTimestamp (nodeHeader n)))                  t)@@ -259,7 +255,7 @@   where     subsidy = computeSubsidy net     cb_out_val = sum (map outValue (txOut (head (blockTxns b))))-    ts_out_val = sum (map (\tx -> sum (map outValue (txOut tx))) (tail (blockTxns b)))+    ts_out_val = sum (map (sum . map outValue . txOut) (tail (blockTxns b)))     br pos = BlockRef {blockRefHeight = nodeHeight n, blockRefPos = pos}     w = let s = B.length (encode b {blockTxns = map (\t -> t {txWitness = []}) (blockTxns b)})             x = B.length (encode b)@@ -276,21 +272,20 @@  importTx ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> BlockRef     -> Word64 -- ^ unix time     -> Tx     -> m ()-importTx net i br tt tx = do+importTx net br tt tx = do     when (length (nub (map prevOutput (txIn tx))) < length (txIn tx)) $ do         $(logErrorS) "BlockLogic" $             "Transaction spends same output twice: " <> txHashToHex (txHash tx)@@ -300,7 +295,6 @@             "Attempting to import coinbase to the mempool: " <>             txHashToHex (txHash tx)         throwError (UnconfirmedCoinbase (txHash tx))-    -- If unspent is nothing this transaction exists already     us <-         fromMaybe [] . sequence <$>         if iscb@@ -312,10 +306,10 @@         $(logErrorS) "BlockLogic" $             "Insufficient funds: " <> txHashToHex (txHash tx)         throwError (InsufficientFunds th)-    zipWithM_ (spendOutput net i br (txHash tx)) [0 ..] us+    zipWithM_ (spendOutput net br (txHash tx)) [0 ..] us     if | iscb || not (null us) ->            do zipWithM_-                  (newOutput i br . OutPoint (txHash tx))+                  (newOutput br . OutPoint (txHash tx))                   [0 ..]                   (txOut tx)               rbf <- getrbf@@ -334,11 +328,11 @@                           , transactionTime = tt                           }               let (d, _) = fromTransaction t-              insertTx i d-              updateAddressCounts i (txAddresses t) (+1)+              insertTx d+              updateAddressCounts (txAddresses t) (+1)               unless (confirmed br) $-                  insertMempoolTx i (txHash tx) (memRefTime br)-       | null us && confirmed br -> confirmTx net i br tx+                  insertMempoolTx (txHash tx) (memRefTime br)+       | null us && confirmed br -> confirmTx net br tx        | otherwise ->            do $(logErrorS) "BlockLogic" $                   "Invalid operation required for transaction: " <>@@ -346,7 +340,7 @@               throwError (TxInvalidOp (txHash tx))   where     uns op =-        getUnspent i op >>= \case+        getUnspent op >>= \case             Nothing                 | confirmed br -> do                     $(logWarnS) "BlockLogic" $@@ -354,7 +348,7 @@                         txHashToHex (outPointHash op) <>                         " " <>                         fromString (show (outPointIndex op))-                    getSpender i op >>= \case+                    getSpender op >>= \case                         Nothing -> do                             $(logErrorS) "BlockLogic" $                                 "Could not find output: " <>@@ -368,8 +362,8 @@                                 $(logWarnS) "BlockLogic" $                                     "Deleting conflicting transaction: " <>                                     txHashToHex (spenderHash s)-                                deleteTx net i True (spenderHash s)-                                getUnspent i op >>= \case+                                deleteTx net True (spenderHash s)+                                getUnspent op >>= \case                                     Nothing -> do                                         $(logErrorS) "BlockLogic" $                                             "Transaction double-spend detected: " <>@@ -393,21 +387,21 @@         | otherwise =             let hs = nub $ map (outPointHash . prevOutput) (txIn tx)              in fmap or . forM hs $ \h ->-                    getTxData i h >>= \case+                    getTxData h >>= \case                         Nothing -> throwError (TxNotFound h)                         Just t                             | confirmed (txDataBlock t) -> return False                             | txDataRBF t -> return True                             | otherwise -> return False     mkcb ip w =-        Coinbase+        StoreCoinbase             { inputPoint = prevOutput ip             , inputSequence = txInSequence ip             , inputSigScript = scriptInput ip             , inputWitness = w             }     mkin u ip w =-        Input+        StoreInput             { inputPoint = prevOutput ip             , inputSequence = txInSequence ip             , inputSigScript = scriptInput ip@@ -416,7 +410,7 @@             , inputWitness = w             }     mkout o =-        Output+        StoreOutput             { outputAmount = outValue o             , outputScript = scriptOutput o             , outputSpender = Nothing@@ -424,21 +418,20 @@  confirmTx ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , BalanceRead i m-       , BalanceWrite i m-       , UnspentRead i m-       , UnspentWrite i m+       , StoreRead m+       , StoreWrite m+       , BalanceRead m+       , BalanceWrite m+       , UnspentRead m+       , UnspentWrite m        , MonadLogger m        )     => Network-    -> i     -> BlockRef     -> Tx     -> m ()-confirmTx net i br tx =-    getTxData i (txHash tx) >>= \case+confirmTx net br tx =+    getTxData (txHash tx) >>= \case         Nothing -> do             $(logErrorS) "BlockLogic" $                 "Transaction not found: " <> txHashToHex (txHash tx)@@ -449,14 +442,12 @@                     Left _ -> return ()                     Right a -> do                         removeAddrTx-                            i                             a                             BlockTx                                 { blockTxBlock = txDataBlock t                                 , blockTxHash = txHash tx                                 }                         insertAddrTx-                            i                             a                             BlockTx                                 { blockTxBlock = br@@ -464,11 +455,10 @@                                 }             forM_ (zip [0 ..] (txOut tx)) $ \(n, o) -> do                 let op = OutPoint (txHash tx) n-                s <- getSpender i (OutPoint (txHash tx) n)+                s <- getSpender (OutPoint (txHash tx) n)                 when (isNothing s) $ do-                    delUnspent i op+                    delUnspent op                     addUnspent-                        i                         Unspent                             { unspentBlock = br                             , unspentPoint = op@@ -479,14 +469,12 @@                     Left _ -> return ()                     Right a -> do                         removeAddrTx-                            i                             a                             BlockTx                                 { blockTxBlock = txDataBlock t                                 , blockTxHash = txHash tx                                 }                         insertAddrTx-                            i                             a                             BlockTx                                 { blockTxBlock = br@@ -494,7 +482,6 @@                                 }                         when (isNothing s) $ do                             removeAddrUnspent-                                i                                 a                                 Unspent                                     { unspentBlock = txDataBlock t@@ -504,7 +491,6 @@                                           B.Short.toShort (scriptOutput o)                                     }                             insertAddrUnspent-                                i                                 a                                 Unspent                                     { unspentBlock = br@@ -513,41 +499,40 @@                                     , unspentScript =                                           B.Short.toShort (scriptOutput o)                                     }-                            reduceBalance net i False False a (outValue o)-                            increaseBalance i True False a (outValue o)-            insertTx i t {txDataBlock = br}-            deleteMempoolTx i (txHash tx) (memRefTime (txDataBlock t))+                            reduceBalance net False False a (outValue o)+                            increaseBalance True False a (outValue o)+            insertTx t {txDataBlock = br}+            deleteMempoolTx (txHash tx) (memRefTime (txDataBlock t))  getRecursiveTx ::-       (Monad m, StoreRead i m, MonadLogger m) => i -> TxHash -> m [Transaction]-getRecursiveTx i th =-    getTxData i th >>= \case+       (Monad m, StoreRead m, MonadLogger m) => TxHash -> m [Transaction]+getRecursiveTx th =+    getTxData th >>= \case         Nothing -> return []         Just d -> do-            sm <- getSpenders i th+            sm <- getSpenders th             let t = toTransaction d sm             fmap (t :) $ do                 let ss = nub . map spenderHash $ I.elems sm-                concat <$> mapM (getRecursiveTx i) ss+                concat <$> mapM getRecursiveTx ss  deleteTx ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> Bool -- ^ only delete transaction if unconfirmed     -> TxHash     -> m ()-deleteTx net i mo h = do+deleteTx net mo h = do     $(logDebugS) "BlockLogic" $ "Deleting transaction: " <> txHashToHex h-    getTxData i h >>= \case+    getTxData h >>= \case         Nothing -> do             $(logErrorS) "BlockLogic" $                 "Transaciton not found: " <> txHashToHex h@@ -564,31 +549,30 @@             | otherwise -> go t   where     go t = do-        ss <- nub . map spenderHash . I.elems <$> getSpenders i h-        mapM_ (deleteTx net i True) ss+        ss <- nub . map spenderHash . I.elems <$> getSpenders h+        mapM_ (deleteTx net True) ss         forM_ (take (length (txOut (txData t))) [0 ..]) $ \n ->-            delOutput net i (OutPoint h n)+            delOutput net (OutPoint h n)         let ps = filter (/= nullOutPoint) (map prevOutput (txIn (txData t)))-        mapM_ (unspendOutput i) ps+        mapM_ unspendOutput ps         unless (confirmed (txDataBlock t)) $-            deleteMempoolTx i h (memRefTime (txDataBlock t))-        insertTx i t {txDataDeleted = True}-        updateAddressCounts i (txDataAddresses t) (subtract 1)+            deleteMempoolTx h (memRefTime (txDataBlock t))+        insertTx t {txDataDeleted = True}+        updateAddressCounts (txDataAddresses t) (subtract 1)  insertDeletedMempoolTx ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m+       , StoreRead m+       , StoreWrite m        , MonadLogger m        )-    => i-    -> Tx+    => Tx     -> PreciseUnixTime     -> m ()-insertDeletedMempoolTx i tx now@(PreciseUnixTime w) = do+insertDeletedMempoolTx tx now@(PreciseUnixTime w) = do     us <-         forM (txIn tx) $ \TxIn {prevOutput = op} ->-            getImportTx i (outPointHash op) >>= getTxOutput (outPointIndex op)+            getImportTx (outPointHash op) >>= getTxOutput (outPointIndex op)     rbf <- getrbf     let (d, _) =             fromTransaction@@ -604,7 +588,7 @@                     }     $(logWarnS) "BlockLogic" $         "Inserting deleted mempool transaction: " <> txHashToHex (txHash tx)-    insertTx i d+    insertTx d   where     ws = map Just (txWitness tx) <> repeat Nothing     getrbf@@ -612,7 +596,7 @@         | otherwise =             let hs = nub $ map (outPointHash . prevOutput) (txIn tx)              in fmap or . forM hs $ \h ->-                    getTxData i h >>= \case+                    getTxData h >>= \case                         Nothing -> do                             $(logErrorS) "BlockLogic" $                                 "Transaction not found: " <> txHashToHex h@@ -622,7 +606,7 @@                             | txDataRBF t -> return True                             | otherwise -> return False     mkin u ip wit =-        Input+        StoreInput             { inputPoint = prevOutput ip             , inputSequence = txInSequence ip             , inputSigScript = scriptInput ip@@ -631,7 +615,7 @@             , inputWitness = wit             }     mkout o =-        Output+        StoreOutput             { outputAmount = outValue o             , outputScript = scriptOutput o             , outputSpender = Nothing@@ -639,33 +623,31 @@  newOutput ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )-    => i-    -> BlockRef+    => BlockRef     -> OutPoint     -> TxOut     -> m ()-newOutput i br op to = do-    addUnspent i u+newOutput br op to = do+    addUnspent u     case scriptToAddressBS (scriptOutput to) of         Left _ -> return ()         Right a -> do-            insertAddrUnspent i a u+            insertAddrUnspent a u             insertAddrTx-                i                 a                 BlockTx                     { blockTxHash = outPointHash op                     , blockTxBlock = br                     }-            increaseBalance i (confirmed br) True a (outValue to)+            increaseBalance (confirmed br) True a (outValue to)   where     u =         Unspent@@ -677,27 +659,25 @@  delOutput ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> OutPoint     -> m ()-delOutput net i op = do-    t <- getImportTx i (outPointHash op)+delOutput net op = do+    t <- getImportTx (outPointHash op)     u <- getTxOutput (outPointIndex op) t-    delUnspent i op+    delUnspent op     case scriptToAddressBS (outputScript u) of         Left _ -> return ()         Right a -> do             removeAddrUnspent-                i                 a                 Unspent                     { unspentScript = B.Short.toShort (outputScript u)@@ -706,7 +686,6 @@                     , unspentAmount = outputAmount u                     }             removeAddrTx-                i                 a                 BlockTx                     { blockTxHash = outPointHash op@@ -714,19 +693,17 @@                     }             reduceBalance                 net-                i                 (confirmed (transactionBlock t))                 True                 a                 (outputAmount u)  getImportTx ::-       (MonadError ImportException m, StoreRead i m, MonadLogger m)-    => i-    -> TxHash+       (MonadError ImportException m, StoreRead m, MonadLogger m)+    => TxHash     -> m Transaction-getImportTx i th =-    getTxData i th >>= \case+getImportTx th =+    getTxData th >>= \case         Nothing -> do             $(logErrorS) "BlockLogic" $                 "Tranasction not found: " <> txHashToHex th@@ -737,14 +714,14 @@                     "Transaction deleted: " <> txHashToHex th                 throwError $ TxDeleted th             | otherwise -> do-                sm <- getSpenders i th+                sm <- getSpenders th                 return $ toTransaction d sm  getTxOutput ::        (MonadError ImportException m, MonadLogger m)     => Word32     -> Transaction-    -> m Output+    -> m StoreOutput getTxOutput i tx = do     unless (fromIntegral i < length (transactionOutputs tx)) $ do         $(logErrorS) "BlockLogic" $@@ -761,24 +738,22 @@  spendOutput ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> BlockRef     -> TxHash     -> Word32     -> Unspent     -> m ()-spendOutput net i br th ix u = do+spendOutput net br th ix u = do     insertSpender-        i         (unspentPoint u)         Spender {spenderHash = th, spenderIndex = ix}     case scriptToAddressBS (B.Short.fromShort (unspentScript u)) of@@ -786,36 +761,33 @@         Right a -> do             reduceBalance                 net-                i                 (confirmed (unspentBlock u))                 False                 a                 (unspentAmount u)-            removeAddrUnspent i a u+            removeAddrUnspent a u             insertAddrTx-                i                 a                 BlockTx                     { blockTxHash = th                     , blockTxBlock = br                     }-    delUnspent i (unspentPoint u)+    delUnspent (unspentPoint u)  unspendOutput ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , UnspentRead i m-       , UnspentWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , UnspentRead m+       , UnspentWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )-    => i-    -> OutPoint+    => OutPoint     -> m ()-unspendOutput i op = do-    t <- getImportTx i (outPointHash op)+unspendOutput op = do+    t <- getImportTx (outPointHash op)     o <- getTxOutput (outPointIndex op) t     s <-         case outputSpender o of@@ -826,8 +798,8 @@                     fromString (show (outPointIndex op))                 throwError (AlreadyUnspent op)             Just s -> return s-    x <- getImportTx i (spenderHash s)-    deleteSpender i op+    x <- getImportTx (spenderHash s)+    deleteSpender op     let u =             Unspent                 { unspentAmount = outputAmount o@@ -835,20 +807,18 @@                 , unspentScript = B.Short.toShort (outputScript o)                 , unspentPoint = op                 }-    addUnspent i u+    addUnspent u     case scriptToAddressBS (outputScript o) of         Left _ -> return ()         Right a -> do-            insertAddrUnspent i a u+            insertAddrUnspent a u             removeAddrTx-                i                 a                 BlockTx                     { blockTxHash = spenderHash s                     , blockTxBlock = transactionBlock x                     }             increaseBalance-                i                 (confirmed (unspentBlock u))                 False                 a@@ -856,24 +826,22 @@  reduceBalance ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )     => Network-    -> i     -> Bool -- ^ spend or delete confirmed output     -> Bool -- ^ reduce total received     -> Address     -> Word64     -> m ()-reduceBalance net i c t a v =-    getBalance i a >>= \case+reduceBalance net c t a v =+    getBalance a >>= \case         Nothing -> do-            $(logErrorS) "BlockLogic" $-                "Balance not found: " <> addrToString net a+            $(logErrorS) "BlockLogic" $ "Balance not found: " <> addrText net a             throwError (BalanceNotFound a)         Just b -> do             when@@ -887,12 +855,12 @@                          then "confirmed "                          else "unconfirmed ") <>                     "balance: " <>-                    addrToString net a+                    addrText net a                 throwError $                     if c                         then InsufficientBalance a                         else InsufficientZeroBalance a-            setBalance i $+            setBalance                 b                     { balanceAmount =                           balanceAmount b -@@ -914,21 +882,20 @@  increaseBalance ::        ( MonadError ImportException m-       , StoreRead i m-       , StoreWrite i m-       , BalanceRead i m-       , BalanceWrite i m+       , StoreRead m+       , StoreWrite m+       , BalanceRead m+       , BalanceWrite m        , MonadLogger m        )-    => i-    -> Bool -- ^ add confirmed output+    => Bool -- ^ add confirmed output     -> Bool -- ^ increase total received     -> Address     -> Word64     -> m ()-increaseBalance i c t a v = do+increaseBalance c t a v = do     b <--        getBalance i a >>= \case+        getBalance a >>= \case             Nothing ->                 return                     Balance@@ -940,7 +907,7 @@                         , balanceTotalReceived = 0                         }             Just b -> return b-    setBalance i $+    setBalance         b             { balanceAmount =                   balanceAmount b +@@ -961,18 +928,17 @@             }  updateAddressCounts ::-       (MonadError ImportException m, BalanceWrite i m, BalanceRead i m)-    => i-    -> [Address]+       (MonadError ImportException m, BalanceWrite m, BalanceRead m)+    => [Address]     -> (Word64 -> Word64)     -> m ()-updateAddressCounts i as f =+updateAddressCounts as f =     forM_ as $ \a -> do         b <--            getBalance i a >>= \case+            getBalance a >>= \case                 Nothing -> throwError (BalanceNotFound a)                 Just b -> return b-        setBalance i b {balanceTxCount = f (balanceTxCount b)}+        setBalance b {balanceTxCount = f (balanceTxCount b)}  txAddresses :: Transaction -> [Address] txAddresses t =@@ -986,3 +952,6 @@     nub . rights $     map (scriptToAddressBS . prevScript) (I.elems (txDataPrevs t)) <>     map (scriptToAddressBS . scriptOutput) (txOut (txData t))++addrText :: Network -> Address -> Text+addrText net a = fromMaybe "[unreprestable]" $ addrToString net a
− src/Network/Haskoin/Store/Proto.hs
@@ -1,437 +0,0 @@-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE MultiParamTypeClasses #-}-module Network.Haskoin.Store.Proto where--import           Data.ByteString                                          (ByteString)-import qualified Data.ByteString                                          as B-import qualified Data.ByteString.Lazy                                     as L-import qualified Data.ByteString.Lazy.Char8                               as L8-import qualified Data.ByteString.Short                                    as S-import qualified Data.Sequence                                            as Seq-import           Data.Serialize-import qualified Data.Text                                                as T-import qualified Data.Text.Encoding                                       as E-import           Data.Version-import           Haskoin-import           Network.Haskoin.Store.Data-import qualified Network.Haskoin.Store.ProtocolBuffers.Balance            as P.Balance-import qualified Network.Haskoin.Store.ProtocolBuffers.BalanceList        as P.BalanceList-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockData          as P.BlockData-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockDataList      as P.BlockDataList-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef           as P.BlockRef-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block     as P.BlockRef.Block-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block_ref as P.BlockRef.Block_ref-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Mempool   as P.BlockRef.Mempool-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockTx            as P.BlockTx-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockTxList        as P.BlockTxList-import qualified Network.Haskoin.Store.ProtocolBuffers.Error              as P.Error-import qualified Network.Haskoin.Store.ProtocolBuffers.Event              as P.Event-import qualified Network.Haskoin.Store.ProtocolBuffers.Event.Type         as P.Event.Type-import qualified Network.Haskoin.Store.ProtocolBuffers.EventList          as P.EventList-import qualified Network.Haskoin.Store.ProtocolBuffers.HealthCheck        as P.HealthCheck-import qualified Network.Haskoin.Store.ProtocolBuffers.Input              as P.Input-import qualified Network.Haskoin.Store.ProtocolBuffers.Output             as P.Output-import qualified Network.Haskoin.Store.ProtocolBuffers.Peer               as P.Peer-import qualified Network.Haskoin.Store.ProtocolBuffers.PeerList           as P.PeerList-import qualified Network.Haskoin.Store.ProtocolBuffers.Spender            as P.Spender-import qualified Network.Haskoin.Store.ProtocolBuffers.Transaction        as P.Transaction-import qualified Network.Haskoin.Store.ProtocolBuffers.TransactionList    as P.TransactionList-import qualified Network.Haskoin.Store.ProtocolBuffers.TxAfterHeight      as P.TxAfterHeight-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId               as P.TxId-import qualified Network.Haskoin.Store.ProtocolBuffers.TxIdList           as P.TxIdList-import qualified Network.Haskoin.Store.ProtocolBuffers.Unspent            as P.Unspent-import qualified Network.Haskoin.Store.ProtocolBuffers.UnspentList        as P.UnspentList-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubBalance        as P.XPubBalance-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubBalanceList    as P.XPubBalanceList-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubUnspent        as P.XPubUnspent-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubUnspentList    as P.XPubUnspentList-import           Paths_haskoin_store                                      as Paths-import           Text.ProtocolBuffers--class ProtoSerial a where-    protoSerial :: Network -> a -> L.ByteString--protoAddress :: Network -> Address -> Utf8-protoAddress net = Utf8 . L.fromStrict . E.encodeUtf8 . addrToString net--protoPkScriptAddr :: Network -> ByteString -> Maybe Utf8-protoPkScriptAddr net pks =-    Utf8 . L.fromStrict . E.encodeUtf8 . addrToString net <$>-    eitherToMaybe (scriptToAddressBS pks)--protoBalance :: Network -> Balance -> P.Balance.Balance-protoBalance net Balance { balanceAddress = a-                         , balanceAmount = v-                         , balanceZero = z-                         , balanceUnspentCount = u-                         , balanceTxCount = c-                         , balanceTotalReceived = t-                         } =-    P.Balance.Balance-        { P.Balance.address = protoAddress net a-        , P.Balance.confirmed = v-        , P.Balance.unconfirmed = z-        , P.Balance.utxo = u-        , P.Balance.received = t-        , P.Balance.txs = c-        }--instance ProtoSerial Balance where-    protoSerial net = messagePut . protoBalance net--protoBalanceList :: Network -> [Balance] -> P.BalanceList.BalanceList-protoBalanceList net bs =-    P.BalanceList.BalanceList-        {P.BalanceList.balance = Seq.fromList (map (protoBalance net) bs)}--instance ProtoSerial [Balance] where-    protoSerial net = messagePut . protoBalanceList net--protoBlockRef :: BlockRef -> P.BlockRef.BlockRef-protoBlockRef BlockRef {blockRefHeight = h, blockRefPos = p} =-    P.BlockRef.BlockRef-        { P.BlockRef.block_ref =-              Just-                  (P.BlockRef.Block_ref.Block-                       { P.BlockRef.Block_ref.block =-                             P.BlockRef.Block.Block-                                 { P.BlockRef.Block.height = h-                                 , P.BlockRef.Block.position = p-                                 }-                       })-        }-protoBlockRef MemRef {memRefTime = PreciseUnixTime t} =-    P.BlockRef.BlockRef-        { P.BlockRef.block_ref =-              Just-                  (P.BlockRef.Block_ref.Mempool-                       { P.BlockRef.Block_ref.mempool =-                             P.BlockRef.Mempool.Mempool-                                 {P.BlockRef.Mempool.mempool = t}-                       })-        }--instance ProtoSerial BlockRef where-    protoSerial _ = messagePut . protoBlockRef--protoBlockTx :: BlockTx -> P.BlockTx.BlockTx-protoBlockTx BlockTx {blockTxBlock = b, blockTxHash = t} =-    P.BlockTx.BlockTx-        { P.BlockTx.block = protoBlockRef b-        , P.BlockTx.txid = protoTxId t-        }--instance ProtoSerial BlockTx where-    protoSerial _ = messagePut . protoBlockTx--protoBlockTxList :: [BlockTx] -> P.BlockTxList.BlockTxList-protoBlockTxList bs =-    P.BlockTxList.BlockTxList-        {P.BlockTxList.blocktx = Seq.fromList (map protoBlockTx bs)}--instance ProtoSerial [BlockTx] where-    protoSerial _ = messagePut . protoBlockTxList--protoUnspent :: Network -> Unspent -> P.Unspent.Unspent-protoUnspent net Unspent { unspentBlock = b-                         , unspentPoint = OutPoint { outPointHash = t-                                                   , outPointIndex = i-                                                   }-                         , unspentAmount = v-                         , unspentScript = s-                         } =-    P.Unspent.Unspent-        { P.Unspent.txid = protoTxId t-        , P.Unspent.index = i-        , P.Unspent.pkscript = L.fromStrict (S.fromShort s)-        , P.Unspent.value = v-        , P.Unspent.block = protoBlockRef b-        , P.Unspent.address = protoPkScriptAddr net (S.fromShort s)-        }--instance ProtoSerial Unspent where-    protoSerial net = messagePut . protoUnspent net--protoUnspentList :: Network -> [Unspent] -> P.UnspentList.UnspentList-protoUnspentList net us =-    P.UnspentList.UnspentList-        {P.UnspentList.unspent = Seq.fromList (map (protoUnspent net) us)}--instance ProtoSerial [Unspent] where-    protoSerial net = messagePut . protoUnspentList net--protoBlockData :: BlockData -> P.BlockData.BlockData-protoBlockData BlockData { blockDataHeight = g-                         , blockDataMainChain = m-                         , blockDataHeader = h-                         , blockDataSize = s-                         , blockDataWeight = e-                         , blockDataTxs = t-                         , blockDataOutputs = o-                         , blockDataFees = f-                         , blockDataSubsidy = y-                         } =-    P.BlockData.BlockData-        { P.BlockData.hash = encodeLazy (headerHash h)-        , P.BlockData.size = s-        , P.BlockData.height = g-        , P.BlockData.mainchain = m-        , P.BlockData.previous = encodeLazy (prevBlock h)-        , P.BlockData.time = blockTimestamp h-        , P.BlockData.version = blockVersion h-        , P.BlockData.bits = blockBits h-        , P.BlockData.nonce = bhNonce h-        , P.BlockData.tx = encodeLazy <$> Seq.fromList t-        , P.BlockData.merkle = encodeLazy (merkleRoot h)-        , P.BlockData.fees = f-        , P.BlockData.outputs = o-        , P.BlockData.subsidy = y-        , P.BlockData.weight = e-        }--instance ProtoSerial BlockData where-    protoSerial _ = messagePut . protoBlockData--protoBlockDataList :: [BlockData] -> P.BlockDataList.BlockDataList-protoBlockDataList bs =-    P.BlockDataList.BlockDataList-        {P.BlockDataList.blockdata = Seq.fromList (map protoBlockData bs)}--instance ProtoSerial [BlockData] where-    protoSerial _ = messagePut . protoBlockDataList--protoInput :: Network -> Input -> P.Input.Input-protoInput _ Coinbase { inputPoint = OutPoint { outPointHash = h-                                              , outPointIndex = i-                                              }-                      , inputSequence = q-                      , inputSigScript = s-                      , inputWitness = w-                      } =-    P.Input.Input-        { P.Input.coinbase = True-        , P.Input.txid = protoTxId h-        , P.Input.output = i-        , P.Input.sigscript = L.fromStrict s-        , P.Input.sequence = q-        , P.Input.witness = Seq.fromList (maybe [] (map L.fromStrict) w)-        , P.Input.value = Nothing-        , P.Input.pkscript = Nothing-        , P.Input.address = Nothing-        }-protoInput net Input { inputPoint = OutPoint { outPointHash = h-                                             , outPointIndex = i-                                             }-                     , inputSequence = q-                     , inputSigScript = s-                     , inputPkScript = k-                     , inputAmount = v-                     , inputWitness = w-                     } =-    P.Input.Input-        { P.Input.coinbase = False-        , P.Input.txid = protoTxId h-        , P.Input.output = i-        , P.Input.sigscript = L.fromStrict s-        , P.Input.sequence = q-        , P.Input.witness = Seq.fromList (maybe [] (map L.fromStrict) w)-        , P.Input.value = Just v-        , P.Input.pkscript = Just (L.fromStrict k)-        , P.Input.address = protoPkScriptAddr net k-        }--protoSpender :: Spender -> P.Spender.Spender-protoSpender Spender {spenderHash = h, spenderIndex = i} =-    P.Spender.Spender {P.Spender.txid = protoTxId h, P.Spender.input = i}--protoOutput :: Network -> Output -> P.Output.Output-protoOutput net Output {outputAmount = v, outputScript = k, outputSpender = s} =-    P.Output.Output-        { P.Output.pkscript = L.fromStrict k-        , P.Output.value = v-        , P.Output.address = protoPkScriptAddr net k-        , P.Output.spender = protoSpender <$> s-        }--protoTransaction :: Network -> Transaction -> P.Transaction.Transaction-protoTransaction net tx@Transaction { transactionBlock = b-                                    , transactionVersion = v-                                    , transactionLockTime = l-                                    , transactionInputs = i-                                    , transactionOutputs = o-                                    , transactionDeleted = d-                                    , transactionRBF = r-                                    , transactionTime = t-                                    } =-    P.Transaction.Transaction-        { P.Transaction.txid = protoTxId (txHash (transactionData tx))-        , P.Transaction.size =-              fromIntegral (B.length (encode (transactionData tx)))-        , P.Transaction.version = v-        , P.Transaction.locktime = l-        , P.Transaction.block = protoBlockRef b-        , P.Transaction.deleted = d-        , P.Transaction.fee =-              if all isCoinbase i-                  then 0-                  else sum (map inputAmount i) - sum (map outputAmount o)-        , P.Transaction.rbf = r-        , P.Transaction.time = t-        , P.Transaction.inputs = Seq.fromList (map (protoInput net) i)-        , P.Transaction.outputs = Seq.fromList (map (protoOutput net) o)-        , P.Transaction.weight =-              if getSegWit net-                  then Just w-                  else Nothing-        }-  where-    w =-        let base = B.length $ encode (transactionData tx) {txWitness = []}-            wit = B.length $ encode (transactionData tx)-         in fromIntegral $ base * 3 + wit--instance ProtoSerial Transaction where-    protoSerial net = messagePut . protoTransaction net--protoTransactionList :: Network -> [Transaction] -> P.TransactionList.TransactionList-protoTransactionList net ts =-    P.TransactionList.TransactionList-        { P.TransactionList.transaction =-              Seq.fromList (map (protoTransaction net) ts)-        }--instance ProtoSerial [Transaction] where-    protoSerial net = messagePut . protoTransactionList net--protoTxId :: TxHash -> P.TxId.TxId-protoTxId t = P.TxId.TxId {P.TxId.txid = encodeLazy t}--protoTxIdList :: [TxHash] -> P.TxIdList.TxIdList-protoTxIdList ts =-    P.TxIdList.TxIdList {P.TxIdList.txid = Seq.fromList (map protoTxId ts)}--instance ProtoSerial [TxHash] where-    protoSerial _ = messagePut . protoTxIdList--protoPeer :: PeerInformation -> P.Peer.Peer-protoPeer PeerInformation { peerUserAgent = u-                          , peerAddress = a-                          , peerVersion = v-                          , peerServices = s-                          , peerRelay = r-                          } =-    P.Peer.Peer-        { P.Peer.useragent =-              either (const (Utf8 L.empty)) id (toUtf8 (L.fromStrict u))-        , P.Peer.address = Utf8 (L8.pack (show a))-        , P.Peer.version = v-        , P.Peer.services = s-        , P.Peer.relay = r-        }--instance ProtoSerial PeerInformation where-    protoSerial _ = messagePut . protoPeer--protoPeerList :: [PeerInformation] -> P.PeerList.PeerList-protoPeerList ps =-    P.PeerList.PeerList {P.PeerList.peer = Seq.fromList (map protoPeer ps)}--instance ProtoSerial [PeerInformation] where-    protoSerial _ = messagePut . protoPeerList--protoXPubBalance :: Network -> XPubBal -> P.XPubBalance.XPubBalance-protoXPubBalance net XPubBal {xPubBalPath = p, xPubBal = b} =-    P.XPubBalance.XPubBalance-        { P.XPubBalance.path = Seq.fromList p-        , P.XPubBalance.balance = protoBalance net b-        }--instance ProtoSerial XPubBal where-    protoSerial net = messagePut . protoXPubBalance net--protoXPubBalanceList :: Network -> [XPubBal] -> P.XPubBalanceList.XPubBalanceList-protoXPubBalanceList net bs =-    P.XPubBalanceList.XPubBalanceList-        { P.XPubBalanceList.xpubbalance =-              Seq.fromList (map (protoXPubBalance net) bs)-        }--instance ProtoSerial [XPubBal] where-    protoSerial net = messagePut . protoXPubBalanceList net--protoXPubUnspent :: Network -> XPubUnspent -> P.XPubUnspent.XPubUnspent-protoXPubUnspent net XPubUnspent {xPubUnspentPath = p, xPubUnspent = u} =-    P.XPubUnspent.XPubUnspent-        { P.XPubUnspent.path = Seq.fromList p-        , P.XPubUnspent.unspent = protoUnspent net u-        }--instance ProtoSerial XPubUnspent where-    protoSerial net = messagePut . protoXPubUnspent net--protoXPubUnspentList :: Network -> [XPubUnspent] -> P.XPubUnspentList.XPubUnspentList-protoXPubUnspentList net us =-    P.XPubUnspentList.XPubUnspentList-        { P.XPubUnspentList.xpubunspent =-              Seq.fromList (map (protoXPubUnspent net) us)-        }--instance ProtoSerial [XPubUnspent] where-    protoSerial net = messagePut . protoXPubUnspentList net--protoEvent :: Event -> P.Event.Event-protoEvent (EventTx h) =-    P.Event.Event {P.Event.type' = P.Event.Type.TX, P.Event.id = encodeLazy h}-protoEvent (EventBlock h) =-    P.Event.Event-        {P.Event.type' = P.Event.Type.BLOCK, P.Event.id = encodeLazy h}--instance ProtoSerial Event where-    protoSerial _ = messagePut . protoEvent--protoEventList :: [Event] -> P.EventList.EventList-protoEventList es =-    P.EventList.EventList {P.EventList.event = Seq.fromList (map protoEvent es)}--instance ProtoSerial [Event] where-    protoSerial _ = messagePut . protoEventList--protoHealthCheck :: HealthCheck -> P.HealthCheck.HealthCheck-protoHealthCheck HealthCheck { healthHeaderBest = maybe_header_hash-                             , healthHeaderHeight = maybe_header_height-                             , healthBlockBest = maybe_block_hash-                             , healthBlockHeight = maybe_block_height-                             , healthPeers = maybe_peer_count-                             , healthNetwork = network_name-                             , healthOK = ok-                             , healthSynced = synced-                             } =-    P.HealthCheck.HealthCheck-        { P.HealthCheck.ok = ok-        , P.HealthCheck.synced = synced-        , P.HealthCheck.version = Utf8 (L8.pack (showVersion Paths.version))-        , P.HealthCheck.net = Utf8 (L8.pack network_name)-        , P.HealthCheck.peers = fromIntegral <$> maybe_peer_count-        , P.HealthCheck.headers_hash = encodeLazy <$> maybe_header_hash-        , P.HealthCheck.headers_height = maybe_header_height-        , P.HealthCheck.blocks_hash = encodeLazy <$> maybe_block_hash-        , P.HealthCheck.blocks_height = maybe_block_height-        }--instance ProtoSerial HealthCheck where-    protoSerial _ = messagePut . protoHealthCheck--protoTxAfterHeight :: TxAfterHeight -> P.TxAfterHeight.TxAfterHeight-protoTxAfterHeight (TxAfterHeight b) = P.TxAfterHeight.TxAfterHeight b--instance ProtoSerial TxAfterHeight where-    protoSerial _ = messagePut . protoTxAfterHeight--protoExcept :: Except -> P.Error.Error-protoExcept = P.Error.Error . Utf8 . L.fromStrict . E.encodeUtf8 . T.pack . show--instance ProtoSerial Except where-    protoSerial _ = messagePut . protoExcept--instance ProtoSerial TxId where-    protoSerial _ (TxId h) = messagePut (protoTxId h)
− src/Network/Haskoin/Store/ProtocolBuffers.hs
@@ -1,23 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers (protoInfo, fileDescriptorProto) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import Text.DescriptorProtos.FileDescriptorProto (FileDescriptorProto)-import Text.ProtocolBuffers.Reflections (ProtoInfo)-import qualified Text.ProtocolBuffers.WireMessage as P' (wireGet,getFromBS)--protoInfo :: ProtoInfo-protoInfo- = Prelude'.read-    "ProtoInfo {protoMod = ProtoName {protobufName = FIName \".ProtocolBuffers\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [], baseName = MName \"ProtocolBuffers\"}, protoFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers.hs\"], protoSource = \"protocol-buffers.proto\", extensionKeys = fromList [], messages = [DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef.hs\"], isGroup = False, fields = fromList [], descOneofs = fromList [OneofInfo {oneofName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block_ref\"}, oneofFName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName' = FName \"block_ref\", baseNamePrefix' = \"\"}, oneofFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Block_ref.hs\"], oneofFields = fromList [(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Block\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block\"}), hsRawDefault = Nothing, hsDefault = Nothing}),(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Mempool\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"mempool\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Mempool\"}), hsRawDefault = Nothing, hsDefault = Nothing})], oneofMakeLenses = False}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Mempool\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Mempool.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Mempool.mempool\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Mempool\"], baseName' = FName \"mempool\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Block.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Block.height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block\"], baseName' = FName \"height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Block.position\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block\"], baseName' = FName \"position\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Balance.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.confirmed\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"confirmed\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.unconfirmed\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"unconfirmed\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.utxo\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"utxo\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.received\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"received\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.txs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"txs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BalanceList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BalanceList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BalanceList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BalanceList.balance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BalanceList\"], baseName' = FName \"balance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Unspent.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.index\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"index\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.UnspentList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"UnspentList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"UnspentList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.UnspentList.unspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"UnspentList\"], baseName' = FName \"unspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalance\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubBalance.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalance.path\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalance\"], baseName' = FName \"path\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Just (WireTag {getWireTag = 0},WireTag {getWireTag = 2}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalance.balance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalance\"], baseName' = FName \"balance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalanceList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalanceList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubBalanceList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalanceList.xpubbalance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalanceList\"], baseName' = FName \"xpubbalance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspent\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubUnspent.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspent.path\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspent\"], baseName' = FName \"path\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Just (WireTag {getWireTag = 0},WireTag {getWireTag = 2}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspent.unspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspent\"], baseName' = FName \"unspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspentList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspentList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubUnspentList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspentList.xpubunspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspentList\"], baseName' = FName \"xpubunspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTx\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTx\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockTx.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTx.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTx\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTx.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTx\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTxList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTxList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockTxList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTxList.blocktx\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTxList\"], baseName' = FName \"blocktx\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTx\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTx\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockData\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockData\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockData.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.size\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"size\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.mainchain\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"mainchain\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.previous\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"previous\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.time\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"time\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.bits\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"bits\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.nonce\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"nonce\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.tx\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"tx\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.merkle\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"merkle\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.fees\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"fees\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.outputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"outputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.subsidy\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"subsidy\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.weight\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"weight\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockDataList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockDataList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockDataList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockDataList.blockdata\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockDataList\"], baseName' = FName \"blockdata\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockData\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockData\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Input\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Input\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Input.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.coinbase\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"coinbase\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.output\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"output\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.sigscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"sigscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.sequence\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"sequence\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.witness\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"witness\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Spender\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Spender\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Spender.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Spender.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Spender\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Spender.input\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Spender\"], baseName' = FName \"input\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Output\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Output\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Output.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.spender\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"spender\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Spender\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Spender\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Transaction\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Transaction\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Transaction.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.size\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"size\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.locktime\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"locktime\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.deleted\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"deleted\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.fee\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"fee\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.time\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"time\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.rbf\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"rbf\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.inputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"inputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Input\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Input\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.outputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"outputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Output\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Output\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.weight\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"weight\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TransactionList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TransactionList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TransactionList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TransactionList.transaction\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TransactionList\"], baseName' = FName \"transaction\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Transaction\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Transaction\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxId.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxId.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxId\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxIdList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxIdList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxIdList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxIdList.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxIdList\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Event\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Event\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Event.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Event.type\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Event\"], baseName' = FName \"type'\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Event.Type\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"Event\"], baseName = MName \"Type\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Event.id\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Event\"], baseName' = FName \"id\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.EventList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"EventList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"EventList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.EventList.event\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"EventList\"], baseName' = FName \"event\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Event\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Event\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Peer\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Peer\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Peer.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.useragent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"useragent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.services\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"services\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.relay\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"relay\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.PeerList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"PeerList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"PeerList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.PeerList.peer\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"PeerList\"], baseName' = FName \"peer\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Peer\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Peer\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.HealthCheck\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"HealthCheck\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"HealthCheck.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.ok\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"ok\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.synced\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"synced\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.net\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"net\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.peers\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"peers\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.headers_hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"headers_hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.headers_height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"headers_height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.blocks_hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"blocks_hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.blocks_height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"blocks_height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxAfterHeight\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxAfterHeight\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxAfterHeight.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxAfterHeight.result\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxAfterHeight\"], baseName' = FName \"result\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Error\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Error\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Error.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Error.error\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Error\"], baseName' = FName \"error\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}], enums = [EnumInfo {enumName = ProtoName {protobufName = FIName \".ProtocolBuffers.Event.Type\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"Event\"], baseName = MName \"Type\"}, enumFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Event\",\"Type.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"TX\"),(EnumCode {getEnumCode = 1},\"BLOCK\")], enumJsonInstances = False}], oneofs = [OneofInfo {oneofName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block_ref\"}, oneofFName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName' = FName \"block_ref\", baseNamePrefix' = \"\"}, oneofFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Block_ref.hs\"], oneofFields = fromList [(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Block\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block\"}), hsRawDefault = Nothing, hsDefault = Nothing}),(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Mempool\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"mempool\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Mempool\"}), hsRawDefault = Nothing, hsDefault = Nothing})], oneofMakeLenses = False}], knownKeyMap = fromList []}"--fileDescriptorProto :: FileDescriptorProto-fileDescriptorProto- = P'.getFromBS (P'.wireGet 11)-    (P'.pack-      "\134\NAK\n\SYNprotocol-buffers.proto\"\198\SOH\n\bBlockRef\DC20\n\ENQblock\CAN\NUL \SOH(\v2\US.ProtocolBuffers.BlockRef.BlockH\NUL\DC24\n\amempool\CAN\SOH \SOH(\v2!.ProtocolBuffers.BlockRef.MempoolH\NUL\SUB\SUB\n\aMempool\DC2\SI\n\amempool\CAN\NUL \STX(\EOT\SUB)\n\ENQBlock\DC2\SO\n\ACKheight\CAN\NUL \STX(\r\DC2\DLE\n\bposition\CAN\SOH \STX(\rB\v\n\tblock_ref\"o\n\aBalance\DC2\SI\n\aaddress\CAN\NUL \STX(\t\DC2\DC1\n\tconfirmed\CAN\SOH \STX(\EOT\DC2\DC3\n\vunconfirmed\CAN\STX \STX(\EOT\DC2\f\n\EOTutxo\CAN\ETX \STX(\EOT\DC2\DLE\n\breceived\CAN\EOT \STX(\EOT\DC2\v\n\ETXtxs\CAN\ENQ \STX(\EOT\"8\n\vBalanceList\DC2)\n\abalance\CAN\NUL \ETX(\v2\CAN.ProtocolBuffers.Balance\"\153\SOH\n\aUnspent\DC2#\n\EOTtxid\CAN\NUL \STX(\v2\NAK.ProtocolBuffers.TxId\DC2\r\n\ENQindex\CAN\SOH \STX(\r\DC2\DLE\n\bpkscript\CAN\STX \STX(\f\DC2\r\n\ENQvalue\CAN\ETX \STX(\EOT\DC2(\n\ENQblock\CAN\EOT \STX(\v2\EM.ProtocolBuffers.BlockRef\DC2\SI\n\aaddress\CAN\ENQ \SOH(\t\"8\n\vUnspentList\DC2)\n\aunspent\CAN\NUL \ETX(\v2\CAN.ProtocolBuffers.Unspent\"T\n\vXPubBalance\DC2\SUB\n\EOTpath\CAN\NUL \ETX(\rB\f\b\NUL\DLE\SOH\CAN\NUL(\NUL0\NULP\NUL\DC2)\n\abalance\CAN\SOH \STX(\v2\CAN.ProtocolBuffers.Balance\"D\n\SIXPubBalanceList\DC21\n\vxpubbalance\CAN\NUL \ETX(\v2\FS.ProtocolBuffers.XPubBalance\"T\n\vXPubUnspent\DC2\SUB\n\EOTpath\CAN\NUL \ETX(\rB\f\b\NUL\DLE\SOH\CAN\NUL(\NUL0\NULP\NUL\DC2)\n\aunspent\CAN\SOH \STX(\v2\CAN.ProtocolBuffers.Unspent\"D\n\SIXPubUnspentList\DC21\n\vxpubunspent\CAN\NUL \ETX(\v2\FS.ProtocolBuffers.XPubUnspent\"X\n\aBlockTx\DC2(\n\ENQblock\CAN\NUL \STX(\v2\EM.ProtocolBuffers.BlockRef\DC2#\n\EOTtxid\CAN\SOH \STX(\v2\NAK.ProtocolBuffers.TxId\"8\n\vBlockTxList\DC2)\n\ablocktx\CAN\NUL \ETX(\v2\CAN.ProtocolBuffers.BlockTx\"\244\SOH\n\tBlockData\DC2\f\n\EOThash\CAN\NUL \STX(\f\DC2\f\n\EOTsize\CAN\SOH \STX(\r\DC2\SO\n\ACKheight\CAN\STX \STX(\r\DC2\DC1\n\tmainchain\CAN\ETX \STX(\b\DC2\DLE\n\bprevious\CAN\EOT \STX(\f\DC2\f\n\EOTtime\CAN\ENQ \STX(\r\DC2\SI\n\aversion\CAN\ACK \STX(\r\DC2\f\n\EOTbits\CAN\a \STX(\r\DC2\r\n\ENQnonce\CAN\b \STX(\r\DC2\n\n\STXtx\CAN\t \ETX(\f\DC2\SO\n\ACKmerkle\CAN\n \STX(\f\DC2\f\n\EOTfees\CAN\v \STX(\EOT\DC2\SI\n\aoutputs\CAN\f \STX(\EOT\DC2\SI\n\asubsidy\CAN\r \STX(\EOT\DC2\SO\n\ACKweight\CAN\SO \STX(\r\">\n\rBlockDataList\DC2-\n\tblockdata\CAN\NUL \ETX(\v2\SUB.ProtocolBuffers.BlockData\"\182\SOH\n\ENQInput\DC2\DLE\n\bcoinbase\CAN\NUL \STX(\b\DC2#\n\EOTtxid\CAN\SOH \STX(\v2\NAK.ProtocolBuffers.TxId\DC2\SO\n\ACKoutput\CAN\STX \STX(\r\DC2\DC1\n\tsigscript\CAN\ETX \STX(\f\DC2\DLE\n\bsequence\CAN\EOT \STX(\r\DC2\SI\n\awitness\CAN\ENQ \ETX(\f\DC2\r\n\ENQvalue\CAN\ACK \SOH(\EOT\DC2\DLE\n\bpkscript\CAN\a \SOH(\f\DC2\SI\n\aaddress\CAN\b \SOH(\t\"=\n\aSpender\DC2#\n\EOTtxid\CAN\NUL \STX(\v2\NAK.ProtocolBuffers.TxId\DC2\r\n\ENQinput\CAN\SOH \STX(\r\"e\n\ACKOutput\DC2\DLE\n\bpkscript\CAN\NUL \STX(\f\DC2\r\n\ENQvalue\CAN\SOH \STX(\EOT\DC2\SI\n\aaddress\CAN\STX \SOH(\t\DC2)\n\aspender\CAN\ETX \SOH(\v2\CAN.ProtocolBuffers.Spender\"\168\STX\n\vTransaction\DC2#\n\EOTtxid\CAN\NUL \STX(\v2\NAK.ProtocolBuffers.TxId\DC2\f\n\EOTsize\CAN\SOH \STX(\r\DC2\SI\n\aversion\CAN\STX \STX(\r\DC2\DLE\n\blocktime\CAN\ETX \STX(\r\DC2(\n\ENQblock\CAN\EOT \STX(\v2\EM.ProtocolBuffers.BlockRef\DC2\SI\n\adeleted\CAN\ENQ \STX(\b\DC2\v\n\ETXfee\CAN\ACK \STX(\EOT\DC2\f\n\EOTtime\CAN\a \STX(\EOT\DC2\v\n\ETXrbf\CAN\b \STX(\b\DC2&\n\ACKinputs\CAN\t \ETX(\v2\SYN.ProtocolBuffers.Input\DC2(\n\aoutputs\CAN\n \ETX(\v2\ETB.ProtocolBuffers.Output\DC2\SO\n\ACKweight\CAN\v \SOH(\r\"D\n\SITransactionList\DC21\n\vtransaction\CAN\NUL \ETX(\v2\FS.ProtocolBuffers.Transaction\"\DC4\n\EOTTxId\DC2\f\n\EOTtxid\CAN\NUL \STX(\f\"/\n\bTxIdList\DC2#\n\EOTtxid\CAN\NUL \ETX(\v2\NAK.ProtocolBuffers.TxId\"Y\n\ENQEvent\DC2)\n\EOTtype\CAN\NUL \STX(\SO2\ESC.ProtocolBuffers.Event.Type\DC2\n\n\STXid\CAN\SOH \STX(\f\"\EM\n\EOTType\DC2\ACK\n\STXTX\DLE\NUL\DC2\t\n\ENQBLOCK\DLE\SOH\"2\n\tEventList\DC2%\n\ENQevent\CAN\NUL \ETX(\v2\SYN.ProtocolBuffers.Event\"\\\n\EOTPeer\DC2\DC1\n\tuseragent\CAN\NUL \STX(\t\DC2\SI\n\aaddress\CAN\SOH \STX(\t\DC2\SI\n\aversion\CAN\STX \STX(\r\DC2\DLE\n\bservices\CAN\ETX \STX(\EOT\DC2\r\n\ENQrelay\CAN\EOT \STX(\b\"/\n\bPeerList\DC2#\n\EOTpeer\CAN\NUL \ETX(\v2\NAK.ProtocolBuffers.Peer\"\176\SOH\n\vHealthCheck\DC2\n\n\STXok\CAN\NUL \STX(\b\DC2\SO\n\ACKsynced\CAN\SOH \STX(\b\DC2\SI\n\aversion\CAN\STX \STX(\t\DC2\v\n\ETXnet\CAN\ETX \STX(\t\DC2\r\n\ENQpeers\CAN\EOT \SOH(\r\DC2\DC4\n\fheaders_hash\CAN\ENQ \SOH(\f\DC2\SYN\n\SOheaders_height\CAN\ACK \SOH(\r\DC2\DC3\n\vblocks_hash\CAN\a \SOH(\f\DC2\NAK\n\rblocks_height\CAN\b \SOH(\r\"\US\n\rTxAfterHeight\DC2\SO\n\ACKresult\CAN\NUL \SOH(\b\"\SYN\n\ENQError\DC2\r\n\ENQerror\CAN\NUL \STX(\t")
− src/Network/Haskoin/Store/ProtocolBuffers/Balance.hs
@@ -1,128 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Balance (Balance(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Balance = Balance{address :: !(P'.Utf8), confirmed :: !(P'.Word64), unconfirmed :: !(P'.Word64), utxo :: !(P'.Word64),-                       received :: !(P'.Word64), txs :: !(P'.Word64)}-               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Balance where-  mergeAppend (Balance x'1 x'2 x'3 x'4 x'5 x'6) (Balance y'1 y'2 y'3 y'4 y'5 y'6)-   = Balance (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)--instance P'.Default Balance where-  defaultValue = Balance P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue--instance P'.Wire Balance where-  wireSize ft' self'@(Balance x'1 x'2 x'3 x'4 x'5 x'6)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 9 x'1 + P'.wireSizeReq 1 4 x'2 + P'.wireSizeReq 1 4 x'3 + P'.wireSizeReq 1 4 x'4 +-             P'.wireSizeReq 1 4 x'5-             + P'.wireSizeReq 1 4 x'6)-  wirePutWithSize ft' self'@(Balance x'1 x'2 x'3 x'4 x'5 x'6)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 9 x'1, P'.wirePutReqWithSize 8 4 x'2, P'.wirePutReqWithSize 16 4 x'3,-             P'.wirePutReqWithSize 24 4 x'4, P'.wirePutReqWithSize 32 4 x'5, P'.wirePutReqWithSize 40 4 x'6]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{address = new'Field}) (P'.wireGet 9)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{confirmed = new'Field}) (P'.wireGet 4)-             16 -> Prelude'.fmap (\ !new'Field -> old'Self{unconfirmed = new'Field}) (P'.wireGet 4)-             24 -> Prelude'.fmap (\ !new'Field -> old'Self{utxo = new'Field}) (P'.wireGet 4)-             32 -> Prelude'.fmap (\ !new'Field -> old'Self{received = new'Field}) (P'.wireGet 4)-             40 -> Prelude'.fmap (\ !new'Field -> old'Self{txs = new'Field}) (P'.wireGet 4)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Balance) Balance where-  getVal m' f' = f' m'--instance P'.GPB Balance--instance P'.ReflectDescriptor Balance where-  getMessageInfo _-   = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8, 16, 24, 32, 40]) (P'.fromDistinctAscList [2, 8, 16, 24, 32, 40])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Balance.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.confirmed\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"confirmed\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.unconfirmed\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"unconfirmed\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.utxo\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"utxo\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.received\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"received\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Balance.txs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Balance\"], baseName' = FName \"txs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Balance where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Balance where-  textPut msg-   = do-       P'.tellT "address" (address msg)-       P'.tellT "confirmed" (confirmed msg)-       P'.tellT "unconfirmed" (unconfirmed msg)-       P'.tellT "utxo" (utxo msg)-       P'.tellT "received" (received msg)-       P'.tellT "txs" (txs msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'address, parse'confirmed, parse'unconfirmed, parse'utxo, parse'received, parse'txs])-                P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'address-         = P'.try-            (do-               v <- P'.getT "address"-               Prelude'.return (\ o -> o{address = v}))-        parse'confirmed-         = P'.try-            (do-               v <- P'.getT "confirmed"-               Prelude'.return (\ o -> o{confirmed = v}))-        parse'unconfirmed-         = P'.try-            (do-               v <- P'.getT "unconfirmed"-               Prelude'.return (\ o -> o{unconfirmed = v}))-        parse'utxo-         = P'.try-            (do-               v <- P'.getT "utxo"-               Prelude'.return (\ o -> o{utxo = v}))-        parse'received-         = P'.try-            (do-               v <- P'.getT "received"-               Prelude'.return (\ o -> o{received = v}))-        parse'txs-         = P'.try-            (do-               v <- P'.getT "txs"-               Prelude'.return (\ o -> o{txs = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BalanceList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BalanceList (BalanceList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Balance as ProtocolBuffers (Balance)--data BalanceList = BalanceList{balance :: !(P'.Seq ProtocolBuffers.Balance)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BalanceList where-  mergeAppend (BalanceList x'1) (BalanceList y'1) = BalanceList (P'.mergeAppend x'1 y'1)--instance P'.Default BalanceList where-  defaultValue = BalanceList P'.defaultValue--instance P'.Wire BalanceList where-  wireSize ft' self'@(BalanceList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(BalanceList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{balance = P'.append (balance old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BalanceList) BalanceList where-  getVal m' f' = f' m'--instance P'.GPB BalanceList--instance P'.ReflectDescriptor BalanceList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BalanceList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BalanceList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BalanceList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BalanceList.balance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BalanceList\"], baseName' = FName \"balance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BalanceList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BalanceList where-  textPut msg-   = do-       P'.tellT "balance" (balance msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'balance]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'balance-         = P'.try-            (do-               v <- P'.getT "balance"-               Prelude'.return (\ o -> o{balance = P'.append (balance o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockData.hs
@@ -1,228 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockData (BlockData(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data BlockData = BlockData{hash :: !(P'.ByteString), size :: !(P'.Word32), height :: !(P'.Word32), mainchain :: !(P'.Bool),-                           previous :: !(P'.ByteString), time :: !(P'.Word32), version :: !(P'.Word32), bits :: !(P'.Word32),-                           nonce :: !(P'.Word32), tx :: !(P'.Seq P'.ByteString), merkle :: !(P'.ByteString), fees :: !(P'.Word64),-                           outputs :: !(P'.Word64), subsidy :: !(P'.Word64), weight :: !(P'.Word32)}-                 deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BlockData where-  mergeAppend (BlockData x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)-   (BlockData y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15)-   = BlockData (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)-      (P'.mergeAppend x'7 y'7)-      (P'.mergeAppend x'8 y'8)-      (P'.mergeAppend x'9 y'9)-      (P'.mergeAppend x'10 y'10)-      (P'.mergeAppend x'11 y'11)-      (P'.mergeAppend x'12 y'12)-      (P'.mergeAppend x'13 y'13)-      (P'.mergeAppend x'14 y'14)-      (P'.mergeAppend x'15 y'15)--instance P'.Default BlockData where-  defaultValue-   = BlockData P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue--instance P'.Wire BlockData where-  wireSize ft' self'@(BlockData x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 12 x'1 + P'.wireSizeReq 1 13 x'2 + P'.wireSizeReq 1 13 x'3 + P'.wireSizeReq 1 8 x'4 +-             P'.wireSizeReq 1 12 x'5-             + P'.wireSizeReq 1 13 x'6-             + P'.wireSizeReq 1 13 x'7-             + P'.wireSizeReq 1 13 x'8-             + P'.wireSizeReq 1 13 x'9-             + P'.wireSizeRep 1 12 x'10-             + P'.wireSizeReq 1 12 x'11-             + P'.wireSizeReq 1 4 x'12-             + P'.wireSizeReq 1 4 x'13-             + P'.wireSizeReq 1 4 x'14-             + P'.wireSizeReq 1 13 x'15)-  wirePutWithSize ft' self'@(BlockData x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 12 x'1, P'.wirePutReqWithSize 8 13 x'2, P'.wirePutReqWithSize 16 13 x'3,-             P'.wirePutReqWithSize 24 8 x'4, P'.wirePutReqWithSize 34 12 x'5, P'.wirePutReqWithSize 40 13 x'6,-             P'.wirePutReqWithSize 48 13 x'7, P'.wirePutReqWithSize 56 13 x'8, P'.wirePutReqWithSize 64 13 x'9,-             P'.wirePutRepWithSize 74 12 x'10, P'.wirePutReqWithSize 82 12 x'11, P'.wirePutReqWithSize 88 4 x'12,-             P'.wirePutReqWithSize 96 4 x'13, P'.wirePutReqWithSize 104 4 x'14, P'.wirePutReqWithSize 112 13 x'15]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{hash = new'Field}) (P'.wireGet 12)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{size = new'Field}) (P'.wireGet 13)-             16 -> Prelude'.fmap (\ !new'Field -> old'Self{height = new'Field}) (P'.wireGet 13)-             24 -> Prelude'.fmap (\ !new'Field -> old'Self{mainchain = new'Field}) (P'.wireGet 8)-             34 -> Prelude'.fmap (\ !new'Field -> old'Self{previous = new'Field}) (P'.wireGet 12)-             40 -> Prelude'.fmap (\ !new'Field -> old'Self{time = new'Field}) (P'.wireGet 13)-             48 -> Prelude'.fmap (\ !new'Field -> old'Self{version = new'Field}) (P'.wireGet 13)-             56 -> Prelude'.fmap (\ !new'Field -> old'Self{bits = new'Field}) (P'.wireGet 13)-             64 -> Prelude'.fmap (\ !new'Field -> old'Self{nonce = new'Field}) (P'.wireGet 13)-             74 -> Prelude'.fmap (\ !new'Field -> old'Self{tx = P'.append (tx old'Self) new'Field}) (P'.wireGet 12)-             82 -> Prelude'.fmap (\ !new'Field -> old'Self{merkle = new'Field}) (P'.wireGet 12)-             88 -> Prelude'.fmap (\ !new'Field -> old'Self{fees = new'Field}) (P'.wireGet 4)-             96 -> Prelude'.fmap (\ !new'Field -> old'Self{outputs = new'Field}) (P'.wireGet 4)-             104 -> Prelude'.fmap (\ !new'Field -> old'Self{subsidy = new'Field}) (P'.wireGet 4)-             112 -> Prelude'.fmap (\ !new'Field -> old'Self{weight = new'Field}) (P'.wireGet 13)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BlockData) BlockData where-  getVal m' f' = f' m'--instance P'.GPB BlockData--instance P'.ReflectDescriptor BlockData where-  getMessageInfo _-   = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8, 16, 24, 34, 40, 48, 56, 64, 82, 88, 96, 104, 112])-      (P'.fromDistinctAscList [2, 8, 16, 24, 34, 40, 48, 56, 64, 74, 82, 88, 96, 104, 112])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockData\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockData\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockData.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.size\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"size\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.mainchain\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"mainchain\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.previous\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"previous\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.time\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"time\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.bits\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"bits\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.nonce\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"nonce\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.tx\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"tx\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.merkle\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"merkle\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.fees\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"fees\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.outputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"outputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.subsidy\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"subsidy\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockData.weight\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockData\"], baseName' = FName \"weight\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BlockData where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BlockData where-  textPut msg-   = do-       P'.tellT "hash" (hash msg)-       P'.tellT "size" (size msg)-       P'.tellT "height" (height msg)-       P'.tellT "mainchain" (mainchain msg)-       P'.tellT "previous" (previous msg)-       P'.tellT "time" (time msg)-       P'.tellT "version" (version msg)-       P'.tellT "bits" (bits msg)-       P'.tellT "nonce" (nonce msg)-       P'.tellT "tx" (tx msg)-       P'.tellT "merkle" (merkle msg)-       P'.tellT "fees" (fees msg)-       P'.tellT "outputs" (outputs msg)-       P'.tellT "subsidy" (subsidy msg)-       P'.tellT "weight" (weight msg)-  textGet-   = do-       mods <- P'.sepEndBy-                (P'.choice-                  [parse'hash, parse'size, parse'height, parse'mainchain, parse'previous, parse'time, parse'version, parse'bits,-                   parse'nonce, parse'tx, parse'merkle, parse'fees, parse'outputs, parse'subsidy, parse'weight])-                P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'hash-         = P'.try-            (do-               v <- P'.getT "hash"-               Prelude'.return (\ o -> o{hash = v}))-        parse'size-         = P'.try-            (do-               v <- P'.getT "size"-               Prelude'.return (\ o -> o{size = v}))-        parse'height-         = P'.try-            (do-               v <- P'.getT "height"-               Prelude'.return (\ o -> o{height = v}))-        parse'mainchain-         = P'.try-            (do-               v <- P'.getT "mainchain"-               Prelude'.return (\ o -> o{mainchain = v}))-        parse'previous-         = P'.try-            (do-               v <- P'.getT "previous"-               Prelude'.return (\ o -> o{previous = v}))-        parse'time-         = P'.try-            (do-               v <- P'.getT "time"-               Prelude'.return (\ o -> o{time = v}))-        parse'version-         = P'.try-            (do-               v <- P'.getT "version"-               Prelude'.return (\ o -> o{version = v}))-        parse'bits-         = P'.try-            (do-               v <- P'.getT "bits"-               Prelude'.return (\ o -> o{bits = v}))-        parse'nonce-         = P'.try-            (do-               v <- P'.getT "nonce"-               Prelude'.return (\ o -> o{nonce = v}))-        parse'tx-         = P'.try-            (do-               v <- P'.getT "tx"-               Prelude'.return (\ o -> o{tx = P'.append (tx o) v}))-        parse'merkle-         = P'.try-            (do-               v <- P'.getT "merkle"-               Prelude'.return (\ o -> o{merkle = v}))-        parse'fees-         = P'.try-            (do-               v <- P'.getT "fees"-               Prelude'.return (\ o -> o{fees = v}))-        parse'outputs-         = P'.try-            (do-               v <- P'.getT "outputs"-               Prelude'.return (\ o -> o{outputs = v}))-        parse'subsidy-         = P'.try-            (do-               v <- P'.getT "subsidy"-               Prelude'.return (\ o -> o{subsidy = v}))-        parse'weight-         = P'.try-            (do-               v <- P'.getT "weight"-               Prelude'.return (\ o -> o{weight = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockDataList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockDataList (BlockDataList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockData as ProtocolBuffers (BlockData)--data BlockDataList = BlockDataList{blockdata :: !(P'.Seq ProtocolBuffers.BlockData)}-                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BlockDataList where-  mergeAppend (BlockDataList x'1) (BlockDataList y'1) = BlockDataList (P'.mergeAppend x'1 y'1)--instance P'.Default BlockDataList where-  defaultValue = BlockDataList P'.defaultValue--instance P'.Wire BlockDataList where-  wireSize ft' self'@(BlockDataList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(BlockDataList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{blockdata = P'.append (blockdata old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BlockDataList) BlockDataList where-  getVal m' f' = f' m'--instance P'.GPB BlockDataList--instance P'.ReflectDescriptor BlockDataList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockDataList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockDataList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockDataList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockDataList.blockdata\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockDataList\"], baseName' = FName \"blockdata\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockData\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockData\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BlockDataList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BlockDataList where-  textPut msg-   = do-       P'.tellT "blockdata" (blockdata msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'blockdata]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'blockdata-         = P'.try-            (do-               v <- P'.getT "blockdata"-               Prelude'.return (\ o -> o{blockdata = P'.append (blockdata o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockRef.hs
@@ -1,110 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockRef (BlockRef(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block_ref as ProtocolBuffers.BlockRef (Block_ref)-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block_ref as ProtocolBuffers.BlockRef.Block_ref-       (Block_ref(..), get'block, get'mempool)--data BlockRef = BlockRef{block_ref :: P'.Maybe (ProtocolBuffers.BlockRef.Block_ref)}-                deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BlockRef where-  mergeAppend (BlockRef x'1) (BlockRef y'1) = BlockRef (P'.mergeAppend x'1 y'1)--instance P'.Default BlockRef where-  defaultValue = BlockRef P'.defaultValue--instance P'.Wire BlockRef where-  wireSize ft' self'@(BlockRef x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeOpt 1 11 (ProtocolBuffers.BlockRef.Block_ref.get'block Prelude'.=<< x'1) +-             P'.wireSizeOpt 1 11 (ProtocolBuffers.BlockRef.Block_ref.get'mempool Prelude'.=<< x'1))-  wirePutWithSize ft' self'@(BlockRef x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutOptWithSize 2 11 (ProtocolBuffers.BlockRef.Block_ref.get'block Prelude'.=<< x'1),-             P'.wirePutOptWithSize 10 11 (ProtocolBuffers.BlockRef.Block_ref.get'mempool Prelude'.=<< x'1)]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap-                   (\ !new'Field ->-                     old'Self{block_ref =-                               P'.mergeAppend (block_ref old'Self)-                                (Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Block new'Field))})-                   (P'.wireGet 11)-             10 -> Prelude'.fmap-                    (\ !new'Field ->-                      old'Self{block_ref =-                                P'.mergeAppend (block_ref old'Self)-                                 (Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Mempool new'Field))})-                    (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BlockRef) BlockRef where-  getVal m' f' = f' m'--instance P'.GPB BlockRef--instance P'.ReflectDescriptor BlockRef where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef.hs\"], isGroup = False, fields = fromList [], descOneofs = fromList [OneofInfo {oneofName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block_ref\"}, oneofFName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName' = FName \"block_ref\", baseNamePrefix' = \"\"}, oneofFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Block_ref.hs\"], oneofFields = fromList [(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Block\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block\"}), hsRawDefault = Nothing, hsDefault = Nothing}),(ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName = MName \"Mempool\"},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.block_ref.mempool\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block_ref\"], baseName' = FName \"mempool\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Mempool\"}), hsRawDefault = Nothing, hsDefault = Nothing})], oneofMakeLenses = False}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BlockRef where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BlockRef where-  textPut msg-   = do-       case (block_ref msg) of-         Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Block block) -> P'.tellT "block" block-         Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Mempool mempool) -> P'.tellT "mempool" mempool-         Prelude'.Nothing -> Prelude'.return ()-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'block_ref]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'block_ref = P'.try (P'.choice [parse'block, parse'mempool])-          where-              parse'block-               = P'.try-                  (do-                     v <- P'.getT "block"-                     Prelude'.return (\ s -> s{block_ref = Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Block v)}))-              parse'mempool-               = P'.try-                  (do-                     v <- P'.getT "mempool"-                     Prelude'.return (\ s -> s{block_ref = Prelude'.Just (ProtocolBuffers.BlockRef.Block_ref.Mempool v)}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockRef/Block.hs
@@ -1,88 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block (Block(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Block = Block{height :: !(P'.Word32), position :: !(P'.Word32)}-             deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Block where-  mergeAppend (Block x'1 x'2) (Block y'1 y'2) = Block (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default Block where-  defaultValue = Block P'.defaultValue P'.defaultValue--instance P'.Wire Block where-  wireSize ft' self'@(Block x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 13 x'1 + P'.wireSizeReq 1 13 x'2)-  wirePutWithSize ft' self'@(Block x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 0 13 x'1, P'.wirePutReqWithSize 8 13 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{height = new'Field}) (P'.wireGet 13)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{position = new'Field}) (P'.wireGet 13)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Block) Block where-  getVal m' f' = f' m'--instance P'.GPB Block--instance P'.ReflectDescriptor Block where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [0, 8]) (P'.fromDistinctAscList [0, 8])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Block\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Block\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Block.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Block.height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block\"], baseName' = FName \"height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Block.position\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Block\"], baseName' = FName \"position\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Block where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Block where-  textPut msg-   = do-       P'.tellT "height" (height msg)-       P'.tellT "position" (position msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'height, parse'position]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'height-         = P'.try-            (do-               v <- P'.getT "height"-               Prelude'.return (\ o -> o{height = v}))-        parse'position-         = P'.try-            (do-               v <- P'.getT "position"-               Prelude'.return (\ o -> o{position = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockRef/Block_ref.hs
@@ -1,28 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block_ref where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Block as ProtocolBuffers.BlockRef (Block)-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef.Mempool as ProtocolBuffers.BlockRef (Mempool)--data Block_ref = Block{block :: (ProtocolBuffers.BlockRef.Block)}-               | Mempool{mempool :: (ProtocolBuffers.BlockRef.Mempool)}-                 deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)-get'block x- = case x of-     Block block -> Prelude'.Just block-     _ -> Prelude'.Nothing-get'mempool x- = case x of-     Mempool mempool -> Prelude'.Just mempool-     _ -> Prelude'.Nothing--instance P'.Default Block_ref where-  defaultValue = Block P'.defaultValue--instance P'.Mergeable Block_ref
− src/Network/Haskoin/Store/ProtocolBuffers/BlockRef/Mempool.hs
@@ -1,81 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockRef.Mempool (Mempool(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Mempool = Mempool{mempool :: !(P'.Word64)}-               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Mempool where-  mergeAppend (Mempool x'1) (Mempool y'1) = Mempool (P'.mergeAppend x'1 y'1)--instance P'.Default Mempool where-  defaultValue = Mempool P'.defaultValue--instance P'.Wire Mempool where-  wireSize ft' self'@(Mempool x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 4 x'1)-  wirePutWithSize ft' self'@(Mempool x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 0 4 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{mempool = new'Field}) (P'.wireGet 4)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Mempool) Mempool where-  getVal m' f' = f' m'--instance P'.GPB Mempool--instance P'.ReflectDescriptor Mempool where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [0]) (P'.fromDistinctAscList [0])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef.Mempool\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"BlockRef\"], baseName = MName \"Mempool\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockRef\",\"Mempool.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockRef.Mempool.mempool\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockRef\",MName \"Mempool\"], baseName' = FName \"mempool\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Mempool where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Mempool where-  textPut msg-   = do-       P'.tellT "mempool" (mempool msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'mempool]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'mempool-         = P'.try-            (do-               v <- P'.getT "mempool"-               Prelude'.return (\ o -> o{mempool = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockTx.hs
@@ -1,90 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockTx (BlockTx(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef as ProtocolBuffers (BlockRef)-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data BlockTx = BlockTx{block :: !(ProtocolBuffers.BlockRef), txid :: !(ProtocolBuffers.TxId)}-               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BlockTx where-  mergeAppend (BlockTx x'1 x'2) (BlockTx y'1 y'2) = BlockTx (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default BlockTx where-  defaultValue = BlockTx P'.defaultValue P'.defaultValue--instance P'.Wire BlockTx where-  wireSize ft' self'@(BlockTx x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 11 x'1 + P'.wireSizeReq 1 11 x'2)-  wirePutWithSize ft' self'@(BlockTx x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 2 11 x'1, P'.wirePutReqWithSize 10 11 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{block = P'.mergeAppend (block old'Self) (new'Field)}) (P'.wireGet 11)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.mergeAppend (txid old'Self) (new'Field)}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BlockTx) BlockTx where-  getVal m' f' = f' m'--instance P'.GPB BlockTx--instance P'.ReflectDescriptor BlockTx where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2, 10]) (P'.fromDistinctAscList [2, 10])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTx\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTx\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockTx.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTx.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTx\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTx.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTx\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BlockTx where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BlockTx where-  textPut msg-   = do-       P'.tellT "block" (block msg)-       P'.tellT "txid" (txid msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'block, parse'txid]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'block-         = P'.try-            (do-               v <- P'.getT "block"-               Prelude'.return (\ o -> o{block = v}))-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/BlockTxList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.BlockTxList (BlockTxList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockTx as ProtocolBuffers (BlockTx)--data BlockTxList = BlockTxList{blocktx :: !(P'.Seq ProtocolBuffers.BlockTx)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable BlockTxList where-  mergeAppend (BlockTxList x'1) (BlockTxList y'1) = BlockTxList (P'.mergeAppend x'1 y'1)--instance P'.Default BlockTxList where-  defaultValue = BlockTxList P'.defaultValue--instance P'.Wire BlockTxList where-  wireSize ft' self'@(BlockTxList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(BlockTxList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{blocktx = P'.append (blocktx old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> BlockTxList) BlockTxList where-  getVal m' f' = f' m'--instance P'.GPB BlockTxList--instance P'.ReflectDescriptor BlockTxList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTxList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTxList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"BlockTxList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.BlockTxList.blocktx\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"BlockTxList\"], baseName' = FName \"blocktx\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockTx\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockTx\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType BlockTxList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg BlockTxList where-  textPut msg-   = do-       P'.tellT "blocktx" (blocktx msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'blocktx]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'blocktx-         = P'.try-            (do-               v <- P'.getT "blocktx"-               Prelude'.return (\ o -> o{blocktx = P'.append (blocktx o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Error.hs
@@ -1,81 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Error (Error(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Error = Error{error :: !(P'.Utf8)}-             deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Error where-  mergeAppend (Error x'1) (Error y'1) = Error (P'.mergeAppend x'1 y'1)--instance P'.Default Error where-  defaultValue = Error P'.defaultValue--instance P'.Wire Error where-  wireSize ft' self'@(Error x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 9 x'1)-  wirePutWithSize ft' self'@(Error x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 2 9 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{error = new'Field}) (P'.wireGet 9)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Error) Error where-  getVal m' f' = f' m'--instance P'.GPB Error--instance P'.ReflectDescriptor Error where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2]) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Error\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Error\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Error.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Error.error\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Error\"], baseName' = FName \"error\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Error where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Error where-  textPut msg-   = do-       P'.tellT "error" (error msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'error]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'error-         = P'.try-            (do-               v <- P'.getT "error"-               Prelude'.return (\ o -> o{error = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Event.hs
@@ -1,89 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Event (Event(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Event.Type as ProtocolBuffers.Event (Type)--data Event = Event{type' :: !(ProtocolBuffers.Event.Type), id :: !(P'.ByteString)}-             deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Event where-  mergeAppend (Event x'1 x'2) (Event y'1 y'2) = Event (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default Event where-  defaultValue = Event P'.defaultValue P'.defaultValue--instance P'.Wire Event where-  wireSize ft' self'@(Event x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 14 x'1 + P'.wireSizeReq 1 12 x'2)-  wirePutWithSize ft' self'@(Event x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 0 14 x'1, P'.wirePutReqWithSize 10 12 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{type' = new'Field}) (P'.wireGet 14)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{id = new'Field}) (P'.wireGet 12)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Event) Event where-  getVal m' f' = f' m'--instance P'.GPB Event--instance P'.ReflectDescriptor Event where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [0, 10]) (P'.fromDistinctAscList [0, 10])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Event\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Event\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Event.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Event.type\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Event\"], baseName' = FName \"type'\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Event.Type\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\",MName \"Event\"], baseName = MName \"Type\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Event.id\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Event\"], baseName' = FName \"id\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Event where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Event where-  textPut msg-   = do-       P'.tellT "type" (type' msg)-       P'.tellT "id" (id msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'type', parse'id]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'type'-         = P'.try-            (do-               v <- P'.getT "type"-               Prelude'.return (\ o -> o{type' = v}))-        parse'id-         = P'.try-            (do-               v <- P'.getT "id"-               Prelude'.return (\ o -> o{id = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Event/Type.hs
@@ -1,65 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Event.Type (Type(..)) where-import Prelude ((+), (/), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Type = TX-          | BLOCK-            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Type--instance Prelude'.Bounded Type where-  minBound = TX-  maxBound = BLOCK--instance P'.Default Type where-  defaultValue = TX--toMaybe'Enum :: Prelude'.Int -> P'.Maybe Type-toMaybe'Enum 0 = Prelude'.Just TX-toMaybe'Enum 1 = Prelude'.Just BLOCK-toMaybe'Enum _ = Prelude'.Nothing--instance Prelude'.Enum Type where-  fromEnum TX = 0-  fromEnum BLOCK = 1-  toEnum-   = P'.fromMaybe-      (Prelude'.error "hprotoc generated code: toEnum failure for type Network.Haskoin.Store.ProtocolBuffers.Event.Type")-      . toMaybe'Enum-  succ TX = BLOCK-  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Network.Haskoin.Store.ProtocolBuffers.Event.Type"-  pred BLOCK = TX-  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Network.Haskoin.Store.ProtocolBuffers.Event.Type"--instance P'.Wire Type where-  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)-  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)-  wireGet 14 = P'.wireGetEnum toMaybe'Enum-  wireGet ft' = P'.wireGetErr ft'-  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum-  wireGetPacked ft' = P'.wireGetErr ft'--instance P'.GPB Type--instance P'.MessageAPI msg' (msg' -> Type) Type where-  getVal m' f' = f' m'--instance P'.ReflectEnum Type where-  reflectEnum = [(0, "TX", TX), (1, "BLOCK", BLOCK)]-  reflectEnumInfo _-   = P'.EnumInfo-      (P'.makePNF (P'.pack ".ProtocolBuffers.Event.Type") ["Network", "Haskoin", "Store"] ["ProtocolBuffers", "Event"] "Type")-      ["Network", "Haskoin", "Store", "ProtocolBuffers", "Event", "Type.hs"]-      [(0, "TX"), (1, "BLOCK")]-      Prelude'.False--instance P'.TextType Type where-  tellT = P'.tellShow-  getT = P'.getRead
− src/Network/Haskoin/Store/ProtocolBuffers/EventList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.EventList (EventList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Event as ProtocolBuffers (Event)--data EventList = EventList{event :: !(P'.Seq ProtocolBuffers.Event)}-                 deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable EventList where-  mergeAppend (EventList x'1) (EventList y'1) = EventList (P'.mergeAppend x'1 y'1)--instance P'.Default EventList where-  defaultValue = EventList P'.defaultValue--instance P'.Wire EventList where-  wireSize ft' self'@(EventList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(EventList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{event = P'.append (event old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> EventList) EventList where-  getVal m' f' = f' m'--instance P'.GPB EventList--instance P'.ReflectDescriptor EventList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.EventList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"EventList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"EventList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.EventList.event\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"EventList\"], baseName' = FName \"event\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Event\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Event\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType EventList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg EventList where-  textPut msg-   = do-       P'.tellT "event" (event msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'event]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'event-         = P'.try-            (do-               v <- P'.getT "event"-               Prelude'.return (\ o -> o{event = P'.append (event o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/HealthCheck.hs
@@ -1,164 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.HealthCheck (HealthCheck(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data HealthCheck = HealthCheck{ok :: !(P'.Bool), synced :: !(P'.Bool), version :: !(P'.Utf8), net :: !(P'.Utf8),-                               peers :: !(P'.Maybe P'.Word32), headers_hash :: !(P'.Maybe P'.ByteString),-                               headers_height :: !(P'.Maybe P'.Word32), blocks_hash :: !(P'.Maybe P'.ByteString),-                               blocks_height :: !(P'.Maybe P'.Word32)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable HealthCheck where-  mergeAppend (HealthCheck x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9) (HealthCheck y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9)-   = HealthCheck (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)-      (P'.mergeAppend x'7 y'7)-      (P'.mergeAppend x'8 y'8)-      (P'.mergeAppend x'9 y'9)--instance P'.Default HealthCheck where-  defaultValue-   = HealthCheck P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue-      P'.defaultValue-      P'.defaultValue--instance P'.Wire HealthCheck where-  wireSize ft' self'@(HealthCheck x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 8 x'1 + P'.wireSizeReq 1 8 x'2 + P'.wireSizeReq 1 9 x'3 + P'.wireSizeReq 1 9 x'4 +-             P'.wireSizeOpt 1 13 x'5-             + P'.wireSizeOpt 1 12 x'6-             + P'.wireSizeOpt 1 13 x'7-             + P'.wireSizeOpt 1 12 x'8-             + P'.wireSizeOpt 1 13 x'9)-  wirePutWithSize ft' self'@(HealthCheck x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 0 8 x'1, P'.wirePutReqWithSize 8 8 x'2, P'.wirePutReqWithSize 18 9 x'3,-             P'.wirePutReqWithSize 26 9 x'4, P'.wirePutOptWithSize 32 13 x'5, P'.wirePutOptWithSize 42 12 x'6,-             P'.wirePutOptWithSize 48 13 x'7, P'.wirePutOptWithSize 58 12 x'8, P'.wirePutOptWithSize 64 13 x'9]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{ok = new'Field}) (P'.wireGet 8)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{synced = new'Field}) (P'.wireGet 8)-             18 -> Prelude'.fmap (\ !new'Field -> old'Self{version = new'Field}) (P'.wireGet 9)-             26 -> Prelude'.fmap (\ !new'Field -> old'Self{net = new'Field}) (P'.wireGet 9)-             32 -> Prelude'.fmap (\ !new'Field -> old'Self{peers = Prelude'.Just new'Field}) (P'.wireGet 13)-             42 -> Prelude'.fmap (\ !new'Field -> old'Self{headers_hash = Prelude'.Just new'Field}) (P'.wireGet 12)-             48 -> Prelude'.fmap (\ !new'Field -> old'Self{headers_height = Prelude'.Just new'Field}) (P'.wireGet 13)-             58 -> Prelude'.fmap (\ !new'Field -> old'Self{blocks_hash = Prelude'.Just new'Field}) (P'.wireGet 12)-             64 -> Prelude'.fmap (\ !new'Field -> old'Self{blocks_height = Prelude'.Just new'Field}) (P'.wireGet 13)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> HealthCheck) HealthCheck where-  getVal m' f' = f' m'--instance P'.GPB HealthCheck--instance P'.ReflectDescriptor HealthCheck where-  getMessageInfo _-   = P'.GetMessageInfo (P'.fromDistinctAscList [0, 8, 18, 26]) (P'.fromDistinctAscList [0, 8, 18, 26, 32, 42, 48, 58, 64])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.HealthCheck\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"HealthCheck\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"HealthCheck.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.ok\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"ok\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.synced\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"synced\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.net\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"net\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.peers\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"peers\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.headers_hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"headers_hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.headers_height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"headers_height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.blocks_hash\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"blocks_hash\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.HealthCheck.blocks_height\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"HealthCheck\"], baseName' = FName \"blocks_height\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType HealthCheck where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg HealthCheck where-  textPut msg-   = do-       P'.tellT "ok" (ok msg)-       P'.tellT "synced" (synced msg)-       P'.tellT "version" (version msg)-       P'.tellT "net" (net msg)-       P'.tellT "peers" (peers msg)-       P'.tellT "headers_hash" (headers_hash msg)-       P'.tellT "headers_height" (headers_height msg)-       P'.tellT "blocks_hash" (blocks_hash msg)-       P'.tellT "blocks_height" (blocks_height msg)-  textGet-   = do-       mods <- P'.sepEndBy-                (P'.choice-                  [parse'ok, parse'synced, parse'version, parse'net, parse'peers, parse'headers_hash, parse'headers_height,-                   parse'blocks_hash, parse'blocks_height])-                P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'ok-         = P'.try-            (do-               v <- P'.getT "ok"-               Prelude'.return (\ o -> o{ok = v}))-        parse'synced-         = P'.try-            (do-               v <- P'.getT "synced"-               Prelude'.return (\ o -> o{synced = v}))-        parse'version-         = P'.try-            (do-               v <- P'.getT "version"-               Prelude'.return (\ o -> o{version = v}))-        parse'net-         = P'.try-            (do-               v <- P'.getT "net"-               Prelude'.return (\ o -> o{net = v}))-        parse'peers-         = P'.try-            (do-               v <- P'.getT "peers"-               Prelude'.return (\ o -> o{peers = v}))-        parse'headers_hash-         = P'.try-            (do-               v <- P'.getT "headers_hash"-               Prelude'.return (\ o -> o{headers_hash = v}))-        parse'headers_height-         = P'.try-            (do-               v <- P'.getT "headers_height"-               Prelude'.return (\ o -> o{headers_height = v}))-        parse'blocks_hash-         = P'.try-            (do-               v <- P'.getT "blocks_hash"-               Prelude'.return (\ o -> o{blocks_hash = v}))-        parse'blocks_height-         = P'.try-            (do-               v <- P'.getT "blocks_height"-               Prelude'.return (\ o -> o{blocks_height = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Input.hs
@@ -1,164 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Input (Input(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data Input = Input{coinbase :: !(P'.Bool), txid :: !(ProtocolBuffers.TxId), output :: !(P'.Word32), sigscript :: !(P'.ByteString),-                   sequence :: !(P'.Word32), witness :: !(P'.Seq P'.ByteString), value :: !(P'.Maybe P'.Word64),-                   pkscript :: !(P'.Maybe P'.ByteString), address :: !(P'.Maybe P'.Utf8)}-             deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Input where-  mergeAppend (Input x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9) (Input y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9)-   = Input (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)-      (P'.mergeAppend x'7 y'7)-      (P'.mergeAppend x'8 y'8)-      (P'.mergeAppend x'9 y'9)--instance P'.Default Input where-  defaultValue-   = Input P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue-      P'.defaultValue-      P'.defaultValue--instance P'.Wire Input where-  wireSize ft' self'@(Input x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 8 x'1 + P'.wireSizeReq 1 11 x'2 + P'.wireSizeReq 1 13 x'3 + P'.wireSizeReq 1 12 x'4 +-             P'.wireSizeReq 1 13 x'5-             + P'.wireSizeRep 1 12 x'6-             + P'.wireSizeOpt 1 4 x'7-             + P'.wireSizeOpt 1 12 x'8-             + P'.wireSizeOpt 1 9 x'9)-  wirePutWithSize ft' self'@(Input x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 0 8 x'1, P'.wirePutReqWithSize 10 11 x'2, P'.wirePutReqWithSize 16 13 x'3,-             P'.wirePutReqWithSize 26 12 x'4, P'.wirePutReqWithSize 32 13 x'5, P'.wirePutRepWithSize 42 12 x'6,-             P'.wirePutOptWithSize 48 4 x'7, P'.wirePutOptWithSize 58 12 x'8, P'.wirePutOptWithSize 66 9 x'9]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{coinbase = new'Field}) (P'.wireGet 8)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.mergeAppend (txid old'Self) (new'Field)}) (P'.wireGet 11)-             16 -> Prelude'.fmap (\ !new'Field -> old'Self{output = new'Field}) (P'.wireGet 13)-             26 -> Prelude'.fmap (\ !new'Field -> old'Self{sigscript = new'Field}) (P'.wireGet 12)-             32 -> Prelude'.fmap (\ !new'Field -> old'Self{sequence = new'Field}) (P'.wireGet 13)-             42 -> Prelude'.fmap (\ !new'Field -> old'Self{witness = P'.append (witness old'Self) new'Field}) (P'.wireGet 12)-             48 -> Prelude'.fmap (\ !new'Field -> old'Self{value = Prelude'.Just new'Field}) (P'.wireGet 4)-             58 -> Prelude'.fmap (\ !new'Field -> old'Self{pkscript = Prelude'.Just new'Field}) (P'.wireGet 12)-             66 -> Prelude'.fmap (\ !new'Field -> old'Self{address = Prelude'.Just new'Field}) (P'.wireGet 9)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Input) Input where-  getVal m' f' = f' m'--instance P'.GPB Input--instance P'.ReflectDescriptor Input where-  getMessageInfo _-   = P'.GetMessageInfo (P'.fromDistinctAscList [0, 10, 16, 26, 32]) (P'.fromDistinctAscList [0, 10, 16, 26, 32, 42, 48, 58, 66])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Input\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Input\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Input.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.coinbase\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"coinbase\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.output\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"output\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.sigscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"sigscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.sequence\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"sequence\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.witness\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"witness\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Input.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Input\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Input where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Input where-  textPut msg-   = do-       P'.tellT "coinbase" (coinbase msg)-       P'.tellT "txid" (txid msg)-       P'.tellT "output" (output msg)-       P'.tellT "sigscript" (sigscript msg)-       P'.tellT "sequence" (sequence msg)-       P'.tellT "witness" (witness msg)-       P'.tellT "value" (value msg)-       P'.tellT "pkscript" (pkscript msg)-       P'.tellT "address" (address msg)-  textGet-   = do-       mods <- P'.sepEndBy-                (P'.choice-                  [parse'coinbase, parse'txid, parse'output, parse'sigscript, parse'sequence, parse'witness, parse'value,-                   parse'pkscript, parse'address])-                P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'coinbase-         = P'.try-            (do-               v <- P'.getT "coinbase"-               Prelude'.return (\ o -> o{coinbase = v}))-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))-        parse'output-         = P'.try-            (do-               v <- P'.getT "output"-               Prelude'.return (\ o -> o{output = v}))-        parse'sigscript-         = P'.try-            (do-               v <- P'.getT "sigscript"-               Prelude'.return (\ o -> o{sigscript = v}))-        parse'sequence-         = P'.try-            (do-               v <- P'.getT "sequence"-               Prelude'.return (\ o -> o{sequence = v}))-        parse'witness-         = P'.try-            (do-               v <- P'.getT "witness"-               Prelude'.return (\ o -> o{witness = P'.append (witness o) v}))-        parse'value-         = P'.try-            (do-               v <- P'.getT "value"-               Prelude'.return (\ o -> o{value = v}))-        parse'pkscript-         = P'.try-            (do-               v <- P'.getT "pkscript"-               Prelude'.return (\ o -> o{pkscript = v}))-        parse'address-         = P'.try-            (do-               v <- P'.getT "address"-               Prelude'.return (\ o -> o{address = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Output.hs
@@ -1,109 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Output (Output(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Spender as ProtocolBuffers (Spender)--data Output = Output{pkscript :: !(P'.ByteString), value :: !(P'.Word64), address :: !(P'.Maybe P'.Utf8),-                     spender :: !(P'.Maybe ProtocolBuffers.Spender)}-              deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Output where-  mergeAppend (Output x'1 x'2 x'3 x'4) (Output y'1 y'2 y'3 y'4)-   = Output (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)--instance P'.Default Output where-  defaultValue = Output P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue--instance P'.Wire Output where-  wireSize ft' self'@(Output x'1 x'2 x'3 x'4)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 12 x'1 + P'.wireSizeReq 1 4 x'2 + P'.wireSizeOpt 1 9 x'3 + P'.wireSizeOpt 1 11 x'4)-  wirePutWithSize ft' self'@(Output x'1 x'2 x'3 x'4)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 12 x'1, P'.wirePutReqWithSize 8 4 x'2, P'.wirePutOptWithSize 18 9 x'3,-             P'.wirePutOptWithSize 26 11 x'4]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{pkscript = new'Field}) (P'.wireGet 12)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{value = new'Field}) (P'.wireGet 4)-             18 -> Prelude'.fmap (\ !new'Field -> old'Self{address = Prelude'.Just new'Field}) (P'.wireGet 9)-             26 -> Prelude'.fmap (\ !new'Field -> old'Self{spender = P'.mergeAppend (spender old'Self) (Prelude'.Just new'Field)})-                    (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Output) Output where-  getVal m' f' = f' m'--instance P'.GPB Output--instance P'.ReflectDescriptor Output where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8]) (P'.fromDistinctAscList [2, 8, 18, 26])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Output\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Output\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Output.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Output.spender\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Output\"], baseName' = FName \"spender\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Spender\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Spender\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Output where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Output where-  textPut msg-   = do-       P'.tellT "pkscript" (pkscript msg)-       P'.tellT "value" (value msg)-       P'.tellT "address" (address msg)-       P'.tellT "spender" (spender msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'pkscript, parse'value, parse'address, parse'spender]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'pkscript-         = P'.try-            (do-               v <- P'.getT "pkscript"-               Prelude'.return (\ o -> o{pkscript = v}))-        parse'value-         = P'.try-            (do-               v <- P'.getT "value"-               Prelude'.return (\ o -> o{value = v}))-        parse'address-         = P'.try-            (do-               v <- P'.getT "address"-               Prelude'.return (\ o -> o{address = v}))-        parse'spender-         = P'.try-            (do-               v <- P'.getT "spender"-               Prelude'.return (\ o -> o{spender = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Peer.hs
@@ -1,117 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Peer (Peer(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data Peer = Peer{useragent :: !(P'.Utf8), address :: !(P'.Utf8), version :: !(P'.Word32), services :: !(P'.Word64),-                 relay :: !(P'.Bool)}-            deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Peer where-  mergeAppend (Peer x'1 x'2 x'3 x'4 x'5) (Peer y'1 y'2 y'3 y'4 y'5)-   = Peer (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)--instance P'.Default Peer where-  defaultValue = Peer P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue--instance P'.Wire Peer where-  wireSize ft' self'@(Peer x'1 x'2 x'3 x'4 x'5)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 9 x'1 + P'.wireSizeReq 1 9 x'2 + P'.wireSizeReq 1 13 x'3 + P'.wireSizeReq 1 4 x'4 +-             P'.wireSizeReq 1 8 x'5)-  wirePutWithSize ft' self'@(Peer x'1 x'2 x'3 x'4 x'5)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 9 x'1, P'.wirePutReqWithSize 10 9 x'2, P'.wirePutReqWithSize 16 13 x'3,-             P'.wirePutReqWithSize 24 4 x'4, P'.wirePutReqWithSize 32 8 x'5]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{useragent = new'Field}) (P'.wireGet 9)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{address = new'Field}) (P'.wireGet 9)-             16 -> Prelude'.fmap (\ !new'Field -> old'Self{version = new'Field}) (P'.wireGet 13)-             24 -> Prelude'.fmap (\ !new'Field -> old'Self{services = new'Field}) (P'.wireGet 4)-             32 -> Prelude'.fmap (\ !new'Field -> old'Self{relay = new'Field}) (P'.wireGet 8)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Peer) Peer where-  getVal m' f' = f' m'--instance P'.GPB Peer--instance P'.ReflectDescriptor Peer where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2, 10, 16, 24, 32]) (P'.fromDistinctAscList [2, 10, 16, 24, 32])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Peer\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Peer\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Peer.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.useragent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"useragent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.services\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"services\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Peer.relay\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Peer\"], baseName' = FName \"relay\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Peer where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Peer where-  textPut msg-   = do-       P'.tellT "useragent" (useragent msg)-       P'.tellT "address" (address msg)-       P'.tellT "version" (version msg)-       P'.tellT "services" (services msg)-       P'.tellT "relay" (relay msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'useragent, parse'address, parse'version, parse'services, parse'relay]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'useragent-         = P'.try-            (do-               v <- P'.getT "useragent"-               Prelude'.return (\ o -> o{useragent = v}))-        parse'address-         = P'.try-            (do-               v <- P'.getT "address"-               Prelude'.return (\ o -> o{address = v}))-        parse'version-         = P'.try-            (do-               v <- P'.getT "version"-               Prelude'.return (\ o -> o{version = v}))-        parse'services-         = P'.try-            (do-               v <- P'.getT "services"-               Prelude'.return (\ o -> o{services = v}))-        parse'relay-         = P'.try-            (do-               v <- P'.getT "relay"-               Prelude'.return (\ o -> o{relay = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/PeerList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.PeerList (PeerList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Peer as ProtocolBuffers (Peer)--data PeerList = PeerList{peer :: !(P'.Seq ProtocolBuffers.Peer)}-                deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable PeerList where-  mergeAppend (PeerList x'1) (PeerList y'1) = PeerList (P'.mergeAppend x'1 y'1)--instance P'.Default PeerList where-  defaultValue = PeerList P'.defaultValue--instance P'.Wire PeerList where-  wireSize ft' self'@(PeerList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(PeerList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{peer = P'.append (peer old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> PeerList) PeerList where-  getVal m' f' = f' m'--instance P'.GPB PeerList--instance P'.ReflectDescriptor PeerList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.PeerList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"PeerList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"PeerList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.PeerList.peer\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"PeerList\"], baseName' = FName \"peer\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Peer\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Peer\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType PeerList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg PeerList where-  textPut msg-   = do-       P'.tellT "peer" (peer msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'peer]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'peer-         = P'.try-            (do-               v <- P'.getT "peer"-               Prelude'.return (\ o -> o{peer = P'.append (peer o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Spender.hs
@@ -1,89 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Spender (Spender(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data Spender = Spender{txid :: !(ProtocolBuffers.TxId), input :: !(P'.Word32)}-               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Spender where-  mergeAppend (Spender x'1 x'2) (Spender y'1 y'2) = Spender (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default Spender where-  defaultValue = Spender P'.defaultValue P'.defaultValue--instance P'.Wire Spender where-  wireSize ft' self'@(Spender x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 11 x'1 + P'.wireSizeReq 1 13 x'2)-  wirePutWithSize ft' self'@(Spender x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 2 11 x'1, P'.wirePutReqWithSize 8 13 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.mergeAppend (txid old'Self) (new'Field)}) (P'.wireGet 11)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{input = new'Field}) (P'.wireGet 13)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Spender) Spender where-  getVal m' f' = f' m'--instance P'.GPB Spender--instance P'.ReflectDescriptor Spender where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8]) (P'.fromDistinctAscList [2, 8])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Spender\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Spender\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Spender.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Spender.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Spender\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Spender.input\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Spender\"], baseName' = FName \"input\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Spender where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Spender where-  textPut msg-   = do-       P'.tellT "txid" (txid msg)-       P'.tellT "input" (input msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'txid, parse'input]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))-        parse'input-         = P'.try-            (do-               v <- P'.getT "input"-               Prelude'.return (\ o -> o{input = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Transaction.hs
@@ -1,202 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Transaction (Transaction(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef as ProtocolBuffers (BlockRef)-import qualified Network.Haskoin.Store.ProtocolBuffers.Input as ProtocolBuffers (Input)-import qualified Network.Haskoin.Store.ProtocolBuffers.Output as ProtocolBuffers (Output)-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data Transaction = Transaction{txid :: !(ProtocolBuffers.TxId), size :: !(P'.Word32), version :: !(P'.Word32),-                               locktime :: !(P'.Word32), block :: !(ProtocolBuffers.BlockRef), deleted :: !(P'.Bool),-                               fee :: !(P'.Word64), time :: !(P'.Word64), rbf :: !(P'.Bool),-                               inputs :: !(P'.Seq ProtocolBuffers.Input), outputs :: !(P'.Seq ProtocolBuffers.Output),-                               weight :: !(P'.Maybe P'.Word32)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Transaction where-  mergeAppend (Transaction x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)-   (Transaction y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12)-   = Transaction (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)-      (P'.mergeAppend x'7 y'7)-      (P'.mergeAppend x'8 y'8)-      (P'.mergeAppend x'9 y'9)-      (P'.mergeAppend x'10 y'10)-      (P'.mergeAppend x'11 y'11)-      (P'.mergeAppend x'12 y'12)--instance P'.Default Transaction where-  defaultValue-   = Transaction P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue-      P'.defaultValue--instance P'.Wire Transaction where-  wireSize ft' self'@(Transaction x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 11 x'1 + P'.wireSizeReq 1 13 x'2 + P'.wireSizeReq 1 13 x'3 + P'.wireSizeReq 1 13 x'4 +-             P'.wireSizeReq 1 11 x'5-             + P'.wireSizeReq 1 8 x'6-             + P'.wireSizeReq 1 4 x'7-             + P'.wireSizeReq 1 4 x'8-             + P'.wireSizeReq 1 8 x'9-             + P'.wireSizeRep 1 11 x'10-             + P'.wireSizeRep 1 11 x'11-             + P'.wireSizeOpt 1 13 x'12)-  wirePutWithSize ft' self'@(Transaction x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 11 x'1, P'.wirePutReqWithSize 8 13 x'2, P'.wirePutReqWithSize 16 13 x'3,-             P'.wirePutReqWithSize 24 13 x'4, P'.wirePutReqWithSize 34 11 x'5, P'.wirePutReqWithSize 40 8 x'6,-             P'.wirePutReqWithSize 48 4 x'7, P'.wirePutReqWithSize 56 4 x'8, P'.wirePutReqWithSize 64 8 x'9,-             P'.wirePutRepWithSize 74 11 x'10, P'.wirePutRepWithSize 82 11 x'11, P'.wirePutOptWithSize 88 13 x'12]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.mergeAppend (txid old'Self) (new'Field)}) (P'.wireGet 11)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{size = new'Field}) (P'.wireGet 13)-             16 -> Prelude'.fmap (\ !new'Field -> old'Self{version = new'Field}) (P'.wireGet 13)-             24 -> Prelude'.fmap (\ !new'Field -> old'Self{locktime = new'Field}) (P'.wireGet 13)-             34 -> Prelude'.fmap (\ !new'Field -> old'Self{block = P'.mergeAppend (block old'Self) (new'Field)}) (P'.wireGet 11)-             40 -> Prelude'.fmap (\ !new'Field -> old'Self{deleted = new'Field}) (P'.wireGet 8)-             48 -> Prelude'.fmap (\ !new'Field -> old'Self{fee = new'Field}) (P'.wireGet 4)-             56 -> Prelude'.fmap (\ !new'Field -> old'Self{time = new'Field}) (P'.wireGet 4)-             64 -> Prelude'.fmap (\ !new'Field -> old'Self{rbf = new'Field}) (P'.wireGet 8)-             74 -> Prelude'.fmap (\ !new'Field -> old'Self{inputs = P'.append (inputs old'Self) new'Field}) (P'.wireGet 11)-             82 -> Prelude'.fmap (\ !new'Field -> old'Self{outputs = P'.append (outputs old'Self) new'Field}) (P'.wireGet 11)-             88 -> Prelude'.fmap (\ !new'Field -> old'Self{weight = Prelude'.Just new'Field}) (P'.wireGet 13)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Transaction) Transaction where-  getVal m' f' = f' m'--instance P'.GPB Transaction--instance P'.ReflectDescriptor Transaction where-  getMessageInfo _-   = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8, 16, 24, 34, 40, 48, 56, 64])-      (P'.fromDistinctAscList [2, 8, 16, 24, 34, 40, 48, 56, 64, 74, 82, 88])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Transaction\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Transaction\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Transaction.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.size\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"size\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.version\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"version\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.locktime\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"locktime\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.deleted\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"deleted\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.fee\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"fee\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.time\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"time\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.rbf\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"rbf\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.inputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"inputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Input\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Input\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.outputs\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"outputs\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Output\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Output\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Transaction.weight\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Transaction\"], baseName' = FName \"weight\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Transaction where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Transaction where-  textPut msg-   = do-       P'.tellT "txid" (txid msg)-       P'.tellT "size" (size msg)-       P'.tellT "version" (version msg)-       P'.tellT "locktime" (locktime msg)-       P'.tellT "block" (block msg)-       P'.tellT "deleted" (deleted msg)-       P'.tellT "fee" (fee msg)-       P'.tellT "time" (time msg)-       P'.tellT "rbf" (rbf msg)-       P'.tellT "inputs" (inputs msg)-       P'.tellT "outputs" (outputs msg)-       P'.tellT "weight" (weight msg)-  textGet-   = do-       mods <- P'.sepEndBy-                (P'.choice-                  [parse'txid, parse'size, parse'version, parse'locktime, parse'block, parse'deleted, parse'fee, parse'time,-                   parse'rbf, parse'inputs, parse'outputs, parse'weight])-                P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))-        parse'size-         = P'.try-            (do-               v <- P'.getT "size"-               Prelude'.return (\ o -> o{size = v}))-        parse'version-         = P'.try-            (do-               v <- P'.getT "version"-               Prelude'.return (\ o -> o{version = v}))-        parse'locktime-         = P'.try-            (do-               v <- P'.getT "locktime"-               Prelude'.return (\ o -> o{locktime = v}))-        parse'block-         = P'.try-            (do-               v <- P'.getT "block"-               Prelude'.return (\ o -> o{block = v}))-        parse'deleted-         = P'.try-            (do-               v <- P'.getT "deleted"-               Prelude'.return (\ o -> o{deleted = v}))-        parse'fee-         = P'.try-            (do-               v <- P'.getT "fee"-               Prelude'.return (\ o -> o{fee = v}))-        parse'time-         = P'.try-            (do-               v <- P'.getT "time"-               Prelude'.return (\ o -> o{time = v}))-        parse'rbf-         = P'.try-            (do-               v <- P'.getT "rbf"-               Prelude'.return (\ o -> o{rbf = v}))-        parse'inputs-         = P'.try-            (do-               v <- P'.getT "inputs"-               Prelude'.return (\ o -> o{inputs = P'.append (inputs o) v}))-        parse'outputs-         = P'.try-            (do-               v <- P'.getT "outputs"-               Prelude'.return (\ o -> o{outputs = P'.append (outputs o) v}))-        parse'weight-         = P'.try-            (do-               v <- P'.getT "weight"-               Prelude'.return (\ o -> o{weight = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/TransactionList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.TransactionList (TransactionList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Transaction as ProtocolBuffers (Transaction)--data TransactionList = TransactionList{transaction :: !(P'.Seq ProtocolBuffers.Transaction)}-                       deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable TransactionList where-  mergeAppend (TransactionList x'1) (TransactionList y'1) = TransactionList (P'.mergeAppend x'1 y'1)--instance P'.Default TransactionList where-  defaultValue = TransactionList P'.defaultValue--instance P'.Wire TransactionList where-  wireSize ft' self'@(TransactionList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(TransactionList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{transaction = P'.append (transaction old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> TransactionList) TransactionList where-  getVal m' f' = f' m'--instance P'.GPB TransactionList--instance P'.ReflectDescriptor TransactionList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TransactionList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TransactionList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TransactionList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TransactionList.transaction\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TransactionList\"], baseName' = FName \"transaction\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Transaction\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Transaction\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType TransactionList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg TransactionList where-  textPut msg-   = do-       P'.tellT "transaction" (transaction msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'transaction]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'transaction-         = P'.try-            (do-               v <- P'.getT "transaction"-               Prelude'.return (\ o -> o{transaction = P'.append (transaction o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/TxAfterHeight.hs
@@ -1,81 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.TxAfterHeight (TxAfterHeight(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data TxAfterHeight = TxAfterHeight{result :: !(P'.Maybe P'.Bool)}-                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable TxAfterHeight where-  mergeAppend (TxAfterHeight x'1) (TxAfterHeight y'1) = TxAfterHeight (P'.mergeAppend x'1 y'1)--instance P'.Default TxAfterHeight where-  defaultValue = TxAfterHeight P'.defaultValue--instance P'.Wire TxAfterHeight where-  wireSize ft' self'@(TxAfterHeight x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeOpt 1 8 x'1)-  wirePutWithSize ft' self'@(TxAfterHeight x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutOptWithSize 0 8 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{result = Prelude'.Just new'Field}) (P'.wireGet 8)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> TxAfterHeight) TxAfterHeight where-  getVal m' f' = f' m'--instance P'.GPB TxAfterHeight--instance P'.ReflectDescriptor TxAfterHeight where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [0])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxAfterHeight\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxAfterHeight\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxAfterHeight.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxAfterHeight.result\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxAfterHeight\"], baseName' = FName \"result\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 0}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType TxAfterHeight where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg TxAfterHeight where-  textPut msg-   = do-       P'.tellT "result" (result msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'result]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'result-         = P'.try-            (do-               v <- P'.getT "result"-               Prelude'.return (\ o -> o{result = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/TxId.hs
@@ -1,81 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.TxId (TxId(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'--data TxId = TxId{txid :: !(P'.ByteString)}-            deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable TxId where-  mergeAppend (TxId x'1) (TxId y'1) = TxId (P'.mergeAppend x'1 y'1)--instance P'.Default TxId where-  defaultValue = TxId P'.defaultValue--instance P'.Wire TxId where-  wireSize ft' self'@(TxId x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeReq 1 12 x'1)-  wirePutWithSize ft' self'@(TxId x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutReqWithSize 2 12 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = new'Field}) (P'.wireGet 12)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> TxId) TxId where-  getVal m' f' = f' m'--instance P'.GPB TxId--instance P'.ReflectDescriptor TxId where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2]) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxId.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxId.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxId\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType TxId where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg TxId where-  textPut msg-   = do-       P'.tellT "txid" (txid msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'txid]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/TxIdList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.TxIdList (TxIdList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data TxIdList = TxIdList{txid :: !(P'.Seq ProtocolBuffers.TxId)}-                deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable TxIdList where-  mergeAppend (TxIdList x'1) (TxIdList y'1) = TxIdList (P'.mergeAppend x'1 y'1)--instance P'.Default TxIdList where-  defaultValue = TxIdList P'.defaultValue--instance P'.Wire TxIdList where-  wireSize ft' self'@(TxIdList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(TxIdList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.append (txid old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> TxIdList) TxIdList where-  getVal m' f' = f' m'--instance P'.GPB TxIdList--instance P'.ReflectDescriptor TxIdList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.TxIdList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxIdList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"TxIdList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.TxIdList.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"TxIdList\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType TxIdList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg TxIdList where-  textPut msg-   = do-       P'.tellT "txid" (txid msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'txid]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = P'.append (txid o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/Unspent.hs
@@ -1,128 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.Unspent (Unspent(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.BlockRef as ProtocolBuffers (BlockRef)-import qualified Network.Haskoin.Store.ProtocolBuffers.TxId as ProtocolBuffers (TxId)--data Unspent = Unspent{txid :: !(ProtocolBuffers.TxId), index :: !(P'.Word32), pkscript :: !(P'.ByteString), value :: !(P'.Word64),-                       block :: !(ProtocolBuffers.BlockRef), address :: !(P'.Maybe P'.Utf8)}-               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable Unspent where-  mergeAppend (Unspent x'1 x'2 x'3 x'4 x'5 x'6) (Unspent y'1 y'2 y'3 y'4 y'5 y'6)-   = Unspent (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)-      (P'.mergeAppend x'5 y'5)-      (P'.mergeAppend x'6 y'6)--instance P'.Default Unspent where-  defaultValue = Unspent P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue--instance P'.Wire Unspent where-  wireSize ft' self'@(Unspent x'1 x'2 x'3 x'4 x'5 x'6)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size-         = (P'.wireSizeReq 1 11 x'1 + P'.wireSizeReq 1 13 x'2 + P'.wireSizeReq 1 12 x'3 + P'.wireSizeReq 1 4 x'4 +-             P'.wireSizeReq 1 11 x'5-             + P'.wireSizeOpt 1 9 x'6)-  wirePutWithSize ft' self'@(Unspent x'1 x'2 x'3 x'4 x'5 x'6)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields-         = P'.sequencePutWithSize-            [P'.wirePutReqWithSize 2 11 x'1, P'.wirePutReqWithSize 8 13 x'2, P'.wirePutReqWithSize 18 12 x'3,-             P'.wirePutReqWithSize 24 4 x'4, P'.wirePutReqWithSize 34 11 x'5, P'.wirePutOptWithSize 42 9 x'6]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{txid = P'.mergeAppend (txid old'Self) (new'Field)}) (P'.wireGet 11)-             8 -> Prelude'.fmap (\ !new'Field -> old'Self{index = new'Field}) (P'.wireGet 13)-             18 -> Prelude'.fmap (\ !new'Field -> old'Self{pkscript = new'Field}) (P'.wireGet 12)-             24 -> Prelude'.fmap (\ !new'Field -> old'Self{value = new'Field}) (P'.wireGet 4)-             34 -> Prelude'.fmap (\ !new'Field -> old'Self{block = P'.mergeAppend (block old'Self) (new'Field)}) (P'.wireGet 11)-             42 -> Prelude'.fmap (\ !new'Field -> old'Self{address = Prelude'.Just new'Field}) (P'.wireGet 9)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> Unspent) Unspent where-  getVal m' f' = f' m'--instance P'.GPB Unspent--instance P'.ReflectDescriptor Unspent where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [2, 8, 18, 24, 34]) (P'.fromDistinctAscList [2, 8, 18, 24, 34, 42])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"Unspent.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.txid\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"txid\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.TxId\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"TxId\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.index\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"index\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.pkscript\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"pkscript\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.value\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"value\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 4}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.block\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"block\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.BlockRef\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"BlockRef\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.Unspent.address\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"Unspent\"], baseName' = FName \"address\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType Unspent where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg Unspent where-  textPut msg-   = do-       P'.tellT "txid" (txid msg)-       P'.tellT "index" (index msg)-       P'.tellT "pkscript" (pkscript msg)-       P'.tellT "value" (value msg)-       P'.tellT "block" (block msg)-       P'.tellT "address" (address msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'txid, parse'index, parse'pkscript, parse'value, parse'block, parse'address]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'txid-         = P'.try-            (do-               v <- P'.getT "txid"-               Prelude'.return (\ o -> o{txid = v}))-        parse'index-         = P'.try-            (do-               v <- P'.getT "index"-               Prelude'.return (\ o -> o{index = v}))-        parse'pkscript-         = P'.try-            (do-               v <- P'.getT "pkscript"-               Prelude'.return (\ o -> o{pkscript = v}))-        parse'value-         = P'.try-            (do-               v <- P'.getT "value"-               Prelude'.return (\ o -> o{value = v}))-        parse'block-         = P'.try-            (do-               v <- P'.getT "block"-               Prelude'.return (\ o -> o{block = v}))-        parse'address-         = P'.try-            (do-               v <- P'.getT "address"-               Prelude'.return (\ o -> o{address = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/UnspentList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.UnspentList (UnspentList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Unspent as ProtocolBuffers (Unspent)--data UnspentList = UnspentList{unspent :: !(P'.Seq ProtocolBuffers.Unspent)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable UnspentList where-  mergeAppend (UnspentList x'1) (UnspentList y'1) = UnspentList (P'.mergeAppend x'1 y'1)--instance P'.Default UnspentList where-  defaultValue = UnspentList P'.defaultValue--instance P'.Wire UnspentList where-  wireSize ft' self'@(UnspentList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(UnspentList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{unspent = P'.append (unspent old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> UnspentList) UnspentList where-  getVal m' f' = f' m'--instance P'.GPB UnspentList--instance P'.ReflectDescriptor UnspentList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.UnspentList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"UnspentList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"UnspentList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.UnspentList.unspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"UnspentList\"], baseName' = FName \"unspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType UnspentList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg UnspentList where-  textPut msg-   = do-       P'.tellT "unspent" (unspent msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'unspent]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'unspent-         = P'.try-            (do-               v <- P'.getT "unspent"-               Prelude'.return (\ o -> o{unspent = P'.append (unspent o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/XPubBalance.hs
@@ -1,90 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.XPubBalance (XPubBalance(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Balance as ProtocolBuffers (Balance)--data XPubBalance = XPubBalance{path :: !(P'.Seq P'.Word32), balance :: !(ProtocolBuffers.Balance)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable XPubBalance where-  mergeAppend (XPubBalance x'1 x'2) (XPubBalance y'1 y'2) = XPubBalance (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default XPubBalance where-  defaultValue = XPubBalance P'.defaultValue P'.defaultValue--instance P'.Wire XPubBalance where-  wireSize ft' self'@(XPubBalance x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizePacked 1 13 x'1 + P'.wireSizeReq 1 11 x'2)-  wirePutWithSize ft' self'@(XPubBalance x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutPackedWithSize 2 13 x'1, P'.wirePutReqWithSize 10 11 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{path = P'.append (path old'Self) new'Field}) (P'.wireGet 13)-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{path = P'.mergeAppend (path old'Self) new'Field}) (P'.wireGetPacked 13)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{balance = P'.mergeAppend (balance old'Self) (new'Field)}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> XPubBalance) XPubBalance where-  getVal m' f' = f' m'--instance P'.GPB XPubBalance--instance P'.ReflectDescriptor XPubBalance where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [10]) (P'.fromDistinctAscList [0, 2, 10])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalance\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubBalance.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalance.path\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalance\"], baseName' = FName \"path\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Just (WireTag {getWireTag = 0},WireTag {getWireTag = 2}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalance.balance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalance\"], baseName' = FName \"balance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Balance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Balance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType XPubBalance where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg XPubBalance where-  textPut msg-   = do-       P'.tellT "path" (path msg)-       P'.tellT "balance" (balance msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'path, parse'balance]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'path-         = P'.try-            (do-               v <- P'.getT "path"-               Prelude'.return (\ o -> o{path = P'.append (path o) v}))-        parse'balance-         = P'.try-            (do-               v <- P'.getT "balance"-               Prelude'.return (\ o -> o{balance = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/XPubBalanceList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.XPubBalanceList (XPubBalanceList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubBalance as ProtocolBuffers (XPubBalance)--data XPubBalanceList = XPubBalanceList{xpubbalance :: !(P'.Seq ProtocolBuffers.XPubBalance)}-                       deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable XPubBalanceList where-  mergeAppend (XPubBalanceList x'1) (XPubBalanceList y'1) = XPubBalanceList (P'.mergeAppend x'1 y'1)--instance P'.Default XPubBalanceList where-  defaultValue = XPubBalanceList P'.defaultValue--instance P'.Wire XPubBalanceList where-  wireSize ft' self'@(XPubBalanceList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(XPubBalanceList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{xpubbalance = P'.append (xpubbalance old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> XPubBalanceList) XPubBalanceList where-  getVal m' f' = f' m'--instance P'.GPB XPubBalanceList--instance P'.ReflectDescriptor XPubBalanceList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalanceList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalanceList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubBalanceList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubBalanceList.xpubbalance\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubBalanceList\"], baseName' = FName \"xpubbalance\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.XPubBalance\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubBalance\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType XPubBalanceList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg XPubBalanceList where-  textPut msg-   = do-       P'.tellT "xpubbalance" (xpubbalance msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'xpubbalance]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'xpubbalance-         = P'.try-            (do-               v <- P'.getT "xpubbalance"-               Prelude'.return (\ o -> o{xpubbalance = P'.append (xpubbalance o) v}))
− src/Network/Haskoin/Store/ProtocolBuffers/XPubUnspent.hs
@@ -1,90 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.XPubUnspent (XPubUnspent(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.Unspent as ProtocolBuffers (Unspent)--data XPubUnspent = XPubUnspent{path :: !(P'.Seq P'.Word32), unspent :: !(ProtocolBuffers.Unspent)}-                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable XPubUnspent where-  mergeAppend (XPubUnspent x'1 x'2) (XPubUnspent y'1 y'2) = XPubUnspent (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)--instance P'.Default XPubUnspent where-  defaultValue = XPubUnspent P'.defaultValue P'.defaultValue--instance P'.Wire XPubUnspent where-  wireSize ft' self'@(XPubUnspent x'1 x'2)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizePacked 1 13 x'1 + P'.wireSizeReq 1 11 x'2)-  wirePutWithSize ft' self'@(XPubUnspent x'1 x'2)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutPackedWithSize 2 13 x'1, P'.wirePutReqWithSize 10 11 x'2]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             0 -> Prelude'.fmap (\ !new'Field -> old'Self{path = P'.append (path old'Self) new'Field}) (P'.wireGet 13)-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{path = P'.mergeAppend (path old'Self) new'Field}) (P'.wireGetPacked 13)-             10 -> Prelude'.fmap (\ !new'Field -> old'Self{unspent = P'.mergeAppend (unspent old'Self) (new'Field)}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> XPubUnspent) XPubUnspent where-  getVal m' f' = f' m'--instance P'.GPB XPubUnspent--instance P'.ReflectDescriptor XPubUnspent where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList [10]) (P'.fromDistinctAscList [0, 2, 10])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspent\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubUnspent.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspent.path\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspent\"], baseName' = FName \"path\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Just (WireTag {getWireTag = 0},WireTag {getWireTag = 2}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspent.unspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspent\"], baseName' = FName \"unspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = True, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.Unspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"Unspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType XPubUnspent where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg XPubUnspent where-  textPut msg-   = do-       P'.tellT "path" (path msg)-       P'.tellT "unspent" (unspent msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'path, parse'unspent]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'path-         = P'.try-            (do-               v <- P'.getT "path"-               Prelude'.return (\ o -> o{path = P'.append (path o) v}))-        parse'unspent-         = P'.try-            (do-               v <- P'.getT "unspent"-               Prelude'.return (\ o -> o{unspent = v}))
− src/Network/Haskoin/Store/ProtocolBuffers/XPubUnspentList.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses, OverloadedStrings #-}-{-# OPTIONS_GHC  -w #-}-module Network.Haskoin.Store.ProtocolBuffers.XPubUnspentList (XPubUnspentList(..)) where-import Prelude ((+), (/), (++), (.))-import qualified Prelude as Prelude'-import qualified Data.Typeable as Prelude'-import qualified GHC.Generics as Prelude'-import qualified Data.Data as Prelude'-import qualified Text.ProtocolBuffers.Header as P'-import qualified Network.Haskoin.Store.ProtocolBuffers.XPubUnspent as ProtocolBuffers (XPubUnspent)--data XPubUnspentList = XPubUnspentList{xpubunspent :: !(P'.Seq ProtocolBuffers.XPubUnspent)}-                       deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data, Prelude'.Generic)--instance P'.Mergeable XPubUnspentList where-  mergeAppend (XPubUnspentList x'1) (XPubUnspentList y'1) = XPubUnspentList (P'.mergeAppend x'1 y'1)--instance P'.Default XPubUnspentList where-  defaultValue = XPubUnspentList P'.defaultValue--instance P'.Wire XPubUnspentList where-  wireSize ft' self'@(XPubUnspentList x'1)-   = case ft' of-       10 -> calc'Size-       11 -> P'.prependMessageSize calc'Size-       _ -> P'.wireSizeErr ft' self'-    where-        calc'Size = (P'.wireSizeRep 1 11 x'1)-  wirePutWithSize ft' self'@(XPubUnspentList x'1)-   = case ft' of-       10 -> put'Fields-       11 -> put'FieldsSized-       _ -> P'.wirePutErr ft' self'-    where-        put'Fields = P'.sequencePutWithSize [P'.wirePutRepWithSize 2 11 x'1]-        put'FieldsSized-         = let size' = Prelude'.fst (P'.runPutM put'Fields)-               put'Size-                = do-                    P'.putSize size'-                    Prelude'.return (P'.size'WireSize size')-            in P'.sequencePutWithSize [put'Size, put'Fields]-  wireGet ft'-   = case ft' of-       10 -> P'.getBareMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       11 -> P'.getMessageWith (P'.catch'Unknown' P'.discardUnknown update'Self)-       _ -> P'.wireGetErr ft'-    where-        update'Self wire'Tag old'Self-         = case wire'Tag of-             2 -> Prelude'.fmap (\ !new'Field -> old'Self{xpubunspent = P'.append (xpubunspent old'Self) new'Field}) (P'.wireGet 11)-             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self--instance P'.MessageAPI msg' (msg' -> XPubUnspentList) XPubUnspentList where-  getVal m' f' = f' m'--instance P'.GPB XPubUnspentList--instance P'.ReflectDescriptor XPubUnspentList where-  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [2])-  reflectDescriptorInfo _-   = Prelude'.read-      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspentList\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspentList\"}, descFilePath = [\"Network\",\"Haskoin\",\"Store\",\"ProtocolBuffers\",\"XPubUnspentList.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".ProtocolBuffers.XPubUnspentList.xpubunspent\", haskellPrefix' = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule' = [MName \"ProtocolBuffers\",MName \"XPubUnspentList\"], baseName' = FName \"xpubunspent\", baseNamePrefix' = \"\"}, fieldNumber = FieldId {getFieldId = 0}, wireTag = WireTag {getWireTag = 2}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".ProtocolBuffers.XPubUnspent\", haskellPrefix = [MName \"Network\",MName \"Haskoin\",MName \"Store\"], parentModule = [MName \"ProtocolBuffers\"], baseName = MName \"XPubUnspent\"}), hsRawDefault = Nothing, hsDefault = Nothing}], descOneofs = fromList [], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False, makeLenses = False, jsonInstances = False}"--instance P'.TextType XPubUnspentList where-  tellT = P'.tellSubMessage-  getT = P'.getSubMessage--instance P'.TextMsg XPubUnspentList where-  textPut msg-   = do-       P'.tellT "xpubunspent" (xpubunspent msg)-  textGet-   = do-       mods <- P'.sepEndBy (P'.choice [parse'xpubunspent]) P'.spaces-       Prelude'.return (Prelude'.foldl (\ v f -> f v) P'.defaultValue mods)-    where-        parse'xpubunspent-         = P'.try-            (do-               v <- P'.getT "xpubunspent"-               Prelude'.return (\ o -> o{xpubunspent = P'.append (xpubunspent o) v}))
test/Spec.hs view
@@ -38,30 +38,33 @@                     bestHeight = nodeHeight bestNode                 bestHeight `shouldBe` 8         it "get a block and its transactions" $-            withTestStore net "get-block-txs" $ \TestStore {..} -> do-                let get_the_block h =-                        receive testStoreEvents >>= \case-                            StoreBestBlock b-                                | h == 0 -> return b-                                | otherwise -> get_the_block ((h :: Int) - 1)-                            _ -> get_the_block h-                bh <- get_the_block 380-                m <- getBlock (testStoreDB, defaultReadOptions) bh-                let bd = fromMaybe (error "Could not get block") m-                blockDataHeight bd `shouldBe` 381-                length (blockDataTxs bd) `shouldBe` 2-                let h1 =-                        "e8588129e146eeb0aa7abdc3590f8c5920cc5ff42daf05c23b29d4ae5b51fc22"-                    h2 =-                        "7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c"-                head (blockDataTxs bd) `shouldBe` h1-                last (blockDataTxs bd) `shouldBe` h2-                t1 <- getTransaction (testStoreDB, defaultReadOptions) h1-                t1 `shouldSatisfy` isJust-                txHash (transactionData (fromJust t1)) `shouldBe` h1-                t2 <- getTransaction (testStoreDB, defaultReadOptions) h2-                t2 `shouldSatisfy` isJust-                txHash (transactionData (fromJust t2)) `shouldBe` h2+            withTestStore net "get-block-txs" $ \TestStore {..} ->+                withBlockDB defaultReadOptions testStoreDB $ do+                    let h1 =+                            "e8588129e146eeb0aa7abdc3590f8c5920cc5ff42daf05c23b29d4ae5b51fc22"+                        h2 =+                            "7e621eeb02874ab039a8566fd36f4591e65eca65313875221842c53de6907d6c"+                        get_the_block h =+                            receive testStoreEvents >>= \case+                                StoreBestBlock b+                                    | h == 0 -> return b+                                    | otherwise ->+                                        get_the_block ((h :: Int) - 1)+                                _ -> get_the_block h+                    bh <- get_the_block 380+                    m <- getBlock bh+                    let bd = fromMaybe (error "Could not get block") m+                    t1 <- getTransaction h1+                    t2 <- getTransaction h2+                    lift $ do+                        blockDataHeight bd `shouldBe` 381+                        length (blockDataTxs bd) `shouldBe` 2+                        head (blockDataTxs bd) `shouldBe` h1+                        last (blockDataTxs bd) `shouldBe` h2+                        t1 `shouldSatisfy` isJust+                        txHash (transactionData (fromJust t1)) `shouldBe` h1+                        t2 `shouldSatisfy` isJust+                        txHash (transactionData (fromJust t2)) `shouldBe` h2  withTestStore ::        MonadUnliftIO m => Network -> String -> (TestStore -> m a) -> m a