Skip to content

Ft slither workflow#59

Open
Pradeep-selva wants to merge 25 commits into
masterfrom
ft-slither-workflow
Open

Ft slither workflow#59
Pradeep-selva wants to merge 25 commits into
masterfrom
ft-slither-workflow

Conversation

@Pradeep-selva

Copy link
Copy Markdown
Member

No description provided.

Comment on lines +342 to +356
function _convertUSDCIntoLpToken(uint256 _amount)
internal
returns (uint256 receivedLpTokens)
{
uint256[2] memory liquidityAmounts = [0, _amount];

// estimate amount of Lp Tokens based on stable peg i.e., 1FXS = 1 3Pool LP Token
uint256 expectedLpOut = (_amount * NORMALIZATION_FACTOR) /
fraxPool.get_virtual_price(); // 30 = normalizing 18 decimals for virutal price + 18 decimals for LP token - 6 decimals for want token
// Provide USDC liquidity to receive Lp tokens with a slippage of `maxSlippage`
receivedLpTokens = fraxPool.add_liquidity(
liquidityAmounts,
(expectedLpOut * (MAX_BPS - maxSlippage)) / (MAX_BPS)
);
}

Check warning

Code scanning / Slither

Divide before multiply

FraxConvexPositionHandler._convertUSDCIntoLpToken(uint256) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#342-356) performs a multiplication on the result of a division: -expectedLpOut = (_amount * NORMALIZATION_FACTOR) / fraxPool.get_virtual_price() (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#349-350) -receivedLpTokens = fraxPool.add_liquidity(liquidityAmounts,(expectedLpOut * (MAX_BPS - maxSlippage)) / (MAX_BPS)) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#352-355)
Comment on lines +317 to +334
function _convertLpTokenIntoUSDC(uint256 _amount)
internal
returns (uint256 receivedWantTokens)
{
int128 usdcIndexInPool = int128(
int256(uint256(FraxPoolCoinIndexes.USDC))
);

// estimate amount of USDC received based on stable peg i.e., 1FXS = 1 3Pool LP Token
uint256 expectedWantTokensOut = (_amount *
fraxPool.get_virtual_price()) / NORMALIZATION_FACTOR; // 30 = normalizing 18 decimals for virutal price + 18 decimals for LP token - 6 decimals for want token
// burn Lp tokens to receive USDC with a slippage of `maxSlippage`
receivedWantTokens = fraxPool.remove_liquidity_one_coin(
_amount,
usdcIndexInPool,
(expectedWantTokensOut * (MAX_BPS - maxSlippage)) / (MAX_BPS)
);
}

Check warning

Code scanning / Slither

Divide before multiply

FraxConvexPositionHandler._convertLpTokenIntoUSDC(uint256) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#317-334) performs a multiplication on the result of a division: -expectedWantTokensOut = (_amount * fraxPool.get_virtual_price()) / NORMALIZATION_FACTOR (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#326-327) -receivedWantTokens = fraxPool.remove_liquidity_one_coin(_amount,usdcIndexInPool,(expectedWantTokensOut * (MAX_BPS - maxSlippage)) / (MAX_BPS)) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#329-333)
Comment on lines +363 to +375
function _lpTokenValueInUSDC(uint256 _value)
internal
view
returns (uint256)
{
if (_value == 0) return 0;

return
fraxPool.calc_withdraw_one_coin(
_value,
int128(int256(uint256(FraxPoolCoinIndexes.USDC)))
);
}

Check warning

Code scanning / Slither

Dangerous strict equalities

FraxConvexPositionHandler._lpTokenValueInUSDC(uint256) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#363-375) uses a dangerous strict equality: - _value == 0 (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#368)
Comment on lines +109 to +115
function _configHandler(address _harvester, address _wantToken) internal {
wantToken = IERC20(_wantToken);
harvester = IHarvester(_harvester);

// Approve max want tokens to frax2Pool.
wantToken.approve(address(fraxPool), type(uint256).max);
}

Check warning

Code scanning / Slither

Unused return

