StrikeX is the native currency of the blockchain powered eco-system developed & deployed by the UK Registered Company StrikeX Technologies Ltd. Their flag ship product, TradeStrike, will utilise the power of tokenisation to offer trading in Stocks, Cryptocurrencies, NFT’s & even Real Estate. Fully compliant, fully collateralised trading, 24/7 – 365 days a year. #ForThePeople.
StrikeX.transferTokens(uint256) (contracts/StrikeX.sol#321-338) sends eth to arbitrary user
Dangerous calls:
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in StrikeX._transfer(address,address,uint256) (contracts/StrikeX.sol#259-296):
External calls:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
External calls sending eth:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- _balances[sender] = senderBalance - amount (contracts/StrikeX.sol#427)
- _balances[recipient] += (amountnew) (contracts/StrikeX.sol#429)
- _balances[address(this)] += (fee) (contracts/StrikeX.sol#432)
Apply the check-effects-interactions pattern.
Additional information: link
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.
Reentrancy in StrikeX._transfer(address,address,uint256) (contracts/StrikeX.sol#259-296):
External calls:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
External calls sending eth:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
Event emitted after the call(s):
- Transfer(sender,address(this),fee) (contracts/StrikeX.sol#433)
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- Transfer(sender,recipient,amountnew) (contracts/StrikeX.sol#436)
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
Reentrancy in StrikeX.constructor() (contracts/StrikeX.sol#64-94):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/StrikeX.sol#79)
Event emitted after the call(s):
- Transfer(address(0),msg.sender,_totalSupply) (contracts/StrikeX.sol#93)
Reentrancy in StrikeX.transferFrom(address,address,uint256) (contracts/StrikeX.sol#201-205):
External calls:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
External calls sending eth:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/StrikeX.sol#314)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (contracts/StrikeX.sol#203)
Reentrancy in StrikeX.transferTokens(uint256) (contracts/StrikeX.sol#321-338):
External calls:
- swapTokensForEth(otherBNBTokens) (contracts/StrikeX.sol#326)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
External calls sending eth:
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/StrikeX.sol#314)
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
Apply the check-effects-interactions pattern.
Additional information: link
StrikeX.addLiqudity(uint256,uint256) (contracts/StrikeX.sol#356-369) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
Ensure that all the return values of the function calls are used.
Additional information: link
StrikeX.allowance(address,address).owner (contracts/StrikeX.sol#171) shadows:
- Ownable.owner() (contracts/Ownable.sol#16-18) (function)
StrikeX._approve(address,address,uint256).owner (contracts/StrikeX.sol#309) shadows:
- Ownable.owner() (contracts/Ownable.sol#16-18) (function)
Rename the local variables that shadow another component.
Additional information: link
StrikeX._setMaxSoldAmount(uint256) (contracts/StrikeX.sol#443-445) should emit an event for:
- _maxSoldAmount = maxvalue (contracts/StrikeX.sol#444)
StrikeX._setMinBalance(uint256) (contracts/StrikeX.sol#451-453) should emit an event for:
- _minBalance = minValue (contracts/StrikeX.sol#452)
Emit an event for critical parameter changes.
Additional information: link
StrikeX.contractBalanceSend(uint256,address)._destAddr (contracts/StrikeX.sol#387) lacks a zero-check on :
- _destAddr.transfer(amount) (contracts/StrikeX.sol#390)
StrikeX._setTeamWalletAddress(address).teamWalletAddr (contracts/StrikeX.sol#467) lacks a zero-check on :
- _teamWallet = address(teamWalletAddr) (contracts/StrikeX.sol#468)
StrikeX._setBuybackWalletAddress(address).buybackWalletAddr (contracts/StrikeX.sol#471) lacks a zero-check on :
- _buybackWallet = address(buybackWalletAddr) (contracts/StrikeX.sol#472)
Check that the address is not zero.
Additional information: link
Reentrancy in StrikeX._transfer(address,address,uint256) (contracts/StrikeX.sol#259-296):
External calls:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
External calls sending eth:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- _taxFee = 300 (contracts/StrikeX.sol#408)
- _taxFee = 0 (contracts/StrikeX.sol#400)
Reentrancy in StrikeX.constructor() (contracts/StrikeX.sol#64-94):
External calls:
- uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/StrikeX.sol#79)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (contracts/StrikeX.sol#88)
- _isExcludedFromFee[address(this)] = true (contracts/StrikeX.sol#89)
- _isExcludedFromFee[_teamWallet] = true (contracts/StrikeX.sol#90)
- _isExcludedFromFee[_buybackWallet] = true (contracts/StrikeX.sol#91)
- uniswapV2Router = _uniswapV2Router (contracts/StrikeX.sol#80)
Reentrancy in StrikeX.transferFrom(address,address,uint256) (contracts/StrikeX.sol#201-205):
External calls:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
External calls sending eth:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (contracts/StrikeX.sol#203)
- _allowances[owner][spender] = amount (contracts/StrikeX.sol#313)
Reentrancy in StrikeX.transferTokens(uint256) (contracts/StrikeX.sol#321-338):
External calls:
- swapTokensForEth(otherBNBTokens) (contracts/StrikeX.sol#326)
- uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/StrikeX.sol#349)
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
External calls sending eth:
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
State variables written after the call(s):
- addLiqudity(liquidityTokens,liquidityCapacity) (contracts/StrikeX.sol#330)
- _allowances[owner][spender] = amount (contracts/StrikeX.sol#313)
Apply the check-effects-interactions pattern.
Additional information: link
StrikeX._transfer(address,address,uint256) (contracts/StrikeX.sol#259-296) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp < _startTime[from] + (86400) (contracts/StrikeX.sol#275)
Avoid relying on block.timestamp.
Additional information: link
Parameter StrikeX.contractBalanceSend(uint256,address)._destAddr (contracts/StrikeX.sol#387) is not in mixedCase
Function StrikeX._setMaxSoldAmount(uint256) (contracts/StrikeX.sol#443-445) is not in mixedCase
Function StrikeX._setMinBalance(uint256) (contracts/StrikeX.sol#451-453) is not in mixedCase
Function StrikeX._setApplyContractFee(bool) (contracts/StrikeX.sol#459-465) is not in mixedCase
Function StrikeX._setTeamWalletAddress(address) (contracts/StrikeX.sol#467-469) is not in mixedCase
Function StrikeX._setBuybackWalletAddress(address) (contracts/StrikeX.sol#471-473) is not in mixedCase
Variable StrikeX._maxSoldAmount (contracts/StrikeX.sol#37) is not in mixedCase
Variable StrikeX._taxFee (contracts/StrikeX.sol#42) is not in mixedCase
Variable StrikeX._minBalance (contracts/StrikeX.sol#43) is not in mixedCase
Variable StrikeX._teamWallet (contracts/StrikeX.sol#46) is not in mixedCase
Variable StrikeX._buybackWallet (contracts/StrikeX.sol#47) is not in mixedCase
Function IUniswapV2Router02.WETH() (contracts/interface/IUniswapV2Router02.sol#15) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Reentrancy in StrikeX._transfer(address,address,uint256) (contracts/StrikeX.sol#259-296):
External calls:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
External calls sending eth:
- transferTokens(strikeBalance) (contracts/StrikeX.sol#285)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- _balances[sender] = senderBalance - amount (contracts/StrikeX.sol#427)
- _balances[recipient] += (amountnew) (contracts/StrikeX.sol#429)
- _balances[address(this)] += (fee) (contracts/StrikeX.sol#432)
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- _taxFee = 300 (contracts/StrikeX.sol#408)
- _taxFee = 0 (contracts/StrikeX.sol#400)
Event emitted after the call(s):
- Transfer(sender,address(this),fee) (contracts/StrikeX.sol#433)
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
- Transfer(sender,recipient,amountnew) (contracts/StrikeX.sol#436)
- _tokenTransfer(from,to,amount,takeFee) (contracts/StrikeX.sol#295)
Reentrancy in StrikeX.transferFrom(address,address,uint256) (contracts/StrikeX.sol#201-205):
External calls:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
External calls sending eth:
- _transfer(sender,recipient,amount) (contracts/StrikeX.sol#202)
- uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/StrikeX.sol#361-368)
- _teamWallet.transfer(teamBNB) (contracts/StrikeX.sol#334)
- _buybackWallet.transfer(buybackBNB) (contracts/StrikeX.sol#337)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (contracts/StrikeX.sol#203)
- _allowances[owner][spender] = amount (contracts/StrikeX.sol#313)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/StrikeX.sol#314)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (contracts/StrikeX.sol#203)
Apply the check-effects-interactions pattern.
Additional information: link
Ownable._previousOwner (contracts/Ownable.sol#7) is never used in StrikeX (contracts/StrikeX.sol#26-477)
StrikeX._blockTime (contracts/StrikeX.sol#35) is never used in StrikeX (contracts/StrikeX.sol#26-477)
Remove unused state variables.
Additional information: link
Ownable._previousOwner (contracts/Ownable.sol#7) should be constant
StrikeX.swapEnabled (contracts/StrikeX.sol#50) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (contracts/Ownable.sol#25-28)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (contracts/Ownable.sol#30-34)
excludeFromFee(address) should be declared external:
- StrikeX.excludeFromFee(address) (contracts/StrikeX.sol#145-147)
includeInFee(address) should be declared external:
- StrikeX.includeInFee(address) (contracts/StrikeX.sol#149-151)
approve(address,uint256) should be declared external:
- StrikeX.approve(address,uint256) (contracts/StrikeX.sol#183-186)
transferFrom(address,address,uint256) should be declared external:
- StrikeX.transferFrom(address,address,uint256) (contracts/StrikeX.sol#201-205)
increaseAllowance(address,uint256) should be declared external:
- StrikeX.increaseAllowance(address,uint256) (contracts/StrikeX.sol#220-223)
decreaseAllowance(address,uint256) should be declared external:
- StrikeX.decreaseAllowance(address,uint256) (contracts/StrikeX.sol#240-243)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find audit link on the website
Unable to find whitepaper link on the website
Unable to find token on CoinHunt
Additional information: link
Unable to find code repository for the project
Young tokens have high risks of scam / price dump / death
Telegram account has relatively few subscribers
Last post in Twitter was more than 30 days ago