{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Network.Haskoin.Store.Messages where
import Data.Word
import Database.RocksDB (DB)
import Haskoin
import Haskoin.Node
import Network.Socket
import NQE
type BlockStore = Mailbox BlockMessage
data Store = Store
{ storeManager :: !Manager
, storeChain :: !Chain
, storeBlock :: !BlockStore
}
data StoreConfig = StoreConfig
{ storeConfMaxPeers :: !Int
, storeConfInitPeers :: ![HostPort]
, storeConfDiscover :: !Bool
, storeConfDB :: !DB
, storeConfNetwork :: !Network
, storeConfListen :: !(Listen StoreEvent)
}
data BlockConfig = BlockConfig
{ blockConfManager :: !Manager
, blockConfChain :: !Chain
, blockConfListener :: !(Listen StoreEvent)
, blockConfDB :: !DB
, blockConfNet :: !Network
}
data BlockMessage
= BlockNewBest !BlockNode
| BlockPeerConnect !Peer
!SockAddr
| BlockPeerDisconnect !Peer
!SockAddr
| BlockReceived !Peer
!Block
| BlockNotFound !Peer
![BlockHash]
| BlockTxReceived !Peer
!Tx
| BlockTxAvailable !Peer
![TxHash]
| BlockPing
| PurgeMempool
data StoreEvent
= StoreBestBlock !BlockHash
| StoreMempoolNew !TxHash
| StorePeerConnected !Peer
!SockAddr
| StorePeerDisconnected !Peer
!SockAddr
| StorePeerPong !Peer
!Word64