blockchain-0.0.3: lib/Data/Blockchain/Types/Block.hs
module Data.Blockchain.Types.Block
( Block(..)
, BlockHeader(..)
) where
import qualified Data.Aeson as Aeson
import qualified Data.Time.Clock as Time
import qualified GHC.Generics as Generic
import qualified Data.Blockchain.Crypto as Crypto
import Data.Blockchain.Types.Difficulty
import Data.Blockchain.Types.Transaction
data Block = Block
{ blockHeader :: BlockHeader
, coinbaseTransaction :: CoinbaseTransaction
, transactions :: [Transaction]
}
deriving (Generic.Generic, Eq, Show)
instance Aeson.FromJSON Block
instance Aeson.ToJSON Block
data BlockHeader = BlockHeader
{ version :: Int
, prevBlockHeaderHash :: Crypto.Hash BlockHeader
, coinbaseTransactionHash :: Crypto.Hash CoinbaseTransaction
, transactionHashTreeRoot :: Crypto.HashTreeRoot Transaction
, time :: Time.UTCTime
, difficulty :: Difficulty
, nonce :: Int
}
deriving (Generic.Generic, Eq, Show)
instance Aeson.FromJSON BlockHeader
instance Aeson.ToJSON BlockHeader
instance Crypto.ToHash BlockHeader