Liquidity Providers will interact with AaveDIVAWrapper::addLiquidity() which will call AaveDIVAWrapperCore::_addLiquidity() which does receive 2 arbitrary addresses.
Problem is that these addresses can be different from the msg.sender adding the liquidity.
This is seen in the AaveDIVAWrapperCore::_removeLiquidity() that checks for the shortToken and longToken balances of the msg.sender, the function caller. This address, though actually added the liquidity, might be different from the rightful holders of the shortToken and longToken and as such won't be able to call AaveDIVAWrapper::removeLiquidity() / AaveDIVAWrapperCore::_removeLiquidity() with success.
Liquidity Providers might be unable to remove liquidity via AaveDIVAWrapper::removeLiquidity()if longRecipient and/or shortRecipient addresses are different from msg.sender in AaveDIVAWrapper::addLiquidity() / AaveDIVAWrapperCore::_addLiquidity().
Manual review.
Have mapping that stores each liquidity provider to their provided short and long recipients
Have liquidity providers provide the addresses of their short and long token recipients and check against the mapping that such correlation exists.
The `addLiquidity` allows the short and long recipients to be different addresses. Then if a given user has only one of the position tokens, he calls `redeemPositionToken` to redeem position token amount, if this user has amount of the both token types, he can call `removeLiquidity` and in that way an equal amount of short and long tokens will be burned.
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.