mirror of https://github.com/voidlizard/hbs2
accept reflogupdate only for subcribed refs or from friendly peers
This commit is contained in:
parent
3bccfa2e98
commit
d3c63ab8e4
|
@ -86,7 +86,7 @@ instance Typeable (RefLogUpdateEv e) => Hashable (EventKey e (RefLogUpdateEv e))
|
||||||
p = Proxy @RefLogUpdateEv
|
p = Proxy @RefLogUpdateEv
|
||||||
|
|
||||||
newtype instance Event e (RefLogUpdateEv e) =
|
newtype instance Event e (RefLogUpdateEv e) =
|
||||||
RefLogUpdateEvData (PubKey 'Sign (Encryption e), RefLogUpdate e)
|
RefLogUpdateEvData (PubKey 'Sign (Encryption e), RefLogUpdate e, Maybe (Peer e))
|
||||||
deriving (Typeable)
|
deriving (Typeable)
|
||||||
|
|
||||||
instance EventType ( Event e (RefLogUpdateEv e) ) where
|
instance EventType ( Event e (RefLogUpdateEv e) ) where
|
||||||
|
@ -222,7 +222,7 @@ refLogUpdateProto =
|
||||||
|
|
||||||
-- FIXME: refactor:use-type-application-for-deferred
|
-- FIXME: refactor:use-type-application-for-deferred
|
||||||
deferred proto do
|
deferred proto do
|
||||||
emit @e RefLogUpdateEvKey (RefLogUpdateEvData (pubk, e))
|
emit @e RefLogUpdateEvKey (RefLogUpdateEvData (pubk, e, Just p))
|
||||||
gossip e
|
gossip e
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
|
@ -54,9 +54,13 @@ instance HasCfgValue PeerAcceptAnnounceKey AcceptAnnounce where
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
acceptAnnouncesFromPeer :: forall e m . ( e ~ L4Proto
|
acceptAnnouncesFromPeer :: forall e m . ( MonadIO m
|
||||||
, MonadIO m
|
, Sessions e (KnownPeer e) m
|
||||||
, Sessions L4Proto (KnownPeer L4Proto) m
|
, IsPeerAddr e m
|
||||||
|
, Ord (PubKey 'Sign (Encryption e))
|
||||||
|
, FromStringMaybe (PubKey 'Sign (Encryption e))
|
||||||
|
, Ord (PubKey 'Sign (Encryption e))
|
||||||
|
, e ~ L4Proto
|
||||||
)
|
)
|
||||||
=> PeerConfig
|
=> PeerConfig
|
||||||
-> PeerAddr e
|
-> PeerAddr e
|
||||||
|
|
|
@ -74,6 +74,7 @@ httpWorker conf pmeta e = do
|
||||||
maybe1 va (status status404) $ \val -> do
|
maybe1 va (status status404) $ \val -> do
|
||||||
text [qc|{pretty val}|]
|
text [qc|{pretty val}|]
|
||||||
|
|
||||||
|
-- FIXME: to-replace-to-rpc
|
||||||
post "/reflog" do
|
post "/reflog" do
|
||||||
bs <- LBS.take 4194304 <$> body
|
bs <- LBS.take 4194304 <$> body
|
||||||
let msg' =
|
let msg' =
|
||||||
|
@ -86,7 +87,7 @@ httpWorker conf pmeta e = do
|
||||||
Just msg -> do
|
Just msg -> do
|
||||||
let pubk = view refLogId msg
|
let pubk = view refLogId msg
|
||||||
liftIO $ withPeerM penv $ do
|
liftIO $ withPeerM penv $ do
|
||||||
emit @e RefLogUpdateEvKey (RefLogUpdateEvData (pubk, msg))
|
emit @e RefLogUpdateEvKey (RefLogUpdateEvData (pubk, msg, Nothing))
|
||||||
doRefLogBroadCast msg
|
doRefLogBroadCast msg
|
||||||
status status200
|
status status200
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ instance (RefLogContext m) => HandleMethod m RpcRefLogPost where
|
||||||
debug $ "rpc.reflogPost:" <+> pretty (AsBase58 pk)
|
debug $ "rpc.reflogPost:" <+> pretty (AsBase58 pk)
|
||||||
|
|
||||||
liftIO $ withPeerM (rpcPeerEnv co) $ do
|
liftIO $ withPeerM (rpcPeerEnv co) $ do
|
||||||
emit @L4Proto RefLogUpdateEvKey (RefLogUpdateEvData (pk, msg))
|
emit @L4Proto RefLogUpdateEvKey (RefLogUpdateEvData (pk, msg, Nothing))
|
||||||
doRefLogBroadCast msg
|
doRefLogBroadCast msg
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ import HBS2.System.Logger.Simple
|
||||||
import Brains
|
import Brains
|
||||||
import PeerConfig
|
import PeerConfig
|
||||||
import PeerTypes
|
import PeerTypes
|
||||||
|
import CheckBlockAnnounce (acceptAnnouncesFromPeer)
|
||||||
|
|
||||||
import Data.Function(fix)
|
import Data.Function(fix)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
@ -86,17 +87,19 @@ data RefLogWorkerAdapter e =
|
||||||
, reflogFetch :: PubKey 'Sign (Encryption e) -> IO ()
|
, reflogFetch :: PubKey 'Sign (Encryption e) -> IO ()
|
||||||
}
|
}
|
||||||
|
|
||||||
reflogWorker :: forall e s m . ( MonadIO m, MyPeer e
|
reflogWorker :: forall e s m . ( e ~ L4Proto
|
||||||
|
, MonadIO m, MyPeer e
|
||||||
, EventListener e (RefLogUpdateEv e) m
|
, EventListener e (RefLogUpdateEv e) m
|
||||||
, EventListener e (RefLogRequestAnswer e) m
|
, EventListener e (RefLogRequestAnswer e) m
|
||||||
-- , Request e (RefLogRequest e) (Peerm
|
|
||||||
, HasStorage m
|
, HasStorage m
|
||||||
, Nonce (RefLogUpdate e) ~ BS.ByteString
|
, Nonce (RefLogUpdate e) ~ BS.ByteString
|
||||||
, Serialise (RefLogUpdate e)
|
, Serialise (RefLogUpdate e)
|
||||||
, EventEmitter e (RefLogUpdateEv e) m -- (PeerM e m)
|
, EventEmitter e (RefLogUpdateEv e) m -- (PeerM e m)
|
||||||
|
, Sessions L4Proto (KnownPeer L4Proto) m
|
||||||
, Signatures s
|
, Signatures s
|
||||||
, s ~ Encryption e
|
, s ~ Encryption e
|
||||||
, IsRefPubKey s
|
, IsRefPubKey s
|
||||||
|
, IsPeerAddr e m
|
||||||
, Pretty (AsBase58 (PubKey 'Sign s))
|
, Pretty (AsBase58 (PubKey 'Sign s))
|
||||||
)
|
)
|
||||||
=> PeerConfig
|
=> PeerConfig
|
||||||
|
@ -138,11 +141,17 @@ reflogWorker conf brains adapter = do
|
||||||
-- TODO: support-other-data-structures
|
-- TODO: support-other-data-structures
|
||||||
_ -> pure ()
|
_ -> pure ()
|
||||||
|
|
||||||
subscribe @e RefLogUpdateEvKey $ \(RefLogUpdateEvData (reflog,v)) -> do
|
subscribe @e RefLogUpdateEvKey $ \(RefLogUpdateEvData (reflog,v, mpip)) -> do
|
||||||
trace $ "reflog worker.got refupdate" <+> pretty (AsBase58 reflog)
|
trace $ "reflog worker.got refupdate" <+> pretty (AsBase58 reflog)
|
||||||
liftIO $ reflogUpdate reflog Nothing v
|
|
||||||
liftIO $ atomically $ writeTQueue pQ (reflog, [v])
|
|
||||||
|
|
||||||
|
polled <- isPolledRef @e brains reflog
|
||||||
|
buddy <- maybe1 mpip (pure False) $ \pip -> do
|
||||||
|
pa <- toPeerAddr @e pip
|
||||||
|
acceptAnnouncesFromPeer @e conf pa
|
||||||
|
|
||||||
|
when (buddy || polled) $ liftIO do
|
||||||
|
reflogUpdate reflog Nothing v
|
||||||
|
atomically $ writeTQueue pQ (reflog, [v])
|
||||||
|
|
||||||
reflogMon <- liftIO $ newTVarIO (mempty :: HashSet (Hash HbSync))
|
reflogMon <- liftIO $ newTVarIO (mempty :: HashSet (Hash HbSync))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue