Vulnerability Category | Notes | Result |
---|---|---|
Arbitrary Storage Write | N/A | PASS |
Arbitrary Jump | N/A | PASS |
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 |
Integer Over/Underflow | N/A | PASS |
Multiple Sends | 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 |
BSCLaunchpad Token - Smart Contract Audit Report
Summary
BSCLaunchpad intends to build a launchpad for projects on the Binance Smart Chain.
Please note we have not seen or reviewed the project's upcoming launchpad platform.
Notes on the Contract:
The initial total supply of the token is 0. At the time of deployment all tokens are delivered to the deployer's address. The team intends to be able to distribute tokens manually via a whitelist where they will assign addresses any number of tokens. The contract uses the Openzeppelin Upgradable ERC20 standard; meaning the team has the ability to upgrade the token contract to a new one at any time. The owner can set addresses which will be on the Launch whitelist and the duration of the whitelist period. The owner can set and update the whitelist at any time, essentially allowing for the minting of tokens. On each transfer the contract will check the timestamps and senders to determine whether or not to distribute funds to individuals on th ewhitelist. This will waste gas on every call after the whitelist sale concluses, so we advise moving this logic into a separate function. The logic to distribute whitelisted funds only works if both the sender and receiver has been marked as an exchange by the owner. This is improperly implemented and will prevent this logic from being executed unless every whitelist participant is also considered an exchange. Some gas can be saved via marking functions external instead of public. The contract utilizes SafeMath to prevent overflow issues.
Audit Findings Summary:
- No security issues from outside attackers were identified; though logic issues exist which will prevent the contract from functioning.
- As with any presale, ensure trust in the team prior to investing.
- Ensure trust in the team as they can mint arbitrarily using the whitelist and change the contract's code at any time via an upgrade.
- Date: March 3rd, 2021.
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ [Lib] AddressUpgradeable
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Int] functionStaticCall
- [Int] functionStaticCall
- [Prv] _verifyCallResult
+ Initializable
- [Prv] _isConstructor
+ ContextUpgradeable (Initializable)
- [Int] __Context_init #
- modifiers: initializer
- [Int] __Context_init_unchained #
- modifiers: initializer
- [Int] _msgSender
- [Int] _msgData
+ [Int] IERC20Upgradeable
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Lib] SafeMathUpgradeable
- [Int] tryAdd
- [Int] trySub
- [Int] tryMul
- [Int] tryDiv
- [Int] tryMod
- [Int] add
- [Int] sub
- [Int] mul
- [Int] div
- [Int] mod
- [Int] sub
- [Int] div
- [Int] mod
+ ERC20Upgradeable (Initializable, ContextUpgradeable, IERC20Upgradeable)
- [Int] __ERC20_init #
- modifiers: initializer
- [Int] __ERC20_init_unchained #
- modifiers: initializer
- [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] _setupDecimals #
- [Int] _beforeTokenTransfer #
+ OwnableUpgradeable (Initializable, ContextUpgradeable)
- [Int] __Ownable_init #
- modifiers: initializer
- [Int] __Ownable_init_unchained #
- modifiers: initializer
- [Pub] owner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
+ [Lib] SafeMath
- [Int] tryAdd
- [Int] trySub
- [Int] tryMul
- [Int] tryDiv
- [Int] tryMod
- [Int] add
- [Int] sub
- [Int] mul
- [Int] div
- [Int] mod
- [Int] sub
- [Int] div
- [Int] mod
+ BSCPAD (ERC20Upgradeable, OwnableUpgradeable)
- [Pub] initialize #
- modifiers: initializer
- [Pub] setExchanger #
- modifiers: onlyOwner
- [Ext] setLaunchWhiteList #
- modifiers: onlyOwner
- [Int] _beforeTokenTransfer #