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 +3/−0
- bitx-bitcoin.cabal +2/−1
- src/Network/Bitcoin/BitX.hs +2/−0
- src/Network/Bitcoin/BitX/Private.hs +3/−1
- src/Network/Bitcoin/BitX/Private/Fees.hs +37/−0
- src/Network/Bitcoin/BitX/Types.hs +14/−1
- src/Network/Bitcoin/BitX/Types/Internal.hs +18/−0
- test/Network/Bitcoin/BitX/Spec/Specs/AesonRecordSpec.hs +7/−0
- test/Network/Bitcoin/BitX/Spec/Specs/LensSpec.hs +7/−0
- test/Network/Bitcoin/BitX/Spec/Specs/PrivateSpec.hs +2/−0
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