Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
BabyFlokimon.tokenSwap() (#603-650) sends eth to arbitrary user
Dangerous calls:
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
Ensure that an arbitrary user cannot withdraw unauthorized funds.
Additional information: link
Reentrancy in BabyFlokimon._transferFrom(address,address,uint256) (#671-714):
External calls:
- tokenSwap() (#698)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
External calls sending eth:
- tokenSwap() (#698)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
State variables written after the call(s):
- _balances[sender] = _balances[sender].sub(amount,Insufficient Balance) (#700)
- _balances[recipient] = _balances[recipient].add(amountReceived) (#704)
- amountReceived = takeFee(sender,recipient,amount) (#701)
- _balances[address(this)] = _balances[address(this)].add(feeAmount) (#535)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.distributeDividend(address) (#284-295) ignores return value by KIBA.transfer(shareholder,amount) (#290)
Use SafeERC20, or ensure that the transfer/transferFrom return value is checked.
Additional information: link
Too many vulnerabilities (Unchecked transfer, Reentrancy vulnerability, etc.). High risk of a scam. DYOR & manual audit are advised.
BabyFlokimon.manualSwap(uint256).tmpSuccess (#598) is written in both
(tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#598)
tmpSuccess = false (#599)
BabyFlokimon.tokenSwap().tmpSuccess (#646) is written in both
(tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
tmpSuccess = false (#647)
Fix or remove the writes.
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.
Reentrancy in DividendDistributor.distributeDividend(address) (#284-295):
External calls:
- KIBA.transfer(shareholder,amount) (#290)
State variables written after the call(s):
- shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount) (#292)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#293)
Reentrancy in DividendDistributor.process(uint256) (#253-277):
External calls:
- distributeDividend(shareholders[currentIndex]) (#269)
- KIBA.transfer(shareholder,amount) (#290)
State variables written after the call(s):
- currentIndex ++ (#274)
Reentrancy in DividendDistributor.setShare(address,uint256) (#217-231):
External calls:
- distributeDividend(shareholder) (#219)
- KIBA.transfer(shareholder,amount) (#290)
State variables written after the call(s):
- shares[shareholder].amount = amount (#229)
- shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount) (#230)
Apply the check-effects-interactions pattern.
Additional information: link
BabyFlokimon.manualSwap(uint256) (#556-601) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#586-593)
BabyFlokimon.tokenSwap() (#603-650) ignores return value by router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
Ensure that all the return values of the function calls are used.
Additional information: link
DividendDistributor.setDistributionCriteria(uint256,uint256) (#212-215) should emit an event for:
- minPeriod = _minPeriod (#213)
- minDistribution = _minDistribution (#214)
BabyFlokimon.seFees(uint256,uint256,uint256,uint256) (#465-472) should emit an event for:
- marketingFee = _marketingFee (#467)
- liquidityFee = _liquidityFee (#468)
- reflectionFee = _reflectionFee (#469)
- sellMulti = _sellMulti (#470)
- totalFee = _marketingFee.add(_liquidityFee).add(_reflectionFee) (#471)
BabyFlokimon.setTokenSwapSettings(bool,uint256) (#474-477) should emit an event for:
- swapThreshold = _amount * (10 ** _decimals) (#476)
BabyFlokimon.setTxLimit(uint256) (#509-511) should emit an event for:
- _maxTxAmount = amount (#510)
Emit an event for critical parameter changes.
Additional information: link
Auth.transferOwnership(address).adr (#94) lacks a zero-check on :
- owner = adr (#95)
BabyFlokimon.constructor(address)._LP (#397) lacks a zero-check on :
- LP = _LP (#416)
BabyFlokimon.setWallets(address,address)._marketingWallet (#452) lacks a zero-check on :
- marketingWallet = _marketingWallet (#453)
BabyFlokimon.setWallets(address,address)._liquidityWallet (#452) lacks a zero-check on :
- liquidityWallet = _liquidityWallet (#454)
Check that the address is not zero.
Additional information: link
DividendDistributor.distributeDividend(address) (#284-295) has external calls inside a loop: KIBA.transfer(shareholder,amount) (#290)
Favor pull over push strategy for external calls.
Additional information: link
Reentrancy in BabyFlokimon._transferFrom(address,address,uint256) (#671-714):
External calls:
- tokenSwap() (#698)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
External calls sending eth:
- tokenSwap() (#698)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
State variables written after the call(s):
- amountReceived = takeFee(sender,recipient,amount) (#701)
- nope[recipient] = true (#550)
Reentrancy in BabyFlokimon.constructor(address) (#397-418):
External calls:
- pair = IDEXFactory(router.factory()).createPair(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c,address(this)) (#399)
State variables written after the call(s):
- LP = _LP (#416)
- _allowances[address(this)][address(router)] = _totalSupply (#400)
- approve(address(router),_totalSupply) (#413)
- _allowances[msg.sender][spender] = amount (#431)
- approve(address(pair),_totalSupply) (#414)
- _allowances[msg.sender][spender] = amount (#431)
- _balances[msg.sender] = _totalSupply (#415)
- distributor = new DividendDistributor(address(router)) (#401)
- distributorAddress = address(distributor) (#402)
- isDividendExempt[pair] = true (#406)
- isDividendExempt[address(this)] = true (#407)
- isDividendExempt[DEAD] = true (#408)
- isFeeExempt[msg.sender] = true (#404)
- isTxLimitExempt[msg.sender] = true (#405)
- liquidityWallet = 0xB632614BE1eC5E66a60A61BaC8aAbA9D6da49073 (#411)
- marketingWallet = 0xB632614BE1eC5E66a60A61BaC8aAbA9D6da49073 (#410)
Reentrancy in DividendDistributor.deposit() (#233-251):
External calls:
- router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(0,path,address(this),block.timestamp) (#240-245)
State variables written after the call(s):
- dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)) (#250)
- totalDividends = totalDividends.add(amount) (#249)
Reentrancy in DividendDistributor.distributeDividend(address) (#284-295):
External calls:
- KIBA.transfer(shareholder,amount) (#290)
State variables written after the call(s):
- shareholderClaims[shareholder] = block.timestamp (#291)
Reentrancy in DividendDistributor.setShare(address,uint256) (#217-231):
External calls:
- distributeDividend(shareholder) (#219)
- KIBA.transfer(shareholder,amount) (#290)
State variables written after the call(s):
- addShareholder(shareholder) (#223)
- shareholderIndexes[shareholder] = shareholders.length (#317)
- removeShareholder(shareholder) (#225)
- shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder] (#323)
- addShareholder(shareholder) (#223)
- shareholders.push(shareholder) (#318)
- removeShareholder(shareholder) (#225)
- shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1] (#322)
- shareholders.pop() (#324)
- totalShares = totalShares.sub(shares[shareholder].amount).add(amount) (#228)
Reentrancy in BabyFlokimon.tokenSwap() (#603-650):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
State variables written after the call(s):
- lastSellTime = block.timestamp (#649)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in BabyFlokimon._transferFrom(address,address,uint256) (#671-714):
External calls:
- tokenSwap() (#698)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
- distributor.setShare(sender,_balances[sender]) (#706)
- distributor.setShare(recipient,_balances[recipient]) (#707)
- distributor.process(distributorGas) (#709)
External calls sending eth:
- tokenSwap() (#698)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
Event emitted after the call(s):
- Transfer(sender,recipient,amountReceived) (#712)
Reentrancy in BabyFlokimon._transferFrom(address,address,uint256) (#671-714):
External calls:
- tokenSwap() (#698)
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
External calls sending eth:
- tokenSwap() (#698)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
Event emitted after the call(s):
- Transfer(sender,address(this),feeAmount) (#536)
- amountReceived = takeFee(sender,recipient,amount) (#701)
Reentrancy in BabyFlokimon.constructor(address) (#397-418):
External calls:
- pair = IDEXFactory(router.factory()).createPair(0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c,address(this)) (#399)
Event emitted after the call(s):
- Approval(msg.sender,spender,amount) (#432)
- approve(address(pair),_totalSupply) (#414)
- Approval(msg.sender,spender,amount) (#432)
- approve(address(router),_totalSupply) (#413)
- Transfer(address(0),msg.sender,_totalSupply) (#417)
Reentrancy in BabyFlokimon.manualSwap(uint256) (#556-601):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#568-574)
- distributor.deposit{value: amountBNBReflection}() (#583)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#586-593)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#583)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#586-593)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify) (#594)
Reentrancy in BabyFlokimon.tokenSwap() (#603-650):
External calls:
- router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap,0,path,address(this),block.timestamp) (#614-620)
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
External calls sending eth:
- distributor.deposit{value: amountBNBReflection}() (#629)
- router.addLiquidityETH{value: amountBNBLiquidity}(address(this),amountToLiquify,0,0,liquidityWallet,block.timestamp) (#633-640)
Event emitted after the call(s):
- AutoLiquify(amountBNBLiquidity,amountToLiquify) (#641)
Apply the check-effects-interactions pattern.
Additional information: link
DividendDistributor.shouldDistribute(address) (#279-282) uses timestamp for comparisons
Dangerous comparisons:
- shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution (#280-281)
BabyFlokimon.shouldTokenSwap() (#517-526) uses timestamp for comparisons
Dangerous comparisons:
- timeToSell = lastSellTime.add(cooldownSeconds) < block.timestamp (#519)
- msg.sender != pair && timeToSell && ! inSwap && swapEnabled && _balances[address(this)] >= swapThreshold (#521-525)
BabyFlokimon.checkFee(address) (#541-553) uses timestamp for comparisons
Dangerous comparisons:
- block.timestamp > launchTime + botTime * 1 (#546)
BabyFlokimon._transferFrom(address,address,uint256) (#671-714) uses timestamp for comparisons
Dangerous comparisons:
- ! authorizations[sender] && ! authorizations[recipient] && block.timestamp > launchTime + activBotTime * 1 && getRekt == false && sender == pair (#693-694)
Avoid relying on block.timestamp.
Additional information: link
BabyFlokimon.setLockTilStartEnabled(bool) (#488-498) compares to a boolean constant:
-lockUsed == false (#489)
BabyFlokimon._transferFrom(address,address,uint256) (#671-714) compares to a boolean constant:
-! authorizations[sender] && ! authorizations[recipient] && block.timestamp > launchTime + activBotTime * 1 && getRekt == false && sender == pair (#693-694)
BabyFlokimon._transferFrom(address,address,uint256) (#671-714) compares to a boolean constant:
-require(bool,string)(lockTilStart != true,Trading not open yet) (#683)
Remove the equality to the boolean constant.
Additional information: link
DividendDistributor.process(uint256) (#253-277) has costly operations inside a loop:
- currentIndex = 0 (#265)
DividendDistributor.distributeDividend(address) (#284-295) has costly operations inside a loop:
- totalDistributed = totalDistributed.add(amount) (#289)
DividendDistributor.process(uint256) (#253-277) has costly operations inside a loop:
- currentIndex ++ (#274)
Use a local variable to hold the loop computation result.
Additional information: link
BabyFlokimon._maxTxAmount (#342) is set pre-construction with a non-constant function or state variable:
- _totalSupply.mul(200).div(1000)
BabyFlokimon._maxWalletToken (#343) is set pre-construction with a non-constant function or state variable:
- _totalSupply.mul(200).div(1000)
BabyFlokimon.totalFee (#362) is set pre-construction with a non-constant function or state variable:
- marketingFee.add(liquidityFee).add(reflectionFee)
BabyFlokimon.swapThreshold (#392) is set pre-construction with a non-constant function or state variable:
- _totalSupply.mul(10).div(10000)
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
Pragma version^0.8.12 (#3) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.12 is not recommended for deployment
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Low level call in BabyFlokimon.manualSwap(uint256) (#556-601):
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#598)
Low level call in BabyFlokimon.tokenSwap() (#603-650):
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Function IDEXRouter.WETH() (#109) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minPeriod (#212) is not in mixedCase
Parameter DividendDistributor.setDistributionCriteria(uint256,uint256)._minDistribution (#212) is not in mixedCase
Variable DividendDistributor._token (#165) is not in mixedCase
Variable DividendDistributor.KIBA (#173) is not in mixedCase
Variable DividendDistributor.WBNB (#174) is not in mixedCase
Parameter BabyFlokimon.setWallets(address,address)._marketingWallet (#452) is not in mixedCase
Parameter BabyFlokimon.setWallets(address,address)._liquidityWallet (#452) is not in mixedCase
Parameter BabyFlokimon.seFees(uint256,uint256,uint256,uint256)._marketingFee (#465) is not in mixedCase
Parameter BabyFlokimon.seFees(uint256,uint256,uint256,uint256)._liquidityFee (#465) is not in mixedCase
Parameter BabyFlokimon.seFees(uint256,uint256,uint256,uint256)._reflectionFee (#466) is not in mixedCase
Parameter BabyFlokimon.seFees(uint256,uint256,uint256,uint256)._sellMulti (#466) is not in mixedCase
Parameter BabyFlokimon.setTokenSwapSettings(bool,uint256)._enabled (#474) is not in mixedCase
Parameter BabyFlokimon.setTokenSwapSettings(bool,uint256)._amount (#474) is not in mixedCase
Parameter BabyFlokimon.setContractCooldown(uint256)._cooldownSeconds (#483) is not in mixedCase
Parameter BabyFlokimon.setLockTilStartEnabled(bool)._enabled (#488) is not in mixedCase
Parameter BabyFlokimon.manualSwap(uint256)._amount (#556) is not in mixedCase
Variable BabyFlokimon.KIBA (#332) is not in mixedCase
Variable BabyFlokimon.DEAD (#333) is not in mixedCase
Variable BabyFlokimon.ZERO (#334) is not in mixedCase
Constant BabyFlokimon._name (#336) is not in UPPER_CASE_WITH_UNDERSCORES
Constant BabyFlokimon._symbol (#337) is not in UPPER_CASE_WITH_UNDERSCORES
Constant BabyFlokimon._decimals (#338) is not in UPPER_CASE_WITH_UNDERSCORES
Variable BabyFlokimon._totalSupply (#340) is not in mixedCase
Variable BabyFlokimon._maxTxAmount (#342) is not in mixedCase
Variable BabyFlokimon._maxWalletToken (#343) is not in mixedCase
Variable BabyFlokimon._balances (#345) is not in mixedCase
Variable BabyFlokimon._allowances (#346) is not in mixedCase
Variable BabyFlokimon.LP (#382) is not in mixedCase
Follow the Solidity naming convention.
Additional information: link
Variable IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountADesired (#114) is too similar to IDEXRouter.addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256).amountBDesired (#115)
Prevent variables from having similar names.
Additional information: link
BabyFlokimon.manualSwap(uint256) (#556-601) uses literals with too many digits:
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#598)
BabyFlokimon.tokenSwap() (#603-650) uses literals with too many digits:
- (tmpSuccess) = address(LP).call{gas: 100000,value: amountBNBMarketing}() (#646)
BabyFlokimon.slitherConstructorVariables() (#329-718) uses literals with too many digits:
- DEAD = 0x000000000000000000000000000000000000dEaD (#333)
BabyFlokimon.slitherConstructorVariables() (#329-718) uses literals with too many digits:
- ZERO = 0x0000000000000000000000000000000000000000 (#334)
BabyFlokimon.slitherConstructorVariables() (#329-718) uses literals with too many digits:
- distributorGas = 500000 (#367)
Use: Ether suffix, Time suffix, or The scientific notation
Additional information: link
BabyFlokimon.KIBA (#332) is never used in BabyFlokimon (#329-718)
BabyFlokimon.ZERO (#334) is never used in BabyFlokimon (#329-718)
Remove unused state variables.
Additional information: link
BabyFlokimon.DEAD (#333) should be constant
BabyFlokimon.KIBA (#332) should be constant
BabyFlokimon.ZERO (#334) should be constant
BabyFlokimon._totalSupply (#340) should be constant
BabyFlokimon.activBotTime (#381) should be constant
BabyFlokimon.botFee (#380) should be constant
BabyFlokimon.botTime (#379) should be constant
BabyFlokimon.distributorGas (#367) should be constant
DividendDistributor.WBNB (#174) should be constant
DividendDistributor.dividendsPerShareAccuracyFactor (#187) should be constant
Add the constant attributes to state variables that never change.
Additional information: link
authorize(address) should be declared external:
- Auth.authorize(address) (#78-80)
unauthorize(address) should be declared external:
- Auth.unauthorize(address) (#82-84)
transferOwnership(address) should be declared external:
- Auth.transferOwnership(address) (#94-98)
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