RAKcoin

Smart contracts security assessment
final report August 2021
Tariff: Standard
Introduction
The report has been prepared for RAKcoin.
Contracts checked
Procedure
We perform our audit according to the following procedure:
Automated analysis
  • Scanning the project's smart contracts with several publicly available automated Solidity analysis tools
  • Manual verification (reject or confirm) all the issues found by the tools

Manual audit
  • Manually analyze smart contracts for security vulnerabilities
  • Smart contracts' logic check
Privileged roles
RAKcoin
— Include in/remove from reward
— Include in/remove from fee
— Set fees
— Set max transaction amount
— Enable/disable auto liquify
Known vulnerabilities checked
Title
Check result (passed/not passed)
Unencrypted Private Data On-Chain
Code With No Effects
Message call with hardcoded gas amount
Typographical Error
DoS With Block Gas Limit
Presence of unused variables
Incorrect Inheritance Order
Requirement Violation
Weak Sources of Randomness from Chain Attributes
Shadowing State Variables
Incorrect Constructor Name
Block values as a proxy for time
Authorization through tx.origin
DoS with Failed Call
Delegatecall to Untrusted Callee
Use of Deprecated Solidity Functions
Assert Violation
State Variable Default Visibility
Reentrancy
Unprotected SELFDESTRUCT Instruction
Unprotected Ether Withdrawal
Unchecked Call Return Value
Floating Pragma
Outdated Compiler Version
Integer Overflow and Underflow
Function Default Visibility
Classification of issues
High severity
Bugs leading to assets theft, locking or any other loss of assets or leading to contract malfunctioning.

Medium severity
Bugs that can trigger a contract failure of malfunctioning.

Low severity
Bugs that do now affect contract functionality. For example, unoptimized gas usage, outdated or unused code, code style violations, etc.

Issues
High severity issues 
1. Modified OpenZeppelin’s contract
RAKcoin inherits a modified version of OpenZeppelin’s Ownable.sol. It has an additional function to renounce (L455) ownership for a specified amount of time and function to get the ownership back (L463) to the previous owner. We strongly recommend to use unmodified OpenZeppelin’s contracts or to lock for the maximum possible amount of time.
2. No checking new values of fees and maxTxAmount
Owner of the RAKcoin contract can set _taxFee, _liquidityFee and _maxTxAmount to any value. This is dangerous and may break the token.
3. Excluding from reward problem
The owner of the token contract can take part of tokens from users. To do that the owner needs to exclude an account from the reward and include it back later. The owner of the token will take a large amount of tokens from users, if the amount of time between these two operations is big enough.
4. Problem with amount of excluded accounts
If the amount of excluded accounts is big enough, then the amount of gas required for transactions with this token can be large. In an extreme situation the amount of gas for transaction may exceed maximum block gas size and all transfers will be blocked.
Medium severity issues
  1. Lp tokens recipient
