bitcoin-payment-channel-0.6.0.0: src/Data/Bitcoin/PaymentChannel/Internal/Error.hs
{-# LANGUAGE DeriveGeneric #-}
module Data.Bitcoin.PaymentChannel.Internal.Error where
import Data.Bitcoin.PaymentChannel.Internal.Types
import Data.Bitcoin.PaymentChannel.Internal.Util
import GHC.Generics
data PayChanError =
SigVerifyFailed -- ^Signature verification failed
| BadPaymentValue BitcoinAmount -- ^Payment assigns less value to server than previous payment. Client change value is greater by the specified 'BitcoinAmount'.
| OutPointMismatch OutPoint -- ^'Network.Haskoin.Transaction.OutPoint' in payment does not match the one in server's state
| ChangeAddrMismatch Address -- ^Client change 'Network.Haskoin.Crypto.Address' in payment does not match the one in server's state
| RedeemScriptMismatch Script -- ^redeemScript in payment does not match the one in server's state
| DustOutput BitcoinAmount -- ^Client change value is less than dust limit (payment transaction would contain a dust output)
| ClosingPaymentBadValue -- ^The closing payment only changes the payment transaction change address. Sending value is not allowed.
| ChannelExpired -- ^Channel has expired or is too close to expiration date
deriving Generic
instance Show PayChanError where
show SigVerifyFailed = "Signature verification failed"
show (BadPaymentValue valDiff) =
"out-of-order payment (assigns " ++ show valDiff ++ " less value to receiver)"
show (OutPointMismatch op) = "unexpected outpoint. expected: " ++ show op
show (ChangeAddrMismatch addr) = "unexpected change address. expected: " ++ show addr
show (RedeemScriptMismatch scr) = "unexpected redeem script. expected: " ++
cs (serHex scr)
show (DustOutput limit) = "server dust limit of " ++ show limit ++
" not respected by client change output"
show ClosingPaymentBadValue = "payment not of zero value." ++
" cannot receive value in closing payment."
show ChannelExpired = "channel too close to expiration date"