Sword Battle Game is a Play-to-earn Idle Defense game built on BSC with a sophisticated NFT warriors fighting
Home: https://swordbattlegame.com/
Group chat: https://t.me/swordbattlebsc
SwordBattle.swapTokensForEth(uint256) (#421-444) sends eth to arbitrary user
Dangerous calls:
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in SwordBattle._transfer(address,address,uint256) (#369-419):
External calls:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#431-437)
External calls sending eth:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
State variables written after the call(s):
- _transferStandard(from,to,amount,currentFee) (#418)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#481)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#482)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidityFee) (#464)
- _transferStandard(from,to,amount,currentFee) (#418)
- _rTotal = _rTotal.sub(rFee) (#471)
Apply the check-effects-interactions pattern.
Additional information: link
SwordBattle.withdrawResidualErc20(IERC20,address) (#544-551) ignores return value by token.transfer(to,erc20balance) (#550)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Combination 1: Reentrancy vulnerabilities + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 2: Unchecked transfer + Functions that send Ether to arbitraty destination. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Combination 3: Reentrancy vulnerabilities + Unchecked transfer vulnerability. Usual for scams. May be justified by some complex mechanics (e.g. rebase, reflections). DYOR & manual audit are advised.
Contract ownership is not renounced (belongs to a wallet)
SwordBattle._transferStandard(address,address,uint256,uint256) (#446-468) performs a multiplication on the result of a division:
-tFee = tAmount.mul(currentFee).mul(1).div(1000) (#453)
-rFee = tFee.mul(currentRate) (#459)
SwordBattle._transferStandard(address,address,uint256,uint256) (#446-468) performs a multiplication on the result of a division:
-tLiquidityFee = tAmount.mul(currentFee).mul(9).div(1000) (#454)
-rLiquidityFee = tLiquidityFee.mul(currentRate) (#460)
Consider ordering multiplication before division.
Additional information: link
SwordBattle.allowance(address,address).owner (#276) shadows:
- Ownable.owner() (#118-120) (function)
SwordBattle._approve(address,address,uint256).owner (#359) shadows:
- Ownable.owner() (#118-120) (function)
Rename the local variables that shadow another component.
Additional information: link
Ownable.constructor().msgSender (#113) lacks a zero-check on :
- _owner = msgSender (#114)
SwordBattle.constructor(address,address,address).development (#221) lacks a zero-check on :
- _developmentWallet = development (#225)
SwordBattle.constructor(address,address,address).marketing (#222) lacks a zero-check on :
- _marketingWallet = marketing (#226)
SwordBattle.constructor(address,address,address).router (#223) lacks a zero-check on :
- _routerAddress = router (#228)
SwordBattle.setdevelopmentWallet(address)._address (#323) lacks a zero-check on :
- _developmentWallet = _address (#324)
SwordBattle.setMarketingWallet(address)._address (#327) lacks a zero-check on :
- _marketingWallet = _address (#328)
SwordBattle.withdrawResidualBnb(address).newAddress (#540) lacks a zero-check on :
- address(newAddress).transfer(address(this).balance) (#541)
Check that the address is not zero.
Additional information: link
Reentrancy in SwordBattle._transfer(address,address,uint256) (#369-419):
External calls:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#431-437)
External calls sending eth:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
State variables written after the call(s):
- _transferStandard(from,to,amount,currentFee) (#418)
- _tFeeTotal = _tFeeTotal.add(tFee) (#472)
Reentrancy in SwordBattle.transferFrom(address,address,uint256) (#294-309):
External calls:
- _transfer(sender,recipient,amount) (#299)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#431-437)
External calls sending eth:
- _transfer(sender,recipient,amount) (#299)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#300-307)
- _allowances[owner][spender] = amount (#365)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in SwordBattle._transfer(address,address,uint256) (#369-419):
External calls:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#431-437)
External calls sending eth:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
Event emitted after the call(s):
- DistributedFee(sender,Fee split between all holders!,tFee) (#466)
- _transferStandard(from,to,amount,currentFee) (#418)
- Transfer(sender,recipient,tTransferAmount) (#467)
- _transferStandard(from,to,amount,currentFee) (#418)
Reentrancy in SwordBattle.constructor(address,address,address) (#220-241):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (#238-239)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#240)
Reentrancy in SwordBattle.transferFrom(address,address,uint256) (#294-309):
External calls:
- _transfer(sender,recipient,amount) (#299)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#431-437)
External calls sending eth:
- _transfer(sender,recipient,amount) (#299)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#366)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#300-307)
Apply the check-effects-interactions pattern.
Additional information: link
SwordBattle._previousBuyFee (#195) is set pre-construction with a non-constant function or state variable:
- _buyFee
SwordBattle._previousSellFee (#198) is set pre-construction with a non-constant function or state variable:
- _sellFee
Remove any initialization of state variables via non-constant state variables or function calls. If variables must be set upon contract deployment, locate initialization in the constructor instead.
Additional information: link
Function IUniswapV2Router02.WETH() (#159) is not in mixedCase
Parameter SwordBattle.setIsExcludedFromFee(address,bool)._address (#311) is not in mixedCase
Parameter SwordBattle.setIsExcludedFromFee(address,bool)._isExcluded (#311) is not in mixedCase
Parameter SwordBattle.setdevelopmentWallet(address)._address (#323) is not in mixedCase
Parameter SwordBattle.setMarketingWallet(address)._address (#327) is not in mixedCase
Parameter SwordBattle.setSwapAndLiquifyEnabled(bool)._enabled (#535) is not in mixedCase
Constant SwordBattle._name (#180) is not in UPPER_CASE_WITH_UNDERSCORES
Constant SwordBattle._symbol (#181) is not in UPPER_CASE_WITH_UNDERSCORES
Constant SwordBattle._decimals (#182) is not in UPPER_CASE_WITH_UNDERSCORES
Variable SwordBattle._isExcludedFromFee (#186) is not in mixedCase
Constant SwordBattle._tTotal (#190) is not in UPPER_CASE_WITH_UNDERSCORES
Variable SwordBattle._buyFee (#194) is not in mixedCase
Variable SwordBattle._sellFee (#197) is not in mixedCase
Variable SwordBattle._developmentWallet (#200) is not in mixedCase
Variable SwordBattle._marketingWallet (#201) is not in mixedCase
Variable SwordBattle._routerAddress (#203) is not in mixedCase
Variable SwordBattle._maxTxAmount (#208) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in SwordBattle._transfer(address,address,uint256) (#369-419):
External calls:
- swapTokensForEth(numTokensSellToAddToLiquidity) (#409)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
State variables written after the call(s):
- _transferStandard(from,to,amount,currentFee) (#418)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#481)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#482)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidityFee) (#464)
- _transferStandard(from,to,amount,currentFee) (#418)
- _rTotal = _rTotal.sub(rFee) (#471)
- _transferStandard(from,to,amount,currentFee) (#418)
- _tFeeTotal = _tFeeTotal.add(tFee) (#472)
Event emitted after the call(s):
- DistributedFee(sender,Fee split between all holders!,tFee) (#466)
- _transferStandard(from,to,amount,currentFee) (#418)
- Transfer(sender,recipient,tTransferAmount) (#467)
- _transferStandard(from,to,amount,currentFee) (#418)
Reentrancy in SwordBattle.transferFrom(address,address,uint256) (#294-309):
External calls:
- _transfer(sender,recipient,amount) (#299)
- _developmentWallet.transfer(development) (#442)
- _marketingWallet.transfer(marketing) (#443)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#300-307)
- _allowances[owner][spender] = amount (#365)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#366)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (#300-307)
Apply the check-effects-interactions pattern.
Additional information: link
Variable SwordBattle._transferStandard(address,address,uint256,uint256).rLiquidityFee (#460) is too similar to SwordBattle._transferStandard(address,address,uint256,uint256).tLiquidityFee (#454)
Variable SwordBattle._transferStandard(address,address,uint256,uint256).rTransferAmount (#461) is too similar to SwordBattle._transferStandard(address,address,uint256,uint256).tTransferAmount (#455)
Variable SwordBattle._calculateReflectTransfer(address,address,uint256,uint256).rTransferAmount (#479) is too similar to SwordBattle._transferStandard(address,address,uint256,uint256).tTransferAmount (#455)
Prevent variables from having similar names.
Additional information: link
SwordBattle.slitherConstructorConstantVariables() (#178-553) uses literals with too many digits:
- _tTotal = 10000000 * 10 ** 9 (#190)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
Ownable._previousOwner (#106) is never used in SwordBattle (#178-553)
SwordBattle._tOwned (#184) is never used in SwordBattle (#178-553)
Remove unused state variables.
Additional information: link
Ownable._previousOwner (#106) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#127-130)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#132-139)
name() should be declared external:
- SwordBattle.name() (#243-245)
symbol() should be declared external:
- SwordBattle.symbol() (#247-249)
decimals() should be declared external:
- SwordBattle.decimals() (#251-253)
totalSupply() should be declared external:
- SwordBattle.totalSupply() (#255-257)
humanBalanceOf(address) should be declared external:
- SwordBattle.humanBalanceOf(address) (#263-265)
transfer(address,uint256) should be declared external:
- SwordBattle.transfer(address,uint256) (#267-274)
allowance(address,address) should be declared external:
- SwordBattle.allowance(address,address) (#276-283)
approve(address,uint256) should be declared external:
- SwordBattle.approve(address,uint256) (#285-292)
transferFrom(address,address,uint256) should be declared external:
- SwordBattle.transferFrom(address,address,uint256) (#294-309)
isExcludedFromFee(address) should be declared external:
- SwordBattle.isExcludedFromFee(address) (#318-320)
Use the external attribute for functions never called from the contract.
Additional information: link
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Unable to find token contract audit
Unable to find KYC or doxxing proof
Unable to find audit link on the website
Unable to find token on CoinGecko
Additional information: link
Unable to find token on CoinMarketCap
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Unable to find code repository for the project
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Young tokens have high risks of price dump / death
Young tokens have high risks of price dump / death
Unable to find Youtube account
Unable to find Discord account
Twitter account has few posts