|Arbitrary Storage Write||N/A||PASS|
|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|
Rainicorn Token - Smart Contract 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:
Audit Findings Summary
- 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.
- 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.
($) = 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