bitcoin-payment-channel-1.0.0.0: src/PaymentChannel/Internal/Payment/Types.hs
module PaymentChannel.Internal.Payment.Types
(
module PaymentChannel.Internal.Payment.Types
, module PaymentChannel.Internal.Types
, module Bitcoin.SpendCond.Cond
)
where
import PaymentChannel.Internal.Types
import Bitcoin.Types
import Bitcoin.SinglePair
import Bitcoin.SpendCond.Cond
import Bitcoin.Signature
import qualified Network.Haskoin.Transaction as HT
import qualified Network.Haskoin.Crypto as HC
import qualified Network.Haskoin.Script as HS
import qualified Data.Ord as Ord
-- | scriptInput for a settlement transaction using client+server pubkey
data PaymentScriptSig = PaymentScriptSig
{ sssClientSig :: BtcSig
, sssServerSig :: BtcSig
}
instance TransformSigData BtcSig () ChanParams where
mkSigData _ btcSig _ = btcSig
instance TransformSigData PaymentScriptSig BtcSig ChanParams where
mkSigData clientSig serverSig _ = PaymentScriptSig clientSig serverSig
-- Two signatures
instance SpendFulfillment PaymentScriptSig ChanParams where
rawSigs PaymentScriptSig{..} MkChanParams{..} =
[ (getPubKey cpReceiverPubKey, sssClientSig)
, (getPubKey cpSenderPubKey , sssServerSig) ]
signatureScript PaymentScriptSig{..} _ = Script
[ opPush sssClientSig
, opPush sssServerSig
, OP_1] -- Make OP_IF in reeemScript evaluate to true (two pubkeys/sigs)
-- Single (client) signature
instance SpendFulfillment BtcSig ChanParams where
rawSigs clientSig MkChanParams{..} =
[ (getPubKey cpSenderPubKey, clientSig) ]
signatureScript _ _ = Script [] --TODO: separate rawSigs from signatureScript?
instance SpendCondition ChanParams where
conditionScript = getRedeemScript