-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Modify foldBlocks to recurse on ledger events #353
Conversation
4ec545c
to
613714d
Compare
ledgerEvents | ||
currBlock | ||
accumulatorState | ||
atomicWriteIORef stateIORef newState |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It feels that we should use an underlying monad in ClientStNext
to store state instead of using IORef.
CSP.ClientStNext n BlockInMode ChainPoint ChainTip (StateT s IO) ()
would be cleaner I think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you open a PR after this one? I'd be interested to see what you have in mind.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took a closer look and it does not seem to be worth the effort. My point was to be able to use state monad in the protocol client to store the state (including an error). The problem with that is the change is quite extensive: we'd have to parameterize types used in the client e.g. LocalNodeClientProtocolsForBlock
by an underlying monad additionally.
Moreover, the code in consensus we use has IO hardcoded there in the function argument e.g.:
connectTo :: forall a b.
LocalSnocket
-> NetworkConnectTracers LocalAddress NodeToClientVersion
-> Versions
NodeToClientVersion
NodeToClientVersionData
(OuroborosApplicationWithMinimalCtx
'InitiatorMode LocalAddress ByteString IO a b)
-> FilePath
-> IO ()
This would require unlifting state into IO and then lifting it again, which is cumbersome.
In the end the semantics would be pretty much the same, but with more boilerplate.
613714d
to
e666b32
Compare
Changelog
Context
Additional context for the PR goes here. If the PR fixes a particular issue please provide a link to the issue.
How to trust this PR
Highlight important bits of the PR that will make the review faster. If there are commands the reviewer can run to observe the new behavior, describe them.
Checklist