packages feed

bitx-bitcoin 0.11.0.0 → 0.11.0.1

raw patch · 10 files changed

+95/−3 lines, 10 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Network.Bitcoin.BitX.Private.Fees: getFeeInfo :: BitXAuth -> CcyPair -> IO (BitXAPIResponse FeeInfo)
+ Network.Bitcoin.BitX.Types: FeeInfo :: Scientific -> Scientific -> Scientific -> FeeInfo
+ Network.Bitcoin.BitX.Types: [feeInfoMakerFee] :: FeeInfo -> Scientific
+ Network.Bitcoin.BitX.Types: [feeInfoTakerFee] :: FeeInfo -> Scientific
+ Network.Bitcoin.BitX.Types: [feeInfoThirtyDayVolume] :: FeeInfo -> Scientific
+ Network.Bitcoin.BitX.Types: class HasMakerFee s a | s -> a
+ Network.Bitcoin.BitX.Types: class HasTakerFee s a | s -> a
+ Network.Bitcoin.BitX.Types: class HasThirtyDayVolume s a | s -> a
+ Network.Bitcoin.BitX.Types: data FeeInfo
+ Network.Bitcoin.BitX.Types: instance Data.Data.Data Network.Bitcoin.BitX.Types.FeeInfo
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Eq Network.Bitcoin.BitX.Types.FeeInfo
+ Network.Bitcoin.BitX.Types: instance GHC.Classes.Ord Network.Bitcoin.BitX.Types.FeeInfo
+ Network.Bitcoin.BitX.Types: instance GHC.Generics.Generic Network.Bitcoin.BitX.Types.FeeInfo
+ Network.Bitcoin.BitX.Types: instance GHC.Show.Show Network.Bitcoin.BitX.Types.FeeInfo
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasMakerFee Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasTakerFee Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: instance Network.Bitcoin.BitX.Types.HasThirtyDayVolume Network.Bitcoin.BitX.Types.FeeInfo Data.Scientific.Scientific
+ Network.Bitcoin.BitX.Types: makerFee :: HasMakerFee s a => Lens' s a
+ Network.Bitcoin.BitX.Types: takerFee :: HasTakerFee s a => Lens' s a
+ Network.Bitcoin.BitX.Types: thirtyDayVolume :: HasThirtyDayVolume s a => Lens' s a

Files

