The current auction contract implements a linear price reduction model, it lacks dynamic price decay rate adjustment, making it vulnerable to exploitation by low-demand buyers and poor price optimization based on actual market conditions.
Below is a snippet of the getPricefunction in Auction.solwhich calculates the price of Zeno:
The price is calculated as a simple linear formula which drops at a constant rate over time, regardless of demand. Usually, in a dutch auction, price should decay exponentially (following an e^(-λt) curve) to ensure that early buyers are incentivized to act quickly. Normally, if demand is high, price should stay higher longer (slower decay), if demand is low, price should drop faster to encourage participation. In this function, the price drops at the same rate regardless of how many tokens are sold or the total supply of the tokens.
Lack of incentive in the auction, a big buyer that intends to purchase a lot of ZENO may choose to just wait until the last moment to purchase at the lowest price. As a result, the auction fails to optimize pricing based on market demand, leading to potential revenue loss for the protocol.
Manual review
Add lambda state variable:
Use exponential price decay instead of liner reduction:
This ensures that price drops more sharply early and slows down later, preventing buyers from waiting too long.
Implement lambda adjustment based on demand:
If demand is high → lambda decreases, keeping price higher for longer.
If demand is low → lambda increases, making price drop faster to attract buyers.
Adjust the lambda on the buyfunction:
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.