Rhythm Token Logo

RHYTHM Token

About RHYTHM

Listings

Token 2 years
CoinGecko 2 years
CoinMarketCap 2 years
white paper

Rhythm is the token powering the BeatPlaylist music streaming platform, which boasts a library of over 100 million songs, offering holders in-app rewards, perks, NFTs, and powering the Artist Partner Program.

Laser Scorebeta Last Audit: 30 May 2022

report
Token seems to be (relatively) fine. It still become a scam, but probability is moderate.

Rhythm.addLiquidity(uint256,uint256) (#968-982) sends eth to arbitrary user
Dangerous calls:
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
Ensure that an arbitrary user cannot withdraw unauthorized funds.

Additional information: link

Reentrancy in Rhythm._transfer(address,address,uint256) (#865-904):
External calls:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity) (#804)
- _rOwned[artist()] = _rOwned[artist()].add(rArtistFee) (#814)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1020)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1009)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1010)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1045)
- _rOwned[sender] = _rOwned[sender].sub(rAmount) (#1033)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1034)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1022)
- _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount) (#1047)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _rTotal = _rTotal.sub(rFee) (#754)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _tOwned[artist()] = _tOwned[artist()].add(rArtistFee) (#817)
- _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity) (#806)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1044)
- _tOwned[sender] = _tOwned[sender].sub(tAmount) (#1032)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1021)
- _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount) (#1046)
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.


Contract ownership is not renounced (belongs to a wallet)

Rhythm.slitherConstructorVariables() (#500-1060) uses literals with too many digits:
- _maxTxAmount = 100000000 * 10 ** 9 (#537)
Rhythm.slitherConstructorVariables() (#500-1060) uses literals with too many digits:
- numTokensSellToAddToLiquidity = 10000000 * 10 ** 9 (#538)
Rhythm.slitherConstructorConstantVariables() (#500-1060) uses literals with too many digits:
- _tTotal = 20000000000 * 10 ** 9 (#514)
Use: Ether suffix, Time suffix, or The scientific notation

Additional information: link

Ownable._previousArtistWalletAddress (#406) is never used in Rhythm (#500-1060)
Remove unused state variables.

Additional information: link

Rhythm.includeInReward(address) (#678-689) has costly operations inside a loop:
- _excluded.pop() (#685)
Use a local variable to hold the loop computation result.

Additional information: link

Rhythm.addLiquidity(uint256,uint256) (#968-982) ignores return value by pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
Ensure that all the return values of the function calls are used.

Additional information: link

Rhythm.allowance(address,address).owner (#601) shadows:
- Ownable.owner() (#429-431) (function)
Rhythm._approve(address,address,uint256).owner (#857) shadows:
- Ownable.owner() (#429-431) (function)
Rename the local variables that shadow another component.

Additional information: link

Rhythm._previousReflectionTaxFee (#523) is set pre-construction with a non-constant function or state variable:
- _reflectionTaxFee
Rhythm._previousLiquidityFee (#526) is set pre-construction with a non-constant function or state variable:
- _liquidityFee
Rhythm._previousArtistFee (#529) is set pre-construction with a non-constant function or state variable:
- _artistFee
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

Ownable.unlock() (#491-497) compares to a boolean constant:
-require(bool,string)(_renouncedOwnership == false,Contract cannot be unlocked as the ownership has been renounced) (#492)
Remove the equality to the boolean constant.

Additional information: link

Rhythm.withdrawLeftoverBNBToArtist(address,uint256).recipient (#934) lacks a zero-check on :
- recipient.transfer(amount) (#940)
Check that the address is not zero.

Additional information: link

Reentrancy in Rhythm._transfer(address,address,uint256) (#865-904):
External calls:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _artistFee = _previousArtistFee (#844)
- _artistFee = 0 (#837)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _liquidityFee = _previousLiquidityFee (#843)
- _liquidityFee = 0 (#836)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _previousArtistFee = _artistFee (#833)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _previousLiquidityFee = _liquidityFee (#832)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _previousReflectionTaxFee = _reflectionTaxFee (#831)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _reflectionTaxFee = _previousReflectionTaxFee (#842)
- _reflectionTaxFee = 0 (#835)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- _tFeeTotal = _tFeeTotal.add(tFee) (#755)
Reentrancy in Rhythm.constructor() (#557-568):
External calls:
- setRouterAddress(0x10ED43C718714eb63d5aA57B78B54704E256024E) (#561)
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#741)
State variables written after the call(s):
- _isExcludedFromFee[owner()] = true (#564)
- _isExcludedFromFee[address(this)] = true (#565)
Reentrancy in Rhythm.setRouterAddress(address) (#738-747):
External calls:
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#741)
State variables written after the call(s):
- pancakeswapV2Router = _pancakeswapV2Router (#744)
Reentrancy in Rhythm.swapAndLiquify(uint256) (#906-927):
External calls:
- swapTokensForBNB(half) (#918)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
- addLiquidity(otherHalf,newBalance) (#924)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#924)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
State variables written after the call(s):
- addLiquidity(otherHalf,newBalance) (#924)
- _allowances[owner][spender] = amount (#861)
Reentrancy in Rhythm.transferFrom(address,address,uint256) (#612-616):
External calls:
- _transfer(sender,recipient,amount) (#613)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
External calls sending eth:
- _transfer(sender,recipient,amount) (#613)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
State variables written after the call(s):
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#614)
- _allowances[owner][spender] = amount (#861)
Apply the check-effects-interactions pattern.

Additional information: link

Reentrancy in Rhythm._transfer(address,address,uint256) (#865-904):
External calls:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
External calls sending eth:
- swapAndLiquify(contractTokenBalance) (#891)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
Event emitted after the call(s):
- Transfer(sender,recipient,tTransferAmount) (#1014)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- Transfer(sender,recipient,tTransferAmount) (#1026)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- Transfer(sender,recipient,tTransferAmount) (#1038)
- _tokenTransfer(from,to,amount,takeFee) (#903)
- Transfer(sender,recipient,tTransferAmount) (#1051)
- _tokenTransfer(from,to,amount,takeFee) (#903)
Reentrancy in Rhythm.constructor() (#557-568):
External calls:
- setRouterAddress(0x10ED43C718714eb63d5aA57B78B54704E256024E) (#561)
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#741)
Event emitted after the call(s):
- Transfer(address(0),_msgSender(),_tTotal) (#567)
Reentrancy in Rhythm.setRouterAddress(address) (#738-747):
External calls:
- pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this),_pancakeswapV2Router.WETH()) (#741)
Event emitted after the call(s):
- PancakeSwapRouterUpdate(newRouter) (#746)
Reentrancy in Rhythm.swapAndLiquify(uint256) (#906-927):
External calls:
- swapTokensForBNB(half) (#918)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
- addLiquidity(otherHalf,newBalance) (#924)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
External calls sending eth:
- addLiquidity(otherHalf,newBalance) (#924)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#862)
- addLiquidity(otherHalf,newBalance) (#924)
- SwapAndLiquify(half,newBalance,otherHalf) (#926)
Reentrancy in Rhythm.transferFrom(address,address,uint256) (#612-616):
External calls:
- _transfer(sender,recipient,amount) (#613)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
- pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#959-965)
External calls sending eth:
- _transfer(sender,recipient,amount) (#613)
- pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#973-980)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#862)
- _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub(amount,BEP20: transfer amount exceeds allowance)) (#614)
Apply the check-effects-interactions pattern.

Additional information: link

Ownable.unlock() (#491-497) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(now > _lockTime,Contract is locked) (#494)
Avoid relying on block.timestamp.

Additional information: link

Address.isContract(address) (#270-279) uses assembly
- INLINE ASM (#277)
Address._functionCallWithValue(address,bytes,uint256,string) (#363-384) uses assembly
- INLINE ASM (#376-379)
Do not use evm assembly.

Additional information: link

Address._functionCallWithValue(address,bytes,uint256,string) (#363-384) is never used and should be removed
Address.functionCall(address,bytes) (#323-325) is never used and should be removed
Address.functionCall(address,bytes,string) (#333-335) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256) (#348-350) is never used and should be removed
Address.functionCallWithValue(address,bytes,uint256,string) (#358-361) is never used and should be removed
Address.isContract(address) (#270-279) is never used and should be removed
Address.sendValue(address,uint256) (#297-303) is never used and should be removed
Context._msgData() (#242-245) is never used and should be removed
SafeMath.mod(uint256,uint256) (#215-217) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#231-234) is never used and should be removed
Remove unused functions.

Additional information: link

Low level call in Address.sendValue(address,uint256) (#297-303):
- (success) = recipient.call{value: amount}() (#301)
Low level call in Address._functionCallWithValue(address,bytes,uint256,string) (#363-384):
- (success,returndata) = target.call{value: weiValue}(data) (#367)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence

Additional information: link

Parameter Rhythm.setSwapAndLiquifyEnabled(bool)._enabled (#732) is not in mixedCase
Parameter Rhythm.calculateFee(uint256,uint256)._fee (#823) is not in mixedCase
Parameter Rhythm.calculateFee(uint256,uint256)._amount (#823) is not in mixedCase
Constant Rhythm._tTotal (#514) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Rhythm._name (#518) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Rhythm._symbol (#519) is not in UPPER_CASE_WITH_UNDERSCORES
Constant Rhythm._decimals (#520) is not in UPPER_CASE_WITH_UNDERSCORES
Variable Rhythm._reflectionTaxFee (#522) is not in mixedCase
Variable Rhythm._liquidityFee (#525) is not in mixedCase
Variable Rhythm._artistFee (#528) is not in mixedCase
Variable Rhythm._maxTxAmount (#537) is not in mixedCase
Function IPancakeswapV2Pair.DOMAIN_SEPARATOR() (#1100) is not in mixedCase
Function IPancakeswapV2Pair.PERMIT_TYPEHASH() (#1101) is not in mixedCase
Function IPancakeswapV2Pair.MINIMUM_LIQUIDITY() (#1118) is not in mixedCase
Function IPancakeswapV2Router01.WETH() (#1140) is not in mixedCase
Follow the Solidity naming convention.

Additional information: link

Redundant expression "this (#243)" inContext (#237-246)
Remove redundant statements if they congest code but offer no value.

Additional information: link

Reentrancy in Rhythm.withdrawLeftoverBNBToArtist(address,uint256) (#934-943):
External calls:
- recipient.transfer(amount) (#940)
Event emitted after the call(s):
- WithdrawLeftOverBNB(recipient,amount) (#942)
Apply the check-effects-interactions pattern.

Additional information: link

Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._getRValues(uint256,uint256,uint256,uint256,uint256).rTransferAmount (#778) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._transferFromExcluded(address,address,uint256).tTransferAmount (#1031)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._transferToExcluded(address,address,uint256).tTransferAmount (#1019)
Variable Rhythm._getValues(uint256).rTransferAmount (#761) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm._transferStandard(address,address,uint256).rTransferAmount (#1008) is too similar to Rhythm._transferBothExcluded(address,address,uint256).tTransferAmount (#1043)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm.reflectionFromToken(uint256,bool).rTransferAmount (#655) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm._transferToExcluded(address,address,uint256).rTransferAmount (#1019) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm._transferBothExcluded(address,address,uint256).rTransferAmount (#1043) is too similar to Rhythm._getValues(uint256).tTransferAmount (#760)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._getTValues(uint256).tTransferAmount (#769)
Variable Rhythm._transferFromExcluded(address,address,uint256).rTransferAmount (#1031) is too similar to Rhythm._transferStandard(address,address,uint256).tTransferAmount (#1008)
Variable IPancakeswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#1145) is too similar to IPancakeswapV2Router01.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#1146)
Prevent variables from having similar names.

Additional information: link

Ownable._previousArtistWalletAddress (#406) should be constant
Add the constant attributes to state variables that never change.

Additional information: link

renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#452-456)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#462-466)
setArtistWalletAddress(address) should be declared external:
- Ownable.setArtistWalletAddress(address) (#472-476)
getUnlockTime() should be declared external:
- Ownable.getUnlockTime() (#478-480)
lock(uint256) should be declared external:
- Ownable.lock(uint256) (#483-488)
unlock() should be declared external:
- Ownable.unlock() (#491-497)
name() should be declared external:
- Rhythm.name() (#571-573)
symbol() should be declared external:
- Rhythm.symbol() (#576-578)
decimals() should be declared external:
- Rhythm.decimals() (#580-582)
totalSupply() should be declared external:
- Rhythm.totalSupply() (#585-587)
transfer(address,uint256) should be declared external:
- Rhythm.transfer(address,uint256) (#595-598)
allowance(address,address) should be declared external:
- Rhythm.allowance(address,address) (#601-603)
approve(address,uint256) should be declared external:
- Rhythm.approve(address,uint256) (#606-609)
transferFrom(address,address,uint256) should be declared external:
- Rhythm.transferFrom(address,address,uint256) (#612-616)
increaseAllowance(address,uint256) should be declared external:
- Rhythm.increaseAllowance(address,uint256) (#619-622)
decreaseAllowance(address,uint256) should be declared external:
- Rhythm.decreaseAllowance(address,uint256) (#625-628)
isExcludedFromReward(address) should be declared external:
- Rhythm.isExcludedFromReward(address) (#631-633)
totalFees() should be declared external:
- Rhythm.totalFees() (#636-638)
deliver(uint256) should be declared external:
- Rhythm.deliver(uint256) (#640-647)
reflectionFromToken(uint256,bool) should be declared external:
- Rhythm.reflectionFromToken(uint256,bool) (#649-658)
excludeFromReward(address) should be declared external:
- Rhythm.excludeFromReward(address) (#668-675)
excludeFromFee(address) should be declared external:
- Rhythm.excludeFromFee(address) (#692-694)
includeInFee(address) should be declared external:
- Rhythm.includeInFee(address) (#697-699)
setSwapAndLiquifyEnabled(bool) should be declared external:
- Rhythm.setSwapAndLiquifyEnabled(bool) (#732-735)
isExcludedFromFee(address) should be declared external:
- Rhythm.isExcludedFromFee(address) (#850-852)
getLeftOverContractBNBBalance() should be declared external:
- Rhythm.getLeftOverContractBNBBalance() (#946-948)
Use the external attribute for functions never called from the contract.

Additional information: link

Holders:


Token is deployed only at one blockchain

Contract has 10% buy tax and 9% sell tax.
Taxes are low but contract ownership is not renounced. Token has a high risk of becoming a honeypot.

No disclosed threats


Token is not listed at Mobula.Finance

Additional information: link

No disclosed threats

Price for RHYTHM

News for RHYTHM