{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} module PaymentChannel.Internal.Config ( module PaymentChannel.Internal.Config , module PaymentChannel.Internal.Types.Hour ) where import Bitcoin.Types import PaymentChannel.Internal.Util import PaymentChannel.Internal.Types.Hour import qualified RBPCP.Types as RBPCP class Monad m => HasConfSettlePeriod m where -- | The server is allowed to close the payment channel -- this many hours before the (in-blockchain) defined expiration date confSettlePeriod :: m Hour -- | Various server-defined settings data ServerSettings = ServerSettings { serverConfDustLimit :: BtcAmount -- ^ The server will not accept a payment that leaves the client with less than this amount in change (unless it's exactly zero) , serverConfSettlePeriod :: Hour -- ^ The channel may be closed this number of hours *before* the in-blockchain expiration date , serverConfMinDuration :: Hour -- ^ Minimum duration of the payment channel , serverConfOpenPrice :: BtcAmount -- ^ Value of the initial payment needed to open the payment channel } deriving (Eq, Show, Typeable, Generic, Serialize, ToJSON, FromJSON, NFData) fromFundingInfo :: RBPCP.FundingInfo -> ServerSettings fromFundingInfo RBPCP.FundingInfo{..} = ServerSettings (fromIntegral fundingInfoDustLimit) (MkHour $ fromIntegral fundingInfoSettlementPeriodHours) (MkHour $ fromIntegral fundingInfoMinDurationHours) (fromIntegral fundingInfoOpenPrice)