Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add custom errors #27

Merged
merged 3 commits into from
Jul 18, 2024
Merged

add custom errors #27

merged 3 commits into from
Jul 18, 2024

Conversation

YouStillAlive
Copy link
Member

closes #21

Copy link

github-actions bot commented Jul 18, 2024

Methods

Symbol Meaning
Execution gas for this method does not include intrinsic gas overhead
Cost was non-zero but below the precision setting for the currency display (see options)
Min Max Avg Calls usd avg
BNBPartyFactory
       createParty(string,string) 5,645,887 5,827,221 5,772,476 6 3.32
       joinParty(address,uint256) 130,440 251,966 191,203 2 0.11
       leaveParty(address,uint256,uint256) 176,889 190,569 183,729 2 0.11
       setNonfungiblePositionManager(address,address) 27,381 68,882 55,048 3 0.03
       setSwapRouter(address) 24,097 46,237 38,857 3 0.02
NonfungiblePositionManager
       approve(address,uint256) 46,052 46,371 46,285 4 0.03
SwapRouter
       exactInput((bytes,address,uint256,uint256,uint256)) 109,789 119,347 116,161 3 0.07
       multicall(bytes[]) - - 136,478 2 0.08

Deployments

Min Max Avg Block % usd avg
BNBPartyFactory - - 2,545,757 2 % 1.46
MockNonfungibleTokenPositionDescriptor - - 111,537 0.1 % 0.06
NonfungiblePositionManager - - 5,171,524 4 % 2.97
SwapRouter - - 2,201,090 1.7 % 1.26
UniswapV3Factory - - 5,437,109 4.2 % 3.12

Solidity and Network Config

Settings Value
Solidity: version 0.8.24
Solidity: optimized true
Solidity: runs 200
Solidity: viaIR false
Block Limit 130,000,000
L1 Gas Price 1 gwei
Token Price 574.30 usd/bnb
Network BINANCE
Toolchain hardhat

Copy link

github-actions bot commented Jul 18, 2024

Slither report

THIS CHECKLIST IS NOT COMPLETE. Use --show-ignored-findings to show all the results.
Summary

incorrect-equality

Impact: Medium
Confidence: High

function _createFLP(
address _token
) internal returns (address liquidityPool) {
// tokenA < tokenB
(address tokenA, address tokenB) = _token < address(WBNB)
? (_token, address(WBNB))
: (address(WBNB), _token);
uint256 amount0;
uint256 amount1;
if (IERC20(tokenA).balanceOf(address(this)) == party.initialTokenAmount) {
amount0 = party.initialTokenAmount;
} else {
amount1 = party.initialTokenAmount;
}
IERC20(_token).approve(
address(BNBPositionManager),
party.initialTokenAmount
);
liquidityPool = _createLP(
BNBPositionManager,
tokenA,
tokenB,
amount0,
amount1,
party.partyLpFee
);
isParty[liquidityPool] = true;
}

reentrancy-no-eth

Impact: Medium
Confidence: Medium

function _handleLiquidity() internal {
// deacrease liquidity from old pool
IUniswapV3Pool pool = IUniswapV3Pool(msg.sender);
(uint256 amount0, uint256 amount1) = BNBPositionManager
.decreaseLiquidity(
INonfungiblePositionManager.DecreaseLiquidityParams({
tokenId: lpToTokenId[msg.sender],
liquidity: pool.liquidity(),
amount0Min: 0,
amount1Min: 0,
deadline: block.timestamp
})
);
address token0 = pool.token0();
address token1 = pool.token1();
// approve new LP
IERC20(token0).approve(address(positionManager), amount0);
IERC20(token1).approve(address(positionManager), amount1);
// create new Liquidity Pool
_createLP(positionManager, token0, token1, amount0, amount1, party.lpFee);
}

uninitialized-local

Impact: Medium
Confidence: Medium

unused-return

Impact: Medium
Confidence: Medium

function _executeSwap(
address tokenIn,
address tokenOut,
address recipient,
uint256 amountOutMinimum,
uint256 amountIn
) internal notZeroAddress(address(swapRouter)) {
ISwapRouter.ExactInputParams memory params = ISwapRouter
.ExactInputParams({
path: abi.encodePacked(tokenIn, party.partyLpFee, tokenOut),
recipient: recipient,
deadline: block.timestamp,
amountIn: amountIn,
amountOutMinimum: amountOutMinimum
});
swapRouter.exactInput{value: amountIn }(params);
}

function _handleLiquidity() internal {
// deacrease liquidity from old pool
IUniswapV3Pool pool = IUniswapV3Pool(msg.sender);
(uint256 amount0, uint256 amount1) = BNBPositionManager
.decreaseLiquidity(
INonfungiblePositionManager.DecreaseLiquidityParams({
tokenId: lpToTokenId[msg.sender],
liquidity: pool.liquidity(),
amount0Min: 0,
amount1Min: 0,
deadline: block.timestamp
})
);
address token0 = pool.token0();
address token1 = pool.token1();
// approve new LP
IERC20(token0).approve(address(positionManager), amount0);
IERC20(token1).approve(address(positionManager), amount1);
// create new Liquidity Pool
_createLP(positionManager, token0, token1, amount0, amount1, party.lpFee);
}

