{-# LANGUAGE RecordWildCards, TypeSynonymInstances #-}
module PaymentChannel.Internal.State
(
module PaymentChannel.Internal.State
, module PaymentChannel.Internal.Types
)
where
import PaymentChannel.Internal.Types
import PaymentChannel.Internal.Error
import PaymentChannel.Internal.Error.Status (checkReadyForPayment)
-- import PaymentChannel.Internal.Payment
import Bitcoin.Util (addressToScriptPubKeyBS)
import PaymentChannel.Internal.ChanScript
import qualified Network.Haskoin.Transaction as HT
import qualified Network.Haskoin.Crypto as HC
import qualified Network.Haskoin.Script as HS
import Data.Time.Clock
import qualified Data.Serialize as Bin
-- ##########
-- ## Util ##
-- ##########
--
-- pcsFundingValue = ftiOutValue . pcsFundingTxInfo
-- pcsValueTransferred cs = nonDusty (pcsFundingValue cs) - nonDusty (pcsClientChangeVal cs)
-- pcsChannelValueLeft = pcsClientChangeVal
-- pcsClientPubKey = cpSenderPubKey . pcsParameters
-- pcsServerPubKey = cpReceiverPubKey . pcsParameters
-- pcsDustLimit = configDustLimit
-- pcsExpirationDate = cpLockTime . pcsParameters
-- pcsClientChangeAddress = ptcSenderChangeAddress . pcsPaymentConfig
-- pcsClientChangeScriptPubKey = addressToScriptPubKeyBS . pcsClientChangeAddress
-- pcsLockTime = cpLockTime . pcsParameters
-- pcsPrevOut (CPaymentChannelState _ (CFundingTxInfo h i _) _ _ _ _) = OutPoint h i
--
-- pcsFundingSource :: PaymentChannelState -> HT.OutPoint
-- pcsFundingSource pcs = HT.OutPoint (ftiHash fti) (ftiOutIndex fti)
-- where fti = pcsFundingTxInfo pcs
--
-- pcsGetPayment :: PaymentChannelState -> Payment
-- pcsGetPayment (CPaymentChannelState _ _ _ _ val sig) = CPayment val sig
--
-- -- |Set new client/sender change address.
-- -- Use this function if the client wishes to change its change address.
-- -- First set the new change address using this function, then accept the payment which
-- -- uses this new change address.
-- setClientChangeAddress :: PaymentChannelState -> HC.Address -> PaymentChannelState
-- setClientChangeAddress pcs@(CPaymentChannelState _ _ pConf _ _ _) addr =
-- pcs { pcsPaymentConfig = newPayConf }
-- where newPayConf = pConf { ptcSenderChangeAddress = addr }
--
-- setFundingSource :: PaymentChannelState -> FundingTxInfo -> PaymentChannelState
-- setFundingSource pcs fti =
-- pcs { pcsFundingTxInfo = fti }
--
-- -- |We subtract the specified "dust" limit from the total available value.
-- -- This avoids creating a Bitcoin transaction that won't circulate
-- -- in the Bitcoin P2P network.
-- channelValueLeft :: PaymentChannelState -> BtcAmount
-- channelValueLeft pcs =
-- nonDusty (pcsClientChangeVal pcs) - configDustLimit
--
-- -- |Returns 'True' if all available channel value has been transferred, 'False' otherwise
-- channelIsExhausted :: PaymentChannelState -> Bool
-- channelIsExhausted pcs =
-- bsSigFlag (pcsPaymentSignature pcs) == HS.SigNone True ||
-- channelValueLeft pcs == 0