The Portfolio contracts calls validateSwap on the strategy contract and passes the adjusted reserves to the function. The adjusted reserves are the new reserves after the trade takes place without the fee. Therefore, the swap validation is checked on reserve values that could be less than what the actual reserve is because the fee could be large. This is not usually a problem, but it's a problem with the default strategy because any calls to the tradingFunction will now revert if using the Portfolio pool's reserves. This is because one of the reserves is at a bound (because of fees being added), while the other is not. This reverts now after making the fixes in https://github.com/primitivefinance/portfolio/tree/fix/trading-function-boundary
This is not as straightforward to fix because there's no place where we can run the additional verification the reserves have not eclipsed a bound, we would need to add some additional code to portfolio.
I am going to attempt to fix this on the temporary branch fix/arb-boundary-sims by not reverting, and instead overwriting the the reserves to the BOUND +/- 1 so the math ppf does not revert.
Ref: https://github.com/primitivefinance/portfolio_simulations/blob/(bug-found)-invariant-pre-post-swap/bug_description.md
The Portfolio contracts calls
validateSwap
on the strategy contract and passes the adjusted reserves to the function. The adjusted reserves are the new reserves after the trade takes place without the fee. Therefore, the swap validation is checked on reserve values that could be less than what the actual reserve is because the fee could be large. This is not usually a problem, but it's a problem with the default strategy because any calls to thetradingFunction
will now revert if using the Portfolio pool's reserves. This is because one of the reserves is at a bound (because of fees being added), while the other is not. This reverts now after making the fixes in https://github.com/primitivefinance/portfolio/tree/fix/trading-function-boundaryThis is not as straightforward to fix because there's no place where we can run the additional verification the reserves have not eclipsed a bound, we would need to add some additional code to portfolio.
I am going to attempt to fix this on the temporary branch fix/arb-boundary-sims by not reverting, and instead overwriting the the reserves to the BOUND +/- 1 so the math
ppf
does not revert.