MetaworldPad - Smart Contract Audit Report
Audit Summary
MetaworldPad ($MWP) is a new BEP-20 token on the Binance Smart chain that features automatic liquidity adds and pays holders dividends in BSC-USD.
We reviewed the MetaworldPad and DividendDistributor contracts at 0x8F5547bc87205c953c724d7fE748EF0ca34F81F0 on the Binance Smart Chain mainnet.
Audit Findings
Please ensure trust in the team prior to investing as they have notable control in the ecosystem.
Date: February 8th, 2022.
Contracts Overview
Ownership Controls:
- The total supply of the token is set to 1 trillion $MWP [1,000,000,000,000].
- No mint or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address if desired.
- At the time of writing this report, 100% of the total supply belongs to the team's Marketing wallet.
- The team must manually enable trading in order for trading to take place on the platform. Only accounts that have been whitelisted by the owner can trade when trading is set to disabled. Once trading is enabled, it can never be disabled.
- There is a tax fee on all buy and sell trades with Pancakeswap or any other approved DEX where neither the sender nor the recipient is excluded from fees.
- The tax fee is also charged when buying tokens from any approved CEX set by the owner. The tax fee is not charged when selling to a CEX.
- A separate fee percentage is applied on all other transfers that do not involve an approved DEX or CEX.
- The fees charged on transfers are stored in the contract and once the threshold number of tokens (determined by the owner) is met, a swap will occur for the purpose of funding Pancakeswap liquidity.
- Liquidity-adds are funded by selling a portion of the tokens collected as fees (after the threshold number of tokens is met), then pairing the received BNB with the token, and adding it as liquidity to the BNB pair.
- The LP tokens received through this process are sent to the contract address.
- The tokens collected from the Charity Fee are swapped for BNB and sent to the team's Buyback wallet.
- The tokens collected from the Marketing Fee are swapped for BNB and sent to the team's Marketing wallet.
- The tokens collected from the Reflection Fee are swapped for BNB and sent to the Distributor contract where they are swapped for BSC-USD and distributed as rewards.
- As the contract is deployed with Solidity v0.8.10, it is protected from overflows/underflows.
- The contract complies with the BEP-20 standard.
- Any user that holds the minimum number of $MWP tokens (determined by the owner) is eligible to claim dividends once the amount of dividends they are due reaches the minimum threshold value (also determined by the owner).
- Once dividends are distributed, they will need to be claimed; claiming happens automatically on each transfer.
- Dividend rewards can also be claimed manually by kicking off the claim cycle, which will process all eligible token holders.
- Alternatively, a user can manually claim dividends as an individual.
- There is a wait-time (set by the owner) between claiming dividend rewards.
- Claimed dividends are sent to the user's wallet address.
- The owner can set total fees when buying from a DEX (or CEX) up to 30%, when selling to a DEX up to 35%, and on all other transfers up to 15%.
- The owner can set the percentage of the fees allocated to any fund (Reflection, Liquidity, Buyback, and Marketing) to any percentages at any time.
- The owner can exclude any address from transfer fees and dividends at any time.
- The owner can update the threshold number of tokens that triggers the token swapping functionality to any value at any time.
- The owner can disable the automatic swapping functionality at any time.
- The owner can manually trigger the swapping functionality at any time.
- The owner can update the minimum number of $MWP tokens a user must hold to be eligible for dividends to any value up to 100 million tokens.
- The owner can update the wait time between claiming dividends to any value up to 1 week.
- The owner can update the minimum threshold value of dividends that must be due to a user in order to claim to any value less than 1 ether.
- The owner can update the maximum amount of gas used for processing to a value between 100,000 and 500,000 at any time.
- The owner can withdraw any BNB or tokens (except for $MWP) from the contract address at any time.
- The owner can update the team's Buyback wallet and Marketing wallet to any addresses at any time.
- The owner can update the Automated Market Maker Pair and CEX addresses at any time.
External Threat Results
Vulnerability Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | N/A | PASS |
Centralization of Control | The owner can set total fees when buying up to 30% and selling up to 35%. | WARNING |
Delegate Call to Untrusted Contract | N/A | PASS |
Dependence on Predictable Variables | N/A | PASS |
Deprecated Opcodes | N/A | PASS |
Ether Thief | N/A | PASS |
Exceptions | N/A | PASS |
External Calls | N/A | PASS |
Flash Loans | N/A | PASS |
Integer Over/Underflow | N/A | PASS |
Logical Issues | N/A | PASS |
Multiple Sends | N/A | PASS |
Oracles | N/A | PASS |
Suicide | N/A | PASS |
State Change External Calls | N/A | PASS |
Unchecked Retval | N/A | PASS |
User Supplied Assertion | N/A | PASS |
Critical Solidity Compiler | N/A | PASS |
Overall Contract Safety | PASS |
Function Graph
Inheritance Chart
Functions Overview
($) = payable function
# = non-constant function
+ [Int] IBEP20
- [Ext] totalSupply
- [Ext] decimals
- [Ext] symbol
- [Ext] name
- [Ext] getOwner
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ Ownable
- [Pub] #
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Int] owner
+ BEP20 (IBEP20, Ownable)
- [Pub] #
- [Pub] getOwner
- [Pub] decimals
- [Ext] symbol
- [Ext] name
- [Pub] totalSupply
- [Pub] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
- [Pub] increaseAllowance #
- [Pub] decreaseAllowance #
- [Int] _transfer #
- [Int] _approve #
+ [Int] IDEXFactory
- [Ext] createPair #
+ [Int] IDEXRouter
- [Ext] factory
- [Ext] WETH
- [Ext] swapExactETHForTokens ($)
- [Ext] swapExactTokensForETH #
- [Ext] addLiquidityETH ($)
+ DividendDistributor
- [Pub] #
- [Ext] deposit ($)
- modifiers: onlyToken
- [Ext] setShare #
- modifiers: onlyToken
- [Ext] process #
- modifiers: onlyToken
- [Ext] claimDividend #
- [Pub] getUnpaidEarnings
- [Prv] shouldDistribute
- [Prv] distributeDividend #
- [Prv] getCumulativeDividends
- [Prv] addShareholder #
- [Prv] removeShareholder #
- [Ext] setDistributionCriteria #
- modifiers: onlyToken
- [Ext] setGasLimit #
- modifiers: onlyToken
+ MetaworldPad (BEP20)
- [Pub] #
- modifiers: BEP20
- [Ext] ($)
- [Ext] getCirculatingSupply
- [Int] _transfer #
- [Prv] _shouldSwapBack
- [Prv] _shouldTakeTaxes
- [Prv] _shouldSetShares
- [Prv] _shouldProcessDividends
- [Prv] _swapBack #
- modifiers: swapping
- [Prv] _takeTax #
- [Prv] _getTotalTax
- [Prv] _excludeAccounts #
- [Ext] preparePresale #
- modifiers: onlyOwner
- [Ext] recoverBNB #
- modifiers: onlyOwner
- [Ext] recoverBEP20 #
- modifiers: onlyOwner
- [Ext] enableTrading #
- modifiers: onlyOwner
- [Ext] setMarketingWallet #
- modifiers: onlyOwner
- [Ext] setBuybackWallet #
- modifiers: onlyOwner
- [Ext] setTransferGas #
- modifiers: onlyOwner
- [Ext] setIsWhitelisted #
- modifiers: onlyOwner
- [Ext] setIsCEX #
- modifiers: onlyOwner
- [Ext] setIsMarketMaker #
- modifiers: onlyOwner
- [Ext] setIsDividendExempt #
- modifiers: onlyOwner
- [Ext] setMinBalanceForDividends #
- modifiers: onlyOwner
- [Ext] setSwapBackSettings #
- modifiers: onlyOwner
- [Ext] triggerSwapBack #
- modifiers: onlyOwner
- [Ext] setTaxes #
- modifiers: onlyOwner
- [Ext] setTaxShares #
- modifiers: onlyOwner
- [Ext] setDistributionCriteria #
- modifiers: onlyOwner
- [Ext] setGasLimit #
- modifiers: onlyOwner