diff --git a/backend/node/base.py b/backend/node/base.py index 59d46e5f6..ab4fb8c0d 100644 --- a/backend/node/base.py +++ b/backend/node/base.py @@ -717,12 +717,7 @@ def _set_vote(self, receipt: Receipt) -> Receipt: receipt.vote = Vote.DISAGREE return receipt - # 3. VM crash (exit_code, OOM, etc.) — validator couldn't validate - if result_code == public_abi.ResultCode.VM_ERROR: - receipt.vote = Vote.DISAGREE - return receipt - - # 4. Deterministic violation: execution outcome or state diverges from leader + # 3. Deterministic violation: execution outcome or state diverges from leader leader_receipt = self.leader_receipt if ( leader_receipt.execution_result != receipt.execution_result @@ -732,7 +727,7 @@ def _set_vote(self, receipt: Receipt) -> Receipt: receipt.vote = Vote.DETERMINISTIC_VIOLATION return receipt - # 5. Valid execution (RETURN or USER_ERROR) with matching state → agree + # 4. Valid execution with matching state → agree receipt.vote = Vote.AGREE return receipt diff --git a/tests/unit/test_set_vote.py b/tests/unit/test_set_vote.py index 413856551..ba9ec96a4 100644 --- a/tests/unit/test_set_vote.py +++ b/tests/unit/test_set_vote.py @@ -218,11 +218,11 @@ def test_none_error_code_not_timeout(): assert result.vote == Vote.DETERMINISTIC_VIOLATION -# --- VM crash (non-timeout) → DISAGREE --- +# --- VM error (non-timeout) → compared like any other result --- -def test_vm_error_exit_code_votes_disagree(): - """VM crash (exit_code) should be DISAGREE — validator couldn't validate.""" +def test_vm_error_exit_code_mismatching_leader_votes_deterministic_violation(): + """VM error with different result from leader should be DETERMINISTIC_VIOLATION.""" leader_receipt = _make_success_receipt() node = _make_node(leader_receipt) @@ -232,11 +232,11 @@ def test_vm_error_exit_code_votes_disagree(): ) result = node._set_vote(receipt) - assert result.vote == Vote.DISAGREE + assert result.vote == Vote.DETERMINISTIC_VIOLATION -def test_vm_error_oom_votes_disagree(): - """VM OOM should be DISAGREE.""" +def test_vm_error_oom_mismatching_leader_votes_deterministic_violation(): + """VM OOM with different result from leader should be DETERMINISTIC_VIOLATION.""" leader_receipt = _make_success_receipt() node = _make_node(leader_receipt) @@ -246,11 +246,11 @@ def test_vm_error_oom_votes_disagree(): ) result = node._set_vote(receipt) - assert result.vote == Vote.DISAGREE + assert result.vote == Vote.DETERMINISTIC_VIOLATION -def test_vm_error_matching_leader_still_disagree(): - """Even if leader and validator crash with same VM error, validator votes DISAGREE.""" +def test_vm_error_matching_leader_votes_agree(): + """If leader and validator both get same VM error with same state, validator votes AGREE.""" leader_receipt = _make_receipt( ResultCode.VM_ERROR, b"exit_code 1", @@ -267,7 +267,7 @@ def test_vm_error_matching_leader_still_disagree(): ) result = node._set_vote(validator_receipt) - assert result.vote == Vote.DISAGREE + assert result.vote == Vote.AGREE # --- Nondet disagree takes precedence ---