News for hackers. Stuff that matters.
Re:Byzantine Fault Tolerant Raft With Smart Contracts by carterschonwald on Wednesday March 02, 2016 @06:50PM (#11214045)
This and related code bases (such as the programming language hopper, which is my focus) are the work of several colleagues along with myself. Happy to try to answer any tech/computer science focused questions.

NB: a lot of the stuff still has much work to be done, but we're transitioning to working in the open :)

Re:Byzantine Fault Tolerant Raft With Smart Contracts by drcode on Wednesday March 02, 2016 @08:33PM (#11214452)
If one of the nodes goes rogue and tries to flood the network with noise, how does the system prevent denial of service?
Re:Byzantine Fault Tolerant Raft With Smart Contracts by buckie on Wednesday March 02, 2016 @10:04PM (#11214765)
Author of Juno here -- surprised to see this on here at all given that I didn't tell anyone that it went open (was saving it for tomorrow). I'm losing out on all this sweet sweet karma </s>.

Anyway, to your question (carter focuses on the smart contract language, not the consensus layer): This is actually a semi-normal/expected thing in the case of a network partition. Say one node gets cut off, transitions to a candidate and achieves some high term (but potentially has an out of date log index). When it comes back online/partition ends, it will start spamming the rest of the cluster requesting votes.

What protects the rest from this or other faults is a combo of signed RPC's and extra logic (i.e. lazy votes). With sigs, chatter from someone who you don't have the key for (or invalid msgs generally) just get dropped + authorship is verified (Follower can't pretend to be some other node). With lazy votes the portion of the cluster in a good state basically chills (stays in same state, doesn't vote) until the Followers hit an election timeout (AE clears the lazy vote).

Of course you can still DoS the NIC or Haskell server, but the important thing to note is that this isn't meant for a public-facing deployment. It's designed for an internal network -or- inter-corp via leased lines/secured pipes setup. That's the whole point of Juno really... for enterprise applications bitcoin-class tech gives you more features than you need (at the cost of performance).

Tangaroa was a great first step, but we have internal fixes for a number of cases it didn't cover, issues caused by incomplete implementations and (I think) some novel ideas to give back... but I'm still finishing the paper on the enhanced/new (not sure what the line for that is) protocol and its implementation so it didn't make the cut for this release.

Re:Byzantine Fault Tolerant Raft With Smart Contracts by carterschonwald on Wednesday March 02, 2016 @08:50PM (#11214520)
A better question is: why isn't that network flood tripping all of your monitoring services? :). I'll let the folks who focused on the replication code base address that more

I'm currently focused on the language engineering side (though i was part of the early distributed replication effort, when we ported a verified raft code base to haskell, see https://github.com/cartazio/haver-raft . We ultimately didn't use that code base for a variety of reasons relating to how that verified alg was structured, but all the initial commits should be syntactically equivalent to the coq code in verdi raft, and all the follow on commits should be strictly syntactic transformations. https://github.com/uwplse/verdi is the associated coq development )

Re:Byzantine Fault Tolerant Raft With Smart Contracts by spopejoy on Thursday March 03, 2016 @01:50AM (#11215426)
Juno follows Raft/Tangaroa in that it treats the state machine like a black box which it runs strictly post-commit.

Significantly, this means it doesn't do a full BFT (which is ultimately application-specific), meaning it is possible to DOS with correct-but-spurious messages.

We are investigating ways to lazily verify SM results, which would necessarily be application specific. This opens the way for an application to code DOS resistance.