function _handleLiquidity() internal {
// deacrease liquidity from old pool
IUniswapV3Pool pool = IUniswapV3Pool(msg.sender);
(uint256 amount0, uint256 amount1) = BNBPositionManager
.decreaseLiquidity(
INonfungiblePositionManager.DecreaseLiquidityParams({
tokenId: lpToTokenId[msg.sender],
liquidity: pool.liquidity(),
amount0Min: 0,
amount1Min: 0,
deadline: block.timestamp
})
);
address token0 = pool.token0();
address token1 = pool.token1();
// approve new LP
IERC20(token0).approve(address(positionManager), amount0);
IERC20(token1).approve(address(positionManager), amount1);
// create new Liquidity Pool
_createLP(positionManager, token0, token1, amount0, amount1, party.lpFee);
}

function _createFLP(
address _token
) internal returns (address liquidityPool) {
// tokenA < tokenB
(address tokenA, address tokenB) = _token < address(WBNB)
? (_token, address(WBNB))
: (address(WBNB), _token);
uint256 amount0;
uint256 amount1;
if (IERC20(tokenA).balanceOf(address(this)) == party.initialTokenAmount) {
amount0 = party.initialTokenAmount;
} else {
amount1 = party.initialTokenAmount;
}
IERC20(_token).approve(
address(BNBPositionManager),
party.initialTokenAmount
);
liquidityPool = _createLP(
BNBPositionManager,
tokenA,
tokenB,
amount0,
amount1,
party.partyLpFee
);
isParty[liquidityPool] = true;
}

function _createLP(
INonfungiblePositionManager liquidityManager,
address token0,
address token1,
uint256 amount0,
uint256 amount1,
uint24 fee
) internal returns (address liquidityPool) {
// Create LP
liquidityPool = liquidityManager.createAndInitializePoolIfNecessary(
token0,
token1,
fee,
party.sqrtPriceX96
);
// Mint LP
(lpToTokenId[liquidityPool], , , ) = liquidityManager.mint(
INonfungiblePositionManager.MintParams({
token0: token0,
token1: token1,
fee: fee,
tickLower: party.tickLower,
tickUpper: party.tickUpper,
amount0Desired: amount0,
amount1Desired: amount1,
amount0Min: 0,
amount1Min: 0,
recipient: address(this),
deadline: block.timestamp
})
);
}

shadowing-local

Impact: Low
Confidence: High

string memory symbol,

reentrancy-benign

Impact: Low
Confidence: Medium

function _createFLP(
address _token
) internal returns (address liquidityPool) {
// tokenA < tokenB
(address tokenA, address tokenB) = _token < address(WBNB)
? (_token, address(WBNB))
: (address(WBNB), _token);
uint256 amount0;
uint256 amount1;
if (IERC20(tokenA).balanceOf(address(this)) == party.initialTokenAmount) {
amount0 = party.initialTokenAmount;
} else {
amount1 = party.initialTokenAmount;
}
IERC20(_token).approve(
address(BNBPositionManager),
party.initialTokenAmount
);
liquidityPool = _createLP(
BNBPositionManager,
tokenA,
tokenB,
amount0,
amount1,
party.partyLpFee
);
isParty[liquidityPool] = true;
}

function _createLP(
INonfungiblePositionManager liquidityManager,
address token0,
address token1,
uint256 amount0,
uint256 amount1,
uint24 fee
) internal returns (address liquidityPool) {
// Create LP
liquidityPool = liquidityManager.createAndInitializePoolIfNecessary(
token0,
token1,
fee,
party.sqrtPriceX96
);
// Mint LP
(lpToTokenId[liquidityPool], , , ) = liquidityManager.mint(
INonfungiblePositionManager.MintParams({
token0: token0,
token1: token1,
fee: fee,
tickLower: party.tickLower,
tickUpper: party.tickUpper,
amount0Desired: amount0,
amount1Desired: amount1,
amount0Min: 0,
amount1Min: 0,
recipient: address(this),
deadline: block.timestamp
})
);
}

assembly

Impact: Informational
Confidence: High

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/utils/Address.sol#L146-L158

low-level-calls

Impact: Informational
Confidence: High

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol#L110-L117

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/utils/Address.sol#L95-L98

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/utils/Address.sol#L104-L107

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/utils/Address.sol#L41-L50

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/utils/Address.sol#L83-L89

function _unwrapAndSendBNB(address recipient) internal {
WBNB.withdraw(party.bonusTargetReach);
(bool success, ) = recipient.call{value: party.bonusTargetReach}("");
require(success, "Transfer failed.");
}

naming-convention

Impact: Informational
Confidence: High

IWBNB public immutable WBNB;

INonfungiblePositionManager _BNBPositionManager,

INonfungiblePositionManager public BNBPositionManager; // BNB Party position manager

INonfungiblePositionManager _positionManager

function setSwapRouter(ISwapRouter _swapRouter) external onlyOwner {

function WETH9() external view returns (address);

https://github.com/bnb-party/BNBParty.Factory/blob/fcc51caa87a7d24e4b9cf9f80bb1810264355172/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol#L89

unused-import

Impact: Informational
Confidence: High

  • ID-27
    The following unused import(s) in contracts/BNBPartyInternal.sol should be removed:
    -import "./token/ERC20Token.sol"; (contracts/BNBPartyInternal.sol#4)

@YouStillAlive YouStillAlive linked an issue Jul 18, 2024 that may be closed by this pull request
Base automatically changed from issue-25 to master July 18, 2024 12:22
@YouStillAlive YouStillAlive merged commit 43e2208 into master Jul 18, 2024
4 checks passed
@YouStillAlive YouStillAlive deleted the issue-21 branch July 18, 2024 12:36
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.

add custom errors
1 participant