I’ve just lately realized concerning the protocol described within the paper titled “Sensible Byzantine Fault Tolerance”, as a part of my college course on distributed programs. There was one instance the place it appeared to me a request will be dedicated and executed by just some however not all non-faulty replicas. The instance was as follows:
There are 4 replicas: 0 (major), 1, 2, and three. The first is Byzantine (f = 1) and sends a pre-prepare message to replicas 1 and a pair of. Each pre-prepare messages correspond to the identical shopper request (or an imaginary cast request if there was by no means such a request to start with). No pre-prepare message was despatched to duplicate 3.
Now put together stage begins, and the non-faulty replicas 1 and a pair of every obtain put together messages from replicas 0, 1, and a pair of (i.e. together with “self-votes”). Therefore, they accumulate sufficient (2f+1 = 3) put together messages to precede to commit stage.
Commit stage begins, and equally to the put together stage, replicas 1 and a pair of every obtain sufficient messages to finish the commit stage, and execute the request. Each of them full and reply to the shopper. The shopper receives f+1 = 2 matching replies and assumes all the pieces is regular.
Now my downside is that this doesn’t appear to fulfill the requirement that every one non-faulty nodes agree on the identical state. Specifically, replicas 1 and a pair of have executed the request and agree on the state, whereas duplicate Three has not executed the request and thus disagrees with replicas 1 and a pair of.
From what I can inform this violates interactive consistency. I presume that the protocol is right (duh), so what am I lacking right here?