/Users/christinakotrutsa/Library/Python/3.9/lib/python/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020 warnings.warn( 'forge clean' running (wd: /private/tmp/deepyield-vault-audit) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /private/tmp/deepyield-vault-audit) Detector: arbitrary-send-erc20 BeefyCLMAdapter.deploy(uint256) (src/BeefyCLMAdapter.sol#157-186) uses arbitrary from in transferFrom: assetToken.safeTransferFrom(vault,address(this),assets) (src/BeefyCLMAdapter.sol#160) DedicatedVaultMain.fundFromVault(uint256) (src/DedicatedVaultMain.sol#116-119) uses arbitrary from in transferFrom: asset.safeTransferFrom(vault,address(this),amount) (src/DedicatedVaultMain.sol#117) DedicatedVaultStrategyAdapter.deploy(uint256) (src/DedicatedVaultStrategyAdapter.sol#86-93) uses arbitrary from in transferFrom: asset.safeTransferFrom(vault,address(this),assets) (src/DedicatedVaultStrategyAdapter.sol#87) DeepYieldStrategyAdapter.deploy(uint256) (src/DeepYieldStrategyAdapter.sol#143-149) uses arbitrary from in transferFrom: assetToken.safeTransferFrom(vault,address(this),assets) (src/DeepYieldStrategyAdapter.sol#145) PancakeV3MasterchefVenue.open(IDedicatedVenue.OpenArgs) (src/PancakeV3MasterchefVenue.sol#114-134) uses arbitrary from in transferFrom: paired.safeTransferFrom(controller,address(this),a.pairedAmount) (src/PancakeV3MasterchefVenue.sol#119) PancakeV3MasterchefVenue.open(IDedicatedVenue.OpenArgs) (src/PancakeV3MasterchefVenue.sol#114-134) uses arbitrary from in transferFrom: asset.safeTransferFrom(controller,address(this),a.assetAmount) (src/PancakeV3MasterchefVenue.sol#118) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom Detector: incorrect-exp FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) has bitwise-xor operator ^ instead of the exponentiation operator **: - inv = (3 * denominator) ^ 2 (src/libraries/FullMath.sol#50) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation Detector: divide-before-multiply PancakeSwapV3RouterAdapter._quoteFromSqrtPrice(uint160,address,address,uint256) (src/PancakeSwapV3RouterAdapter.sol#219-246) performs a multiplication on the result of a division: - amountInAfterFee = amountIn * (FEE_DENOMINATOR - poolFee) / FEE_DENOMINATOR (src/PancakeSwapV3RouterAdapter.sol#234) - stepA_scope_0 = (amountInAfterFee * Q96) / sqrtP (src/PancakeSwapV3RouterAdapter.sol#243) PancakeSwapV3RouterAdapter._quoteFromSqrtPrice(uint160,address,address,uint256) (src/PancakeSwapV3RouterAdapter.sol#219-246) performs a multiplication on the result of a division: - stepA_scope_0 = (amountInAfterFee * Q96) / sqrtP (src/PancakeSwapV3RouterAdapter.sol#243) - (stepA_scope_0 * Q96) / sqrtP (src/PancakeSwapV3RouterAdapter.sol#244) PancakeSwapV3RouterAdapter._quoteFromSqrtPrice(uint160,address,address,uint256) (src/PancakeSwapV3RouterAdapter.sol#219-246) performs a multiplication on the result of a division: - amountInAfterFee = amountIn * (FEE_DENOMINATOR - poolFee) / FEE_DENOMINATOR (src/PancakeSwapV3RouterAdapter.sol#234) - stepA = (amountInAfterFee * sqrtP) / Q96 (src/PancakeSwapV3RouterAdapter.sol#240) PancakeSwapV3RouterAdapter._quoteFromSqrtPrice(uint160,address,address,uint256) (src/PancakeSwapV3RouterAdapter.sol#219-246) performs a multiplication on the result of a division: - stepA = (amountInAfterFee * sqrtP) / Q96 (src/PancakeSwapV3RouterAdapter.sol#240) - (stepA * sqrtP) / Q96 (src/PancakeSwapV3RouterAdapter.sol#241) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv = (3 * denominator) ^ 2 (src/libraries/FullMath.sol#50) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#51) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#52) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#53) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#54) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#55) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - denominator = denominator / twos (src/libraries/FullMath.sol#39) - inv *= 2 - denominator * inv (src/libraries/FullMath.sol#56) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) performs a multiplication on the result of a division: - prod0 = prod0 / twos (src/libraries/FullMath.sol#43) - result = prod0 * inv (src/libraries/FullMath.sol#58) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128 (src/libraries/TickMath.sol#49) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128 (src/libraries/TickMath.sol#48) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128 (src/libraries/TickMath.sol#47) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128 (src/libraries/TickMath.sol#46) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128 (src/libraries/TickMath.sol#45) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128 (src/libraries/TickMath.sol#44) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128 (src/libraries/TickMath.sol#43) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128 (src/libraries/TickMath.sol#42) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128 (src/libraries/TickMath.sol#41) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128 (src/libraries/TickMath.sol#40) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128 (src/libraries/TickMath.sol#39) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128 (src/libraries/TickMath.sol#38) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128 (src/libraries/TickMath.sol#37) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128 (src/libraries/TickMath.sol#36) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128 (src/libraries/TickMath.sol#35) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128 (src/libraries/TickMath.sol#34) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128 (src/libraries/TickMath.sol#33) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128 (src/libraries/TickMath.sol#32) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) performs a multiplication on the result of a division: - ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128 (src/libraries/TickMath.sol#31) - ratio = type()(uint256).max / ratio (src/libraries/TickMath.sol#51) PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) performs a multiplication on the result of a division: - partnerCut = (amount * bpsLocked) / 10_000 (src/partners/PartnerAttributedSplitter.sol#107) - wSlice = (partnerCut * effective) / totalSupply_ (src/partners/PartnerAttributedSplitter.sol#127) PartnerAttributedSplitter.previewWrapperSlice(uint256,address) (src/partners/PartnerAttributedSplitter.sol#193-207) performs a multiplication on the result of a division: - partnerCut = (amount * partnerShareBps) / 10_000 (src/partners/PartnerAttributedSplitter.sol#201) - wrapperSlice = (partnerCut * effective) / totalSupply_ (src/partners/PartnerAttributedSplitter.sol#206) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply Detector: incorrect-equality BeefyCLMAdapter._markToMarketGross() (src/BeefyCLMAdapter.sol#455-491) uses a dangerous strict equality: - shares == 0 (src/BeefyCLMAdapter.sol#458) BeefyCLMAdapter._markToMarketGross() (src/BeefyCLMAdapter.sol#455-491) uses a dangerous strict equality: - pairedSide == 0 (src/BeefyCLMAdapter.sol#482) BeefyCLMAdapter._payFee(uint256,bytes32,uint256) (src/BeefyCLMAdapter.sol#440-453) uses a dangerous strict equality: - amount == 0 (src/BeefyCLMAdapter.sol#441) BeefyCLMAdapter._pullLocalLiquidity(uint256) (src/BeefyCLMAdapter.sol#493-532) uses a dangerous strict equality: - shares == 0 (src/BeefyCLMAdapter.sol#498) BeefyCLMAdapter._pullLocalLiquidity(uint256) (src/BeefyCLMAdapter.sol#493-532) uses a dangerous strict equality: - totalUnderlying == 0 (src/BeefyCLMAdapter.sol#505) BeefyCLMAdapter.withdrawToVault(uint256) (src/BeefyCLMAdapter.sol#244-297) uses a dangerous strict equality: - netBefore == 0 || reservedFee == 0 (src/BeefyCLMAdapter.sol#256) DedicatedVaultMain._close(string,uint256,uint256,uint256) (src/DedicatedVaultMain.sol#326-332) uses a dangerous strict equality: - id == 0 (src/DedicatedVaultMain.sol#328) DedicatedVaultMain.convertIdlePairedToAsset(uint256,uint256) (src/DedicatedVaultMain.sol#141-150) uses a dangerous strict equality: - bal == 0 (src/DedicatedVaultMain.sol#146) DedicatedVaultMain.convertIdleRewardToAsset(uint256,uint256) (src/DedicatedVaultMain.sol#155-165) uses a dangerous strict equality: - bal == 0 (src/DedicatedVaultMain.sol#161) DedicatedVaultMain.idlePairedQuoted() (src/DedicatedVaultMain.sol#340-343) uses a dangerous strict equality: - b == 0 (src/DedicatedVaultMain.sol#342) DedicatedVaultMain.openPosition(DedicatedVaultMain.OpenParams) (src/DedicatedVaultMain.sol#207-244) uses a dangerous strict equality: - assetForMint == 0 || pairedForMint == 0 (src/DedicatedVaultMain.sol#229) DedicatedVaultMain.positionValue() (src/DedicatedVaultMain.sol#345-347) uses a dangerous strict equality: - activePositionId == 0 (src/DedicatedVaultMain.sol#346) DeepYieldStrategyAdapter.estimatedTotalAssets() (src/DeepYieldStrategyAdapter.sol#223-228) uses a dangerous strict equality: - shares == 0 (src/DeepYieldStrategyAdapter.sol#226) DeepYieldStrategyAdapter.managerWithdrawAll() (src/DeepYieldStrategyAdapter.sol#152-161) uses a dangerous strict equality: - shares == 0 (src/DeepYieldStrategyAdapter.sol#154) FeeSplitter.recoverUnrecorded() (src/FeeSplitter.sol#200-205) uses a dangerous strict equality: - recovered == 0 (src/FeeSplitter.sol#202) PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) uses a dangerous strict equality: - effective == 0 (src/partners/PartnerAttributedSplitter.sol#125) PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) uses a dangerous strict equality: - wSlice == 0 (src/partners/PartnerAttributedSplitter.sol#128) PartnerAttributedSplitter.recoverUnrecorded() (src/partners/PartnerAttributedSplitter.sol#231-242) uses a dangerous strict equality: - recovered == 0 (src/partners/PartnerAttributedSplitter.sol#239) PartnerWrapper.recoverDonatedShares(address) (src/partners/PartnerWrapper.sol#163-185) uses a dangerous strict equality: - excess == 0 (src/partners/PartnerWrapper.sol#172) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities Detector: reentrancy-no-eth Reentrancy in DedicatedVaultStrategyAdapter._crystallizeFee() (src/DedicatedVaultStrategyAdapter.sol#152-164): External calls: - pulled = main.withdrawToVault(feeAssets) (src/DedicatedVaultStrategyAdapter.sol#157) State variables written after the call(s): - accountedAssets = idleUsdt - feeAssets (src/DedicatedVaultStrategyAdapter.sol#162) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) Reentrancy in PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158): External calls: - masterchef.harvest(positionId,address(this)) (src/PancakeV3MasterchefVenue.sol#143) - masterchef.withdraw(positionId,address(this)) (src/PancakeV3MasterchefVenue.sol#144) - nfpm.decreaseLiquidity(INfpmVenue.DecreaseLiquidityParams({tokenId:positionId,liquidity:liq,amount0Min:amount0Min,amount1Min:amount1Min,deadline:deadline})) (src/PancakeV3MasterchefVenue.sol#148-150) - nfpm.collect(INfpmVenue.CollectParams({tokenId:positionId,recipient:address(this),amount0Max:type()(uint128).max,amount1Max:type()(uint128).max})) (src/PancakeV3MasterchefVenue.sol#152-154) - nfpm.burn(positionId) (src/PancakeV3MasterchefVenue.sol#155) State variables written after the call(s): - activeTokenId = 0 (src/PancakeV3MasterchefVenue.sol#156) PancakeV3MasterchefVenue.activeTokenId (src/PancakeV3MasterchefVenue.sol#72) can be used in cross function reentrancies: - PancakeV3MasterchefVenue.activeTokenId (src/PancakeV3MasterchefVenue.sol#72) Reentrancy in BeefyCLMAdapter.harvest() (src/BeefyCLMAdapter.sol#299-324): External calls: - _pullLocalLiquidity(feeAssets) (src/BeefyCLMAdapter.sol#318) - beefyClm.withdraw(sharesNeeded,0,0) (src/BeefyCLMAdapter.sol#522) - router.withdrawFromUnderlying(pairedReceived,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#526) - _payFee(feeAssets,SOURCE_HARVEST,profit) (src/BeefyCLMAdapter.sol#320) - IFeeSink(treasury).recordFee(amount) (src/BeefyCLMAdapter.sol#445) State variables written after the call(s): - accountedAssets = currentAssets - feeAssets (src/BeefyCLMAdapter.sol#323) BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) can be used in cross function reentrancies: - BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) - BeefyCLMAdapter.estimatedProtocolFee() (src/BeefyCLMAdapter.sol#422-426) - BeefyCLMAdapter.estimatedTotalAssets() (src/BeefyCLMAdapter.sol#396-402) - BeefyCLMAdapter.unrealizedProfit() (src/BeefyCLMAdapter.sol#412-415) Reentrancy in DeepYieldStrategyAdapter.harvest() (src/DeepYieldStrategyAdapter.sol#185-208): External calls: - underlyingVault.withdraw(feeAssets - idle,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#203) State variables written after the call(s): - accountedAssets = currentAssets - feeAssets (src/DeepYieldStrategyAdapter.sol#207) DeepYieldStrategyAdapter.accountedAssets (src/DeepYieldStrategyAdapter.sol#36) can be used in cross function reentrancies: - DeepYieldStrategyAdapter.accountedAssets (src/DeepYieldStrategyAdapter.sol#36) Reentrancy in BeefyCLMAdapter.managerWithdrawAll() (src/BeefyCLMAdapter.sol#195-230): External calls: - beefyClm.withdraw(shares,0,0) (src/BeefyCLMAdapter.sol#199) - router.withdrawFromUnderlying(pairedBal,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#206) - _payFee(feeAssets,SOURCE_MANAGER_WITHDRAW_ALL,grossProfit) (src/BeefyCLMAdapter.sol#222) - IFeeSink(treasury).recordFee(amount) (src/BeefyCLMAdapter.sol#445) State variables written after the call(s): - accountedAssets = 0 (src/BeefyCLMAdapter.sol#229) BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) can be used in cross function reentrancies: - BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) - BeefyCLMAdapter.estimatedProtocolFee() (src/BeefyCLMAdapter.sol#422-426) - BeefyCLMAdapter.estimatedTotalAssets() (src/BeefyCLMAdapter.sol#396-402) - BeefyCLMAdapter.unrealizedProfit() (src/BeefyCLMAdapter.sol#412-415) Reentrancy in DedicatedVaultStrategyAdapter.managerWithdrawAll() (src/DedicatedVaultStrategyAdapter.sol#111-123): External calls: - _crystallizeFee() (src/DedicatedVaultStrategyAdapter.sol#112) - pulled = main.withdrawToVault(feeAssets) (src/DedicatedVaultStrategyAdapter.sol#157) - withdrawn = main.withdrawToVault(idle) (src/DedicatedVaultStrategyAdapter.sol#115) State variables written after the call(s): - accountedAssets = 0 (src/DedicatedVaultStrategyAdapter.sol#119) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) - accountedAssets = 0 (src/DedicatedVaultStrategyAdapter.sol#121) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) - accountedAssets = accountedAssets - withdrawn (src/DedicatedVaultStrategyAdapter.sol#121) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) Reentrancy in PancakeV3MasterchefVenue.open(IDedicatedVenue.OpenArgs) (src/PancakeV3MasterchefVenue.sol#114-134): External calls: - (tokenId,None,None,None) = nfpm.mint(INfpmVenue.MintParams({token0:address(asset),token1:address(paired),fee:fee,tickLower:a.tickLower,tickUpper:a.tickUpper,amount0Desired:a.assetAmount,amount1Desired:a.pairedAmount,amount0Min:a.amount0Min,amount1Min:a.amount1Min,recipient:address(this),deadline:a.deadline})) (src/PancakeV3MasterchefVenue.sol#122-128) - nfpm.safeTransferFrom(address(this),address(masterchef),tokenId) (src/PancakeV3MasterchefVenue.sol#131) State variables written after the call(s): - activeTokenId = tokenId (src/PancakeV3MasterchefVenue.sol#132) PancakeV3MasterchefVenue.activeTokenId (src/PancakeV3MasterchefVenue.sol#72) can be used in cross function reentrancies: - PancakeV3MasterchefVenue.activeTokenId (src/PancakeV3MasterchefVenue.sol#72) Reentrancy in DedicatedVaultMain.openPosition(DedicatedVaultMain.OpenParams) (src/DedicatedVaultMain.sol#207-244): External calls: - swapperIn.swapAssetToPaired(p.swapAssetIn,p.pairedMinOut,p.deadline) (src/DedicatedVaultMain.sol#221) - id = venue.open(IDedicatedVenue.OpenArgs({assetAmount:assetForMint,pairedAmount:pairedForMint,tickLower:p.tickLower,tickUpper:p.tickUpper,amount0Min:p.amount0Min,amount1Min:p.amount1Min,deadline:p.deadline})) (src/DedicatedVaultMain.sol#233-237) State variables written after the call(s): - activePositionId = id (src/DedicatedVaultMain.sol#241) DedicatedVaultMain.activePositionId (src/DedicatedVaultMain.sol#50) can be used in cross function reentrancies: - DedicatedVaultMain.activePositionId (src/DedicatedVaultMain.sol#50) - DedicatedVaultMain.hasActivePosition() (src/DedicatedVaultMain.sol#355-357) - DedicatedVaultMain.positionValue() (src/DedicatedVaultMain.sol#345-347) Reentrancy in BeefyCLMAdapter.panic() (src/BeefyCLMAdapter.sol#338-375): External calls: - beefyClm.withdraw(shares,0,0) (src/BeefyCLMAdapter.sol#342) - router.withdrawFromUnderlying(pairedBal,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#349) - _payFee(feeAssets,SOURCE_PANIC,grossProfit) (src/BeefyCLMAdapter.sol#365) - IFeeSink(treasury).recordFee(amount) (src/BeefyCLMAdapter.sol#445) State variables written after the call(s): - accountedAssets = 0 (src/BeefyCLMAdapter.sol#372) BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) can be used in cross function reentrancies: - BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) - BeefyCLMAdapter.estimatedProtocolFee() (src/BeefyCLMAdapter.sol#422-426) - BeefyCLMAdapter.estimatedTotalAssets() (src/BeefyCLMAdapter.sol#396-402) - BeefyCLMAdapter.unrealizedProfit() (src/BeefyCLMAdapter.sol#412-415) Reentrancy in BeefyCLMAdapter.withdrawToVault(uint256) (src/BeefyCLMAdapter.sol#244-297): External calls: - _pullLocalLiquidity(targetPull) (src/BeefyCLMAdapter.sol#264) - beefyClm.withdraw(sharesNeeded,0,0) (src/BeefyCLMAdapter.sol#522) - router.withdrawFromUnderlying(pairedReceived,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#526) - _payFee(chunkFee,SOURCE_WITHDRAW_TO_VAULT,chunkProfit) (src/BeefyCLMAdapter.sol#284) - IFeeSink(treasury).recordFee(amount) (src/BeefyCLMAdapter.sol#445) State variables written after the call(s): - accountedAssets = 0 (src/BeefyCLMAdapter.sol#293) BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) can be used in cross function reentrancies: - BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) - BeefyCLMAdapter.estimatedProtocolFee() (src/BeefyCLMAdapter.sol#422-426) - BeefyCLMAdapter.estimatedTotalAssets() (src/BeefyCLMAdapter.sol#396-402) - BeefyCLMAdapter.unrealizedProfit() (src/BeefyCLMAdapter.sol#412-415) - accountedAssets -= chunkPrincipal (src/BeefyCLMAdapter.sol#295) BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) can be used in cross function reentrancies: - BeefyCLMAdapter.accountedAssets (src/BeefyCLMAdapter.sol#30) - BeefyCLMAdapter.estimatedProtocolFee() (src/BeefyCLMAdapter.sol#422-426) - BeefyCLMAdapter.estimatedTotalAssets() (src/BeefyCLMAdapter.sol#396-402) - BeefyCLMAdapter.unrealizedProfit() (src/BeefyCLMAdapter.sol#412-415) Reentrancy in DedicatedVaultStrategyAdapter.withdrawToVault(uint256) (src/DedicatedVaultStrategyAdapter.sol#100-106): External calls: - _crystallizeFee() (src/DedicatedVaultStrategyAdapter.sol#101) - pulled = main.withdrawToVault(feeAssets) (src/DedicatedVaultStrategyAdapter.sol#157) - withdrawn = main.withdrawToVault(assetsNeeded) (src/DedicatedVaultStrategyAdapter.sol#102) State variables written after the call(s): - accountedAssets = 0 (src/DedicatedVaultStrategyAdapter.sol#104) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) - accountedAssets = accountedAssets - withdrawn (src/DedicatedVaultStrategyAdapter.sol#104) DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) can be used in cross function reentrancies: - DedicatedVaultStrategyAdapter.accountedAssets (src/DedicatedVaultStrategyAdapter.sol#43) - DedicatedVaultStrategyAdapter.pendingPerformanceFee() (src/DedicatedVaultStrategyAdapter.sol#140-146) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1 Detector: uninitialized-local PancakeSwapV3RouterAdapter._quoteFromSqrtPrice(uint160,address,address,uint256).zeroForOne (src/PancakeSwapV3RouterAdapter.sol#224) is a local variable never initialized Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables Detector: unused-return BeefyCLMAdapter.managerWithdrawAll() (src/BeefyCLMAdapter.sol#195-230) ignores return value by router.withdrawFromUnderlying(pairedBal,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#206) BeefyCLMAdapter.panic() (src/BeefyCLMAdapter.sol#338-375) ignores return value by router.withdrawFromUnderlying(pairedBal,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#349) BeefyCLMAdapter._pullLocalLiquidity(uint256) (src/BeefyCLMAdapter.sol#493-532) ignores return value by router.withdrawFromUnderlying(pairedReceived,abi.encode(address(pairedToken),address(assetToken))) (src/BeefyCLMAdapter.sol#526) DedicatedVaultMain.openPosition(DedicatedVaultMain.OpenParams) (src/DedicatedVaultMain.sol#207-244) ignores return value by swapperIn.swapAssetToPaired(p.swapAssetIn,p.pairedMinOut,p.deadline) (src/DedicatedVaultMain.sol#221) DedicatedVaultMain.closePositionAndRealize(uint256,uint256,uint256,uint256,uint256,uint256) (src/DedicatedVaultMain.sol#259-285) ignores return value by swapper.swapPairedToAsset(pBal,pairedMinOut,swapDeadline) (src/DedicatedVaultMain.sol#271) DedicatedVaultMain.closePositionAndRealize(uint256,uint256,uint256,uint256,uint256,uint256) (src/DedicatedVaultMain.sol#259-285) ignores return value by rewardSwapper.swapRewardToAsset(rBal,rewardMinOut,swapDeadline) (src/DedicatedVaultMain.sol#280) DeepYieldStrategyAdapter.deploy(uint256) (src/DeepYieldStrategyAdapter.sol#143-149) ignores return value by underlyingVault.deposit(assets,address(this)) (src/DeepYieldStrategyAdapter.sol#147) DeepYieldStrategyAdapter.managerWithdrawAll() (src/DeepYieldStrategyAdapter.sol#152-161) ignores return value by underlyingVault.redeem(shares,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#155) DeepYieldStrategyAdapter.withdrawToVault(uint256) (src/DeepYieldStrategyAdapter.sol#163-183) ignores return value by underlyingVault.withdraw(missing,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#173) DeepYieldStrategyAdapter.harvest() (src/DeepYieldStrategyAdapter.sol#185-208) ignores return value by underlyingVault.withdraw(feeAssets - idle,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#203) DeepYieldStrategyAdapter.panic() (src/DeepYieldStrategyAdapter.sol#210-221) ignores return value by underlyingVault.redeem(shares,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#213) PancakeSwapV3RouterAdapter._spotSqrtPriceX96() (src/PancakeSwapV3RouterAdapter.sol#253-256) ignores return value by (sqrtPriceX96,None,None,None,None,None,None) = pool.slot0() (src/PancakeSwapV3RouterAdapter.sol#254) PancakeV3MasterchefVenue.open(IDedicatedVenue.OpenArgs) (src/PancakeV3MasterchefVenue.sol#114-134) ignores return value by (tokenId,None,None,None) = nfpm.mint(INfpmVenue.MintParams({token0:address(asset),token1:address(paired),fee:fee,tickLower:a.tickLower,tickUpper:a.tickUpper,amount0Desired:a.assetAmount,amount1Desired:a.pairedAmount,amount0Min:a.amount0Min,amount1Min:a.amount1Min,recipient:address(this),deadline:a.deadline})) (src/PancakeV3MasterchefVenue.sol#122-128) PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158) ignores return value by masterchef.harvest(positionId,address(this)) (src/PancakeV3MasterchefVenue.sol#143) PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158) ignores return value by masterchef.withdraw(positionId,address(this)) (src/PancakeV3MasterchefVenue.sol#144) PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158) ignores return value by (None,None,None,None,None,None,None,liq,None,None,None,None) = nfpm.positions(positionId) (src/PancakeV3MasterchefVenue.sol#146) PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158) ignores return value by nfpm.decreaseLiquidity(INfpmVenue.DecreaseLiquidityParams({tokenId:positionId,liquidity:liq,amount0Min:amount0Min,amount1Min:amount1Min,deadline:deadline})) (src/PancakeV3MasterchefVenue.sol#148-150) PancakeV3MasterchefVenue.close(uint256,uint256,uint256,uint256) (src/PancakeV3MasterchefVenue.sol#138-158) ignores return value by nfpm.collect(INfpmVenue.CollectParams({tokenId:positionId,recipient:address(this),amount0Max:type()(uint128).max,amount1Max:type()(uint128).max})) (src/PancakeV3MasterchefVenue.sol#152-154) PancakeV3MasterchefVenue.harvest(uint256) (src/PancakeV3MasterchefVenue.sol#164-179) ignores return value by masterchef.harvest(positionId,address(this)) (src/PancakeV3MasterchefVenue.sol#167) PancakeV3MasterchefVenue.harvest(uint256) (src/PancakeV3MasterchefVenue.sol#164-179) ignores return value by masterchef.collect(IMasterchefVenue.CollectParams({tokenId:positionId,recipient:address(this),amount0Max:type()(uint128).max,amount1Max:type()(uint128).max})) (src/PancakeV3MasterchefVenue.sol#168-170) PancakeV3MasterchefVenue.harvest(uint256) (src/PancakeV3MasterchefVenue.sol#164-179) ignores return value by nfpm.collect(INfpmVenue.CollectParams({tokenId:positionId,recipient:address(this),amount0Max:type()(uint128).max,amount1Max:type()(uint128).max})) (src/PancakeV3MasterchefVenue.sol#172-174) PancakeV3MasterchefVenue.positionValueAsset(uint256) (src/PancakeV3MasterchefVenue.sol#182-187) ignores return value by (None,None,None,None,None,tl,tu,liq,None,None,owed0,owed1) = nfpm.positions(positionId) (src/PancakeV3MasterchefVenue.sol#184) PancakeV3MasterchefVenue.positionValueAsset(uint256) (src/PancakeV3MasterchefVenue.sol#182-187) ignores return value by (sqrtP,None,None,None,None,None,None) = pool.slot0() (src/PancakeV3MasterchefVenue.sol#185) V3PositionValuer.amounts(uint160,int24,int24,uint128) (src/libraries/V3PositionValuer.sol#20-29) ignores return value by LiquidityAmounts.getAmountsForLiquidity(sqrtPriceX96,TickMath.getSqrtRatioAtTick(tickLower),TickMath.getSqrtRatioAtTick(tickUpper),liquidity) (src/libraries/V3PositionValuer.sol#23-28) PartnerWrapper.deposit(uint256,address) (src/partners/PartnerWrapper.sol#86-112) ignores return value by IERC4626(vault).deposit(usdtAmount,address(this)) (src/partners/PartnerWrapper.sol#102) PartnerWrapper.redeem(uint256,address) (src/partners/PartnerWrapper.sol#120-150) ignores return value by IERC4626(vault).redeem(receiptShares,address(this),address(this)) (src/partners/PartnerWrapper.sol#134) PartnerWrapper.recoverDonatedShares(address) (src/partners/PartnerWrapper.sol#163-185) ignores return value by IERC4626(vault).redeem(excess,address(this),address(this)) (src/partners/PartnerWrapper.sol#177) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return Detector: events-maths DeepYieldStrategyAdapter.withdrawToVault(uint256) (src/DeepYieldStrategyAdapter.sol#163-183) should emit an event for: - accountedAssets = 0 (src/DeepYieldStrategyAdapter.sol#179) - accountedAssets -= withdrawn (src/DeepYieldStrategyAdapter.sol#181) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic Detector: calls-loop PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) has external calls inside a loop: vBal = IERC20(vault).balanceOf(W) (src/partners/PartnerAttributedSplitter.sol#122) PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) has external calls inside a loop: receipts = IPartnerWrapper(W).totalReceipts() (src/partners/PartnerAttributedSplitter.sol#123) PartnerAttributedSplitter.recordFee(uint256) (src/partners/PartnerAttributedSplitter.sol#95-144) has external calls inside a loop: pid = IPartnerRegistry(registry).partnerOfWrapper(W) (src/partners/PartnerAttributedSplitter.sol#130) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop Detector: reentrancy-benign Reentrancy in DedicatedVaultMain.closePosition(uint256,uint256,uint256) (src/DedicatedVaultMain.sol#246-253): External calls: - _close(keeper,amount0Min,amount1Min,deadline) (src/DedicatedVaultMain.sol#251) - venue.close(id,amount0Min,amount1Min,deadline) (src/DedicatedVaultMain.sol#330) State variables written after the call(s): - lastKeeperAt = block.timestamp (src/DedicatedVaultMain.sol#252) Reentrancy in DedicatedVaultMain.closePositionAndRealize(uint256,uint256,uint256,uint256,uint256,uint256) (src/DedicatedVaultMain.sol#259-285): External calls: - _close(keeper,amount0Min,amount1Min,closeDeadline) (src/DedicatedVaultMain.sol#264) - venue.close(id,amount0Min,amount1Min,deadline) (src/DedicatedVaultMain.sol#330) State variables written after the call(s): - lastKeeperAt = block.timestamp (src/DedicatedVaultMain.sol#265) Reentrancy in BeefyCLMAdapter.deploy(uint256) (src/BeefyCLMAdapter.sol#157-186): External calls: - beefyClm.deposit(amount0,amount1,0) (src/BeefyCLMAdapter.sol#175-185) State variables written after the call(s): - accountedAssets += assets (src/BeefyCLMAdapter.sol#176) Reentrancy in DedicatedVaultStrategyAdapter.deploy(uint256) (src/DedicatedVaultStrategyAdapter.sol#86-93): External calls: - main.fundFromVault(assets) (src/DedicatedVaultStrategyAdapter.sol#89) State variables written after the call(s): - accountedAssets += assets (src/DedicatedVaultStrategyAdapter.sol#91) Reentrancy in DeepYieldStrategyAdapter.deploy(uint256) (src/DeepYieldStrategyAdapter.sol#143-149): External calls: - underlyingVault.deposit(assets,address(this)) (src/DeepYieldStrategyAdapter.sol#147) State variables written after the call(s): - accountedAssets += assets (src/DeepYieldStrategyAdapter.sol#148) Reentrancy in DedicatedVaultMain.harvest() (src/DedicatedVaultMain.sol#287-293): External calls: - collected = venue.harvest(activePositionId) (src/DedicatedVaultMain.sol#289) State variables written after the call(s): - lastKeeperAt = block.timestamp (src/DedicatedVaultMain.sol#292) Reentrancy in DeepYieldStrategyAdapter.managerWithdrawAll() (src/DeepYieldStrategyAdapter.sol#152-161): External calls: - underlyingVault.redeem(shares,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#155) State variables written after the call(s): - accountedAssets = 0 (src/DeepYieldStrategyAdapter.sol#160) Reentrancy in DedicatedVaultMain.openPosition(DedicatedVaultMain.OpenParams) (src/DedicatedVaultMain.sol#207-244): External calls: - swapperIn.swapAssetToPaired(p.swapAssetIn,p.pairedMinOut,p.deadline) (src/DedicatedVaultMain.sol#221) - id = venue.open(IDedicatedVenue.OpenArgs({assetAmount:assetForMint,pairedAmount:pairedForMint,tickLower:p.tickLower,tickUpper:p.tickUpper,amount0Min:p.amount0Min,amount1Min:p.amount1Min,deadline:p.deadline})) (src/DedicatedVaultMain.sol#233-237) State variables written after the call(s): - lastKeeperAt = block.timestamp (src/DedicatedVaultMain.sol#242) Reentrancy in DeepYieldStrategyAdapter.withdrawToVault(uint256) (src/DeepYieldStrategyAdapter.sol#163-183): External calls: - underlyingVault.withdraw(missing,address(this),address(this)) (src/DeepYieldStrategyAdapter.sol#173) State variables written after the call(s): - accountedAssets = 0 (src/DeepYieldStrategyAdapter.sol#179) - accountedAssets -= withdrawn (src/DeepYieldStrategyAdapter.sol#181) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2 Detector: reentrancy-events Reentrancy in WrapperFactory.deployFirstWrapper(bytes32,address) (src/partners/WrapperFactory.sol#45-67): External calls: - IPartnerRegistry(registry).registerPartner(partnerId,wrapper,payoutTreasury) (src/partners/WrapperFactory.sol#64) Event emitted after the call(s): - FirstWrapperDeployed(partnerId,wrapper,payoutTreasury) (src/partners/WrapperFactory.sol#66) Reentrancy in WrapperFactory.deployReplacementWrapper(bytes32) (src/partners/WrapperFactory.sol#69-93): External calls: - IPartnerRegistry(registry).addReplacementWrapper(partnerId,newWrapper) (src/partners/WrapperFactory.sol#90) Event emitted after the call(s): - ReplacementWrapperDeployed(partnerId,oldCurrent,newWrapper) (src/partners/WrapperFactory.sol#92) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 Detector: timestamp DedicatedVaultMain.closeIfStale() (src/DedicatedVaultMain.sol#320-324) uses timestamp for comparisons Dangerous comparisons: - block.timestamp < lastKeeperAt + staleThreshold (src/DedicatedVaultMain.sol#322) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp Detector: assembly BeefyCLMAdapter.deploy(uint256) (src/BeefyCLMAdapter.sol#157-186) uses assembly - INLINE ASM (src/BeefyCLMAdapter.sol#183) FullMath.mulDiv(uint256,uint256,uint256) (src/libraries/FullMath.sol#5-60) uses assembly - INLINE ASM (src/libraries/FullMath.sol#12-16) - INLINE ASM (src/libraries/FullMath.sol#20-22) - INLINE ASM (src/libraries/FullMath.sol#29-31) - INLINE ASM (src/libraries/FullMath.sol#32-35) - INLINE ASM (src/libraries/FullMath.sol#38-40) - INLINE ASM (src/libraries/FullMath.sol#42-44) - INLINE ASM (src/libraries/FullMath.sol#45-47) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage Detector: cyclomatic-complexity BeefyCLMAdapter.withdrawToVault(uint256) (src/BeefyCLMAdapter.sol#244-297) has a high cyclomatic complexity (13). TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) has a high cyclomatic complexity (24). Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity Detector: low-level-calls Low level call in PancakeSwapV3RouterAdapter._twapSqrtPriceX96() (src/PancakeSwapV3RouterAdapter.sol#261-278): - (ok,ret) = address(pool).staticcall(abi.encodeWithSelector(IPancakeV3Pool.observe.selector,secondsAgos)) (src/PancakeSwapV3RouterAdapter.sol#267-269) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls Detector: naming-convention Function IPartnerRegistry.MAX_ACTIVE_WRAPPERS() (src/interfaces/IPartnerRegistry.sol#178) is not in mixedCase Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions Detector: too-many-digits LiquidityAmounts.slitherConstructorConstantVariables() (src/libraries/LiquidityAmounts.sol#11-48) uses literals with too many digits: - Q96 = 0x1000000000000000000000000 (src/libraries/LiquidityAmounts.sol#12) TickMath.getSqrtRatioAtTick(int24) (src/libraries/TickMath.sol#24-56) uses literals with too many digits: - ratio = 0x100000000000000000000000000000000 (src/libraries/TickMath.sol#28-30) V3PositionValuer.slitherConstructorConstantVariables() (src/libraries/V3PositionValuer.sol#16-52) uses literals with too many digits: - Q96 = 0x1000000000000000000000000 (src/libraries/V3PositionValuer.sol#17) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits Detector: unindexed-event-address Event Pausable.Paused(address) (lib/openzeppelin-contracts/contracts/utils/Pausable.sol#23) has address parameters but no indexed parameters Event Pausable.Unpaused(address) (lib/openzeppelin-contracts/contracts/utils/Pausable.sol#28) has address parameters but no indexed parameters Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters . analyzed (64 contracts with 100 detectors), 125 result(s) found