Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in FEGexPRO.BUY(uint256,address,uint256) (#835-881):
External calls:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pushUnderlying(Token,to,tokenAmountOut) (#876)
- xfer = IERC20(erc20).transfer(to,amount) (#1047)
External calls sending eth:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- sync() (#877)
- _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1 (#1001)
- _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al (#1006)
Reentrancy in FEGexPRO.BUYSmart(uint256,uint256) (#790-833):
External calls:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _balances2[msg.sender] -= tokenAmountIn (#825)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- setTokenBalance() (#905)
- _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1 (#1001)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI) (#933)
- TransferHelper.safeTransferETH(to,bmul(tokAmountI1,bdiv(99,100))) (#934)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _balances2[pairRewardPool] += tokAmountI2 (#936)
- _totalSupply2 += tokAmountI2 (#937)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI) (#933)
- TransferHelper.safeTransferETH(to,bmul(tokAmountI1,bdiv(99,100))) (#934)
- addRebate() (#939)
- wrap(Main).withdraw(_totalSupply8) (#1063)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- setMainBalance() (#940)
- _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al (#1006)
Apply the check-effects-interactions pattern.
Additional information: link
FEGmath.bdiv(uint256,uint256) (#61-72) uses a dangerous strict equality:
- require(bool,string)(a == 0 || c0 / a == 1e18,ERR_DIV_INTERNAL) (#67)
FEGmath.bmul(uint256,uint256) (#49-59) uses a dangerous strict equality:
- require(bool,string)(a == 0 || c0 / a == b,ERR_MUL_OVERFLOW) (#54)
FEGmath.bpow(uint256,uint256) (#90-108) uses a dangerous strict equality:
- remain == 0 (#102)
FEGmath.bpowApprox(uint256,uint256,uint256) (#110-138) uses a dangerous strict equality:
- term == 0 (#126)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
FEGexPRO.swapToSwap(address,address,address,uint256).tokens (#682) is written in both
(tokens,mains) = FEgexPair(path).userBalanceInternal(address(this)) (#682)
tokens = 0 (#684)
Fix or remove the writes.
Additional information: link
Contract ticker (LP Token) contains non-alphanumeric characters.
Not a direct threat, but may indicate unreliable intentions of developer. Non-alphanumeric chars (,.;!#*&") are extremely rare among low risk tokens.
FEGexPRO (#380-1092) should inherit from swap (#227-232)
Inherit from the missing interface or contract.
Additional information: link
FEGexPRO._pullUnderlying(address,address,uint256) (#1037-1042) has external calls inside a loop: xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
FEGexPRO._pushUnderlying(address,address,uint256) (#1044-1049) has external calls inside a loop: xfer = IERC20(erc20).transfer(to,amount) (#1047)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in FEGexPRO.addBothLiquidity(uint256,uint256[]) (#719-748):
External calls:
- payStake() (#744)
- xfer = IERC20(Main).transfer(FEGstake,_totalSupply7) (#1053)
State variables written after the call(s):
- sync() (#745)
- _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1 (#1001)
- _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al (#1006)
- _mint(poolAmountOut) (#746)
- totalSupply = badd(totalSupply,amt) (#309)
Reentrancy in FEGexPRO.addRebate() (#1059-1066):
External calls:
- wrap(Main).withdraw(_totalSupply8) (#1063)
State variables written after the call(s):
- _totalSupply8 = 0 (#1064)
Reentrancy in FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619):
External calls:
- _pullUnderlying(Main,msg.sender,liqmain) (#586)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- _pullUnderlying(Token,msg.sender,liqtoken) (#587)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
State variables written after the call(s):
- live = true (#615)
Reentrancy in FEGexPRO.payStake() (#1051-1057):
External calls:
- xfer = IERC20(Main).transfer(FEGstake,_totalSupply7) (#1053)
State variables written after the call(s):
- _totalSupply7 = 0 (#1055)
Reentrancy in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698):
External calls:
- IERC20(address(Main)).approve(address(path),amt) (#678)
State variables written after the call(s):
- _balances2[msg.sender] -= amt (#680)
Reentrancy in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698):
External calls:
- IERC20(address(Token)).approve(address(path),amt) (#689)
State variables written after the call(s):
- _balances1[msg.sender] -= amt (#691)
Apply the check-effects-interactions pattern.
Additional information: link
FEGexPRO.swapToSwap(address,address,address,uint256).tokens_scope_0 (#693) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698) ignores return value by IERC20(address(Main)).approve(address(path),amt) (#678)
FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698) ignores return value by IERC20(address(Token)).approve(address(path),amt) (#689)
Ensure that all the return values of the function calls are used.
Additional information: link
FEGexPRO.setMaxBuySellRatio(uint256,uint256) (#518-526) should emit an event for:
- MAX_SELL_RATIO = sellmax (#524)
- MAX_BUY_RATIO = buymax (#525)
FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619) should emit an event for:
- spec = ol (#585)
FEGexPRO.withdrawInternal(address,uint256) (#655-671) should emit an event for:
- _totalSupply1 -= amt (#660)
- _totalSupply2 -= amt (#666)
FEGexPRO.setRPF(uint256,uint256) (#1009-1015) should emit an event for:
- RPF = _RPF (#1013)
- PSS = _PSS (#1014)
Emit an event for critical parameter changes.
Additional information: link
FEGexPRO.setPairRewardPool(address)._addy (#543) lacks a zero-check on :
- pairRewardPool = _addy (#545)
FEGexPRO.setCont(address,address,address).ad (#556) lacks a zero-check on :
- _poolOwner = ad (#563)
Check that the address is not zero.
Additional information: link
Variable 'FEGexPRO.swapToSwap(address,address,address,uint256).tokens (#682)' in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698) potentially used before declaration: (tokens,mains) = FEgexPair(path).userBalanceInternal(address(this)) (#693)
Variable 'FEGexPRO.swapToSwap(address,address,address,uint256).mains (#682)' in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698) potentially used before declaration: (tokens,mains) = FEgexPair(path).userBalanceInternal(address(this)) (#693)
Move all variable declarations prior to any usage of the variable, and ensure that reaching a variable declaration does not depend on some conditional if it is used unconditionally.
Additional information: link
Reentrancy in FEGexPRO.BUY(uint256,address,uint256) (#835-881):
External calls:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _totalSupply8 += bmul(oi,bdiv(tx2,100)) (#875)
Reentrancy in FEGexPRO.BUYSmart(uint256,uint256) (#790-833):
External calls:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _balances1[msg.sender] += tokenAmountOut (#827)
- sync() (#830)
- _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1 (#1001)
- _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al (#1006)
- _totalSupply1 += tokenAmountOut (#828)
- _totalSupply2 -= tokenAmountIn (#826)
- _totalSupply8 += bmul(tokenAmountIn,bdiv(1,1000)) (#829)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _balances2[address(this)] = 0 (#930)
- _totalSupply2 -= ox (#929)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI) (#933)
- TransferHelper.safeTransferETH(to,bmul(tokAmountI1,bdiv(99,100))) (#934)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _totalSupply7 += tok (#938)
- _totalSupply8 += bmul(io,bdiv(1,1000)) (#935)
Reentrancy in FEGexPRO.SELLSmart(uint256,uint256) (#945-993):
External calls:
- sendRebate() (#954)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- sendRebate() (#954)
- (success) = to.call{value: value}(new bytes(0)) (#242)
State variables written after the call(s):
- _balances1[msg.sender] -= tai (#983)
- _balances2[msg.sender] += tokAmountI1 (#985)
- _balances2[address(this)] += tokAmountI (#986)
- _balances2[pairRewardPool] += tokAmountI2 (#987)
- sync() (#990)
- _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1 (#1001)
- _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al (#1006)
- _totalSupply1 -= tai (#984)
- _totalSupply2 += (tokAmountI + tokAmountI2 + tokAmountI1) (#988)
- _totalSupply7 += tok (#989)
- _totalSupply8 += bmul(io,bdiv(1,1000)) (#981)
Reentrancy in FEGexPRO.addBothLiquidity(uint256,uint256[]) (#719-748):
External calls:
- payStake() (#744)
- xfer = IERC20(Main).transfer(FEGstake,_totalSupply7) (#1053)
State variables written after the call(s):
- _mint(poolAmountOut) (#746)
- _balance[address(this)] = badd(_balance[address(this)],amt) (#308)
- _push(msg.sender,poolAmountOut) (#747)
- _balance[src] = bsub(_balance[src],amt) (#322)
- _balance[dst] = badd(_balance[dst],amt) (#323)
Reentrancy in FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619):
External calls:
- _pullUnderlying(Main,msg.sender,liqmain) (#586)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- _pullUnderlying(Token,msg.sender,liqtoken) (#587)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
State variables written after the call(s):
- MAX_BUY_RATIO = 300e18 (#589)
- MAX_SELL_RATIO = 5000000000000e9 (#588)
- PSS = 30 (#616)
- _mint(badd(a,b)) (#608)
- _balance[address(this)] = badd(_balance[address(this)],amt) (#308)
- _push(_from,badd(a,b)) (#610)
- _balance[src] = bsub(_balance[src],amt) (#322)
- _balance[dst] = badd(_balance[dst],amt) (#323)
- _records[Token] = Record(_tokens.length,much) (#593-597)
- _records[Main] = Record(_tokens.length,much1) (#599-602)
- _tokens.push(Token) (#604)
- _tokens.push(Main) (#605)
- time.unlockTime = block.timestamp + 31536000 (#614)
- ulock.setLock = true (#613)
- lockedLiquidity = badd(lockedLiquidity,badd(a,b)) (#609)
- _mint(badd(a,b)) (#608)
- totalSupply = badd(totalSupply,amt) (#309)
- tx1 = bmul(100,bdiv(much,liqtoken)) (#617)
- tx2 = bmul(100,bdiv(much1,liqmain)) (#618)
Reentrancy in FEGexPRO.depositInternal(address,uint256) (#632-653):
External calls:
- _pullUnderlying(Token,msg.sender,amt) (#638)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
State variables written after the call(s):
- _balances1[msg.sender] = badd(_balances1[msg.sender],finalAmount) (#642)
- _totalSupply1 = badd(_totalSupply1,finalAmount) (#641)
Reentrancy in FEGexPRO.depositInternal(address,uint256) (#632-653):
External calls:
- _pullUnderlying(Main,msg.sender,amt) (#646)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
State variables written after the call(s):
- _balances2[msg.sender] = badd(_balances2[msg.sender],finalAmount_scope_2) (#650)
- _totalSupply2 = badd(_totalSupply2,finalAmount_scope_2) (#649)
Reentrancy in FEGexPRO.sendRebate() (#783-788):
External calls:
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
State variables written after the call(s):
- totalSentRebates += re (#786)
Reentrancy in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698):
External calls:
- IERC20(address(Main)).approve(address(path),amt) (#678)
State variables written after the call(s):
- _totalSupply2 -= amt (#679)
Reentrancy in FEGexPRO.swapToSwap(address,address,address,uint256) (#673-698):
External calls:
- IERC20(address(Token)).approve(address(path),amt) (#689)
State variables written after the call(s):
- _totalSupply1 -= amt (#690)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in FEGexPRO.BUY(uint256,address,uint256) (#835-881):
External calls:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
Event emitted after the call(s):
- rebate(msg.sender,re) (#787)
- sendRebate() (#854)
Reentrancy in FEGexPRO.BUY(uint256,address,uint256) (#835-881):
External calls:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pushUnderlying(Token,to,tokenAmountOut) (#876)
- xfer = IERC20(erc20).transfer(to,amount) (#1047)
External calls sending eth:
- wrap(Main).deposit{value: msg.value}() (#845)
- sendRebate() (#854)
- (success) = to.call{value: value}(new bytes(0)) (#242)
Event emitted after the call(s):
- LOG_SWAP(msg.sender,Main,Token,msg.value,bmul(tokenAmountOut,bdiv(tx1,100))) (#879)
Reentrancy in FEGexPRO.BUYSmart(uint256,uint256) (#790-833):
External calls:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- sendRebate() (#804)
- (success) = to.call{value: value}(new bytes(0)) (#242)
Event emitted after the call(s):
- LOG_SMARTSWAP(msg.sender,Main,Token,tokenAmountIn,tokenAmountOut) (#824)
Reentrancy in FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943):
External calls:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
- _pullUnderlying(Token,msg.sender,tokenAmountIn) (#904)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI) (#933)
- TransferHelper.safeTransferETH(to,bmul(tokAmountI1,bdiv(99,100))) (#934)
- addRebate() (#939)
- wrap(Main).withdraw(_totalSupply8) (#1063)
External calls sending eth:
- sendRebate() (#900)
- (success) = to.call{value: value}(new bytes(0)) (#242)
Event emitted after the call(s):
- LOG_SWAP(msg.sender,Token,Main,trueamount,bmul(tokAmountI1,bdiv(tx2,100))) (#941)
Reentrancy in FEGexPRO.SELLSmart(uint256,uint256) (#945-993):
External calls:
- sendRebate() (#954)
- (success) = to.call{value: value}(new bytes(0)) (#242)
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
External calls sending eth:
- sendRebate() (#954)
- (success) = to.call{value: value}(new bytes(0)) (#242)
Event emitted after the call(s):
- LOG_SMARTSWAP(msg.sender,Token,Main,tai,tokAmountI1) (#980)
Reentrancy in FEGexPRO.addBothLiquidity(uint256,uint256[]) (#719-748):
External calls:
- payStake() (#744)
- xfer = IERC20(Main).transfer(FEGstake,_totalSupply7) (#1053)
Event emitted after the call(s):
- Transfer(address(0),address(this),amt) (#310)
- _mint(poolAmountOut) (#746)
- Transfer(src,dst,amt) (#324)
- _push(msg.sender,poolAmountOut) (#747)
Reentrancy in FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619):
External calls:
- _pullUnderlying(Main,msg.sender,liqmain) (#586)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
- _pullUnderlying(Token,msg.sender,liqtoken) (#587)
- xfer = IERC20(erc20).transferFrom(from,address(this),amount) (#1040)
Event emitted after the call(s):
- Transfer(address(0),address(this),amt) (#310)
- _mint(badd(a,b)) (#608)
- Transfer(src,dst,amt) (#324)
- _push(_from,badd(a,b)) (#610)
Reentrancy in FEGexPRO.sendRebate() (#783-788):
External calls:
- TransferHelper.safeTransferETH(msg.sender,re) (#785)
Event emitted after the call(s):
- rebate(msg.sender,re) (#787)
Apply the check-effects-interactions pattern.
Additional information: link
FEGexPRO.releaseLiquidity() (#1017-1027) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp >= time.unlockTime,Liquidity is locked, you cannot remove liquidity until after lock time.) (#1025)
Avoid relying on block.timestamp.
Additional information: link
Address.isContract(address) (#249-254) uses assembly
- INLINE ASM (#252)
Address._functionCallWithValue(address,bytes,uint256,string) (#280-296) uses assembly
- INLINE ASM (#288-291)
FEGexPRO.isContract(address) (#495-502) uses assembly
- INLINE ASM (#500)
Do not use evm assembly.
Additional information: link
FEGexPRO.setLockLiquidity() (#566-577) compares to a boolean constant:
-require(bool,string)(loc == false,Liquidity already locked) (#570)
FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619) compares to a boolean constant:
-require(bool,string)(live == false,Can only use once) (#582)
FEGexPRO.depositInternal(address,uint256) (#632-653) compares to a boolean constant:
-require(bool,string)(open == true,Swap not opened) (#634)
FEGexPRO.transfer(address,uint256) (#700-705) compares to a boolean constant:
-require(bool,string)(loc == false,Liquidity is locked, you cannot remove liquidity until after lock time.) (#702)
FEGexPRO.transferFrom(address,address,uint256) (#707-717) compares to a boolean constant:
-require(bool,string)(loc == false,Liquidity is locked, you cannot remove liquidity until after lock time.) (#710)
FEGexPRO.addBothLiquidity(uint256,uint256[]) (#719-748) compares to a boolean constant:
-loc == true (#730)
FEGexPRO.removeBothLiquidity(uint256,uint256[]) (#750-781) compares to a boolean constant:
-require(bool,string)(loc == false,Liquidity is locked, you cannot remove liquidity until after lock time.) (#755)
FEGexPRO.BUY(uint256,address,uint256) (#835-881) compares to a boolean constant:
-Address.isContract(msg.sender) == true (#846)
FEGexPRO.BUY(uint256,address,uint256) (#835-881) compares to a boolean constant:
-require(bool,string)(open == true,Swap not opened) (#844)
FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943) compares to a boolean constant:
-require(bool,string)(open == true,Swap not opened) (#893)
FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943) compares to a boolean constant:
-Address.isContract(msg.sender) == true (#894)
FEGexPRO.releaseLiquidity() (#1017-1027) compares to a boolean constant:
-require(bool,string)(loc == true,Liquidity not locked) (#1020)
FEGexPRO.initializeMigrate(address) (#1029-1035) compares to a boolean constant:
-require(bool,string)(loc == true,Liquidity not locked) (#1032)
FEGexPRO.noContract() (#513-516) compares to a boolean constant:
-require(bool,string)(isContract(msg.sender) == false,Unapproved contracts are not allowed to interact with the swap) (#514)
Remove the equality to the boolean constant.
Additional information: link
Address._functionCallWithValue(address,bytes,uint256,string) (#280-296) is never used and should be removed
Address.functionCall(address,bytes) (#263-265) is never used and should be removed
Address.functionCall(address,bytes,string) (#267-269) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#271-273) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#275-278) is never used and should be removed
Address.sendValue(address,uint256) (#256-261) is never used and should be removed
FEGexPRO.isContract(address) (#495-502) is never used and should be removed
TransferHelper.safeTransferFrom(address,address,address,uint256) (#236-239) is never used and should be removed
Remove unused functions.
Additional information: link
Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (#236-239):
- (success,data) = token.call(abi.encodeWithSelector(0x23b872dd,from,to,value)) (#237)
Low level call in TransferHelper.safeTransferETH(address,uint256) (#241-244):
- (success) = to.call{value: value}(new bytes(0)) (#242)
Low level call in Address.sendValue(address,uint256) (#256-261):
- (success) = recipient.call{value: amount}() (#259)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#280-296):
- (success,returndata) = target.call{value: weiValue}(data) (#283)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Contract wrap (#221-225) is not in CapWords
Contract swap (#227-232) is not in CapWords
Function swap.BUY(uint256,address,uint256) (#231) is not in mixedCase
Variable LPTokenBase._balance (#301) is not in mixedCase
Variable LPTokenBase._allowance (#302) is not in mixedCase
Struct FEGexPRO.userLock (#387-390) is not in CapWords
Event FEGexPROLOG_SWAP(address,address,address,uint256,uint256) (#396-402) is not in CapWords
Event FEGexPROLOG_JOIN(address,address,uint256,uint256) (#404-409) is not in CapWords
Event FEGexPROLOG_EXIT(address,address,uint256,uint256) (#411-416) is not in CapWords
Event FEGexPROLOG_SMARTSWAP(address,address,address,uint256,uint256) (#418-424) is not in CapWords
Event FEGexPROLOG_CALL(bytes4,address,bytes) (#426-430) is not in CapWords
Event FEGexPROrebate(address,uint256) (#472) is not in CapWords
Parameter FEGexPRO.userBalanceInternal(address)._addr (#489) is not in mixedCase
Parameter FEGexPRO.addWhiteListContract(address,bool)._addy (#504) is not in mixedCase
Function FEGexPRO.IsWhiteListContract(address) (#509-511) is not in mixedCase
Parameter FEGexPRO.IsWhiteListContract(address)._addy (#509) is not in mixedCase
Parameter FEGexPRO.setBonus(address)._bonus (#533) is not in mixedCase
Parameter FEGexPRO.setStakePool(address)._stake (#538) is not in mixedCase
Parameter FEGexPRO.setPairRewardPool(address)._addy (#543) is not in mixedCase
Function FEGexPRO.BUYSmart(uint256,uint256) (#790-833) is not in mixedCase
Function FEGexPRO.BUY(uint256,address,uint256) (#835-881) is not in mixedCase
Function FEGexPRO.SELL(uint256,address,uint256,uint256) (#883-943) is not in mixedCase
Function FEGexPRO.SELLSmart(uint256,uint256) (#945-993) is not in mixedCase
Parameter FEGexPRO.setRPF(uint256,uint256)._PSS (#1009) is not in mixedCase
Parameter FEGexPRO.setRPF(uint256,uint256)._RPF (#1009) is not in mixedCase
Variable FEGexPRO.FEG (#440) is not in mixedCase
Variable FEGexPRO._poolOwner (#441) is not in mixedCase
Variable FEGexPRO.Main (#442) is not in mixedCase
Variable FEGexPRO.Token (#443) is not in mixedCase
Variable FEGexPRO.FEGstake (#445) is not in mixedCase
Variable FEGexPRO.Bonus (#446) is not in mixedCase
Variable FEGexPRO.MAX_BUY_RATIO (#447) is not in mixedCase
Variable FEGexPRO.MAX_SELL_RATIO (#448) is not in mixedCase
Variable FEGexPRO.PSS (#449) is not in mixedCase
Variable FEGexPRO.RPF (#450) is not in mixedCase
Variable FEGexPRO._totalSupply1 (#452) is not in mixedCase
Variable FEGexPRO._totalSupply2 (#453) is not in mixedCase
Variable FEGexPRO._totalSupply7 (#454) is not in mixedCase
Variable FEGexPRO._totalSupply8 (#455) is not in mixedCase
Variable FEGexPRO._unlockTime (#462) is not in mixedCase
Modifier FEGexPRO._logs_() (#432-435) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable FEGexPRO._totalSupply1 (#452) is too similar to FEGexPRO._totalSupply2 (#453)
Variable FEGexPRO._totalSupply1 (#452) is too similar to FEGexPRO._totalSupply7 (#454)
Variable FEGexPRO._totalSupply1 (#452) is too similar to FEGexPRO._totalSupply8 (#455)
Variable FEGexPRO._totalSupply2 (#453) is too similar to FEGexPRO._totalSupply7 (#454)
Variable FEGexPRO._totalSupply2 (#453) is too similar to FEGexPRO._totalSupply8 (#455)
Variable FEGexPRO._totalSupply7 (#454) is too similar to FEGexPRO._totalSupply8 (#455)
Variable FEGexPRO.SELLSmart(uint256,uint256).tokAmountI1 (#979) is too similar to FEGexPRO.SELL(uint256,address,uint256,uint256).tokAmountI2 (#924)
Variable FEGexPRO.SELL(uint256,address,uint256,uint256).tokAmountI1 (#926) is too similar to FEGexPRO.SELL(uint256,address,uint256,uint256).tokAmountI2 (#924)
Variable FEGexPRO.SELLSmart(uint256,uint256).tokAmountI1 (#979) is too similar to FEGexPRO.SELLSmart(uint256,uint256).tokAmountI2 (#977)
Variable FEGexPRO.SELL(uint256,address,uint256,uint256).tokAmountI1 (#926) is too similar to FEGexPRO.SELLSmart(uint256,uint256).tokAmountI2 (#977)
Prevent variables from having similar names.
Additional information: link
FEGexPRO.deploySwap(uint256,uint256,uint256) (#579-619) uses literals with too many digits:
- MAX_SELL_RATIO = 5000000000000e9 (#588)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
FEGexPRO.FEG (#440) should be constant
FEGexPRO.Main (#442) should be constant
FEGexPRO.Token (#443) should be constant
LPToken.decimals (#340) should be constant
LPToken.name (#338) should be constant
LPToken.symbol (#339) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
calcInGivenOut(uint256,uint256,uint256,uint256,uint256,uint256) should be declared external:
- FMath.calcInGivenOut(uint256,uint256,uint256,uint256,uint256,uint256) (#184-206)
userBalanceInternal(address) should be declared external:
- FEGexPRO.userBalanceInternal(address) (#489-493)
addWhiteListContract(address,bool) should be declared external:
- FEGexPRO.addWhiteListContract(address,bool) (#504-507)
setMaxBuySellRatio(uint256,uint256) should be declared external:
- FEGexPRO.setMaxBuySellRatio(uint256,uint256) (#518-526)
openit() should be declared external:
- FEGexPRO.openit() (#528-531)
setBonus(address) should be declared external:
- FEGexPRO.setBonus(address) (#533-536)
setStakePool(address) should be declared external:
- FEGexPRO.setStakePool(address) (#538-541)
setPairRewardPool(address) should be declared external:
- FEGexPRO.setPairRewardPool(address) (#543-546)
setLockLiquidity() should be declared external:
- FEGexPRO.setLockLiquidity() (#566-577)
getSpotPrice(address,address) should be declared external:
- FEGexPRO.getSpotPrice(address,address) (#621-630)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Unable to find Telegram and Twitter accounts