Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
Reentrancy in RDoge._transfer(address,address,uint256) (#498-545):
External calls:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
- _rOwned[address(this)] += rLiquidity (#386)
- _rOwned[address(this)] += rBuyback (#417)
- _rOwned[address(this)] += rDev (#406)
- _rOwned[address(this)] += rMarketing (#396)
- _rOwned[sender] = _rOwned[sender] - s.rAmount (#560)
- _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount (#561)
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
- _rTotal -= rRfi (#375)
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
- _tOwned[address(this)] += tDev (#404)
- _tOwned[address(this)] += tMarketing (#394)
- _tOwned[address(this)] += tLiquidity (#384)
- _tOwned[address(this)] += tBuyback (#415)
- _tOwned[sender] = _tOwned[sender] - tAmount (#554)
- _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount (#557)
Apply the check-effects-interactions pattern.
Additional information: link
RDoge.StopAirDrop(address,address,uint256) (#722-724) ignores return value by IERC20(_tokenAddr).transfer(_to,_amount) (#723)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
RDoge.addLiquidity(uint256,uint256) (#609-622) sends eth to arbitrary user
Dangerous calls:
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
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.
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.
RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - temp.liquidity) (#585)
-bnbToAddLiquidityWith = unitBalance * temp.liquidity (#586)
RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - temp.liquidity) (#585)
-marketingAmt = unitBalance * 2 * temp.marketing (#593)
RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - temp.liquidity) (#585)
-devAmt = unitBalance * 2 * temp.dev (#597)
RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607) performs a multiplication on the result of a division:
-unitBalance = deltaBalance / (denominator - temp.liquidity) (#585)
-buybackAmt = unitBalance * 2 * temp.buyback (#602)
Consider ordering multiplication before division.
Additional information: link
RDoge.addLiquidity(uint256,uint256) (#609-622) ignores return value by router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
Ensure that all the return values of the function calls are used.
Additional information: link
RDoge.allowance(address,address).owner (#261) shadows:
- Ownable.owner() (#56-58) (function)
RDoge._approve(address,address,uint256).owner (#491) shadows:
- Ownable.owner() (#56-58) (function)
Rename the local variables that shadow another component.
Additional information: link
RDoge.updateCooldown(bool,uint256) (#643-646) should emit an event for:
- coolDownTime = time * 1 (#644)
RDoge.updateSwapTokensAtAmount(uint256) (#670-672) should emit an event for:
- swapTokensAtAmount = amount * 10 ** _decimals (#671)
RDoge.updateMaxTxLimit(uint256,uint256) (#689-692) should emit an event for:
- maxBuyLimit = maxBuy * 10 ** decimals() (#690)
- maxSellLimit = maxSell * 10 ** decimals() (#691)
RDoge.updateMaxWalletlimit(uint256) (#694-696) should emit an event for:
- maxWalletLimit = amount * 10 ** decimals() (#695)
Emit an event for critical parameter changes.
Additional information: link
RDoge.constructor(address)._pair (#215-216) lacks a zero-check on :
- pair = _pair (#219)
RDoge.updateCallWallet(address).newWallet (#658) lacks a zero-check on :
- CallWallet = newWallet (#659)
RDoge.updateDevWallet(address).newWallet (#662) lacks a zero-check on :
- devWallet = newWallet (#663)
RDoge.updatebuyBurnAddLiQ(address).newWallet (#666) lacks a zero-check on :
- buyBurnAddLiQ = newWallet (#667)
RDoge.updateRouterAndPair(address,address).newPair (#698) lacks a zero-check on :
- pair = newPair (#700)
Check that the address is not zero.
Additional information: link
RDoge.swapTokensForBNB(uint256) (#624-640) has external calls inside a loop: path[1] = router.WETH() (#628)
RDoge.swapTokensForBNB(uint256) (#624-640) has external calls inside a loop: router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
RDoge.addLiquidity(uint256,uint256) (#609-622) has external calls inside a loop: router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
Address.sendValue(address,uint256) (#106-111) has external calls inside a loop: (success) = recipient.call{value: amount}() (#109)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in RDoge._transfer(address,address,uint256) (#498-545):
External calls:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
State variables written after the call(s):
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
- totFeesPaid.marketing += tMarketing (#390)
- totFeesPaid.buyback += tBuyback (#411)
- totFeesPaid.liquidity += tLiquidity (#380)
- totFeesPaid.dev += tDev (#400)
- totFeesPaid.rfi += tRfi (#376)
Reentrancy in RDoge.constructor(address) (#213-238):
External calls:
- _pair = IFactory(_router.factory()).createPair(address(this),_router.WETH()) (#215-216)
State variables written after the call(s):
- excludeFromReward(pair) (#221)
- _excluded.push(account) (#334)
- excludeFromReward(pair) (#221)
- _isExcluded[account] = true (#333)
- _isExcludedFromFee[address(this)] = true (#224)
- _isExcludedFromFee[owner()] = true (#225)
- _isExcludedFromFee[CallWallet] = true (#226)
- _isExcludedFromFee[devWallet] = true (#227)
- _isExcludedFromFee[buyBurnAddLiQ] = true (#228)
- _rOwned[owner()] = _rTotal (#223)
- excludeFromReward(pair) (#221)
- _tOwned[account] = tokenFromReflection(_rOwned[account]) (#331)
- allowedTransfer[address(this)] = true (#230)
- allowedTransfer[owner()] = true (#231)
- allowedTransfer[pair] = true (#232)
- allowedTransfer[CallWallet] = true (#233)
- allowedTransfer[devWallet] = true (#234)
- allowedTransfer[buyBurnAddLiQ] = true (#235)
- pair = _pair (#219)
- router = _router (#218)
Reentrancy in RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607):
External calls:
- swapTokensForBNB(toSwap) (#582)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
State variables written after the call(s):
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
- _allowances[owner][spender] = amount (#494)
Reentrancy in RDoge.transferFrom(address,address,uint256) (#270-278):
External calls:
- _transfer(sender,recipient,amount) (#271)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
External calls sending eth:
- _transfer(sender,recipient,amount) (#271)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
State variables written after the call(s):
- _approve(sender,_msgSender(),currentAllowance - amount) (#275)
- _allowances[owner][spender] = amount (#494)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in RDoge._transfer(address,address,uint256) (#498-545):
External calls:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
External calls sending eth:
- swapAndLiquify(swapTokensAtAmount,sellTaxes) (#536)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- swapAndLiquify(swapTokensAtAmount,taxes) (#537)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
Event emitted after the call(s):
- Transfer(sender,address(this),s.tLiquidity + s.tMarketing + s.tDev + s.tBuyback) (#566)
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
- Transfer(sender,recipient,s.tTransferAmount) (#571)
- _tokenTransfer(from,to,amount,takeFee,isSell) (#544)
Reentrancy in RDoge.constructor(address) (#213-238):
External calls:
- _pair = IFactory(_router.factory()).createPair(address(this),_router.WETH()) (#215-216)
Event emitted after the call(s):
- Transfer(address(0),owner(),_tTotal) (#237)
Reentrancy in RDoge.swapAndLiquify(uint256,RDoge.Taxes) (#575-607):
External calls:
- swapTokensForBNB(toSwap) (#582)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
External calls sending eth:
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#495)
- addLiquidity(tokensToAddLiquidityWith,bnbToAddLiquidityWith) (#590)
Reentrancy in RDoge.transferFrom(address,address,uint256) (#270-278):
External calls:
- _transfer(sender,recipient,amount) (#271)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp) (#633-639)
- address(CallWallet).sendValue(marketingAmt) (#595)
- address(devWallet).sendValue(devAmt) (#599)
- address(buyBurnAddLiQ).sendValue(buybackAmt) (#604)
External calls sending eth:
- _transfer(sender,recipient,amount) (#271)
- router.addLiquidityETH{value: bnbAmount}(address(this),tokenAmount,0,0,owner(),block.timestamp) (#614-621)
- (success) = recipient.call{value: amount}() (#109)
Event emitted after the call(s):
- Approval(owner,spender,amount) (#495)
- _approve(sender,_msgSender(),currentAllowance - amount) (#275)
Apply the check-effects-interactions pattern.
Additional information: link
RDoge._transfer(address,address,uint256) (#498-545) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(timePassed >= coolDownTime,Cooldown enabled) (#525)
Avoid relying on block.timestamp.
Additional information: link
RDoge.setTradingStatus(bool) (#315-319) compares to a boolean constant:
-state == true && genesis_block == 0 (#318)
Remove the equality to the boolean constant.
Additional information: link
RDoge.includeInReward(address) (#337-348) has costly operations inside a loop:
- _excluded.pop() (#344)
RDoge.lockTheSwap() (#207-211) has costly operations inside a loop:
- swapping = true (#208)
RDoge.lockTheSwap() (#207-211) has costly operations inside a loop:
- swapping = false (#210)
RDoge._reflectRfi(uint256,uint256) (#374-377) has costly operations inside a loop:
- _rTotal -= rRfi (#375)
Use a local variable to hold the loop computation result.
Additional information: link
Context._msgData() (#41-44) is never used and should be removed
Remove unused functions.
Additional information: link
RDoge._rTotal (#151) is set pre-construction with a non-constant function or state variable:
- (MAX - (MAX % _tTotal))
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
Low level call in Address.sendValue(address,uint256) (#106-111):
- (success) = recipient.call{value: amount}() (#109)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IRouter.WETH() (#87) is not in mixedCase
Struct RDoge.valuesFromGetValues (#188-202) is not in CapWords
Parameter RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256)._rfi (#364) is not in mixedCase
Parameter RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256)._marketing (#364) is not in mixedCase
Parameter RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256)._liquidity (#364) is not in mixedCase
Parameter RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256)._dev (#364) is not in mixedCase
Parameter RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256)._buyback (#364) is not in mixedCase
Parameter RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256)._rfi (#369) is not in mixedCase
Parameter RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256)._marketing (#369) is not in mixedCase
Parameter RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256)._liquidity (#369) is not in mixedCase
Parameter RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256)._dev (#369) is not in mixedCase
Parameter RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256)._buyback (#369) is not in mixedCase
Parameter RDoge.updateSwapEnabled(bool)._enabled (#648) is not in mixedCase
Function RDoge.ExTax(address[],bool) (#652-656) is not in mixedCase
Function RDoge.BCheck(address[],bool) (#678-683) is not in mixedCase
Function RDoge.SendtoContract(uint256) (#704-707) is not in mixedCase
Function RDoge.StartSale(address[],uint256) (#710-720) is not in mixedCase
Function RDoge.StopAirDrop(address,address,uint256) (#722-724) is not in mixedCase
Parameter RDoge.StopAirDrop(address,address,uint256)._tokenAddr (#722) is not in mixedCase
Parameter RDoge.StopAirDrop(address,address,uint256)._to (#722) is not in mixedCase
Parameter RDoge.StopAirDrop(address,address,uint256)._amount (#722) is not in mixedCase
Constant RDoge._decimals (#147) is not in UPPER_CASE_WITH_UNDERSCORES
Variable RDoge.genesis_block (#158) is not in mixedCase
Variable RDoge.CallWallet (#160) is not in mixedCase
Constant RDoge._name (#164) is not in UPPER_CASE_WITH_UNDERSCORES
Constant RDoge._symbol (#165) is not in UPPER_CASE_WITH_UNDERSCORES
Follow the Solidity naming convention.
Additional information: link
Redundant expression "this (#42)" inContext (#36-45)
Remove redundant statements if they congest code but offer no value.
Additional information: link
RDoge._tTotal (#150) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (#65-67)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (#69-72)
name() should be declared external:
- RDoge.name() (#241-243)
symbol() should be declared external:
- RDoge.symbol() (#244-246)
totalSupply() should be declared external:
- RDoge.totalSupply() (#252-254)
allowance(address,address) should be declared external:
- RDoge.allowance(address,address) (#261-263)
approve(address,uint256) should be declared external:
- RDoge.approve(address,uint256) (#265-268)
transferFrom(address,address,uint256) should be declared external:
- RDoge.transferFrom(address,address,uint256) (#270-278)
increaseAllowance(address,uint256) should be declared external:
- RDoge.increaseAllowance(address,uint256) (#280-283)
decreaseAllowance(address,uint256) should be declared external:
- RDoge.decreaseAllowance(address,uint256) (#285-291)
transfer(address,uint256) should be declared external:
- RDoge.transfer(address,uint256) (#293-297)
isExcludedFromReward(address) should be declared external:
- RDoge.isExcludedFromReward(address) (#299-301)
reflectionFromToken(uint256,bool) should be declared external:
- RDoge.reflectionFromToken(uint256,bool) (#303-312)
excludeFromFee(address) should be declared external:
- RDoge.excludeFromFee(address) (#351-353)
includeInFee(address) should be declared external:
- RDoge.includeInFee(address) (#355-357)
isExcludedFromFee(address) should be declared external:
- RDoge.isExcludedFromFee(address) (#360-362)
setTaxes(uint256,uint256,uint256,uint256,uint256) should be declared external:
- RDoge.setTaxes(uint256,uint256,uint256,uint256,uint256) (#364-367)
setSellTaxes(uint256,uint256,uint256,uint256,uint256) should be declared external:
- RDoge.setSellTaxes(uint256,uint256,uint256,uint256,uint256) (#369-372)
StartSale(address[],uint256) should be declared external:
- RDoge.StartSale(address[],uint256) (#710-720)
StopAirDrop(address,address,uint256) should be declared external:
- RDoge.StopAirDrop(address,address,uint256) (#722-724)
Use the external attribute for functions never called from the contract.
Additional information: link
Unable to find website, listings and other project-related information
Young tokens have high risks of scam / price dump / death
Token has no active CoinGecko listing / rank
Token has no active CoinMarketCap listing / rank
Unable to find Telegram and Twitter accounts