lnd-client-0.1.0.0: src/LndClient/Data/CloseChannel.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
module LndClient.Data.CloseChannel
( CloseChannelRequest (..),
CloseStatusUpdate (..),
ChannelCloseUpdate (..),
ChannelCloseSummary (..),
)
where
import Data.ProtoLens.Message
import LndClient.Data.Channel (PendingUpdate)
import LndClient.Data.ChannelPoint
import LndClient.Import
import qualified Proto.LndGrpc as LnGRPC
import qualified Proto.LndGrpc_Fields as LnGRPC
data CloseChannelRequest
= CloseChannelRequest
{ channelPoint :: ChannelPoint,
force :: Bool,
targetConf :: Maybe Int32,
satPerByte :: Maybe Int64,
deliveryAddress :: Maybe Text
}
deriving (Eq, Ord, Show)
data CloseStatusUpdate
= Pending (PendingUpdate 'Closing)
| Close ChannelCloseUpdate
| NothingUpdate
deriving (Eq, Ord, Show)
data ChannelCloseUpdate
= ChannelCloseUpdate
{ closingTxid :: TxId 'Closing,
success :: Bool
}
deriving (Eq, Ord, Show)
data ChannelCloseSummary
= ChannelCloseSummary
{ remotePubkey :: NodePubKey,
chPoint :: ChannelPoint,
settledBalance :: MSat,
closingTxId :: TxId 'Closing
}
deriving (Eq, Ord, Show)
instance FromGrpc [ChannelCloseSummary] LnGRPC.ClosedChannelsResponse where
fromGrpc x = sequence $ fromGrpc <$> (x ^. LnGRPC.channels)
instance ToGrpc CloseChannelRequest LnGRPC.CloseChannelRequest where
toGrpc x =
msg
<$> toGrpc (channelPoint x)
<*> toGrpc (LndClient.Data.CloseChannel.force x)
<*> toGrpc (targetConf x)
<*> toGrpc (satPerByte x)
<*> toGrpc (deliveryAddress x)
where
msg gChannelPoint gForce gTargetConf gSatPerByte gDeliveryAddress =
defMessage
& LnGRPC.channelPoint .~ gChannelPoint
& LnGRPC.force .~ gForce
& LnGRPC.targetConf .~ gTargetConf
& LnGRPC.satPerByte .~ gSatPerByte
& LnGRPC.deliveryAddress .~ gDeliveryAddress
instance FromGrpc CloseStatusUpdate LnGRPC.CloseStatusUpdate where
fromGrpc x =
case x ^. LnGRPC.maybe'update of
Just (LnGRPC.CloseStatusUpdate'ClosePending a) -> Pending <$> fromGrpc a
Just (LnGRPC.CloseStatusUpdate'ChanClose a) -> Close <$> fromGrpc a
Nothing -> Right NothingUpdate
instance FromGrpc ChannelCloseUpdate LnGRPC.ChannelCloseUpdate where
fromGrpc x =
ChannelCloseUpdate
<$> fromGrpc (x ^. LnGRPC.closingTxid)
<*> fromGrpc (x ^. LnGRPC.success)
instance FromGrpc ChannelCloseSummary LnGRPC.ChannelCloseSummary where
fromGrpc x =
ChannelCloseSummary
<$> fromGrpc (x ^. LnGRPC.remotePubkey)
<*> channelPointParser (x ^. LnGRPC.channelPoint)
<*> fromGrpc (x ^. LnGRPC.settledBalance)
<*> fromGrpc (x ^. LnGRPC.closingTxHash)