The FestivalPass constructor accepts a _beatToken address parameter but stores it as a public address variable without any setter function to modify it if incorrectly configured during deployment.
Likelihood:
Reason 1: This is primarily a deployment configuration error rather than an actively exploitable vulnerability
Reason 2: Requires the deployer to make a mistake during contract deployment
Reason 3: Requires human error during the deployment process
Impact:
Impact 1: If the wrong _beatToken address is provided during deployment, the contract will be permanently linked to an incorrect or non-existent token contract.
Impact 2: This would completely break core protocol functionality:
Impact 3: The entire tokenomics and reward system would be non-functional
Impact 4: Users would lose access to earned rewards and bonuses
Impact 5: This represents a complete failure of the protocol's core value proposition
This test demonstrates the core vulnerability by:
Deploying with Wrong Address: Creates a new FestivalPass contract with an incorrect beatToken address (0x1234567890123456789012345678901234567890)
Verifying the Problem: Confirms that the wrong address is permanently stored in the contract
Testing Core Functionality Failures:
VIP Pass Purchase: When a user buys a VIP pass, the contract tries to mint 5 BEAT tokens to the user by calling BeatToken(beatToken).mint(msg.sender, bonus). Since beatToken points to a wrong address, this call fails.
Performance Attendance: When users attend performances, the contract tries to mint reward tokens. This also fails due to the wrong address.
Memorabilia Redemption: When users redeem memorabilia, the contract tries to burn BEAT tokens using BeatToken(beatToken).burnFrom(msg.sender, collection.priceInBeat). This fails as well.
No Recovery Path: The test demonstrates that there's no way to fix this - no setter function exists to change the beatToken address.
Setter function to set a valid address after deployment with an onlyOwner modifier to restrict access rights to the owner only.
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.