MetaworldPad - Smart Contract Audit Report

Audit Summary

MetaworldPad Audit Report 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

  • 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.
Ownership Controls:
  • 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 CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Centralization of ControlThe owner can set total fees when buying up to 30% and selling up to 35%.WARNING
Delegate Call to Untrusted ContractN/APASS
Dependence on Predictable VariablesN/APASS
Deprecated OpcodesN/APASS
Ether ThiefN/APASS
ExceptionsN/APASS
External CallsN/APASS
Flash LoansN/APASS
Integer Over/UnderflowN/APASS
Logical IssuesN/APASS
Multiple SendsN/APASS
OraclesN/APASS
SuicideN/APASS
State Change External CallsN/APASS
Unchecked RetvalN/APASS
User Supplied AssertionN/APASS
Critical Solidity CompilerN/APASS
Overall Contract Safety PASS

Function Graph

BEP20 Token Graph

Inheritance Chart

Multi-file Token

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