Have you ever wanted to ready-player one yourself? Soon you’ll be able to make an ultra-HD scan of yourself and your real-world assets and move everything into the metaverse.
Metahero brings to the market 3D scanning and modeling technology that generates ultra-realistic 3D avatars and virtual items to be used across games, VR, social media, and online fashion. The tech also allows for the creation of NFTs from real-world works of art and collectibles.
We have partnered with the world leader in 3D scanning: Wolf Studio. Their cutting-edge technology was extensively tested and used by big industry names; Most recently, CD Projekt created characters for their hot new release, CyberPunk 2077.
We’re merging this powerful tech with a marketplace and a novel deflationary token-based ecosystem to offer users, gamers, artists, and entrepreneurs direct access to virtual opportunities of the future. Wolf Studios’ genius and next-generation technology coupled with our expertise in building tech startups from the bottom up will make Metahero one of the hottest projects of 2021/2022.
Modifier Lockable.lock() (src/core/access/Lockable.sol#21-29) does not always execute _; or revert
All the paths in a modifier must execute _ or revert.
Additional information: link
MetaheroToken.transferFrom(address,address,uint256).allowance (src/MetaheroToken.sol#472) shadows:
- MetaheroToken.allowance(address,address) (src/MetaheroToken.sol#531-541) (function)
- IERC20.allowance(address,address) (src/core/erc20/IERC20.sol#62-68) (function)
MetaheroToken.allowance(address,address).owner (src/MetaheroToken.sol#532) shadows:
- Owned.owner (src/core/access/Owned.sol#13) (state variable)
MetaheroToken._approve(address,address,uint256).owner (src/MetaheroToken.sol#628) shadows:
- Owned.owner (src/core/access/Owned.sol#13) (state variable)
Rename the local variables that shadow another component.
Additional information: link
Controlled._setController(address) (src/core/access/Controlled.sol#58-78) is never used and should be removed
MetaheroLPM._initialize(address) (src/MetaheroLPM.sol#112-123) is never used and should be removed
Controlled._removeController() (src/core/access/Controlled.sol#80-93) is never used and should be removed
Remove unused functions.
Additional information: link
MetaheroLPM (src/MetaheroLPM.sol#16-134) does not implement functions:
- MetaheroLPM._burnLP(uint256) (src/MetaheroLPM.sol#129-133)
- MetaheroLPM._syncLP() (src/MetaheroLPM.sol#125-127)
- MetaheroLPM.canSyncLP(address,address) (src/MetaheroLPM.sol#98-108)
Implement all unimplemented functions in any contract you intend to use directly (not simply inherit from).
Additional information: link
Reentrancy in MetaheroToken._transferFromExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#944-1029):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#965)
- _updateHoldingBalance(recipient,accountBalances[recipient].add(recipientAmount),summary.totalHolding.add(recipientAmount)) (src/MetaheroToken.sol#996-1000)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
State variables written after the call(s):
- _updateHoldingBalance(recipient,accountBalances[recipient].add(recipientAmount),summary.totalHolding.add(recipientAmount)) (src/MetaheroToken.sol#996-1000)
- accountBalances[holder] = holderBalance (src/MetaheroToken.sol#1174)
- _increaseTotalLP(recipientLPFee) (src/MetaheroToken.sol#1002)
- accountBalances[address(lpm)] = accountBalances[address(lpm)].add(amount) (src/MetaheroToken.sol#1232)
- _increaseTotalLP(recipientLPFee) (src/MetaheroToken.sol#1002)
- summary.totalExcluded = summary.totalExcluded.add(amount) (src/MetaheroToken.sol#1234)
- _updateTotalRewards() (src/MetaheroToken.sol#1024)
- summary.totalRewards = totalRewards (src/MetaheroToken.sol#1255)
Reentrancy in MetaheroToken._transferFromExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#944-1029):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#965)
State variables written after the call(s):
- accountBalances[sender] = accountBalances[sender].sub(amount) (src/MetaheroToken.sol#994)
Reentrancy in MetaheroToken._transferBetweenExcludedAccounts(address,address,uint256) (src/MetaheroToken.sol#1129-1165):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#1150)
State variables written after the call(s):
- accountBalances[sender] = accountBalances[sender].sub(amount) (src/MetaheroToken.sol#1153)
- accountBalances[recipient] = accountBalances[recipient].add(amount) (src/MetaheroToken.sol#1154)
Reentrancy in MetaheroToken._transferBetweenHolderAccounts(address,address,uint256) (src/MetaheroToken.sol#812-942):
External calls:
- _updateHoldingBalances(sender,senderAmount,recipient,recipientAmount,summary.totalHolding.sub(totalFee)) (src/MetaheroToken.sol#894-900)
- dao.syncMembers(holderA,holderABalance,holderB,holderBBalance,totalHolding) (src/MetaheroToken.sol#1200-1206)
State variables written after the call(s):
- _increaseTotalLP(senderLpFee.add(recipientLpFee)) (src/MetaheroToken.sol#902)
- accountBalances[address(lpm)] = accountBalances[address(lpm)].add(amount) (src/MetaheroToken.sol#1232)
- _increaseTotalLP(senderLpFee.add(recipientLpFee)) (src/MetaheroToken.sol#902)
- summary.totalExcluded = summary.totalExcluded.add(amount) (src/MetaheroToken.sol#1234)
- _updateTotalRewards() (src/MetaheroToken.sol#938)
- summary.totalRewards = totalRewards (src/MetaheroToken.sol#1255)
Reentrancy in MetaheroToken._transferToExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#1031-1127):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#1047)
- _updateHoldingBalance(sender,accountBalances[sender].sub(senderAmount),summary.totalHolding.sub(senderAmount)) (src/MetaheroToken.sol#1094-1098)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
State variables written after the call(s):
- _increaseTotalLP(senderLpFee) (src/MetaheroToken.sol#1100)
- accountBalances[address(lpm)] = accountBalances[address(lpm)].add(amount) (src/MetaheroToken.sol#1232)
- _increaseTotalLP(senderLpFee) (src/MetaheroToken.sol#1100)
- summary.totalExcluded = summary.totalExcluded.add(amount) (src/MetaheroToken.sol#1234)
- _updateTotalRewards() (src/MetaheroToken.sol#1122)
- summary.totalRewards = totalRewards (src/MetaheroToken.sol#1255)
Reentrancy in MetaheroToken.initialize(MetaheroToken.Fees,MetaheroToken.Fees,MetaheroToken.Fees,uint256,address,address,uint256,address[]) (src/MetaheroToken.sol#204-263):
External calls:
- _mint(msg.sender,totalSupply_) (src/MetaheroToken.sol#251-254)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
State variables written after the call(s):
- _excludeAccount(excludedAccounts_[index],false,false) (src/MetaheroToken.sol#261)
- excludedAccounts[account].excludeSenderFromFee = excludeSenderFromFee (src/MetaheroToken.sol#607)
- excludedAccounts[account].excludeRecipientFromFee = excludeRecipientFromFee (src/MetaheroToken.sol#608)
- excludedAccounts[account].exists = true (src/MetaheroToken.sol#615)
- excludedAccounts[account].excludeSenderFromFee = excludeSenderFromFee (src/MetaheroToken.sol#616)
- excludedAccounts[account].excludeRecipientFromFee = excludeRecipientFromFee (src/MetaheroToken.sol#617)
Apply the check-effects-interactions pattern.
Additional information: link
MetaheroToken._transferFromExcludedAccount(address,address,uint256).recipientLPFee (src/MetaheroToken.sol#970) is a local variable never initialized
MetaheroToken._transferFromExcludedAccount(address,address,uint256).recipientTotalFee (src/MetaheroToken.sol#968) is a local variable never initialized
MetaheroToken._transferToExcludedAccount(address,address,uint256).senderBurnFee (src/MetaheroToken.sol#1051) is a local variable never initialized
MetaheroToken._transferFromExcludedAccount(address,address,uint256).recipientBurnFee (src/MetaheroToken.sol#969) is a local variable never initialized
MetaheroToken.initialize(MetaheroToken.Fees,MetaheroToken.Fees,MetaheroToken.Fees,uint256,address,address,uint256,address[]).index (src/MetaheroToken.sol#260) is a local variable never initialized
MetaheroToken._transferToExcludedAccount(address,address,uint256).senderLpFee (src/MetaheroToken.sol#1052) is a local variable never initialized
MetaheroToken._transferToExcludedAccount(address,address,uint256).senderTotalFee (src/MetaheroToken.sol#1050) is a local variable never initialized
Initialize all the variables. If a variable is meant to be initialized to zero, explicitly set it to zero to improve code readability.
Additional information: link
Reentrancy in MetaheroToken.transferFrom(address,address,uint256) (src/MetaheroToken.sol#457-486):
External calls:
- _transfer(sender,recipient,amount) (src/MetaheroToken.sol#466-470)
- lpm.syncLP() (src/MetaheroToken.sol#1242)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
- lpm.syncLP() (src/MetaheroToken.sol#1047)
- dao.syncMembers(holderA,holderABalance,holderB,holderBBalance,totalHolding) (src/MetaheroToken.sol#1200-1206)
- lpm.syncLP() (src/MetaheroToken.sol#965)
- lpm.syncLP() (src/MetaheroToken.sol#1150)
- lpm.syncLP() (src/MetaheroToken.sol#1163)
- lpm.syncLP() (src/MetaheroToken.sol#1027)
- lpm.syncLP() (src/MetaheroToken.sol#1125)
State variables written after the call(s):
- _approve(sender,msg.sender,allowance.sub(amount)) (src/MetaheroToken.sol#479-483)
- accountAllowances[owner][spender] = amount (src/MetaheroToken.sol#639)
Reentrancy in MetaheroToken._transferFromExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#944-1029):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#965)
State variables written after the call(s):
- summary.totalSupply = totalSupply_ (src/MetaheroToken.sol#991)
- summary.totalExcluded = summary.totalExcluded.sub(amount) (src/MetaheroToken.sol#992)
Reentrancy in MetaheroToken._transferToExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#1031-1127):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#1047)
State variables written after the call(s):
- accountBalances[recipient] = accountBalances[recipient].add(amount) (src/MetaheroToken.sol#1092)
- summary.totalSupply = totalSupply_ (src/MetaheroToken.sol#1089)
- summary.totalExcluded = summary.totalExcluded.add(amount) (src/MetaheroToken.sol#1090)
Apply the check-effects-interactions pattern.
Additional information: link
Reentrancy in MetaheroToken._mint(address,uint256) (src/MetaheroToken.sol#648-684):
External calls:
- _updateHoldingBalance(recipient,accountBalances[recipient].add(amount),summary.totalHolding.add(amount)) (src/MetaheroToken.sol#672-676)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(address(0),recipient,amount) (src/MetaheroToken.sol#679-683)
Reentrancy in MetaheroToken._transferToExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#1031-1127):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#1047)
- _updateHoldingBalance(sender,accountBalances[sender].sub(senderAmount),summary.totalHolding.sub(senderAmount)) (src/MetaheroToken.sol#1094-1098)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
Event emitted after the call(s):
- TotalRewardsUpdated(totalRewards) (src/MetaheroToken.sol#1257-1259)
- _updateTotalRewards() (src/MetaheroToken.sol#1122)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,address(lpm),senderLpFee) (src/MetaheroToken.sol#1116-1120)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,address(0),senderBurnFee) (src/MetaheroToken.sol#1110-1114)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,recipient,amount) (src/MetaheroToken.sol#1104-1108)
Reentrancy in MetaheroToken._transferBetweenExcludedAccounts(address,address,uint256) (src/MetaheroToken.sol#1129-1165):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#1150)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,recipient,amount) (src/MetaheroToken.sol#1156-1160)
Reentrancy in MetaheroToken._transferFromExcludedAccount(address,address,uint256) (src/MetaheroToken.sol#944-1029):
External calls:
- lpm.syncLP() (src/MetaheroToken.sol#965)
- _updateHoldingBalance(recipient,accountBalances[recipient].add(recipientAmount),summary.totalHolding.add(recipientAmount)) (src/MetaheroToken.sol#996-1000)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
Event emitted after the call(s):
- TotalRewardsUpdated(totalRewards) (src/MetaheroToken.sol#1257-1259)
- _updateTotalRewards() (src/MetaheroToken.sol#1024)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(recipient,address(0),recipientBurnFee) (src/MetaheroToken.sol#1012-1016)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(recipient,address(lpm),recipientLPFee) (src/MetaheroToken.sol#1018-1022)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,recipient,amount) (src/MetaheroToken.sol#1006-1010)
Reentrancy in MetaheroToken._burn(address,uint256) (src/MetaheroToken.sol#686-736):
External calls:
- _updateHoldingBalance(sender,accountBalances[sender].sub(amount),summary.totalHolding.sub(amount)) (src/MetaheroToken.sol#724-728)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,address(0),amount) (src/MetaheroToken.sol#731-735)
Reentrancy in MetaheroToken._transferBetweenHolderAccounts(address,address,uint256) (src/MetaheroToken.sol#812-942):
External calls:
- _updateHoldingBalances(sender,senderAmount,recipient,recipientAmount,summary.totalHolding.sub(totalFee)) (src/MetaheroToken.sol#894-900)
- dao.syncMembers(holderA,holderABalance,holderB,holderBBalance,totalHolding) (src/MetaheroToken.sol#1200-1206)
Event emitted after the call(s):
- TotalRewardsUpdated(totalRewards) (src/MetaheroToken.sol#1257-1259)
- _updateTotalRewards() (src/MetaheroToken.sol#938)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,recipient,amount) (src/MetaheroToken.sol#908-912)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,address(0),senderBurnFee) (src/MetaheroToken.sol#914-918)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(recipient,address(0),recipientBurnFee) (src/MetaheroToken.sol#926-930)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,address(lpm),senderLpFee) (src/MetaheroToken.sol#920-924)
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(recipient,address(lpm),recipientLpFee) (src/MetaheroToken.sol#932-936)
Reentrancy in MetaheroToken.initialize(MetaheroToken.Fees,MetaheroToken.Fees,MetaheroToken.Fees,uint256,address,address,uint256,address[]) (src/MetaheroToken.sol#204-263):
External calls:
- _mint(msg.sender,totalSupply_) (src/MetaheroToken.sol#251-254)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
Event emitted after the call(s):
- AccountExcluded(account,excludeSenderFromFee,excludeRecipientFromFee) (src/MetaheroToken.sol#620-624)
- _excludeAccount(excludedAccounts_[index],false,false) (src/MetaheroToken.sol#261)
Reentrancy in MetaheroToken._transfer(address,address,uint256) (src/MetaheroToken.sol#738-810):
External calls:
- _syncLP() (src/MetaheroToken.sol#756)
- lpm.syncLP() (src/MetaheroToken.sol#1242)
Event emitted after the call(s):
- Transfer(sender,recipient,amount) (src/MetaheroToken.sol#1218-1222)
- _emitTransfer(sender,recipient,0) (src/MetaheroToken.sol#758-762)
Reentrancy in MetaheroToken.transferFrom(address,address,uint256) (src/MetaheroToken.sol#457-486):
External calls:
- _transfer(sender,recipient,amount) (src/MetaheroToken.sol#466-470)
- lpm.syncLP() (src/MetaheroToken.sol#1242)
- dao.syncMember(holder,holderBalance,totalHolding) (src/MetaheroToken.sol#1178-1182)
- lpm.syncLP() (src/MetaheroToken.sol#1047)
- dao.syncMembers(holderA,holderABalance,holderB,holderBBalance,totalHolding) (src/MetaheroToken.sol#1200-1206)
- lpm.syncLP() (src/MetaheroToken.sol#965)
- lpm.syncLP() (src/MetaheroToken.sol#1150)
- lpm.syncLP() (src/MetaheroToken.sol#1163)
- lpm.syncLP() (src/MetaheroToken.sol#1027)
- lpm.syncLP() (src/MetaheroToken.sol#1125)
Event emitted after the call(s):
- Approval(owner,spender,amount) (src/MetaheroToken.sol#641-645)
- _approve(sender,msg.sender,allowance.sub(amount)) (src/MetaheroToken.sol#479-483)
Apply the check-effects-interactions pattern.
Additional information: link
Variable MetaheroToken._updateHoldingBalances(address,uint256,address,uint256,uint256).holderABalance (src/MetaheroToken.sol#1188) is too similar to MetaheroToken._updateHoldingBalances(address,uint256,address,uint256,uint256).holderBBalance (src/MetaheroToken.sol#1190)
Variable IMetaheroDAO.syncMembers(address,uint256,address,uint256,uint256).memberAWeight (src/IMetaheroDAO.sol#35) is too similar to IMetaheroDAO.syncMembers(address,uint256,address,uint256,uint256).memberBWeight (src/IMetaheroDAO.sol#37)
Prevent variables from having similar names.
Additional information: link
Unable to find audit link on the website
Unable to find Blog account (Reddit or Medium)
Unable to find Discord account