fix: persist contract state after PUT merge in upsert_contract_state #1996
+262
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why
When a peer receives a PUT request for a contract it already has cached, the updated state is computed correctly but never persisted to the state store. This causes the peer to continue serving stale cached state even after receiving and validating updates from the network.
What Changed
Fix: Added
state_store.update()call inupsert_contract_state()before returningUpsertResult::Updatedcrates/core/src/contract/executor/runtime.rs:303-307attempt_state_update()Test: Added
test_put_merge_persists_state()integration testcrates/core/tests/operations.rs:540-783Impact
Fixes #1995
[AI-assisted debugging and comment]
🤖 Generated with Claude Code