InfinityGaming - Smart Contract Audit Report
InfinityGaming ($PLAY) is a new ERC20 token that is an automatic liquidity providing protocol that pays out static rewards to holders.
Notes on the Contract:
Audit Findings Summary
- The total supply of the token is set to 1 trillion $PLAY [1,000,000,000,000].
- No minting or burn functions are present; though the circulating supply can be reduced by sending tokens to the 0x..dead address, if desired.
- There was no token allocation for our team to analyze as the contract has yet to be deployed to the mainnet.
- There is a tax fee, liquidity fee, marketing fee, dev fee, and donation fee during all transfers with Uniswap. A separate fee structure can be set by the team to apply different fee amounts depending on whether the user is buying or selling during the transfer.
- The tokens collected from the tax fee are removed from the circulating supply; This serves as a frictionless fee redistribution which automatically benefits all token holders at the time of each transaction.
- The tokens collected from the liquidity fee during transfers are stored in the contract address balance. Once the threshold value of 5 billion tokens is met, a swap will occur for the purpose of funding Uniswap 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 ETH with the token, and adding it as liquidity to the ETH pair.
- The recipient of the newly created LP tokens is the contract address.
- The tokens collected from the marketing fee and dev fee are swapped for ETH and sent to the team's Marketing wallet and Dev wallet respectively.
- The tokens collected from the donation fee are sent to the team's Donation address which is set to the 0x00 address.
- Although the SafeMath library is utilized, the contract is deployed with Solidity v0.8.10 which has built-in overflow checks. SafeMath can be safely removed to reduce contract size and increase gas savings.
- The owner can modify the tax fee, liquidity fee, marketing fee, dev fee, and donation fee for both fee structures to any percentages at any time.
- The owner can exclude and include accounts from reward distribution.
- The owner can set and update a maximum transaction amount at any time, which will impose a limit to the number of tokens that can be transferred during any given transaction. The owner can also include/exclude accounts from this limit.
- The owner can also set and update a maximum wallet amount which prevents a transaction from occuring if the buyer's balance will exceed the number of tokens set by the owner.
- The owner can enable/disable automatic liquidity adds at any time.
- The owner can manually add accounts to a blacklist which will prevent those accounts from being able to participate in transfers.
- The owner can update the team's Marketing wallet, Dev wallet, and Partnership wallet, and the Exchange wallet to any addresses at any time.
- No external threats were identified.
- As with any presale, please ensure trust in the team prior to investing.
- Further ensure trust in the team as they have substantial control in the ecosystem.
- Date: December 8th, 2021
- Updated: December 15th, 2021 to reflect new updates in the contract.
|Arbitrary Storage Write||N/A||PASS|
|Centralization of Control||The owner can set each fee percentage up to 100%.||WARNING|
|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 # + [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) - [Pub]
# - [Pub] owner - [Pub] renounceOwnership # - modifiers: onlyOwner - [Pub] transferOwnership # - modifiers: onlyOwner - [Pub] geUnlockTime - [Pub] lock # - modifiers: onlyOwner - [Pub] unlock # + [Int] IUniswapV2Factory - [Ext] feeTo - [Ext] feeToSetter - [Ext] getPair - [Ext] allPairs - [Ext] allPairsLength - [Ext] createPair # - [Ext] setFeeTo # - [Ext] setFeeToSetter # + [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] 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 # + InfinityGaming (Context, IERC20, Ownable) - [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] donationAddress - [Pub] deliver # - [Pub] reflectionFromToken - [Pub] tokenFromReflection - [Ext] addBotToBlacklist # - modifiers: onlyOwner - [Ext] removeBotFromBlacklist # - modifiers: onlyOwner - [Pub] excludeFromReward # - modifiers: onlyOwner - [Ext] includeInReward # - modifiers: onlyOwner - [Pub] excludeFromFee # - modifiers: onlyOwner - [Pub] includeInFee # - modifiers: onlyOwner - [Pub] excludeFromLimit # - modifiers: onlyOwner - [Pub] includeInLimit # - modifiers: onlyOwner - [Ext] setSellFee # - modifiers: onlyOwner - [Ext] setBuyFee # - modifiers: onlyOwner - [Ext] setMaxTxPercent # - modifiers: onlyOwner - [Ext] _setMaxWalletSizePercent # - modifiers: onlyOwner - [Pub] setSwapAndLiquifyEnabled # - modifiers: onlyOwner - [Ext] ($) - [Prv] _reflectFee # - [Prv] _getTValues - [Prv] _getRValues - [Prv] _getRate - [Prv] _getCurrentSupply - [Prv] _takeLiquidity # - [Prv] _takeWalletFee # - [Prv] _takeDonationFee # - [Prv] calculateTaxFee - [Prv] calculateLiquidityFee - [Prv] calculateMarketingFee - [Prv] calculateDonationFee - [Prv] calculateDevFee - [Prv] removeAllFee # - [Prv] setBuy # - [Prv] setSell # - [Pub] isExcludedFromFee - [Pub] isExcludedFromLimit - [Prv] _approve # - [Prv] _transfer # - [Prv] swapAndLiquify # - modifiers: lockTheSwap - [Prv] swapTokensForEth # - [Prv] addLiquidity # - [Prv] _tokenTransfer # - [Prv] _transferStandard # - [Prv] _transferToExcluded # - [Prv] _transferFromExcluded # - [Prv] _transferBothExcluded #