Lp tokens that were minted from commission are transferred to the owner. With enough time the owner can collect a large amount of lp tokens which may be dangerous for the community and economics of the token.
2. Dex migration
If Uniswap (PancakeSwap) makes a migration, the token will stay on the previous version of dex, because addresses of the dex router and the dex pair are constant.
3. Non-compliance with the ERC20 standard
As said in ERC20 and BEP20 standards transfer must work well with zero amount. RAKcoin has a problem with this.
4. Adding liquidity from user problem
A transaction with adding liquidity to the pool RAKcoin/WBNB, in which auto liquify proceeds, can fail. This happens because the user’s WBNB can be used for auto liquify and this will break the user's adding liquidity.
Low severity issues
1. Events for onlyOwner functions
In owner functions like excludeFromReward() (L839), includeInReward() (L849), excludeFromFee() (L872), includeInFee() (L876), setTaxFeePercent() (L880), setLiquidityFeePercent() (L884), setMaxTxPercent() (L888) and setSwapAndLiquifyEnabled() (L894) there should be added events.
2. Wrong error message
In function includeInReward() (L849) there is a check if the address is already included. If the user already included it throws wrong error message.
In transfer functions _transferStandard() (L1115), _transferBothExcluded() (L861), _transferToExcluded() (L1124) and _transferFromExcluded() (L1134) there is no appropriate check of sender balance. Because of that error message in case of trying to send more funds than the user has will be “Fail”, which is bad.
3. Сompiler version and floating pragma
Old compiler version is used (v0.6.12+commit.27d51765). We recommend using the latest stable version of the Solidity compiler with fixed pragma in code.
4. Variable visibility
inSwapAndLiquify variable in L716 has no explicit visibility.
Conclusion
RAKcoin contract were audited. 4 high and 4 medium severity issues were found.
Disclaimer
This report is subject to the terms and conditions (including without limitation, description of services, confidentiality, disclaimer and limitation of liability) set forth in the Services Agreement, or the scope of services, and terms and conditions provided to the Company in connection with the Agreement. This report provided in connection with the Services set forth in the Agreement shall be used by the Company only to the extent permitted under the terms and conditions set forth in the Agreement. This report may not be transmitted, disclosed, referred to or relied upon by any person for any purposes without 0xGuard prior written consent.

This report is not, nor should be considered, an “endorsement” or “disapproval” of any particular project or team. This report is not, nor should be considered, an indication of the economics or value of any “product” or “asset” created by any team or project that contracts 0xGuard to perform a security assessment. This report does not provide any warranty or guarantee regarding the absolute bug-free nature of the technology analyzed, nor do they provide any indication of the technologies proprietors, business, business model or legal compliance.

This report should not be used in any way to make decisions around investment or involvement with any particular project. This report in no way provides investment advice, nor should be leveraged as investment advice of any sort. This report represents an extensive assessing process intending to help our customers increase the quality of their code while reducing the high level of risk presented by cryptographic tokens and blockchain technology.

Blockchain technology and cryptographic assets present a high level of ongoing risk. 0xGuard’s position is that each company and individual are responsible for their own due diligence and continuous security. 0xGuard’s goal is to help reduce the attack vectors and the high level of variance associated with utilizing new and consistently changing technologies, and in no way claims any guarantee of security or functionality of the technology we agree to analyze.

Static code analysis result
Number of lines: 916 (+ 572 in dependencies, + 0 in tests)
Number of assembly lines: 0
Number of contracts: 5 (+ 5 in dependencies, + 0 tests)

Number of optimization issues: 26
Number of informational issues: 72
Number of low issues: 10
Number of medium issues: 1
Number of high issues: 1

