{-# LANGUAGE OverloadedStrings #-}

module Network.Bitcoin.Api.Mining where

import           Data.Aeson

import qualified Data.Bitcoin.Block             as Btc

import qualified Network.Bitcoin.Api.Internal   as I
import qualified Network.Bitcoin.Api.Types      as T
import qualified Network.Bitcoin.Api.Blockchain as Blockchain

-- | Generate a certain amount of new blocks. Available in 'regtest' mode only.
generate :: T.Client       -- ^ Our client context
         -> Integer        -- ^ Amount of blocks to generate
         -> IO [Btc.Block] -- ^ The generated blocks
generate client blocks =
  let configuration = [toJSON True, toJSON blocks]
  in do
    hashes <- I.call client "setgenerate" configuration
    mapM (Blockchain.getBlock client) hashes