module Data.Bitcoin.Block ( decode
, encode
, headerHash
, Block (..)
, BlockHeader (..) ) where
import Control.Lens ((^.))
import qualified Data.Binary as B (encode)
import qualified Data.ByteString as BS (reverse)
import qualified Data.ByteString.Lazy as BSL (toStrict)
import qualified Crypto.Hash.SHA256 as Sha256
import qualified Data.HexString as HS
import Data.Bitcoin.Block.Types
decode :: HS.HexString
-> Block
decode = HS.toBinary
encode :: Block
-> HS.HexString
encode = HS.fromBinary
headerHash :: Block -> HS.HexString
headerHash block =
let sha256d = Sha256.hash . Sha256.hash
bytes = BSL.toStrict . B.encode
in HS.fromBytes . BS.reverse . sha256d . bytes $ (block ^. blockHeader)