Skip to content

fix(contracts): scope executor event guard by key - #41

Open
fredo wants to merge 1 commit into
frederik/eng-4103-featcontracts-add-project-trigger-accountingfrom
frederik/eng-4229-fixcontracts-scope-executor-event-guard-by-key
Open

fix(contracts): scope executor event guard by key#41
fredo wants to merge 1 commit into
frederik/eng-4103-featcontracts-add-project-trigger-accountingfrom
frederik/eng-4229-fixcontracts-scope-executor-event-guard-by-key

Conversation

@fredo

@fredo fredo commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Addresses ENG-4229.

Scopes transaction-local executor event suppression by (adopter, assertionId) or (adopter, storageKey), allowing independent mutations while rejecting repeated mutations of the same key.

@linear-code

linear-code Bot commented Jul 31, 2026

Copy link
Copy Markdown

ENG-4229

@fredo

fredo commented Jul 31, 2026

Copy link
Copy Markdown
Contributor Author

Known inherited CI blocker: the shared workflow builds StateOracleV2 with the default unoptimized profile and fails EIP-170 size enforcement. The dedicated optimized V2 profile passes; CI/profile integration is tracked in ENG-4250. No fix is included here so the reviewed implementation remains unchanged.

@fredo
fredo force-pushed the frederik/eng-4229-fixcontracts-scope-executor-event-guard-by-key branch from 78862b5 to 079196e Compare August 12, 2026 11:05
@fredo
fredo marked this pull request as ready for review August 12, 2026 11:14
Comment thread test/StateOracleV2.t.sol
assertEq(used, 3);
}

function test_nonViewReentrantDAVerifierCannotDoubleSpendTriggerLimit() public {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IDAVerifier.verifyDA is declared view, so this production call is a STATICCALL. The -vvvv trace shows the nested addAssertion reverting with StateChangeDuringStaticCall; it never reaches the stale-usage condition, and this test would also pass with the pre-fix accounting order. If non-view verifier reentrancy is an intended threat, the production interface/call path must permit CALL and the test should assert the limit rejection after a successful inner mutation. Otherwise this test only verifies the existing static-call restriction and should not claim to cover reentrant oversubscription.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants