//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.18; contract VolatilityAmount { function _volatililtyAmountToSwap( uint256 _maxAmount, uint256 _leverageBalance, uint256 _iLeverageBalance, uint256 _fee ) private pure returns (uint256 swapAmount) { uint256 B = (_leverageBalance + _mul(_iLeverageBalance, (BONE - _fee)) - _mul(_maxAmount, (BONE - _fee))); uint256 numerator = ABDKMathQuad.toUInt( ABDKMathQuad.sqrt( ABDKMathQuad.fromUInt( (B * B) + 4 * (BONE - _fee) * _iLeverageBalance * _maxAmount ) ) ) - B; swapAmount = numerator / (2 * (BONE - _fee)); } function getSwappedAssetAmount( address _tokenIn, uint256 _maxAmountIn, IVolmexPool _pool ) external view returns ( uint256 swapAmount, uint256 amountOut, uint256 fee ) { uint256 leverageBalance = _mul( _pool.getLeverage(_pool.tokens(0)), _pool.getBalance(_pool.tokens(0)) ); uint256 iLeverageBalance = _mul( _pool.getLeverage(_pool.tokens(1)), _pool.getBalance(_pool.tokens(1)) ); swapAmount = _volatililtyAmountToSwap( _maxAmountIn, leverageBalance, iLeverageBalance, 0 ); (amountOut, fee) = _pool.getTokenAmountOut(_tokenIn, swapAmount); swapAmount = _volatililtyAmountToSwap( _maxAmountIn, leverageBalance, iLeverageBalance, fee ); (amountOut, fee) = _pool.getTokenAmountOut(_tokenIn, swapAmount); } }
0.4.18