content: {-# LANGUAGE OverloadedStrings #-}
  
  -- |
  -- Module      : Haskoin.Transaction.Genesis
  -- Copyright   : No rights reserved
  -- License     : UNLICENSE
  -- Maintainer  : jprupp@protonmail.ch
  -- Stability   : experimental
  -- Portability : POSIX
  --
  -- Code related to transactions parsing and serialization.
  module Haskoin.Transaction.Genesis (genesisTx) where
  
  import Crypto.Secp256k1 (Ctx, importPubKey)
  import Data.Bytes.Get (runGetS)
  import Haskoin.Crypto.Keys.Common
  import Haskoin.Script.Standard
  import Haskoin.Transaction.Common
  import Haskoin.Util
  
  -- | Transaction from Genesis block.
  genesisTx :: Ctx -> Tx
  genesisTx ctx =
    Tx 1 [txin] [txout] [] locktime
    where
      txin = TxIn outpoint inputBS maxBound
      txout = TxOut 5000000000 (marshal ctx output)
      locktime = 0
      outpoint = OutPoint z maxBound
      Just inputBS =
        decodeHex
          "04ffff001d0104455468652054696d65732030332f4a616e2f323030392043686\
          \16e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f\
          \757420666f722062616e6b73"
      Just pubKeyBS =
        decodeHex
          "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb\
          \649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f"
      Right pubKey =
        unmarshal ctx pubKeyBS
      output = PayPK pubKey
      z = "0000000000000000000000000000000000000000000000000000000000000000"
  