module Data.Bitcoin.Transaction ( decode
, encode
, transactionId
, Transaction (..)
, TransactionIn (..)
, TransactionOut (..)
, Coinbase ) where
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.Types ( TransactionId )
import Data.Bitcoin.Transaction.Types
decode :: HS.HexString
-> Transaction
decode = HS.toBinary
encode :: Transaction
-> HS.HexString
encode = HS.fromBinary
transactionId :: Transaction -> TransactionId
transactionId =
let sha256d = Sha256.hash . Sha256.hash
bytes = BSL.toStrict . B.encode
in HS.fromBytes . BS.reverse . sha256d . bytes