Rainicorn Token - Smart Contract Audit Report

Summary

Rainicorn Token Audit Report Rainicorn intends to build an NFT farm.
For this audit, we analyzed Rainicorn's token smart contract, deployed at 0xeb953eda0dc65e3246f43dc8fa13f35623bdd5ed.


Notes on the Contract:

  • The total supply of the token is 1 billion tokens.
  • No mint functions are accessible. After deployment, the total supply can only decrease.

  • After deployment, the team burned 50% of the supply totaling 500 million token. The team also sent ~40 million tokens to various addresses.
  • The team has locked additional tokens on our recommendation. ~22 million tokens will be released to the team in 3 months, then again in 6 months.

  • Only the tokenRecover function is protected and can only be called by the contract owner. This function allows the owner to retrieve tokens mistakenly sent to the token contract.
  • The owner can transfer ownership to any address.

  • The contract includes the ServicePayer and ServiceReceiver libraries - These were used in deployment and have no impact on user functionality, however.
  • Utilization of SafeMath to prevent overflows.
Audit Findings Summary
  • No security issues from external attackers were identified.
  • The team lead has completed KYC with our firm.
  • Date: March 22nd, 2021
  • Update date: March 24th, 2021 - Locking of tokens on our recommendation.

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

ERC20 Token Graph

Multi-file Token


 ($) = payable function
 # = non-constant function
 
 Int = Internal
 Ext = External
 Pub = Public
 
 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 + [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

 + [Lib] Address 
    - [Int] isContract
    - [Int] sendValue #
    - [Int] functionCall #
    - [Int] functionCall #
    - [Int] functionCallWithValue #
    - [Int] functionCallWithValue #
    - [Prv] _functionCallWithValue #

 +  ERC20 (Context, IERC20)
    - [Pub]  #
    - [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 #

 +  Ownable (Context)
    - [Pub]  #
    - [Pub] owner
    - [Pub] renounceOwnership #
       - modifiers: onlyOwner
    - [Pub] transferOwnership #
       - modifiers: onlyOwner

 +  TokenRecover (Ownable)
    - [Pub] recoverERC20 #
       - modifiers: onlyOwner

 +  ServiceReceiver (TokenRecover)
    - [Pub] pay ($)
    - [Pub] getPrice
    - [Pub] setPrice #
       - modifiers: onlyOwner
    - [Pub] withdraw #
       - modifiers: onlyOwner
    - [Prv] _toBytes32

 +  ServicePayer 
    - [Pub]  ($)

 +  StandardERC20 (ERC20, ServicePayer)
    - [Pub]  ($)
       - modifiers: ERC20,ServicePayer