Bitco Mine - Smart Contract Audit Report
Bitco Mine is a new dividend paying token that pays holders in BME and BTC.We audited Bitco Mine's token contract at 0xbcba01f7d6cc0a950464a4b98ba8358c4f6b69a0 on the Binance Smart Chain mainnet.
Overview of the Contract:
Audit Findings Summary
- The total supply of the token is set to one trillion, which was minted to the owner upon deployment.
- The top 6 token holders comprise 87.3% of total tokens. The top 5 token holders are all token locking contracts.
- Out of the total supply of tokens, 34.44% of the BME tokens are locked in a token locking contract that will vest to the team on August 31, 2022.
- 33.33% of the BME tokens are locked in a token locking contract that will vest to the team on October 24, 2021.
- 7.77% of BME tokens are locked in a token locking contract that vested to the team on September 30, 2021.
- 5.55% of BME tokens are locked in a token locking contract that will vest to the team on August 31, 2022.
- 3.33% of BME tokens are locked in a token locking contract that will vest at an undetermined time as the release time is unavailable.
- 2.87% is held unlocked in a user's wallet address.
- The Pancake Swap liquidity pool holds 2.16% of the token supply.
- 79.8% of the liquidity is locked in an unverified contract.
- 19.8% of the liquidity is held unlocked by the team. We recommend that they lock these liquidity tokens.
- The owner can burn any amount of tokens they are in possesion of, as long as the total token supply does not fall below the minimum total supply.
- No mint or burn functions are present beyond the owner's ability to burn their own tokens; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
- Buying tokens incurs a 13% fee. Selling tokens incurs an 18% fee. All other transfers also incur an 18% fee.
- Only fees collected from buying and selling contribute to dividends.
- All other transfer fees contribute to liquidity and not dividends.
- The fees charged on transactions are stored in the contract until a threshold value is met (500 million BME).
- Of the fees collected, a portion is allocated to add to liquidity.
- As long as the total token supply does not dip below the minimum total supply of 10 billion, 50% of that portion of BME tokens are burned and the rest are added to liquidity.
- Liquidity-adds are funded by selling half of the remaining tokens allocated, pairing the received BNB with the token, and adding it as liquidity to the BME pair.
- All LP tokens created through the liquidity adds within the contract are sent to the owner's address. At the time of this audit they have 19.8% of the liquidity. We recommend that the team lock these LP tokens.
- The remaining portion of BME collected from fees is then used to swap for BTCB tokens. The BTCB and remaining BME tokens are then used to pay dividends to BME token holders.
- A holder must have 37.5 million BME in order to qualify for dividends in BTC and 3.75 million BME for dividends in BME.
- Once dividends are distributed, they will need to be claimed.
- Any time BME is bought, dividends are paid out up to a set gas limit.
- This gas limit is set by the owner and can be changed to any value within 100,000 and 500,000 at any time.
- At the time of this audit, the gas limit is 100,000, the minimum.
- Users can claim their dividends as an individual without depending on the claim cycle.
- Claimed dividends are sent to the user's wallet address.
- There is a wait-time of 86400 seconds (24 hours) between BTC reward claims and a wait-time of 43200 seconds (12 hours) between BME claims.
- The contract utilizes the SafeMath library to prevent overflows along with following the BEP20 standard.
- The owner is able to exclude any address from dividends at any time.
- The owner is able to add more AMM pairs, but cannot remove the Pancake Swap pair.
- The owner can change the Pancake Swap Router address at anytime.
- The owner can change the minimum amount of tokens required for rewards at anytime.
- The owner can exclude anyone from fees at anytime.
- No external threats were identified.
- The owner has control of the LP tokens collected from fees. We recommend the owner locks these tokens.
- A large portion of the total token supply has already vested to the team.
- Ensure trust in the team as they have substantial control in the ecosystem.
- Date: October 1st, 2021
External Threat Results
|Arbitrary Storage Write||N/A||PASS|
|Delegate Call to Untrusted Contract||N/A||PASS|
|Dependence on Predictable Variables||N/A||PASS|
|State Change External Calls||N/A||PASS|
|User Supplied Assertion||N/A||PASS|
|Critical Solidity Compiler||N/A||PASS|
|Overall Contract Safety||PASS|
($) = payable function # = non-constant function + [Int] IERC20 - [Ext] totalSupply - [Ext] balanceOf - [Ext] transfer # - [Ext] allowance - [Ext] approve # - [Ext] transferFrom # + [Int] IERC20Metadata (IERC20) - [Ext] name - [Ext] symbol - [Ext] decimals + Context - [Int] _msgSender - [Int] _msgData + [Lib] SafeMath - [Int] add - [Int] sub - [Int] sub - [Int] mul - [Int] div - [Int] div - [Int] mod - [Int] mod + ERC20 (Context, IERC20, IERC20Metadata) - [Pub]
# - [Pub] name - [Pub] symbol - [Pub] decimals - [Pub] totalSupply - [Pub] balanceOf - [Pub] transfer # - [Pub] allowance - [Pub] approve # - [Pub] transferFrom # - [Pub] increaseAllowance # - [Pub] decreaseAllowance # - [Int] _transfer # - [Int] _mint # - [Int] _burn # - [Int] _approve # - [Int] _beforeTokenTransfer # + [Lib] SafeMathUint - [Int] toInt256Safe + [Lib] SafeMathInt - [Int] mul - [Int] div - [Int] sub - [Int] add - [Int] abs - [Int] toUint256Safe + [Int] DividendPayingTokenInterface - [Ext] dividendOf - [Ext] withdrawDividend # + [Int] DividendPayingTokenOptionalInterface - [Ext] withdrawableDividendOf - [Ext] withdrawnDividendOf - [Ext] accumulativeDividendOf + Ownable (Context) - [Pub] # - [Pub] owner - [Pub] renounceOwnership # - modifiers: onlyOwner - [Pub] transferOwnership # - modifiers: onlyOwner + DividendPayingToken (ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface) - [Pub] # - modifiers: ERC20 - [Pub] distributeDividends # - modifiers: onlyOwner - [Pub] withdrawDividend # - [Int] _withdrawDividendOfUser # - [Int] _withdrawDividendOfUserBME # - [Pub] dividendOf - [Pub] withdrawableDividendOf - [Pub] withdrawnDividendOf - [Pub] accumulativeDividendOf - [Pub] setBMEadd # - modifiers: onlyOwner - [Pub] dividendOfBME - [Pub] withdrawableDividendOfBME - [Pub] withdrawnDividendOfBME - [Pub] accumulativeDividendOfBME - [Int] _mint # - [Int] _burn # - [Int] _mintBME # - [Int] _burnBME # - [Int] _setBalance # - [Int] _setBalanceBME # + [Lib] IterableMapping - [Pub] getIndexOfKey - [Pub] getKeyAtIndex - [Pub] size - [Pub] set # - [Pub] remove # + [Int] IUniswapV2Pair - [Ext] name - [Ext] symbol - [Ext] decimals - [Ext] totalSupply - [Ext] balanceOf - [Ext] allowance - [Ext] approve # - [Ext] transfer # - [Ext] transferFrom # - [Ext] DOMAIN_SEPARATOR - [Ext] PERMIT_TYPEHASH - [Ext] nonces - [Ext] permit # - [Ext] MINIMUM_LIQUIDITY - [Ext] factory - [Ext] token0 - [Ext] token1 - [Ext] getReserves - [Ext] price0CumulativeLast - [Ext] price1CumulativeLast - [Ext] kLast - [Ext] mint # - [Ext] burn # - [Ext] swap # - [Ext] skim # - [Ext] sync # - [Ext] initialize # + [Int] IUniswapV2Factory - [Ext] feeTo - [Ext] feeToSetter - [Ext] getPair - [Ext] allPairs - [Ext] allPairsLength - [Ext] createPair # - [Ext] setFeeTo # - [Ext] setFeeToSetter # + [Int] IUniswapV2Router01 - [Ext] factory - [Ext] WETH - [Ext] addLiquidity # - [Ext] addLiquidityETH ($) - [Ext] removeLiquidity # - [Ext] removeLiquidityETH # - [Ext] removeLiquidityWithPermit # - [Ext] removeLiquidityETHWithPermit # - [Ext] swapExactTokensForTokens # - [Ext] swapTokensForExactTokens # - [Ext] swapExactETHForTokens ($) - [Ext] swapTokensForExactETH # - [Ext] swapExactTokensForETH # - [Ext] swapETHForExactTokens ($) - [Ext] quote - [Ext] getAmountOut - [Ext] getAmountIn - [Ext] getAmountsOut - [Ext] getAmountsIn + [Int] IUniswapV2Router02 (IUniswapV2Router01) - [Ext] removeLiquidityETHSupportingFeeOnTransferTokens # - [Ext] removeLiquidityETHWithPermitSupportingFeeOnTransferTokens # - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens # - [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($) - [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens # + BME (ERC20, Ownable) - [Pub] # - modifiers: ERC20 - [Ext] ($) - [Pub] isExlFFees - [Prv] _setAMMPairs # - [Pub] updateGFProcess # - modifiers: onlyOwner - [Pub] updateUniswapV2Router # - modifiers: onlyOwner - [Pub] ExlFromF # - modifiers: onlyOwner - [Pub] setAMMPairs # - modifiers: onlyOwner - [Pub] MaxSA - [Ext] getTotaldd - [Ext] getTotalddBME - [Ext] getTlSBTC - [Ext] getTlSBME - [Ext] getTotalNoH - [Pub] WblDofBTC - [Pub] WblDofBME - [Ext] getAccountdI - [Ext] ProcessDT # - [Ext] claim # - [Ext] getlastProcidx - [Ext] setMinTtoGetR # - modifiers: onlyOwner - [Ext] ExlFromD # - modifiers: onlyOwner - [Int] _transfer # - [Prv] swapAndLiquify # - [Prv] AutoBurn # - [Pub] Burn # - modifiers: onlyOwner - [Prv] SwapTFETH # - [Prv] SwapTFBTC # - [Prv] addLiquidity # - [Prv] SWandSendBTCd # + BBTracking (DividendPayingToken) - [Pub] # - modifiers: DividendPayingToken - [Int] _transfer # - [Pub] withdrawDividend # - [Ext] setMinTtoGetR # - modifiers: onlyOwner - [Ext] ExlFromD # - modifiers: onlyOwner - [Ext] getLastProcessedIndex - [Ext] getNumberOfTokenHolders - [Pub] getAccount - [Ext] setBalance # - modifiers: onlyOwner - [Pub] process # - [Pub] processAccount # - modifiers: onlyOwner