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 CategoryNotesResult
Arbitrary Storage WriteN/APASS
Arbitrary JumpN/APASS
Delegate Call to Untrusted ContractN/APASS
Dependence on Predictable VariablesN/APASS
Deprecated OpcodesN/APASS
Ether ThiefN/APASS
ExceptionsN/APASS
External CallsN/APASS
Integer Over/UnderflowN/APASS
Multiple SendsN/APASS
SuicideN/APASS
State Change External CallsN/APASS
Unchecked RetvalN/APASS
User Supplied AssertionN/APASS
Critical Solidity CompilerN/APASS
Overall Contract Safety PASS

CryptoDropSeed Contract

Smart Contract Graph

Contract Inheritance


 ($) = 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

Smart Contract Graph

Contract Inheritance


 ($) = 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