You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The script currently rejects any signatures done by a node after having seen the transaction in which it retires, but that node can continue to sign, as per #5973, and:
The current logic observes the KV writes to membership_status and retired_committed, and rejects signatures from a Node that has reached (Retired, true).
But a node can, and will continue to issue signatures and run for elections until retired_committed itself is committed. Since commit information is not materialised in the ledger, there is no way for read_ledger.py to enforce that. I mistakenly thought that it was possible to use the term for this, but it's not, because a node can run for, and win elections in (Retired, true), which is necessary for liveness.
So as far as I can tell, the only implementable check is to check that the Node is in node_activity_status at all, with any state other than Pending. I don't think we can implement a more precise check, but I would love to be wrong.
The current logic observes the KV writes to membership_status and retired_committed, and rejects signatures from a Node that has reached (Retired, true).
But a node can, and will continue to issue signatures and run for elections until retired_committed itself is committed. Since commit information is not materialised in the ledger, there is no way for read_ledger.py to enforce that. I mistakenly thought that it was possible to use the term for this, but it's not, because a node can run for, and win elections in (Retired, true), which is necessary for liveness.
So as far as I can tell, the only implementable check is to check that the Node is in node_activity_status at all, with any state other than Pending. I don't think we can implement a more precise check, but I would love to be wrong.
I think going to the weaker check is fine. It's nice-but-not-critical for read_ledger.py to do some validity/consistency checks, but more important that it read all valid ledgers. Any enforcement checks we're not 100% sure of should probably be removed from read_ledger.py, and maybe be options to a separate check_ledger.py.
The script currently rejects any signatures done by a node after having seen the transaction in which it retires, but that node can continue to sign, as per #5973, and:
https://github.com/microsoft/CCF/blob/main/tla/consensus/ccfraft.tla#L760
https://github.com/microsoft/CCF/blob/main/tla/consensus/ccfraft.tla#L876
One further commit event in the same term, by the same node, is allowed (there can also be a view change, in which case this is not hit).
The behaviour of read_ledger/ledger.py needs to align with that of the implementation and the spec.
The text was updated successfully, but these errors were encountered: