module Data.Blockchain.Mining.Blockchain ( mineBlockchain ) where import Data.Monoid ((<>)) import qualified Data.Blockchain as Blockchain import Data.Blockchain.Mining.Block -- | Creates a blockchain from the given config. -- This includes mining a genesis block. mineBlockchain :: Blockchain.BlockchainConfig -> IO (Blockchain.Blockchain Blockchain.Validated) mineBlockchain config = either throwValidationError id <$> do genesisBlock <- mineGenesisBlock config let node = Blockchain.BlockchainNode genesisBlock mempty chain = Blockchain.construct config node return (Blockchain.validate chain) where throwValidationError e = error $ "Unexpected error creating blockchain: " <> show e