Chainlink aggregators have a built-in circuit breaker if the price of an asset goes outside of a predetermined price band. The result is that if an asset experiences a huge drop in value (i.e. LUNA crash) the price of the oracle will continue to return the minPrice
instead of the actual price of the asset and vice versa.
The LiquidationPool::distributeAssets
function uses Chainlink::latestRoundData()
function to retrieve EUR/USD
and Token/USD
prices. When latestRoundData()
is called it requests data from the aggregator. The aggregator has a minPrice
and a maxPrice
. If the price falls below the minPrice
instead of reverting it will just return the min price.
If the price feed retrieved from Chainlink in LiquidationPool::distributeAssets
for asset is incorrect due to the aggregator not updating the price below the minPrice
, the contract would use this incorrect price to calculate the distribution of assets and the cost in EUROs
. This could result in users receiving a disproportionate amount of assets for their stake, or the contract burning more EUROs
than necessary, based on the inflated price.
Manual Review
Add the following checks after retrieving the price from Chainlink oracle
:
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.