QA Report #155
Labels
bug
Something isn't working
QA (Quality Assurance)
Assets are not at risk. State handling, function incorrect as to spec, issues with clarity, syntax
resolved
Finding has been patched by sponsor (sponsor pls link to PR containing fix)
sponsor confirmed
Sponsor agrees this is a problem and intends to fix it (OK to use w/ "disagree with severity")
1.
AddressProvider.sol
does not have agetSwapperRouter
functionLine References
FeeBurner.sol#L126
AddressProvider.sol
Impact
In
FeeBurner.sol
, the_swapperRouter
function gets the swapper router from the address provider. TheAddressProvider.sol
andIAddressProvider.sol
contracts do not seem to have agetSwapperRouter
function. If the_addressProvider
inFeeBurner.sol
is theAddressProvider.sol
contract or implementsIAddressProvider.sol
thenFeeBurner.sol
would not function correctly or at all.Proof of concept
The _swapperRouter function is called in the
burnToTarget
function which should then revert thus makingburnToTarget
uncallable.Recommended Mitigation Steps
Add the
getSwapperRouter
function in theAddressProvider.sol
andIAddressProvider.sol
contracts.2. Incompatibility with deflationary/rebase/fee-on-transfer tokens in
FeeBurner.sol
Line References
FeeBurner.sol#L85
Impact
In the
burnToTarget
function ofFeeBurner.sol
, if the tokens being transferred are tokens whose balances change during a transfer such as deflationary and fee-on-transfer tokens, then the swap could fail since the swap input amount might be larger than the actual amount of tokens received inFeeBurner.sol
.Recommended Mitigation Steps
When tokens are transferred to the contract, check the balance of the contract before and after the transfer. Use the difference in the balances as the input amount for the swap call.
3. Return value for
mint
is not checked inInflationManager.sol
Line References
InflationManager.sol#L81
Minter.sol#L126-L135
Impact
In
Minter.sol
, if inflation has not started andlastEvent == 0
then themint
function will return false. InInflationManager.sol
, themintRewards
function does not check the return value for the mint call. WhenmintRewards
is called by a gauge and fails, the transaction does not revert.Proof of Concept
When calling
claimRewards
inAmmGauge.sol
, the call tomintRewards
does not revert if minting has failed and the user loses their rewards.The
KeeperGauge.sol
andLpGauge.sol
contracts would fail in a similar way in addition to any other gauges that callmintRewards
.Recommended Mitigation Steps
Consider either returning a bool value for the
mintRewards
function inInflationManager.sol
and check the return value in the gauges or insert the mint call in a require,require(Minter(minter).mint(beneficiary, amount))
The text was updated successfully, but these errors were encountered: