/>

Sanshu Inu Dog Park - Audit Report

Summary

Sanshu Inu Audit Report Sanshu Inu Finance is building a new token with frictionless fee redistribution and a yield-farming and staking platform that lets users stake and earn rewards on SanshuInu tokens and more.

For this audit, we reviewed the following contracts on the Ethereum blockchain mainnet:

Notes on the Contracts:
  • SanshuInu Contract:
  • The total supply of the SANSHU token is initially set to 100 quadrillion.
  • No mint functions exist, but anyone can burn their own tokens at any time by calling the reflect function.
  • At the time of writing this report, 61.5% of the token supply has been sent to the 0x..dead address.
  • 4.5% of the token supply is stored in the Memestake contract.
  • The next 5 largest token holders have 6% of the total supply.
  • 0.89% of the token supply is in Uniswap liquidity.
  • Of that liquidity, 98% of the LP tokens are held in the Memestake contract.

  • There is a 2% tax fee on all transactions; this percentage cannot be changed.
  • Users who hold tokens will automatically benefit from the frictionless fee redistribution at the time of each transaction as the tokens collected through taxes are removed from the circulating supply.
  • There is a maximum transaction amount tokens, but this does not apply to the owner during transactions where the owner is either the sender or the recipient; the owner can set the max transaction amount to any value at any time.
  • The owner can also exclude any address from rewards at any time.

  • Memefund Contract:
  • MFUND is a standard ERC20 token that features a mechanism for extra granularity and precision in transactions.
  • The total supply of the MFUND token is initially 100 million.
  • The Rebase Oracle is able to increase the total supply of the MFUND token by any amount up to the max supply ceiling, which is set to 2^128 - 1, or about 340 undecillion.
  • At the time of writing this report, 64.4% of the token supply is held by the Memestake contract.
  • 12.1% of the token supply is in a Uniswap SANUSHU-MFUND liquidity pool; of that liquidity, 99.1% of the LP tokens are held in the Memestake contract.
  • 11.7% of the token supply is in a Uniswap WETH-MFUND liquidity pool; of that liquidity, 99.6% of the LP tokens are held in the Memestake contract.
  • 2.86% of the token supply is in a Uniswap KEANU-MFUND liquidity pool; of that liquidity, 99.46% of the LP tokens are held in the Memestake contract.

  • Anyone can burn their tokens at any time by sending them to the 0x..dead address.
  • The owner is able to set the address of the Rebase Oracle to any address at any time.
  • The owner is able to propose a new owner at any time, but the proposed owner must accept in order to fully transfer ownership.

  • Memestake Contract:
  • On initialization, owner is able to specify the rewards rate, and the start and end blocks of the staking period; after the end block, rewards will no longer be distributed.
  • The owner can use the Memestake contract to add pools for LP tokens as long as the address is a valid ERC20 and a pool for it does not currently exist; the team must exercise caution when adding tokens to avoid fee-on-transfer and ERC777-compliant tokens (this is uncommon).
  • The owner can set the allocation points for any existing pool at any time.
  • Users will receive a reward amount proportional to the allocation percentage assigned to the pool on each block; staking rewards can be calculated and transferred to the user at any time.
  • On deposits and withdrawals, pending rewards are calculated and transferred; rewards are paid in MFUND tokens.
  • On withdrawals, the user will receive the desired amount of LP tokens; this amount cannot be more than the amount the user has deposited.
  • The user can also trigger an emergency withdraw, which will transfer all the user's deposited LP tokens to their wallet address, without calculating rewards.

  • The team has worked with us to optimize these contracts for gas efficiency.
  • The contracts utilize the SafeMath library to prevent overflows along with following the ERC20 standard.
Audit Findings Summary
  • No security issues from outside attackers were identified.
  • Ensure trust in the team as they have some control in the ecosystem.
  • Date: July 17th, 2021

Audit 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
Flash Loans N/A PASS
Integer Over/Underflow N/A PASS
Multiple Sends N/A PASS
Oracles 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

Memefund and Memestake Contracts

ERC20 Token Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
 + [Lib] SafeMaths 
    - [Int] add
    - [Int] sub
    - [Int] mul
    - [Int] div

 +  Memefund 
    - [Pub]  #
    - [Ext] setRebaseOracle #
    - [Pub] transferOwnership #
    - [Pub] acceptOwnership #
    - [Ext] rebase #
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] transferFrom #
    - [Pub] approve #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #

 +  Context 
    - [Int] _msgSender
    - [Int] _msgData

 + [Int] IERC20 
    - [Ext] totalSupply
    - [Ext] balanceOf
    - [Ext] transfer #
    - [Ext] allowance
    - [Ext] approve #
    - [Ext] transferFrom #

 + [Lib] EnumerableSet 
    - [Prv] _add #
    - [Prv] _remove #
    - [Prv] _contains
    - [Prv] _length
    - [Prv] _at
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at
    - [Int] add #
    - [Int] remove #
    - [Int] contains
    - [Int] length
    - [Int] at

 + [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 #
    - [Int] functionStaticCall
    - [Int] functionStaticCall
    - [Int] functionDelegateCall #
    - [Int] functionDelegateCall #
    - [Prv] _verifyCallResult

 + [Lib] SafeERC20 
    - [Int] safeTransfer #
    - [Int] safeTransferFrom #
    - [Int] safeApprove #
    - [Int] safeIncreaseAllowance #
    - [Int] safeDecreaseAllowance #
    - [Prv] _callOptionalReturn #

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

 +  Memestake (Ownable)
    - [Pub]  #
    - [Ext] numberOfPools
    - [Pub] add #
       - modifiers: onlyOwner
    - [Pub] set #
       - modifiers: onlyOwner
    - [Ext] pendingRewards
    - [Pub] claimRewards #
    - [Pub] massUpdatePools #
    - [Pub] updatePool #
    - [Ext] deposit #
    - [Ext] withdraw #
    - [Ext] emergencyWithdraw #
    - [Int] safeMfundTransfer #
    - [Prv] getMultiplier
							

SanshuInu Contract

ERC20 Token Graph

Contract Inheritance


 ($) = payable function
 # = non-constant function
 
 +  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 #

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

 +  SanshuInu (Context, IERC20, Ownable)
    - [Pub]  #
    - [Pub] name
    - [Pub] symbol
    - [Pub] decimals
    - [Pub] totalSupply
    - [Pub] balanceOf
    - [Pub] transfer #
    - [Pub] allowance
    - [Pub] approve #
    - [Pub] transferFrom #
    - [Pub] increaseAllowance #
    - [Pub] decreaseAllowance #
    - [Pub] isExcluded
    - [Pub] totalFees
    - [Ext] setMaxTxPercent #
       - modifiers: onlyOwner
    - [Pub] reflect #
    - [Pub] reflectionFromToken
    - [Pub] tokenFromReflection
    - [Ext] excludeAccount #
       - modifiers: onlyOwner
    - [Ext] includeAccount #
       - modifiers: onlyOwner
    - [Prv] _approve #
    - [Prv] _transfer #
    - [Prv] _transferStandard #
    - [Prv] _transferToExcluded #
    - [Prv] _transferFromExcluded #
    - [Prv] _transferBothExcluded #
    - [Prv] _reflectFee #
    - [Prv] _getValues
    - [Prv] _getTValues
    - [Prv] _getRValues
    - [Prv] _getRate
    - [Prv] _getCurrentSupply