packages feed

haskoin-bitcoind 0.3.0 → 0.4.1

raw patch · 5 files changed

+73/−55 lines, 5 filesdep ~basedep ~haskoin-core

Dependency ranges changed: base, haskoin-core

Files

haskoin-bitcoind.cabal view
@@ -1,12 +1,12 @@ name:                haskoin-bitcoind-version:             0.3.0+version:             0.4.1 synopsis:            An adapter for haskoin to network-bitcoin--- description:+description:         An adapter for haskoin to network-bitcoin. You can call network-bitcoin functions with haskoin types. homepage:            haskoin.com license:             BSD3 license-file:        LICENSE author:              Matthew Wraith-maintainer:          wraithm@gmail.com+maintainer:          matt@bitnomial.com copyright:           2015 Bitnomial, Inc category:            Network build-type:          Simple@@ -21,11 +21,11 @@                  , Network.Bitcoin.Mining.Haskoin                  , Network.Bitcoin.Wallet.Haskoin -  build-depends: base                >= 4.8 && < 4.12+  build-depends: base                >= 4.8 && < 4.13                , base16-bytestring   >= 0.1.1.6                , bytestring          >= 0.10.6                , cereal              >= 0.5 && < 0.6-               , haskoin-core        >= 0.4.3+               , haskoin-core        >= 0.9.0                , monad-control       >= 0.1                , mtl                 >= 2.2                , network-bitcoin     >= 1.8.2
src/Network/Bitcoin/Haskoin.hs view
@@ -32,10 +32,11 @@                                               TransactionID, getClient,                                               getRawTransaction) import qualified Network.Bitcoin             as B-import           Network.Haskoin.Crypto      (Address, addrToBase58,-                                              base58ToAddr)-import           Network.Haskoin.Script      (decodeInputBS, decodeOutputBS,-                                              inputAddress, outputAddress)+import           Network.Haskoin.Address     (Address, addrToString,+                                              inputAddress, outputAddress,+                                              scriptToAddressBS, stringToAddr)+import           Network.Haskoin.Constants   (Network)+import           Network.Haskoin.Script      (decodeInputBS) import           Network.Haskoin.Transaction (OutPoint (..), Tx (..), TxHash,                                               TxIn, TxOut, hexToTxHash,                                               scriptInput, scriptOutput,@@ -43,19 +44,19 @@   transactionOutputAddress :: TxOut -> Either String Address-transactionOutputAddress = outputAddress <=< decodeOutputBS . scriptOutput+transactionOutputAddress = scriptToAddressBS . scriptOutput  -transactionInputAddress :: TxIn -> Either String Address-transactionInputAddress = inputAddress <=< decodeInputBS . scriptInput+transactionInputAddress :: Network -> TxIn -> Either String Address+transactionInputAddress net = maybe (Left "could not decode address") Right . inputAddress <=< decodeInputBS net . scriptInput  -addressToHex :: Address -> B.Address-addressToHex = decodeUtf8 . addrToBase58+addressToHex :: Network -> Address -> B.Address+addressToHex net = fromMaybe (error "Address encoding error") . addrToString net  -hexToAddress :: B.Address -> Address-hexToAddress = fromMaybe (error "Unable to parse address") . base58ToAddr . encodeUtf8+hexToAddress :: Network -> B.Address -> Address+hexToAddress net = fromMaybe (error "Unable to parse address") . stringToAddr net   -- | TODO Catch bad decodes@@ -67,11 +68,11 @@   hexTxHash :: TxHash -> TransactionID-hexTxHash = E.decodeUtf8 . txHashToHex+hexTxHash = txHashToHex   transactionIdToTxHash :: TransactionID -> TxHash-transactionIdToTxHash = fromMaybe (error "Unable to parse txid") . hexToTxHash . encodeUtf8+transactionIdToTxHash = fromMaybe (error "Unable to parse txid") . hexToTxHash   -- | TODO Catch errors from bitcoind@@ -87,5 +88,5 @@ outpointAddress c op = transactionOutputAddress <$> getTransactionOutput c op  -importAddress :: Client -> Address -> Maybe B.Account -> Maybe Bool -> IO ()-importAddress client addr = B.importAddress client (E.decodeUtf8 $ addrToBase58 addr)+importAddress :: Client -> Network -> Address -> Maybe B.Account -> Maybe Bool -> IO ()+importAddress client net addr = B.importAddress client (addressToHex net addr)
src/Network/Bitcoin/Haskoin/Trans.hs view
@@ -8,6 +8,9 @@ module Network.Bitcoin.Haskoin.Trans     ( BitcoinT (..)     , runBitcoinT+    , newBitcoindClient+    , getBitcoindClient+    , BitcoindClient (..)      , -- * Bitcoind operations       getTransaction@@ -35,38 +38,58 @@ import           Control.Monad.IO.Class import           Control.Monad.Reader        (MonadReader, ReaderT (..), ask) import           Control.Monad.Trans         (MonadTrans (..))+import           Data.ByteString             (ByteString)  import           Network.Bitcoin             (Account) import           Network.Bitcoin.Haskoin     (Client) import qualified Network.Bitcoin.Haskoin     as B-import           Network.Haskoin.Crypto      (Address)+import           Network.Haskoin.Address     (Address)+import           Network.Haskoin.Constants   (Network) import           Network.Haskoin.Transaction (OutPoint, Tx (..), TxHash,                                               TxIn (..), TxOut (..))  -newtype BitcoinT m a = BitcoinT { unBitcoinT :: ReaderT Client m a }-    deriving (Functor, Applicative, Monad, MonadTrans, MonadIO, MonadReader Client)+data BitcoindClient = BitcoindClient+    { bitcoindClient  :: Client+    , bitcoindNetwork :: Network+    }  +newBitcoindClient :: Client -> Network -> BitcoindClient+newBitcoindClient = BitcoindClient+++type URL = String+type User = ByteString+type Password = ByteString+++getBitcoindClient :: URL -> User -> Password -> Network -> IO BitcoindClient+getBitcoindClient url user password net = do+    client <- B.getClient url user password+    return $ newBitcoindClient client net+++-- TODO Add Network to Reader+newtype BitcoinT m a = BitcoinT { unBitcoinT :: ReaderT BitcoindClient m a }+    deriving (Functor, Applicative, Monad, MonadTrans, MonadIO, MonadReader BitcoindClient)++ instance MonadBase b m => MonadBase b (BitcoinT m) where     liftBase = lift . liftBase  -runBitcoinT :: Client -> BitcoinT m a -> m a+runBitcoinT :: BitcoindClient -> BitcoinT m a -> m a runBitcoinT c = flip runReaderT c . unBitcoinT -- TODO Handle exceptions   withClient :: Monad m => (Client -> m a) -> BitcoinT m a-withClient f = do-    cl <- ask-    lift (f cl)+withClient f = ask >>= lift . f . bitcoindClient   withClientIO :: MonadIO m => (Client -> IO a) -> BitcoinT m a-withClientIO f = do-    cl <- ask-    liftIO (f cl)+withClientIO f = ask >>= liftIO . f . bitcoindClient   getTransaction :: MonadIO m => TxHash -> BitcoinT m Tx@@ -82,9 +105,11 @@   importAddress' :: MonadIO m => Address -> Maybe Account -> Maybe Bool -> BitcoinT m ()-importAddress' addr macct mrescan =-    withClientIO (\cl -> B.importAddress cl addr macct mrescan)+importAddress' addr macct mrescan = do+    BitcoindClient cl net <- ask+    liftIO $ B.importAddress cl net addr macct mrescan  +-- TODO Accounts are being removed, remove the account field from network-bitcoind importAddress :: MonadIO m => Address -> BitcoinT m () importAddress addr = importAddress' addr (Just "") (Just False)
src/Network/Bitcoin/Mining/Haskoin.hs view
@@ -1,27 +1,21 @@ module Network.Bitcoin.Mining.Haskoin   ( generate+  , generateToAddress   ) where -import           Data.Fixed                  (Fixed (MkFixed))-import           Data.Maybe                  (fromMaybe, maybe)-import           Data.Text                   (Text)-import           Data.Text.Encoding          (decodeUtf8, encodeUtf8)-import           Data.Word                   (Word64) import           Network.Bitcoin.Haskoin     (addressToHex,                                               transactionIdToTxHash) import qualified Network.Bitcoin.Mining      as NBM-import qualified Network.Bitcoin.Types       as NBT import           Network.Bitcoin.Wallet      (Client)-import qualified Network.Bitcoin.Wallet      as W-import           Network.Haskoin.Crypto      (addrToBase58, base58ToAddr)-import qualified Network.Haskoin.Crypto      as HSK-import           Network.Haskoin.Transaction (TxHash, hexToTxHash)+import qualified Network.Haskoin.Address     as HSK+import           Network.Haskoin.Constants   (Network)+import           Network.Haskoin.Transaction (TxHash)   generate :: Client -> Int -> Maybe Int -> IO [TxHash] generate client blocks maxTries = fmap transactionIdToTxHash <$> NBM.generate client blocks maxTries  -generateToAddress :: Client -> Int -> HSK.Address -> Maybe Int -> IO [TxHash]-generateToAddress client blocks toAddr maxTries =-    fmap transactionIdToTxHash <$> NBM.generateToAddress client blocks (addressToHex toAddr) maxTries+generateToAddress :: Client -> Network -> Int -> HSK.Address -> Maybe Int -> IO [TxHash]+generateToAddress client net blocks toAddr maxTries =+    fmap transactionIdToTxHash <$> NBM.generateToAddress client blocks (addressToHex net toAddr) maxTries
src/Network/Bitcoin/Wallet/Haskoin.hs view
@@ -4,30 +4,28 @@     ) where  import           Data.Fixed                  (Fixed (MkFixed))-import           Data.Maybe                  (fromMaybe, maybe) import           Data.Text                   (Text)-import           Data.Text.Encoding          (decodeUtf8, encodeUtf8) import           Data.Word                   (Word64) import           Network.Bitcoin.Haskoin     (addressToHex, hexToAddress,                                               transactionIdToTxHash) import qualified Network.Bitcoin.Types       as NBT import           Network.Bitcoin.Wallet      (Client) import qualified Network.Bitcoin.Wallet      as W-import           Network.Haskoin.Crypto      (addrToBase58, base58ToAddr)-import qualified Network.Haskoin.Crypto      as HSK-import           Network.Haskoin.Transaction (TxHash, hexToTxHash)+import qualified Network.Haskoin.Address     as HSK+import           Network.Haskoin.Constants   (Network)+import           Network.Haskoin.Transaction (TxHash)   type Satoshi = Word64  -sendToAddress :: Client -> HSK.Address -> Satoshi -> Maybe Text -> Maybe Text -> IO TxHash-sendToAddress client addr sat cmt cmtTo =-    transactionIdToTxHash <$> W.sendToAddress client (addressToHex addr) (satToBTC sat) cmt cmtTo+sendToAddress :: Client -> Network -> HSK.Address -> Satoshi -> Maybe Text -> Maybe Text -> IO TxHash+sendToAddress client net addr sat cmt cmtTo =+    transactionIdToTxHash <$> W.sendToAddress client (addressToHex net addr) (satToBTC sat) cmt cmtTo  -getNewAddress :: Client -> IO HSK.Address-getNewAddress client = hexToAddress <$> W.getNewAddress client Nothing+getNewAddress :: Client -> Network -> IO HSK.Address+getNewAddress client net = hexToAddress net <$> W.getNewAddress client Nothing   satToBTC :: Satoshi -> NBT.BTC