By combining the power of memes with real utility and charitability, FLOKI gives power and opportunity to the people — to the underdogs — instead of venture capitalists and hedge funds. FLOKI aims to be the most known and most used cryptocurrency in the world.
FLOKI._writeCheckpoint(address,uint32,uint224,uint224) (contracts/Floki.sol#392-408) uses a dangerous strict equality:
- nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].blockNumber == blockNumber (contracts/Floki.sol#400)
Don't use strict equality to determine if an account has enough Ether or tokens.
Additional information: link
Different versions of Solidity are used:
- Version used: ['0.8.11', '^0.8.0']
- ^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3)
- ^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)
- ^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
- 0.8.11 (contracts/Floki.sol#2)
- 0.8.11 (contracts/governance/IGovernanceToken.sol#2)
- 0.8.11 (contracts/tax/ITaxHandler.sol#2)
- 0.8.11 (contracts/treasury/ITreasuryHandler.sol#2)
Use one Solidity version.
Additional information: link
FLOKI.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/Floki.sol#238-258) uses timestamp for comparisons
Dangerous comparisons:
- require(bool,string)(block.timestamp <= expiry,FLOKI:delegateBySig:EXPIRED_SIGNATURE: Received signature has expired.) (contracts/Floki.sol#254)
Avoid relying on block.timestamp.
Additional information: link
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-22) is never used and should be removed
Remove unused functions.
Additional information: link
FLOKI._approve(address,address,uint256).owner (contracts/Floki.sol#417) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#34-36) (function)
FLOKI.allowance(address,address).owner (contracts/Floki.sol#142) shadows:
- Ownable.owner() (@openzeppelin/contracts/access/Ownable.sol#34-36) (function)
Rename the local variables that shadow another component.
Additional information: link
Reentrancy in FLOKI._transfer(address,address,uint256) (contracts/Floki.sol#435-465):
External calls:
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
State variables written after the call(s):
- _balances[from] -= amount (contracts/Floki.sol#450)
- _balances[to] += taxedAmount (contracts/Floki.sol#451)
- _balances[address(treasuryHandler)] += tax (contracts/Floki.sol#455)
Apply the check-effects-interactions pattern.
Additional information: link
Pragma version^0.8.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) allows old versions
Pragma version^0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) allows old versions
Pragma version0.8.11 (contracts/governance/IGovernanceToken.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version0.8.11 (contracts/Floki.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
solc-0.8.11 is not recommended for deployment
Pragma version^0.8.0 (@openzeppelin/contracts/access/Ownable.sol#3) allows old versions
Pragma version0.8.11 (contracts/treasury/ITreasuryHandler.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
Pragma version0.8.11 (contracts/tax/ITaxHandler.sol#2) necessitates a version too recent to be trusted. Consider deploying with 0.6.12/0.7.6/0.8.7
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
Reentrancy in FLOKI.transferFrom(address,address,uint256) (contracts/Floki.sol#169-186):
External calls:
- _transfer(sender,recipient,amount) (contracts/Floki.sol#174)
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
- treasuryHandler.afterTransferHandler(from,to,amount) (contracts/Floki.sol#462)
State variables written after the call(s):
- _approve(sender,_msgSender(),currentAllowance - amount) (contracts/Floki.sol#182)
- _allowances[owner][spender] = amount (contracts/Floki.sol#424)
Reentrancy in FLOKI._transfer(address,address,uint256) (contracts/Floki.sol#435-465):
External calls:
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
State variables written after the call(s):
- _moveDelegates(delegates[from],delegates[to],uint224(taxedAmount)) (contracts/Floki.sol#452)
- checkpoints[delegatee][nCheckpoints - 1].votes = newVotes (contracts/Floki.sol#401)
- checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber,newVotes) (contracts/Floki.sol#403)
- _moveDelegates(delegates[from],delegates[address(treasuryHandler)],uint224(tax)) (contracts/Floki.sol#457)
- checkpoints[delegatee][nCheckpoints - 1].votes = newVotes (contracts/Floki.sol#401)
- checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber,newVotes) (contracts/Floki.sol#403)
- _moveDelegates(delegates[from],delegates[to],uint224(taxedAmount)) (contracts/Floki.sol#452)
- numCheckpoints[delegatee] = nCheckpoints + 1 (contracts/Floki.sol#404)
- _moveDelegates(delegates[from],delegates[address(treasuryHandler)],uint224(tax)) (contracts/Floki.sol#457)
- numCheckpoints[delegatee] = nCheckpoints + 1 (contracts/Floki.sol#404)
Apply the check-effects-interactions pattern.
Additional information: link
renounceOwnership() should be declared external:
- Ownable.renounceOwnership() (@openzeppelin/contracts/access/Ownable.sol#53-55)
getVotesAtBlock(address,uint32) should be declared external:
- FLOKI.getVotesAtBlock(address,uint32) (contracts/Floki.sol#267-306)
transferOwnership(address) should be declared external:
- Ownable.transferOwnership(address) (@openzeppelin/contracts/access/Ownable.sol#61-64)
Use the external attribute for functions never called from the contract.
Additional information: link
Reentrancy in FLOKI._transfer(address,address,uint256) (contracts/Floki.sol#435-465):
External calls:
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
- treasuryHandler.afterTransferHandler(from,to,amount) (contracts/Floki.sol#462)
Event emitted after the call(s):
- Transfer(from,to,taxedAmount) (contracts/Floki.sol#464)
Reentrancy in FLOKI._transfer(address,address,uint256) (contracts/Floki.sol#435-465):
External calls:
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
Event emitted after the call(s):
- DelegateVotesChanged(delegatee,oldVotes,newVotes) (contracts/Floki.sol#407)
- _moveDelegates(delegates[from],delegates[to],uint224(taxedAmount)) (contracts/Floki.sol#452)
- DelegateVotesChanged(delegatee,oldVotes,newVotes) (contracts/Floki.sol#407)
- _moveDelegates(delegates[from],delegates[address(treasuryHandler)],uint224(tax)) (contracts/Floki.sol#457)
- Transfer(from,address(treasuryHandler),tax) (contracts/Floki.sol#459)
Reentrancy in FLOKI.transferFrom(address,address,uint256) (contracts/Floki.sol#169-186):
External calls:
- _transfer(sender,recipient,amount) (contracts/Floki.sol#174)
- treasuryHandler.beforeTransferHandler(from,to,amount) (contracts/Floki.sol#445)
- treasuryHandler.afterTransferHandler(from,to,amount) (contracts/Floki.sol#462)
Event emitted after the call(s):
- Approval(owner,spender,amount) (contracts/Floki.sol#426)
- _approve(sender,_msgSender(),currentAllowance - amount) (contracts/Floki.sol#182)
Apply the check-effects-interactions pattern.
Additional information: link
Token is not listed at Mobula.Finance
Additional information: link
Twitter account link seems to be invalid
Unable to find Youtube account