Use: Openzeppelin-Ownable, Openzeppelin-SafeMath
ERCs: ERC20
INFO:Detectors:
Reentrancy in RAKcoin._transfer(address,address,uint256) (contracts/RAKcoin.sol#395-438):
    External calls:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    External calls sending eth:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    State variables written after the call(s):
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (contracts/RAKcoin.sol#351)
            - _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/RAKcoin.sol#553)
            - _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/RAKcoin.sol#533)
            - _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/RAKcoin.sol#231)
            - _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/RAKcoin.sol#534)
            - _rOwned[sender] = _rOwned[sender].sub(rAmount) (contracts/RAKcoin.sol#575)
            - _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/RAKcoin.sol#555)
            - _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/RAKcoin.sol#576)
            - _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (contracts/RAKcoin.sol#233)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _rTotal = _rTotal.sub(rFee) (contracts/RAKcoin.sol#268)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (contracts/RAKcoin.sol#353)
            - _tOwned[sender] = _tOwned[sender].sub(tAmount) (contracts/RAKcoin.sol#574)
            - _tOwned[sender] = _tOwned[sender].sub(tAmount) (contracts/RAKcoin.sol#230)
            - _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (contracts/RAKcoin.sol#554)
            - _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (contracts/RAKcoin.sol#232)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities
INFO:Detectors:
RAKcoin.addLiquidity(uint256,uint256) (contracts/RAKcoin.sol#481-494) ignores return value by uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return
INFO:Detectors:
RAKcoin.allowance(address,address).owner (contracts/RAKcoin.sol#109) shadows:
    - Ownable.owner() (node_modules/@openzeppelin/contracts/access/Ownable.sol#35-37) (function)
RAKcoin._approve(address,address,uint256).owner (contracts/RAKcoin.sol#384) shadows:
    - Ownable.owner() (node_modules/@openzeppelin/contracts/access/Ownable.sol#35-37) (function)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing
INFO:Detectors:
Reentrancy in RAKcoin._transfer(address,address,uint256) (contracts/RAKcoin.sol#395-438):
    External calls:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    External calls sending eth:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    State variables written after the call(s):
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _liquidityFee = _previousLiquidityFee (contracts/RAKcoin.sol#376)
            - _liquidityFee = 0 (contracts/RAKcoin.sol#371)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _previousLiquidityFee = _liquidityFee (contracts/RAKcoin.sol#368)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _previousTaxFee = _taxFee (contracts/RAKcoin.sol#367)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _tFeeTotal = _tFeeTotal.add(tFee) (contracts/RAKcoin.sol#269)
    - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
            - _taxFee = _previousTaxFee (contracts/RAKcoin.sol#375)
            - _taxFee = 0 (contracts/RAKcoin.sol#370)
Reentrancy in RAKcoin.constructor() (contracts/RAKcoin.sol#61-81):
    External calls:
    - uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/RAKcoin.sol#68-71)
    State variables written after the call(s):
    - _isExcludedFromFee[owner()] = true (contracts/RAKcoin.sol#77)
    - _isExcludedFromFee[address(this)] = true (contracts/RAKcoin.sol#78)
    - uniswapV2Router = _uniswapV2Router (contracts/RAKcoin.sol#74)
Reentrancy in RAKcoin.swapAndLiquify(uint256) (contracts/RAKcoin.sol#440-461):
    External calls:
    - swapTokensForEth(half) (contracts/RAKcoin.sol#452)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    External calls sending eth:
    - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    State variables written after the call(s):
    - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
            - _allowances[owner][spender] = amount (contracts/RAKcoin.sol#391)
Reentrancy in RAKcoin.transferFrom(address,address,uint256) (contracts/RAKcoin.sol#118-133):
    External calls:
    - _transfer(sender,recipient,amount) (contracts/RAKcoin.sol#123)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    External calls sending eth:
    - _transfer(sender,recipient,amount) (contracts/RAKcoin.sol#123)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    State variables written after the call(s):
    - _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (contracts/RAKcoin.sol#124-131)
            - _allowances[owner][spender] = amount (contracts/RAKcoin.sol#391)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2
INFO:Detectors:
Reentrancy in RAKcoin._transfer(address,address,uint256) (contracts/RAKcoin.sol#395-438):
    External calls:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    External calls sending eth:
    - swapAndLiquify(contractTokenBalance) (contracts/RAKcoin.sol#425)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    Event emitted after the call(s):
    - Transfer(sender,recipient,tTransferAmount) (contracts/RAKcoin.sol#537)
            - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
    - Transfer(sender,recipient,tTransferAmount) (contracts/RAKcoin.sol#579)
            - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
    - Transfer(sender,recipient,tTransferAmount) (contracts/RAKcoin.sol#558)
            - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
    - Transfer(sender,recipient,tTransferAmount) (contracts/RAKcoin.sol#236)
            - _tokenTransfer(from,to,amount,takeFee) (contracts/RAKcoin.sol#437)
Reentrancy in RAKcoin.constructor() (contracts/RAKcoin.sol#61-81):
    External calls:
    - uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this),_uniswapV2Router.WETH()) (contracts/RAKcoin.sol#68-71)
    Event emitted after the call(s):
    - Transfer(address(0),_msgSender(),_tTotal) (contracts/RAKcoin.sol#80)
Reentrancy in RAKcoin.swapAndLiquify(uint256) (contracts/RAKcoin.sol#440-461):
    External calls:
    - swapTokensForEth(half) (contracts/RAKcoin.sol#452)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    External calls sending eth:
    - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    Event emitted after the call(s):
    - Approval(owner,spender,amount) (contracts/RAKcoin.sol#392)
            - addLiquidity(otherHalf,newBalance) (contracts/RAKcoin.sol#458)
    - SwapAndLiquify(half,newBalance,otherHalf) (contracts/RAKcoin.sol#460)
Reentrancy in RAKcoin.transferFrom(address,address,uint256) (contracts/RAKcoin.sol#118-133):
    External calls:
    - _transfer(sender,recipient,amount) (contracts/RAKcoin.sol#123)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
            - uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (contracts/RAKcoin.sol#472-478)
    External calls sending eth:
    - _transfer(sender,recipient,amount) (contracts/RAKcoin.sol#123)
            - uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (contracts/RAKcoin.sol#486-493)
    Event emitted after the call(s):
    - Approval(owner,spender,amount) (contracts/RAKcoin.sol#392)
            - _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,ERC20: transfer amount exceeds allowance)) (contracts/RAKcoin.sol#124-131)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3
INFO:Detectors:
Address.isContract(address) (node_modules/@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly
    - INLINE ASM (node_modules/@openzeppelin/contracts/utils/Address.sol#33)
Address._verifyCallResult(bool,bytes,string) (node_modules/@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly
    - INLINE ASM (node_modules/@openzeppelin/contracts/utils/Address.sol#180-183)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage
INFO:Detectors:
Different versions of Solidity is used:
    - Version used: ['>=0.6.0<0.8.0', '>=0.6.2<0.8.0', '^0.6.12']
    - >=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/access/Ownable.sol#3)
    - >=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/math/SafeMath.sol#3)
    - >=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
    - >=0.6.2<0.8.0 (node_modules/@openzeppelin/contracts/utils/Address.sol#3)
    - >=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/utils/Context.sol#3)
    - ^0.6.12 (contracts/RAKcoin.sol#3)
    - ^0.6.12 (contracts/interfaces/IUniswapV2Factory.sol#3)
    - ^0.6.12 (contracts/interfaces/IUniswapV2Pair.sol#3)
    - ^0.6.12 (contracts/interfaces/IUniswapV2Router01.sol#3)
    - ^0.6.12 (contracts/interfaces/IUniswapV2Router02.sol#3)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used
INFO:Detectors:
RAKcoin._rTotal (contracts/RAKcoin.sol#29) is set pre-construction with a non-constant function or state variable:
    - (MAX - (MAX % _tTotal))
RAKcoin._previousTaxFee (contracts/RAKcoin.sol#37) is set pre-construction with a non-constant function or state variable:
    - _taxFee
RAKcoin._previousLiquidityFee (contracts/RAKcoin.sol#40) is set pre-construction with a non-constant function or state variable:
    - _liquidityFee
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#function-initializing-state-variables
INFO:Detectors:
Pragma version>=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/access/Ownable.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/math/SafeMath.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol#3) is too complex
Pragma version>=0.6.2<0.8.0 (node_modules/@openzeppelin/contracts/utils/Address.sol#3) is too complex
Pragma version>=0.6.0<0.8.0 (node_modules/@openzeppelin/contracts/utils/Context.sol#3) is too complex
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
INFO:Detectors:
Low level call in Address.sendValue(address,uint256) (node_modules/@openzeppelin/contracts/utils/Address.sol#53-59):
    - (success) = recipient.call{value: amount}() (node_modules/@openzeppelin/contracts/utils/Address.sol#57)
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (node_modules/@openzeppelin/contracts/utils/Address.sol#114-121):
    - (success,returndata) = target.call{value: value}(data) (node_modules/@openzeppelin/contracts/utils/Address.sol#119)
Low level call in Address.functionStaticCall(address,bytes,string) (node_modules/@openzeppelin/contracts/utils/Address.sol#139-145):
    - (success,returndata) = target.staticcall(data) (node_modules/@openzeppelin/contracts/utils/Address.sol#143)
Low level call in Address.functionDelegateCall(address,bytes,string) (node_modules/@openzeppelin/contracts/utils/Address.sol#163-169):
    - (success,returndata) = target.delegatecall(data) (node_modules/@openzeppelin/contracts/utils/Address.sol#167)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
INFO:Detectors:
Parameter RAKcoin.setSwapAndLiquifyEnabled(bool)._enabled (contracts/RAKcoin.sol#259) is not in mixedCase
Parameter RAKcoin.calculateTaxFee(uint256)._amount (contracts/RAKcoin.sol#356) is not in mixedCase
Parameter RAKcoin.calculateLiquidityFee(uint256)._amount (contracts/RAKcoin.sol#360) is not in mixedCase
Variable RAKcoin._taxFee (contracts/RAKcoin.sol#36) is not in mixedCase
Variable RAKcoin._liquidityFee (contracts/RAKcoin.sol#39) is not in mixedCase
Variable RAKcoin._maxTxAmount (contracts/RAKcoin.sol#48) is not in mixedCase
Function IUniswapV2Pair.DOMAIN_SEPARATOR() (contracts/interfaces/IUniswapV2Pair.sol#31) is not in mixedCase
Function IUniswapV2Pair.PERMIT_TYPEHASH() (contracts/interfaces/IUniswapV2Pair.sol#33) is not in mixedCase
Function IUniswapV2Pair.MINIMUM_LIQUIDITY() (contracts/interfaces/IUniswapV2Pair.sol#59) is not in mixedCase
Function IUniswapV2Router01.WETH() (contracts/interfaces/IUniswapV2Router01.sol#8) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
INFO:Detectors:
Redundant expression "this (node_modules/@openzeppelin/contracts/utils/Context.sol#21)" inContext (node_modules/@openzeppelin/contracts/utils/Context.sol#15-24)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements
INFO:Detectors:
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._transferBothExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#226)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferToExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#547) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._transferStandard(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#529)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._transferFromExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#570)
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._getValues(uint256).rTransferAmount (contracts/RAKcoin.sol#285) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._getValues(uint256).tTransferAmount (contracts/RAKcoin.sol#284)
Variable RAKcoin._transferBothExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#224) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin._transferFromExcluded(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#568) is too similar to RAKcoin._getTValues(uint256).tTransferAmount (contracts/RAKcoin.sol#305)
Variable RAKcoin._transferStandard(address,address,uint256).rTransferAmount (contracts/RAKcoin.sol#527) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin._getRValues(uint256,uint256,uint256,uint256).rTransferAmount (contracts/RAKcoin.sol#326) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable RAKcoin.reflectionFromToken(uint256,bool).rTransferAmount (contracts/RAKcoin.sol#183) is too similar to RAKcoin._transferToExcluded(address,address,uint256).tTransferAmount (contracts/RAKcoin.sol#549)
Variable IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (contracts/interfaces/IUniswapV2Router01.sol#13) is too similar to IUniswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (contracts/interfaces/IUniswapV2Router01.sol#14)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#variable-names-are-too-similar
INFO:Detectors:
RAKcoin.slitherConstructorVariables() (contracts/RAKcoin.sol#14-581) uses literals with too many digits:
    - _tTotal = 1000000000 * 10 ** 6 * 10 ** 9 (contracts/RAKcoin.sol#28)
RAKcoin.slitherConstructorVariables() (contracts/RAKcoin.sol#14-581) uses literals with too many digits:
    - _maxTxAmount = 5000000 * 10 ** 6 * 10 ** 9 (contracts/RAKcoin.sol#48)
RAKcoin.slitherConstructorVariables() (contracts/RAKcoin.sol#14-581) uses literals with too many digits:
    - numTokensSellToAddToLiquidity = 500000 * 10 ** 6 * 10 ** 9 (contracts/RAKcoin.sol#49)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
INFO:Detectors:
RAKcoin._decimals (contracts/RAKcoin.sol#34) should be constant
RAKcoin._name (contracts/RAKcoin.sol#32) should be constant
RAKcoin._symbol (contracts/RAKcoin.sol#33) should be constant
RAKcoin._tTotal (contracts/RAKcoin.sol#28) should be constant
RAKcoin.numTokensSellToAddToLiquidity (contracts/RAKcoin.sol#49) should be constant
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant
INFO:Detectors:
renounceOwnership() should be declared external:
    - Ownable.renounceOwnership() (node_modules/@openzeppelin/contracts/access/Ownable.sol#54-57)
transferOwnership(address) should be declared external:
    - Ownable.transferOwnership(address) (node_modules/@openzeppelin/contracts/access/Ownable.sol#63-67)
name() should be declared external:
    - RAKcoin.name() (contracts/RAKcoin.sol#83-85)
symbol() should be declared external:
    - RAKcoin.symbol() (contracts/RAKcoin.sol#87-89)
decimals() should be declared external:
    - RAKcoin.decimals() (contracts/RAKcoin.sol#91-93)
totalSupply() should be declared external:
    - RAKcoin.totalSupply() (contracts/RAKcoin.sol#95-97)
transfer(address,uint256) should be declared external:
    - RAKcoin.transfer(address,uint256) (contracts/RAKcoin.sol#104-107)
allowance(address,address) should be declared external:
    - RAKcoin.allowance(address,address) (contracts/RAKcoin.sol#109-111)
approve(address,uint256) should be declared external:
    - RAKcoin.approve(address,uint256) (contracts/RAKcoin.sol#113-116)
transferFrom(address,address,uint256) should be declared external:
    - RAKcoin.transferFrom(address,address,uint256) (contracts/RAKcoin.sol#118-133)
increaseAllowance(address,uint256) should be declared external:
    - RAKcoin.increaseAllowance(address,uint256) (contracts/RAKcoin.sol#135-138)
decreaseAllowance(address,uint256) should be declared external:
    - RAKcoin.decreaseAllowance(address,uint256) (contracts/RAKcoin.sol#140-154)
isExcludedFromReward(address) should be declared external:
    - RAKcoin.isExcludedFromReward(address) (contracts/RAKcoin.sol#156-158)
totalFees() should be declared external:
    - RAKcoin.totalFees() (contracts/RAKcoin.sol#160-162)
deliver(uint256) should be declared external:
    - RAKcoin.deliver(uint256) (contracts/RAKcoin.sol#164-171)
reflectionFromToken(uint256,bool) should be declared external:
    - RAKcoin.reflectionFromToken(uint256,bool) (contracts/RAKcoin.sol#173-186)
excludeFromReward(address) should be declared external:
    - RAKcoin.excludeFromReward(address) (contracts/RAKcoin.sol#194-202)
excludeFromFee(address) should be declared external:
    - RAKcoin.excludeFromFee(address) (contracts/RAKcoin.sol#239-241)
includeInFee(address) should be declared external:
    - RAKcoin.includeInFee(address) (contracts/RAKcoin.sol#243-245)
setSwapAndLiquifyEnabled(bool) should be declared external:
    - RAKcoin.setSwapAndLiquifyEnabled(bool) (contracts/RAKcoin.sol#259-262)
isExcludedFromFee(address) should be declared external:
    - RAKcoin.isExcludedFromFee(address) (contracts/RAKcoin.sol#379-381)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external

All rights reserve
Copying and distribution of information on this site is permitted only by agreement of 0xGuard