packages feed

bitcoin-tx 0.9.0 → 0.10.0

raw patch · 7 files changed

+242/−242 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Bitcoin.Transaction: decode :: ByteString -> Transaction
- Bitcoin.Transaction: encode :: Transaction -> ByteString
- Bitcoin.Transaction.Types: OutPoint :: TransactionHash -> !Word32 -> OutPoint
- Bitcoin.Transaction.Types: Transaction :: Word32 -> [TransactionIn] -> [TransactionOut] -> Word32 -> Transaction
- Bitcoin.Transaction.Types: TransactionHash :: Integer -> TransactionHash
- Bitcoin.Transaction.Types: TransactionIn :: OutPoint -> Script -> Word32 -> TransactionIn
- Bitcoin.Transaction.Types: TransactionOut :: Word64 -> Script -> TransactionOut
- Bitcoin.Transaction.Types: TxnMultisig :: TxnOutputType
- Bitcoin.Transaction.Types: TxnPubKey :: TxnOutputType
- Bitcoin.Transaction.Types: TxnPubKeyHash :: TxnOutputType
- Bitcoin.Transaction.Types: TxnScriptHash :: TxnOutputType
- Bitcoin.Transaction.Types: VarInt :: Word64 -> VarInt
- Bitcoin.Transaction.Types: data OutPoint
- Bitcoin.Transaction.Types: data Transaction
- Bitcoin.Transaction.Types: data TransactionHash
- Bitcoin.Transaction.Types: data TransactionIn
- Bitcoin.Transaction.Types: data TransactionOut
- Bitcoin.Transaction.Types: data TxnOutputType
- Bitcoin.Transaction.Types: getVarInt :: VarInt -> Word64
- Bitcoin.Transaction.Types: instance Binary OutPoint
- Bitcoin.Transaction.Types: instance Binary Transaction
- Bitcoin.Transaction.Types: instance Binary TransactionHash
- Bitcoin.Transaction.Types: instance Binary TransactionIn
- Bitcoin.Transaction.Types: instance Binary TransactionOut
- Bitcoin.Transaction.Types: instance Binary VarInt
- Bitcoin.Transaction.Types: instance Eq OutPoint
- Bitcoin.Transaction.Types: instance Eq Transaction
- Bitcoin.Transaction.Types: instance Eq TransactionHash
- Bitcoin.Transaction.Types: instance Eq TransactionIn
- Bitcoin.Transaction.Types: instance Eq TransactionOut
- Bitcoin.Transaction.Types: instance Eq TxnOutputType
- Bitcoin.Transaction.Types: instance Eq VarInt
- Bitcoin.Transaction.Types: instance Ord TxnOutputType
- Bitcoin.Transaction.Types: instance Read OutPoint
- Bitcoin.Transaction.Types: instance Read Transaction
- Bitcoin.Transaction.Types: instance Read TransactionHash
- Bitcoin.Transaction.Types: instance Read TransactionIn
- Bitcoin.Transaction.Types: instance Read TransactionOut
- Bitcoin.Transaction.Types: instance Read TxnOutputType
- Bitcoin.Transaction.Types: instance Read VarInt
- Bitcoin.Transaction.Types: instance Show OutPoint
- Bitcoin.Transaction.Types: instance Show Transaction
- Bitcoin.Transaction.Types: instance Show TransactionHash
- Bitcoin.Transaction.Types: instance Show TransactionIn
- Bitcoin.Transaction.Types: instance Show TransactionOut
- Bitcoin.Transaction.Types: instance Show TxnOutputType
- Bitcoin.Transaction.Types: instance Show VarInt
- Bitcoin.Transaction.Types: newtype VarInt
- Bitcoin.Transaction.Types: outPointHash :: OutPoint -> TransactionHash
- Bitcoin.Transaction.Types: outPointIndex :: OutPoint -> !Word32
- Bitcoin.Transaction.Types: outValue :: TransactionOut -> Word64
- Bitcoin.Transaction.Types: prevOutput :: TransactionIn -> OutPoint
- Bitcoin.Transaction.Types: scriptInput :: TransactionIn -> Script
- Bitcoin.Transaction.Types: scriptOutput :: TransactionOut -> Script
- Bitcoin.Transaction.Types: txIn :: Transaction -> [TransactionIn]
- Bitcoin.Transaction.Types: txInSequence :: TransactionIn -> Word32
- Bitcoin.Transaction.Types: txLockTime :: Transaction -> Word32
- Bitcoin.Transaction.Types: txOut :: Transaction -> [TransactionOut]
- Bitcoin.Transaction.Types: txVersion :: Transaction -> Word32
+ Network.Bitcoin.Transaction: decode :: ByteString -> Transaction
+ Network.Bitcoin.Transaction: encode :: Transaction -> ByteString
+ Network.Bitcoin.Transaction.Types: OutPoint :: TransactionHash -> !Word32 -> OutPoint
+ Network.Bitcoin.Transaction.Types: Transaction :: Word32 -> [TransactionIn] -> [TransactionOut] -> Word32 -> Transaction
+ Network.Bitcoin.Transaction.Types: TransactionHash :: Integer -> TransactionHash
+ Network.Bitcoin.Transaction.Types: TransactionIn :: OutPoint -> Script -> Word32 -> TransactionIn
+ Network.Bitcoin.Transaction.Types: TransactionOut :: Word64 -> Script -> TransactionOut
+ Network.Bitcoin.Transaction.Types: TxnMultisig :: TxnOutputType
+ Network.Bitcoin.Transaction.Types: TxnPubKey :: TxnOutputType
+ Network.Bitcoin.Transaction.Types: TxnPubKeyHash :: TxnOutputType
+ Network.Bitcoin.Transaction.Types: TxnScriptHash :: TxnOutputType
+ Network.Bitcoin.Transaction.Types: VarInt :: Word64 -> VarInt
+ Network.Bitcoin.Transaction.Types: data OutPoint
+ Network.Bitcoin.Transaction.Types: data Transaction
+ Network.Bitcoin.Transaction.Types: data TransactionHash
+ Network.Bitcoin.Transaction.Types: data TransactionIn
+ Network.Bitcoin.Transaction.Types: data TransactionOut
+ Network.Bitcoin.Transaction.Types: data TxnOutputType
+ Network.Bitcoin.Transaction.Types: getVarInt :: VarInt -> Word64
+ Network.Bitcoin.Transaction.Types: instance Binary OutPoint
+ Network.Bitcoin.Transaction.Types: instance Binary Transaction
+ Network.Bitcoin.Transaction.Types: instance Binary TransactionHash
+ Network.Bitcoin.Transaction.Types: instance Binary TransactionIn
+ Network.Bitcoin.Transaction.Types: instance Binary TransactionOut
+ Network.Bitcoin.Transaction.Types: instance Binary VarInt
+ Network.Bitcoin.Transaction.Types: instance Eq OutPoint
+ Network.Bitcoin.Transaction.Types: instance Eq Transaction
+ Network.Bitcoin.Transaction.Types: instance Eq TransactionHash
+ Network.Bitcoin.Transaction.Types: instance Eq TransactionIn
+ Network.Bitcoin.Transaction.Types: instance Eq TransactionOut
+ Network.Bitcoin.Transaction.Types: instance Eq TxnOutputType
+ Network.Bitcoin.Transaction.Types: instance Eq VarInt
+ Network.Bitcoin.Transaction.Types: instance Ord TxnOutputType
+ Network.Bitcoin.Transaction.Types: instance Read OutPoint
+ Network.Bitcoin.Transaction.Types: instance Read Transaction
+ Network.Bitcoin.Transaction.Types: instance Read TransactionHash
+ Network.Bitcoin.Transaction.Types: instance Read TransactionIn
+ Network.Bitcoin.Transaction.Types: instance Read TransactionOut
+ Network.Bitcoin.Transaction.Types: instance Read TxnOutputType
+ Network.Bitcoin.Transaction.Types: instance Read VarInt
+ Network.Bitcoin.Transaction.Types: instance Show OutPoint
+ Network.Bitcoin.Transaction.Types: instance Show Transaction
+ Network.Bitcoin.Transaction.Types: instance Show TransactionHash
+ Network.Bitcoin.Transaction.Types: instance Show TransactionIn
+ Network.Bitcoin.Transaction.Types: instance Show TransactionOut
+ Network.Bitcoin.Transaction.Types: instance Show TxnOutputType
+ Network.Bitcoin.Transaction.Types: instance Show VarInt
+ Network.Bitcoin.Transaction.Types: newtype VarInt
+ Network.Bitcoin.Transaction.Types: outPointHash :: OutPoint -> TransactionHash
+ Network.Bitcoin.Transaction.Types: outPointIndex :: OutPoint -> !Word32
+ Network.Bitcoin.Transaction.Types: outValue :: TransactionOut -> Word64
+ Network.Bitcoin.Transaction.Types: prevOutput :: TransactionIn -> OutPoint
+ Network.Bitcoin.Transaction.Types: scriptInput :: TransactionIn -> Script
+ Network.Bitcoin.Transaction.Types: scriptOutput :: TransactionOut -> Script
+ Network.Bitcoin.Transaction.Types: txIn :: Transaction -> [TransactionIn]
+ Network.Bitcoin.Transaction.Types: txInSequence :: TransactionIn -> Word32
+ Network.Bitcoin.Transaction.Types: txLockTime :: Transaction -> Word32
+ Network.Bitcoin.Transaction.Types: txOut :: Transaction -> [TransactionOut]
+ Network.Bitcoin.Transaction.Types: txVersion :: Transaction -> Word32

