Expected behavior: The CustomerEngine should call reputation() on the CompanyGame contract using valid Vyper syntax so the reputation check executes at runtime. A correct inter-contract view call should compile and return the reputation value.
Actual behavior: The code uses a staticcall-style expression that is not valid Vyper syntax: # (from supplied CustomerEngine.vy)
rep: uint256 = staticcall CompanyGame(self.company).reputation()
Likelihood
High: This is a clear syntactic/semantic error that will surface at compile time if not fixed.
Impact
1.High: The contract may fail to compile (blocking deployment), or if compiled with a changed implementation the reputation check may be bypassed, allowing low-reputation demand to proceed.
2.Functional break: CustomerEngine cannot safely gate demand by reputation, impacting economic simulation and allowing unvalidated sales.
Explanation
Vyper uses interface calls like CompanyGame(self.company).reputation() to perform external view calls. staticcall is a low-level EVM operation; in Vyper you either call the interface method directly (preferred) or use raw_call and decode the returned bytes. Mixing staticcall with the interface syntax is invalid.
Leaving the line as-is results in a compiler error (deployment blocked) or in developers substituting incorrect logic that bypasses reputation checks — both are unacceptable.
Replace the invalid staticcall expression with a proper Vyper interface call
Or
Option B — Defensive | Use raw_call and validate returned bytes (if the counterparty may be non-conforming):
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.