|Arbitrary Storage Write||N/A||PASS|
|Delegate Call to Untrusted Contract||N/A||PASS|
|Dependence on Predictable Variables||Randomness relies on a series of environmental variables.
Probability of a negative impact is very low.
|State Change External Calls||N/A||PASS|
|User Supplied Assertion||N/A||PASS|
|Critical Solidity Compiler||N/A||PASS|
|Overall Contract Safety||PASS|
CryptoAgainstCancer - Smart Contract Audit Report
CryptoAgainstCancer is a new token with frictionless fee redistribution and charity contribution on each transfer featuring liquidity adds, BNB rewards, and a lottery system.We audited CryptoAgainstCancer's token contract at 0x6fbFf934ec9D724450E66d9AcE621cb7E67CeB5A on the Binance Smart Chain mainnet.
Overview of the Contract:
Audit Findings Summary
- The total supply of the token is set to one quadrillion.
- No mint or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
- The token is designed to be a governance token where 1 token = 1 vote.
- Another contract will be needed to collect votes and execute transactions on behalf of the governance token holders.
- Token holders can delegate their voting rights to any address. To save gas, users can also do so using an EIP-712 signature.
- Pancakeswap holds ~65.6% of the token's supply as liquidity.
- 96.6% of liquidity has been locked in an unverified contract.
- 7% is held in the contract to be used for swap and liquify.
- Fees are collected by the project team and are sent to the charity wallet and the dev marketing wallet.
- Users who hold tokens will automatically receive a portion of the fees from a transaction tax on each transfer.
- A portion of the fee charged on transactions is stored in the contract and, once a threshold value is met, used to fund PancakeSwap liqudity.
- Liquidity-adds are funded by selling half of the tokens collected as fees, pairing the received BNB with the token, and adding it as liquidity to the BNB pair.
- The recipient of the newly created LP tokens is the owner. We recommend that this liquidity is locked at the time of acquisition.
- A final portion of the fees charged on transfers is used to fund BNB rewards, which will be claimable by token holders. This is also used to fund a lottery system, allowing users to win extra rewards on a psuedo-random basis.
- Claims for BNB rewards are disabled for 3 days after launch, and the owner can disable claims for these rewards for 2 weeks at a time at will.
- The owner of the contract can exclude and include users from transfer fees, set the maximum transfer amount, and update the fee percentages at any time.
- The randomness function, to an extent, relies on predictable environment variables. This is common, albiet not best practice; but the probability of miners maliciously changing these variables is extremley low.
- Some state variables could have been declared constant to save some gas.
- Some functions could have been declared external instead of public to save some gas.
- BNB claiming logic is properly structured to prevent reentrancy attacks.
- The contract utilizes SafeMath libraries to prevent overflows along with following the BEP20 standard.
- No security threats were identified.
- Ensure trust in the team as they have some power in the ecosystem and will receive the LP tokens from liquidity-adds.
- Date: June 22nd, 2021
($) = payable function # = non-constant function + [Int] IBEP20 - [Ext] totalSupply - [Ext] balanceOf - [Ext] transfer # - [Ext] allowance - [Ext] approve # - [Ext] transferFrom # + [Lib] SafeMath - [Int] add - [Int] sub - [Int] sub - [Int] mul - [Int] div - [Int] div - [Int] mod - [Int] mod + Context - [Int] _msgSender - [Int] _msgData + [Lib] Address - [Int] isContract - [Int] sendValue # - [Int] functionCall # - [Int] functionCall # - [Int] functionCallWithValue # - [Int] functionCallWithValue # - [Prv] _functionCallWithValue # + Ownable (Context) - [Int]
# - [Pub] owner - [Pub] renounceOwnership # - modifiers: onlyOwner - [Pub] transferOwnership # - modifiers: onlyOwner - [Pub] geUnlockTime - [Pub] lock # - modifiers: onlyOwner - [Pub] unlock # + [Int] IPancakeFactory - [Ext] feeTo - [Ext] feeToSetter - [Ext] getPair - [Ext] allPairs - [Ext] allPairsLength - [Ext] createPair # - [Ext] setFeeTo # - [Ext] setFeeToSetter # + [Int] IPancakePair - [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] IPancakeRouter01 - [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] IPancakeRouter02 (IPancakeRouter01) - [Ext] removeLiquidityETHSupportingFeeOnTransferTokens # - [Ext] removeLiquidityETHWithPermitSupportingFeeOnTransferTokens # - [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens # - [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($) - [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens # + ReentrancyGuard - [Pub] # + CryptoAgainstCancer (Context, IBEP20, Ownable, ReentrancyGuard) - [Pub] # - [Pub] name - [Pub] symbol - [Pub] decimals - [Pub] totalSupply - [Pub] balanceOf - [Pub] transfer # - [Pub] allowance - [Pub] approve # - [Pub] transferFrom # - [Pub] increaseAllowance # - [Pub] decreaseAllowance # - [Pub] isExcludedFromReward - [Pub] totalFees - [Pub] deliver # - [Pub] reflectionFromToken - [Pub] tokenFromReflection - [Pub] excludeFromReward # - modifiers: onlyOwner - [Ext] includeInReward # - modifiers: onlyOwner - [Prv] _getTxAmountMinusFee - [Prv] _getTValues - [Prv] _getRValues - [Pub] excludeFromFee # - modifiers: onlyOwner - [Pub] includeInFee # - modifiers: onlyOwner - [Ext] setTaxFeePercent # - modifiers: onlyOwner - [Ext] setLiquidityFeePercent # - modifiers: onlyOwner - [Ext] setDevMarketingFeePercentTenths # - modifiers: onlyOwner - [Ext] setCharityPercent # - modifiers: onlyOwner - [Pub] setSwapAndLiquifyEnabled # - modifiers: onlyOwner - [Ext] ($) - [Prv] _reflectFee # - [Prv] _getValues - [Prv] _getRValues - [Prv] _getRate - [Prv] _getCurrentSupply - [Prv] _takeDevMarketingFee # - [Prv] _takeLiquidity # - [Pub] isExcludedFromFee - [Prv] _approve # - [Prv] _transfer # - [Prv] _tokenTransfer # - [Prv] _transferBothExcluded # - [Prv] _transferStandard # - [Prv] _transferToExcluded # - [Prv] _transferFromExcluded # - [Pub] setMaxTxPercent # - modifiers: onlyOwner - [Pub] setExcludeFromMaxTx # - modifiers: onlyOwner - [Pub] calculateBNBReward - [Pub] getRewardCycleBlock - [Pub] claimBNBReward # - modifiers: isHuman,nonReentrant - [Pub] toggleClaims # - modifiers: onlyOwner - [Prv] topUpClaimCycleAfterTransfer # - [Prv] ensureMaxTxAmount - [Pub] disruptiveTransfer ($) - [Prv] swapAndLiquify # - [Prv] calculateFeeTenth - [Prv] removeAllFee # - [Prv] restoreAllFee # - [Prv] _takeCharityFee # - [Pub] activateContract # - modifiers: onlyOwner - [Ext] delegates - [Ext] delegate # - [Ext] delegateBySig # - [Ext] getCurrentVotes - [Ext] getPriorVotes - [Int] _delegate # - [Int] _moveDelegates # - [Int] _writeCheckpoint # - [Int] safe32 - [Int] getChainId - [Prv] random - [Prv] isLotteryWon - [Prv] calculateBNBReward - [Prv] calculateTopUpClaim - [Prv] swapTokensForEth # - [Prv] swapETHForTokens # - [Prv] addLiquidity #