CryptoDrop Presale - Smart Contract Audit Report
Summary
CryptoDrop is building a presale platform in order to generate funds for the team's upcoming token.For this audit, we reviewed CryptoDrop's CryptoDropSeed and CryptoDropPresale contracts using code provided to us by the project team.
Notes on the Contracts:
- The CryptoDropSeed contract is used to support the seed round where contributors can qualify for premium pricing.
- The seed round is active until the hard cap of 1000 BNB has been met, or unless the owner has manually paused the system.
- While the seed round is active, users must deposit at least 0.01 BNB (up to a total contribution limit of 10 BNB per user) and in return will receive 2,903,225 tokens per BNB deposited.
- Any amount of ETH deposited over the hard cap is returned to the user, and the remaining amount is transferred to the funding address controlled by the team.
- The owner can pause or unpause the seed round at any time.
- The owner can transfer all of the seed round tokens in the contract to the funding address controlled by the team at any time.
- The CryptoDropPresale contract is used to support the next round of the presale.
- The presale is active until the hard cap of 1500 BNB has been met, or unless the owner has manually paused the system.
- While the presale is active, users must deposit at least 0.01 BNB (up to a total contribution limit of 10 BNB per user) and in return will receive 2,419,354 tokens per BNB deposited.
- Any amount of ETH deposited over the hard cap is returned to the user, and the remaining amount is transferred to the funding address controlled by the team.
- The owner can pause or unpause the presale at any time.
- The owner can transfer all of the presale tokens in the contract to the funding address controlled by the team at any time.
- As the contracts utilize the SafeMath library, they are protected from overflows/underflows.
Audit Findings Summary:
- No security issues from outside attackers were identified.
- Ensure trust in the team as they have notable control in the ecosystem.
- Date: October 15th, 2021.
External Threat Results
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 |
CryptoDropSeed Contract
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ [Lib] SafeMath
- [Int] add
- [Int] sub
- [Int] sub
- [Int] mul
- [Int] div
- [Int] div
- [Int] mod
- [Int] mod
+ ReentrancyGuard
- [Int] #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Int] #
- [Pub] owner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Prv] _functionCallWithValue #
+ CryptodropPresale (ReentrancyGuard, Ownable)
- [Pub] #
- [Ext] getToken
- [Ext] ($)
- [Int] sell #
- modifiers: nonReentrant,whenCrowdsaleAlive
- [Ext] totalTokensNeeded
- [Ext] stop #
- modifiers: onlyOwner
- [Ext] unstop #
- modifiers: onlyOwner
- [Ext] returnUnsold #
- modifiers: nonReentrant,onlyOwner
- [Pub] getTime
- [Pub] isActive
- [Ext] isSuccessful
CryptoDropPresale Contract
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ [Lib] SafeMath
- [Int] add
- [Int] sub
- [Int] sub
- [Int] mul
- [Int] div
- [Int] div
- [Int] mod
- [Int] mod
+ ReentrancyGuard
- [Int] #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Int] #
- [Pub] owner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Prv] _functionCallWithValue #
+ CryptodropSeed (ReentrancyGuard, Ownable)
- [Pub] #
- [Ext] getToken
- [Ext] ($)
- [Int] sell #
- modifiers: nonReentrant,whenCrowdsaleAlive
- [Ext] totalTokensNeeded
- [Ext] stop #
- modifiers: onlyOwner
- [Ext] unstop #
- modifiers: onlyOwner
- [Ext] returnUnsold #
- modifiers: nonReentrant,onlyOwner
- [Pub] getTime
- [Pub] isActive
- [Ext] isSuccessful