Files

bitcoin-tx.cabal view
@@ -1,6 +1,6 @@ name: bitcoin-tx
 category: Network, Finance
-version: 0.9.0
+version: 0.10.0
 license: MIT
 license-file: LICENSE
 copyright: (c) 2015 Leon Mergen
@@ -25,8 +25,8 @@   ghc-options:         -Wall -ferror-spans
   default-language:    Haskell2010
 
-  exposed-modules:     Bitcoin.Transaction
-                       Bitcoin.Transaction.Types
+  exposed-modules:     Network.Bitcoin.Transaction
+                       Network.Bitcoin.Transaction.Types
 
   build-depends:       base                     >= 4.3          && < 5
                      , bytestring
@@ -42,7 +42,7 @@   hs-source-dirs:      test
   main-is:             Main.hs
 
-  other-modules:       Bitcoin.TransactionSpec
+  other-modules:       Network.Bitcoin.TransactionSpec
                        Spec
                        Main
 
− src/Bitcoin/Transaction.hs
@@ -1,19 +0,0 @@-module Bitcoin.Transaction where
-
-import qualified Data.ByteString.Lazy as BSL
-import qualified Data.ByteString.Base16.Lazy as BS16L
-
-import qualified Data.Binary     as B ( decode
-                                      , encode )
-
-import Bitcoin.Transaction.Types
-
--- | Decodes a hex representation of a transaction into a 'Transaction' object.
-decode :: BSL.ByteString -> Transaction
-decode =
-  B.decode . fst . BS16L.decode
-
--- | Encodes a 'Transaction' object into a hex representation.
-encode :: Transaction -> BSL.ByteString
-encode =
-  BS16L.encode . B.encode
− src/Bitcoin/Transaction/Types.hs
@@ -1,196 +0,0 @@-{-# LANGUAGE FlexibleInstances  #-}
-
-module Bitcoin.Transaction.Types where
-
-import Control.Applicative ((<$>),(<*>))
-import Control.Monad (liftM2, replicateM, forM_)
-
-import Data.Word ( Word32
-                 , Word64 )
-
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Lazy as BSL
-
-import Data.Bits (shiftL, shiftR)
-import Data.Binary ( Binary, get, put, encode, decode )
-
-import Data.Binary.Get ( getByteString
-                       , getWord8
-                       , getWord16le
-                       , getWord32le
-                       , getWord64le
-                       , getWord64be )
-
-import Data.Binary.Put ( putByteString
-                       , putWord8
-                       , putWord16le
-                       , putWord32le
-                       , putWord64le
-                       , putWord64be )
-
-import qualified Bitcoin.Script as Btc ( Script (..) )
-
--- | Data type representing a variable length integer. The 'VarInt' type
--- usually precedes an array or a string that can vary in length.
-newtype VarInt = VarInt { getVarInt :: Word64 }
-    deriving (Eq, Show, Read)
-
-instance Binary VarInt where
-
-    get = VarInt <$> ( getWord8 >>= go )
-      where
-        go 0xff = getWord64le
-        go 0xfe = fromIntegral <$> getWord32le
-        go 0xfd = fromIntegral <$> getWord16le
-        go x    = fromIntegral <$> return x
-
-    put (VarInt x)
-        | x < 0xfd =
-            putWord8 $ fromIntegral x
-        | x <= 0xffff = do
-            putWord8 0xfd
-            putWord16le $ fromIntegral x
-        | x <= 0xffffffff = do
-            putWord8 0xfe
-            putWord32le $ fromIntegral x
-        | otherwise = do
-            putWord8 0xff
-            putWord64le x
-
-data TxnOutputType = TxnPubKey     -- ^ JSON of "pubkey" received.
-                   | TxnPubKeyHash -- ^ JSON of "pubkeyhash" received.
-                   | TxnScriptHash -- ^ JSON of "scripthash" received.
-                   | TxnMultisig   -- ^ JSON of "multisig" received.
-    deriving ( Show, Read, Ord, Eq )
-
-
-data TransactionHash = TransactionHash Integer
-    deriving ( Show, Read, Eq )
-
-instance Binary TransactionHash where
-    get = do
-      a <- fromIntegral <$> getWord64be
-      b <- fromIntegral <$> getWord64be
-      c <- fromIntegral <$> getWord64be
-      d <- fromIntegral <$> getWord64be
-
-      return $ TransactionHash ((a `shiftL` 192) + (b `shiftL` 128) + (c `shiftL` 64) + d)
-
-    put (TransactionHash i) = do
-      putWord64be $ fromIntegral (i `shiftR` 192)
-      putWord64be $ fromIntegral (i `shiftR` 128)
-      putWord64be $ fromIntegral (i `shiftR` 64)
-      putWord64be $ fromIntegral i
-
--- | The OutPoint is used inside a transaction input to reference the previous
--- transaction output that it is spending.
-data OutPoint = OutPoint {
-  -- | The hash of the referenced transaction.
-  outPointHash  :: TransactionHash,
-
-  -- | The position of the specific output in the transaction.
-  -- The first output position is 0.
-  outPointIndex :: !Word32
-  } deriving (Read, Show, Eq)
-
-instance Binary OutPoint where
-  get = do
-    (h,i) <- liftM2 (,) get getWord32le
-    return $ OutPoint h i
-
-  put (OutPoint h i) = put h >> putWord32le i
-
--- | Data type representing a transaction input.
-data TransactionIn =  TransactionIn {
-  -- | Reference the previous transaction output (hash + position)
-  prevOutput   :: OutPoint,
-
-  -- | Script providing the requirements of the previous transaction
-  -- output to spend those coins.
-  scriptInput  :: Btc.Script,
-
-  -- | Transaction version as defined by the sender of the
-  -- transaction. The intended use is for replacing transactions with
-  -- new information before the transaction is included in a block.
-  txInSequence :: Word32
-
-  } deriving (Eq, Show, Read)
-
-instance Binary TransactionIn where
-    get = do
-      o <- get
-      (VarInt len) <- get
-      scriptBs <- getByteString (fromIntegral len)
-      s <- getWord32le
-
-      let i = decode $ BSL.fromStrict scriptBs
-
-      return $ TransactionIn o i s
-
-    put (TransactionIn o i s) = do
-      let scriptBs = BSL.toStrict $ encode i
-
-      put o
-      put $ VarInt $ fromIntegral $ BS.length scriptBs
-      putByteString scriptBs
-      putWord32le s
-
-
--- | Data type representing a transaction output.
-data TransactionOut = TransactionOut {
-  -- | Transaction output value.
-  outValue     :: Word64,
-
-  -- | Script specifying the conditions to spend this output.
-  scriptOutput :: Btc.Script
-
-  } deriving (Eq, Show, Read)
-
-instance Binary TransactionOut where
-    get = do
-        val <- getWord64le
-        (VarInt len) <- get
-
-        scriptBs <- getByteString (fromIntegral len)
-        let s = decode $ BSL.fromStrict scriptBs
-
-        return $ TransactionOut val s
-
-    put (TransactionOut o s) = do
-      let scriptBs = BSL.toStrict $ encode s
-
-      putWord64le o
-      put $ VarInt $ fromIntegral $ BS.length scriptBs
-      putByteString scriptBs
-
--- | Data type representing a bitcoin transaction
-data Transaction = Transaction {
-  -- | Transaction data format version
-  txVersion  :: Word32,
-
-  -- | List of transaction inputs
-  txIn       :: [TransactionIn],
-
-  -- | List of transaction outputs
-  txOut      :: [TransactionOut],
-
-  -- | The block number of timestamp at which this transaction is locked
-  txLockTime :: Word32
-
-  } deriving (Eq, Show, Read)
-
-instance Binary Transaction where
-    get = Transaction <$> getWord32le
-                      <*> (replicateList =<< get)
-                      <*> (replicateList =<< get)
-                      <*> getWord32le
-      where
-        replicateList (VarInt c) = replicateM (fromIntegral c) get
-
-    put (Transaction v is os l) = do
-        putWord32le v
-        put $ VarInt $ fromIntegral $ length is
-        forM_ is put
-        put $ VarInt $ fromIntegral $ length os
-        forM_ os put
-        putWord32le l
+ src/Network/Bitcoin/Transaction.hs view
@@ -0,0 +1,19 @@+module Network.Bitcoin.Transaction where
+
+import qualified Data.ByteString.Lazy as BSL
+import qualified Data.ByteString.Base16.Lazy as BS16L
+
+import qualified Data.Binary     as B ( decode
+                                      , encode )
+
+import Network.Bitcoin.Transaction.Types
+
+-- | Decodes a hex representation of a transaction into a 'Transaction' object.
+decode :: BSL.ByteString -> Transaction
+decode =
+  B.decode . fst . BS16L.decode
+
+-- | Encodes a 'Transaction' object into a hex representation.
+encode :: Transaction -> BSL.ByteString
+encode =
+  BS16L.encode . B.encode
+ src/Network/Bitcoin/Transaction/Types.hs view
@@ -0,0 +1,196 @@+{-# LANGUAGE FlexibleInstances  #-}
+
+module Network.Bitcoin.Transaction.Types where
+
+import Control.Applicative ((<$>),(<*>))
+import Control.Monad (liftM2, replicateM, forM_)
+
+import Data.Word ( Word32
+                 , Word64 )
+
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Lazy as BSL
+
+import Data.Bits (shiftL, shiftR)
+import Data.Binary ( Binary, get, put, encode, decode )
+
+import Data.Binary.Get ( getByteString
+                       , getWord8
+                       , getWord16le
+                       , getWord32le
+                       , getWord64le
+                       , getWord64be )
+
+import Data.Binary.Put ( putByteString
+                       , putWord8
+                       , putWord16le
+                       , putWord32le
+                       , putWord64le
+                       , putWord64be )
+
+import qualified Network.Bitcoin.Script as Btc ( Script (..) )
+
+-- | Data type representing a variable length integer. The 'VarInt' type
+-- usually precedes an array or a string that can vary in length.
+newtype VarInt = VarInt { getVarInt :: Word64 }
+    deriving (Eq, Show, Read)
+
+instance Binary VarInt where
+
+    get = VarInt <$> ( getWord8 >>= go )
+      where
+        go 0xff = getWord64le
+        go 0xfe = fromIntegral <$> getWord32le
+        go 0xfd = fromIntegral <$> getWord16le
+        go x    = fromIntegral <$> return x
+
+    put (VarInt x)
+        | x < 0xfd =
+            putWord8 $ fromIntegral x
+        | x <= 0xffff = do
+            putWord8 0xfd
+            putWord16le $ fromIntegral x
+        | x <= 0xffffffff = do
+            putWord8 0xfe
+            putWord32le $ fromIntegral x
+        | otherwise = do
+            putWord8 0xff
+            putWord64le x
+
+data TxnOutputType = TxnPubKey     -- ^ JSON of "pubkey" received.
+                   | TxnPubKeyHash -- ^ JSON of "pubkeyhash" received.
+                   | TxnScriptHash -- ^ JSON of "scripthash" received.
+                   | TxnMultisig   -- ^ JSON of "multisig" received.
+    deriving ( Show, Read, Ord, Eq )
+
+
+data TransactionHash = TransactionHash Integer
+    deriving ( Show, Read, Eq )
+
+instance Binary TransactionHash where
+    get = do
+      a <- fromIntegral <$> getWord64be
+      b <- fromIntegral <$> getWord64be
+      c <- fromIntegral <$> getWord64be
+      d <- fromIntegral <$> getWord64be
+
+      return $ TransactionHash ((a `shiftL` 192) + (b `shiftL` 128) + (c `shiftL` 64) + d)
+
+    put (TransactionHash i) = do
+      putWord64be $ fromIntegral (i `shiftR` 192)
+      putWord64be $ fromIntegral (i `shiftR` 128)
+      putWord64be $ fromIntegral (i `shiftR` 64)
+      putWord64be $ fromIntegral i
+
+-- | The OutPoint is used inside a transaction input to reference the previous
+-- transaction output that it is spending.
+data OutPoint = OutPoint {
+  -- | The hash of the referenced transaction.
+  outPointHash  :: TransactionHash,
+
+  -- | The position of the specific output in the transaction.
+  -- The first output position is 0.
+  outPointIndex :: !Word32
+  } deriving (Read, Show, Eq)
+
+instance Binary OutPoint where
+  get = do
+    (h,i) <- liftM2 (,) get getWord32le
+    return $ OutPoint h i
+
+  put (OutPoint h i) = put h >> putWord32le i
+
+-- | Data type representing a transaction input.
+data TransactionIn =  TransactionIn {
+  -- | Reference the previous transaction output (hash + position)
+  prevOutput   :: OutPoint,
+
+  -- | Script providing the requirements of the previous transaction
+  -- output to spend those coins.
+  scriptInput  :: Btc.Script,
+
+  -- | Transaction version as defined by the sender of the
+  -- transaction. The intended use is for replacing transactions with
+  -- new information before the transaction is included in a block.
+  txInSequence :: Word32
+
+  } deriving (Eq, Show, Read)
+
+instance Binary TransactionIn where
+    get = do
+      o <- get
+      (VarInt len) <- get
+      scriptBs <- getByteString (fromIntegral len)
+      s <- getWord32le
+
+      let i = decode $ BSL.fromStrict scriptBs
+
+      return $ TransactionIn o i s
+
+    put (TransactionIn o i s) = do
+      let scriptBs = BSL.toStrict $ encode i
+
+      put o
+      put $ VarInt $ fromIntegral $ BS.length scriptBs
+      putByteString scriptBs
+      putWord32le s
+
+
+-- | Data type representing a transaction output.
+data TransactionOut = TransactionOut {
+  -- | Transaction output value.
+  outValue     :: Word64,
+
+  -- | Script specifying the conditions to spend this output.
+  scriptOutput :: Btc.Script
+
+  } deriving (Eq, Show, Read)
+
+instance Binary TransactionOut where
+    get = do
+        val <- getWord64le
+        (VarInt len) <- get
+
+        scriptBs <- getByteString (fromIntegral len)
+        let s = decode $ BSL.fromStrict scriptBs
+
+        return $ TransactionOut val s
+
+    put (TransactionOut o s) = do
+      let scriptBs = BSL.toStrict $ encode s
+
+      putWord64le o
+      put $ VarInt $ fromIntegral $ BS.length scriptBs
+      putByteString scriptBs
+
+-- | Data type representing a bitcoin transaction
+data Transaction = Transaction {
+  -- | Transaction data format version
+  txVersion  :: Word32,
+
+  -- | List of transaction inputs
+  txIn       :: [TransactionIn],
+
+  -- | List of transaction outputs
+  txOut      :: [TransactionOut],
+
+  -- | The block number of timestamp at which this transaction is locked
+  txLockTime :: Word32
+
+  } deriving (Eq, Show, Read)
+
+instance Binary Transaction where
+    get = Transaction <$> getWord32le
+                      <*> (replicateList =<< get)
+                      <*> (replicateList =<< get)
+                      <*> getWord32le
+      where
+        replicateList (VarInt c) = replicateM (fromIntegral c) get
+
+    put (Transaction v is os l) = do
+        putWord32le v
+        put $ VarInt $ fromIntegral $ length is
+        forM_ is put
+        put $ VarInt $ fromIntegral $ length os
+        forM_ os put
+        putWord32le l
− test/Bitcoin/TransactionSpec.hs
@@ -1,23 +0,0 @@-module Bitcoin.TransactionSpec where
-
-import           Bitcoin.Script (Script (..))
-import           Bitcoin.Transaction        (decode, encode)
-import           Bitcoin.Transaction.Types
-import qualified Data.ByteString.Lazy.Char8 as BSL8 (pack)
-
-import           Test.Hspec
-
-spec :: Spec
-spec = do
-  describe "when parsing a specific transaction" $ do
-    let hex = BSL8.pack "0100000002f327e86da3e66bd20e1129b1fb36d07056f0b9a117199e759396526b8f3a20780000000049483045022100fce442ec52aa2792efc27fd3ad0eaf7fa69f097fdcefab017ea56d1799b10b2102207a6ae3eb61e11ffaba0453f173d1792f1b7bb8e7422ea945101d68535c4b474801fffffffff0ede03d75050f20801d50358829ae02c058e8677d2cc74df51f738285013c26000000006b483045022100b77f935ff366a6f3c2fdeb83589c790265d43b3d2cf5e5f0047da56c36de75f40220707ceda75d8dcf2ccaebc506f7293c3dcb910554560763d7659fb202f8ec324b012102240d7d3c7aad57b68aa0178f4c56f997d1bfab2ded3c2f9427686017c603a6d6ffffffff02f028d6dc010000001976a914ffb035781c3c69e076d48b60c3d38592e7ce06a788ac00ca9a3b000000001976a914fa5139067622fd7e1e722a05c17c2bb7d5fd6df088ac00000000"
-
-    it "encoding a decoding a transaction results in the original hex" $
-      (encode . decode) hex `shouldBe` hex
-
-    it "succesfully parses a transaction into a meaningful object" $ do
-      let decoded = decode hex
-
-      case decoded of
-       (Transaction 1 [(TransactionIn _ _ 4294967295), (TransactionIn _ _ 4294967295)] [(TransactionOut 7999990000 (Script _)), (TransactionOut 1000000000 (Script _))] 0) -> return ()
-       _                               -> expectationFailure ("Result does not match expected: " ++ show decoded)
+ test/Network/Bitcoin/TransactionSpec.hs view
@@ -0,0 +1,23 @@+module Network.Bitcoin.TransactionSpec where
+
+import           Network.Bitcoin.Script (Script (..))
+import           Network.Bitcoin.Transaction        (decode, encode)
+import           Network.Bitcoin.Transaction.Types
+import qualified Data.ByteString.Lazy.Char8 as BSL8 (pack)
+
+import           Test.Hspec
+
+spec :: Spec
+spec = do
+  describe "when parsing a specific transaction" $ do
+    let hex = BSL8.pack "0100000002f327e86da3e66bd20e1129b1fb36d07056f0b9a117199e759396526b8f3a20780000000049483045022100fce442ec52aa2792efc27fd3ad0eaf7fa69f097fdcefab017ea56d1799b10b2102207a6ae3eb61e11ffaba0453f173d1792f1b7bb8e7422ea945101d68535c4b474801fffffffff0ede03d75050f20801d50358829ae02c058e8677d2cc74df51f738285013c26000000006b483045022100b77f935ff366a6f3c2fdeb83589c790265d43b3d2cf5e5f0047da56c36de75f40220707ceda75d8dcf2ccaebc506f7293c3dcb910554560763d7659fb202f8ec324b012102240d7d3c7aad57b68aa0178f4c56f997d1bfab2ded3c2f9427686017c603a6d6ffffffff02f028d6dc010000001976a914ffb035781c3c69e076d48b60c3d38592e7ce06a788ac00ca9a3b000000001976a914fa5139067622fd7e1e722a05c17c2bb7d5fd6df088ac00000000"
+
+    it "encoding a decoding a transaction results in the original hex" $
+      (encode . decode) hex `shouldBe` hex
+
+    it "succesfully parses a transaction into a meaningful object" $ do
+      let decoded = decode hex
+
+      case decoded of
+       (Transaction 1 [(TransactionIn _ _ 4294967295), (TransactionIn _ _ 4294967295)] [(TransactionOut 7999990000 (Script _)), (TransactionOut 1000000000 (Script _))] 0) -> return ()
+       _                               -> expectationFailure ("Result does not match expected: " ++ show decoded)