FraxConvexPositionHandler._configHandler(address,address) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#109-115) ignores return value by wantToken.approve(address(fraxPool),type()(uint256).max) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#114)
Comment thread contracts/ConvexExecutor/Harvester.sol Outdated
Comment on lines 289 to 305

Check warning

Code scanning / Slither

Unused return

Harvester._swapToWantOnUniV2(address[],uint256,IAggregatorV3) (contracts/ConvexExecutor/Harvester.sol#289-305) ignores return value by uniswapRouterV2.swapExactTokensForTokens(amount,expectedOut,path,address(this),block.timestamp) (contracts/ConvexExecutor/Harvester.sol#298-304)
Comment on lines +238 to +267
function _claimRewards(bytes calldata _data) internal override {
convexVault.getReward();

uint256 initialUSDCBalance = wantToken.balanceOf(address(this));

// get list of tokens to transfer to harvester
address[] memory rewardTokens = harvester.rewardTokens();
//transfer them
uint256 balance;
for (uint256 i = 0; i < rewardTokens.length; i++) {
balance = IERC20(rewardTokens[i]).balanceOf(address(this));

if (balance > 0) {
IERC20(rewardTokens[i]).safeTransfer(
address(harvester),
balance
);
}
}

// convert all rewards to usdc
harvester.harvest();

latestHarvestedRewards =
wantToken.balanceOf(address(this)) -
initialUSDCBalance;
totalCummulativeRewards += latestHarvestedRewards;

emit Claim(latestHarvestedRewards);
}

Check warning

Code scanning / Slither

Unused return

FraxConvexPositionHandler._claimRewards(bytes) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#238-267) ignores return value by harvester.harvest() (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#259)
Comment on lines +91 to +104
constructor() {
address _stakingVault = fraxConvexBooster.createVault(FRAX_USDC_PID);

// Create a staking proxy vault and get the actual staking contract
convexVault = IConvexStakingProxy(_stakingVault);
convexStaking = IConvexStaking(
IConvexStakingProxy(_stakingVault).stakingAddress()
);

// Approve max LP tokens to FraxConvex booster
lpToken.approve(address(_stakingVault), type(uint256).max);
// Approve max lp tokens to frax2Pool
lpToken.approve(address(fraxPool), type(uint256).max);
}

Check warning

Code scanning / Slither

Unused return

FraxConvexPositionHandler.constructor() (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#91-104) ignores return value by lpToken.approve(address(_stakingVault),type()(uint256).max) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#101)
Comment on lines +91 to +104
constructor() {
address _stakingVault = fraxConvexBooster.createVault(FRAX_USDC_PID);

// Create a staking proxy vault and get the actual staking contract
convexVault = IConvexStakingProxy(_stakingVault);
convexStaking = IConvexStaking(
IConvexStakingProxy(_stakingVault).stakingAddress()
);

// Approve max LP tokens to FraxConvex booster
lpToken.approve(address(_stakingVault), type(uint256).max);
// Approve max lp tokens to frax2Pool
lpToken.approve(address(fraxPool), type(uint256).max);
}

Check warning

Code scanning / Slither

Unused return

FraxConvexPositionHandler.constructor() (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#91-104) ignores return value by lpToken.approve(address(fraxPool),type()(uint256).max) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#103)
Comment on lines +186 to +208
function _openPosition(bytes calldata _data) internal override {
_checkPosition(false);

AmountParams memory openPositionParams = abi.decode(
_data,
(AmountParams)
);
require(
openPositionParams._amount <= lpToken.balanceOf(address(this)),
"INSUFFICIENT_BALANCE"
);

uint256 previousLpTokenBalance = lpToken.balanceOf(address(this));
convexVault.stakeLockedCurveLp(
openPositionParams._amount,
stakingPeriodSecs
);

require(
lpToken.balanceOf(address(this)) < previousLpTokenBalance,
"STAKING_UNSUCCESSFUL"
);
}

Check warning

Code scanning / Slither

Unused return

FraxConvexPositionHandler._openPosition(bytes) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#186-208) ignores return value by convexVault.stakeLockedCurveLp(openPositionParams._amount,stakingPeriodSecs) (contracts/ConvexExecutor/FC/FraxConvexPositionHandler.sol#199-202)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants