Metahero Token Logo

HERO [Metahero] Token

About HERO

Listings

Token 2 years
CoinGecko 2 years
CoinMarketCap 2 years
white paper

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.

Social

Laser Scorebeta Last Audit: 19 February 2023

report
Token seems to be legit.

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

Holders:
No disclosed threats


Unable to find Blog account (Reddit or Medium)


Unable to find Discord account


Unable to find audit link on the website

No disclosed threats

Price for HERO

News for HERO