mirror of https://github.com/voidlizard/hbs2
136 lines
3.4 KiB
Haskell
136 lines
3.4 KiB
Haskell
{-# Language UndecidableInstances #-}
|
|
{-# Language AllowAmbiguousTypes #-}
|
|
{-# Language TemplateHaskell #-}
|
|
module HBS2.Net.Proto.RefChan where
|
|
|
|
import HBS2.Prelude.Plated
|
|
-- import HBS2.Hash
|
|
-- import HBS2.Clock
|
|
import HBS2.Net.Proto
|
|
import HBS2.Net.Auth.Credentials
|
|
import HBS2.Base58
|
|
-- import HBS2.Events
|
|
import HBS2.Net.Proto.Peer
|
|
import HBS2.Net.Proto.Sessions
|
|
import HBS2.Data.Types.Refs
|
|
|
|
-- import HBS2.System.Logger.Simple
|
|
|
|
-- import Data.Maybe
|
|
-- import Data.Hashable
|
|
import Data.ByteString (ByteString)
|
|
-- import Type.Reflection (someTypeRep)
|
|
import Lens.Micro.Platform
|
|
-- import Codec.Serialise
|
|
|
|
{- HLINT ignore "Use newtype instead of data" -}
|
|
|
|
data SignedBox p e =
|
|
SignedBox (PubKey 'Sign e) ByteString (Signature (Encryption e))
|
|
deriving stock (Generic)
|
|
|
|
data RefChanHeadBlock e =
|
|
RefChanHeadBlock
|
|
{ _refChanHeadVersion :: Integer
|
|
, _refChanHeadQuorum :: Integer
|
|
, _refChanHeadWaitAccept :: Integer
|
|
, _refChanHeadPeers :: [PubKey 'Sign e]
|
|
, _refChanHeadAuthors :: [PubKey 'Sign e]
|
|
}
|
|
deriving stock (Generic)
|
|
|
|
makeLenses 'RefChanHeadBlock
|
|
|
|
newtype RefChanHeadBlockTran e =
|
|
RefChanHeadBlockTran HashRef
|
|
deriving stock (Generic)
|
|
|
|
type RefChanId e = PubKey 'Sign e
|
|
|
|
data RefChanHead e =
|
|
RefChanHead (RefChanId e) (RefChanHeadBlockTran e)
|
|
| RefChanGetHead (RefChanId e)
|
|
deriving stock (Generic)
|
|
|
|
|
|
|
|
refChanHeadProto :: forall e s m . ( MonadIO m
|
|
, Request e (RefChanHead e) m
|
|
, Response e (RefChanHead e) m
|
|
, IsPeerAddr e m
|
|
, Pretty (Peer e)
|
|
, Sessions e (KnownPeer e) m
|
|
, Signatures s
|
|
, Pretty (AsBase58 (PubKey 'Sign s))
|
|
, s ~ Encryption e
|
|
)
|
|
=> RefChanHead e -> m ()
|
|
|
|
refChanHeadProto _ = pure ()
|
|
|
|
|
|
-- type RefChanAuthor e = PubKey 'Sign (Encryption e)
|
|
-- type RefChan e = PubKey 'Sign (Encryption e)
|
|
|
|
-- type ForRefChan e = ( Serialise (RefChan e)
|
|
-- , Serialise (Signature (Encryption e))
|
|
-- )
|
|
|
|
-- data RefChanACL e =
|
|
-- RefChanACLImmediate [RefChanAuthor e] -- ^ authorized authors
|
|
-- deriving stock (Generic)
|
|
|
|
-- instance ForRefChan e => Serialise (RefChanACL e)
|
|
|
|
-- data RefChanHeadBlock e =
|
|
-- RefChanHeadBlock
|
|
-- { _refChanHeadPrev :: Maybe HashRef
|
|
-- , _refChanHeadVersion :: Integer
|
|
-- , _refChanHeadHistory :: Maybe HashRef
|
|
-- , _refChanHeadACL :: RefChanACL e
|
|
-- }
|
|
-- deriving stock (Generic)
|
|
|
|
-- makeLenses ''RefChanHeadBlock
|
|
|
|
-- instance ForRefChan e => Serialise (RefChanHeadBlock e)
|
|
|
|
-- data RefChanMsgEnvelope e =
|
|
-- RefChanMessage
|
|
-- { _refChanMsgChan :: RefChan e
|
|
-- , _refChanMsgAuthor :: RefChanAuthor e
|
|
-- , _refChanMsgData :: ByteString
|
|
-- , _refChanMsgSign :: Signature (Encryption e)
|
|
-- }
|
|
-- deriving stock (Generic)
|
|
|
|
-- makeLenses ''RefChanMsgEnvelope
|
|
|
|
-- instance ForRefChan e => Serialise (RefChanMsgEnvelope e)
|
|
|
|
-- newtype RefChanHeadMsg e =
|
|
-- RefChanHeadMsg HashRef
|
|
-- deriving stock Generic
|
|
|
|
-- instance Serialise (RefChanHeadMsg e)
|
|
|
|
-- data RefChanHead e =
|
|
-- RefChanGetHead (RefChanMsgEnvelope e)
|
|
-- | RefChanHead (RefChanMsgEnvelope e)
|
|
-- deriving stock (Generic)
|
|
|
|
-- instance ForRefChan e => Serialise (RefChanHead e)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|