CHANGES view
@@ -1,3 +1,6 @@+v0.11.0.1+* Added new fee_info endpoint.+ v0.11.0.0 * The BitX API no longer gives trades when returning private orders. BREAKING CHANGE. * Due to the above change, a new function -- getAllTrades -- has been added to the private order API.
bitx-bitcoin.cabal view
@@ -1,5 +1,5 @@ name:                bitx-bitcoin-version:             0.11.0.0+version:             0.11.0.1 synopsis:            A Haskell library for working with the BitX bitcoin exchange.  description:@@ -50,6 +50,7 @@   --  Network.Bitcoin.BitX.Private.Auth     Network.Bitcoin.BitX.Private.Order     Network.Bitcoin.BitX.Private.Withdrawal+    Network.Bitcoin.BitX.Private.Fees     Network.Bitcoin.BitX.Response    ghc-options: -Wall
src/Network/Bitcoin/BitX.hs view
@@ -23,6 +23,7 @@     --module Network.Bitcoin.BitX.Private.Auth,     module Network.Bitcoin.BitX.Private.Order,     module Network.Bitcoin.BitX.Private.Withdrawal,+    module Network.Bitcoin.BitX.Private.Fees,     module Network.Bitcoin.BitX.Response,     BitXAesRecordConvert(..),     POSTEncodeable(..)@@ -36,6 +37,7 @@ --import Network.Bitcoin.BitX.Private.Auth import Network.Bitcoin.BitX.Private.Order import Network.Bitcoin.BitX.Private.Withdrawal+import Network.Bitcoin.BitX.Private.Fees import Network.Bitcoin.BitX.Types.Internal import Network.Bitcoin.BitX.Response 
src/Network/Bitcoin/BitX/Private.hs view
@@ -75,7 +75,8 @@   module Network.Bitcoin.BitX.Private.Order,   module Network.Bitcoin.BitX.Private.Quote,   --module Network.Bitcoin.BitX.Private.Auth-  module Network.Bitcoin.BitX.Private.Withdrawal+  module Network.Bitcoin.BitX.Private.Withdrawal,+  module Network.Bitcoin.BitX.Private.Fees   ) where  import Network.Bitcoin.BitX.Internal@@ -88,6 +89,7 @@ --import Network.Bitcoin.BitX.Private.Auth import Network.Bitcoin.BitX.Private.Quote import Network.Bitcoin.BitX.Private.Withdrawal+import Network.Bitcoin.BitX.Private.Fees import Data.Monoid ((<>))  {-# ANN module ("HLint: ignore Use import/export shortcut" :: String) #-}
+ src/Network/Bitcoin/BitX/Private/Fees.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE OverloadedStrings #-}++-----------------------------------------------------------------------------+-- |+-- Module      :  Network.Bitcoin.BitX.Private.Fees+-- Copyright   :  2017 Tebello Thejane+-- License     :  BSD3+--+-- Maintainer  :  Tebello Thejane <zyxoas+hackage@gmail.com>+-- Stability   :  Experimental+-- Portability :  non-portable (GHC Extensions)+--+-- Retrieving fee information.+--+-- The BitX fee structure is cummulative-volume-based. The sole endpoint in+-- this packagereturns the user's current fee structure and 30-day volume.+--+-----------------------------------------------------------------------------++module Network.Bitcoin.BitX.Private.Fees+    (+    getFeeInfo+    ) where++import Network.Bitcoin.BitX.Internal+import Network.Bitcoin.BitX.Types+import Data.Text as Txt+import Network.Bitcoin.BitX.Response+import Data.Monoid ((<>))++{- | Get fee structure and 30-day volume (as of midnight) for a currency pair++@Perm_R_Orders@ permission required.+-}++getFeeInfo :: BitXAuth -> CcyPair -> IO (BitXAPIResponse FeeInfo)+getFeeInfo auth cpair = simpleBitXGetAuth_ auth ("fee_info?pair=" <> Txt.pack (show cpair))
src/Network/Bitcoin/BitX/Types.hs view
@@ -49,6 +49,7 @@     Transaction(..),     Account(..),     PrivateTrade(..),+    FeeInfo(..),  -- | Convenient constructors for records which serve as input parameters to functions. These are not --   completely safe (since you can forget to set a field and the Haskell compiler won't notice),@@ -128,7 +129,10 @@     HasIsBuy(..),     HasStatus(..),     HasBeneficiaryId(..),-    HasOrderId(..)+    HasOrderId(..),+    HasMakerFee(..),+    HasTakerFee(..),+    HasThirtyDayVolume(..)   ) where  import Data.Aeson (FromJSON(..))@@ -501,6 +505,15 @@ instance NFData PrivateTrade  makeFields ''PrivateTrade++-- | Fee information+data FeeInfo = FeeInfo {+    feeInfoMakerFee :: Scientific,+    feeInfoTakerFee :: Scientific,+    feeInfoThirtyDayVolume :: Scientific+  } deriving (Eq, Show, Generic, Data, Typeable, Ord)++makeFields ''FeeInfo  instance FromJSON CcyPair 
src/Network/Bitcoin/BitX/Types/Internal.hs view
@@ -668,3 +668,21 @@     type Aes [Types.PrivateTrade] = PrivateTrades_     aesToRec PrivateTrades_ {..} =         map aesToRec privateTrades'trades++-------------------------------------------- FeeInfo type -------------------------------------------++data FeeInfo_ = FeeInfo_+    { feeInfo'maker_fee :: QuotedScientific+    , feeInfo'taker_fee :: QuotedScientific+    , feeInfo'thirty_day_volume :: QuotedScientific+    }++$(AesTH.deriveFromJSON AesTH.defaultOptions{AesTH.fieldLabelModifier = last . splitOn "'"}+    ''FeeInfo_)++instance BitXAesRecordConvert Types.FeeInfo where+    type Aes Types.FeeInfo = FeeInfo_+    aesToRec FeeInfo_ {..} =+        Types.FeeInfo {feeInfoMakerFee = qsToScientific feeInfo'maker_fee,+                  feeInfoTakerFee = qsToScientific feeInfo'taker_fee,+                  feeInfoThirtyDayVolume = qsToScientific feeInfo'thirty_day_volume}
test/Network/Bitcoin/BitX/Spec/Specs/AesonRecordSpec.hs view
@@ -179,6 +179,13 @@             \ \"is_buy\": false, \"order_id\": \"BXMC2CJ7HNB88U4\", \"pair\": \"XBTZAR\", \"price\": \"10491.00\", \             \ \"timestamp\": 1467138492909, \"type\": \"BID\", \"volume\": \"0.147741\" }]}"          [privateTradeInner]+    it "FeeInfo is parsed properly" $+      recordAesCheck+        "{\"maker_fee\": \"0.00\", \"taker_fee\": \"0.10\", \"thirty_day_volume\": \"0.894342\"}"+        FeeInfo+            {feeInfoMakerFee = 0,+             feeInfoTakerFee = 0.1,+             feeInfoThirtyDayVolume = 0.894342}  tickerInner :: Ticker tickerInner =
test/Network/Bitcoin/BitX/Spec/Specs/LensSpec.hs view
@@ -191,3 +191,10 @@   let _ = x ^. BitX.volume   Nothing +_feeInfo :: Maybe Int+_feeInfo = do+  let x = BitX.FeeInfo 0 0 0+  let _ = x ^. BitX.makerFee+  let _ = x ^. BitX.takerFee+  let _ = x ^. BitX.thirtyDayVolume+  Nothing
test/Network/Bitcoin/BitX/Spec/Specs/PrivateSpec.hs view
@@ -41,6 +41,8 @@               connectsAndParsesOkay $ BitX.getWithdrawalRequests auth             it "getFundingAddress connects to BitX and works" $               connectsAndParsesOkay $ BitX.getFundingAddress auth XBT Nothing+            it "getFeeInfo connects to BitX and works" $+              connectsAndParsesOkay $ BitX.getFeeInfo auth XBTZAR         else             it "API key file not found -- skipping private tests" $               True `shouldBe` True