Doge Viking - Smart Contract Audit Report
Summary
Doge Viking ($DVK) is a new community-driven DeFi token on the Binance Smart Chain that is an automatic liquidity providing protocol that pays out static rewards to holders.
Notes on the undeployed Contract:Audit Findings Summary
- Doge Viking's code implements and builds upon the fee-redistribution features pioneered by Reflect Finance.
- The total supply of the token is initially set to one quadrillion $DVK [1,000,000,000,000,000].
- No minting or burn functions are present; and holders are not allowed to directly send tokens to the burn address.
- There is a 'Tax fee', a 'Liquidity fee', and a "Doge Viking Fund fee" on all transactions for any "non-excluded" address that participates in a transfer. The owner has the ability to modify the these fees at any time. The tax fee may range from 0.0% to 5.0%; the liquidity fee may range from 0.0% to 20.0%, and the "Doge Viking Fund Fee" can range from 0% to 3%.
- The 'tax fee' is instantly redistributed across all of the existing (and non-excluded) token holders at the time of each transaction.
- The tokens collected from the "Doge Viking Fund fee" are sent to the team's "Pool Address" which the owner can change at any time.
- The liquidity fee charged on transactions is stored in the contract and, once a threshold value is met, used to fund PancakeSwap liquidity. This functionality can be enabled/disabled by the owner.
- Liquidity-adds are funded by selling a portion of the tokens collected as fees (after the threshhold as determined by the owner is met), then pairing the received BNB with the token, and adding it as liquidity to the BNB pair.
- The newly created LP tokens will get stuck in the Doge Viking token contract; thereby acting as a method of permanently locking liquidity.
- The owner of the contract can exclude and include accounts from transfer fees.
- The owner of the contract can exclude and include accounts from the reward distribution.
- The owner of the contract must enable trading in order for transfer functionality to be possible. Once enabled, it cannot be disabled.
- The owner has the ability to enable and disable their "whale catching" logic that prevents the completion of any transaction to an address where that recipient will own any more than 2% of the total supply.
- Ownership has not been renounced (and the project has not been deployed to the main net to our knowledge).
- As the project is implemented with solidity version ^0.8.0, it is protected from overflows.
- No external threats were identified.
- We recommend that the team renounces ownership after a successful launch.
- As with any token, please ensure trust in the team prior to investing as they have notable control in the ecosystem.
- Date: June 20th, 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 |
Function Graph
Inheritence Chart
Functions Overview
($) = payable function
# = non-constant function
+ [Int] IUniswapV2Router01
- [Ext] factory
- [Ext] WETH
- [Ext] addLiquidity #
- [Ext] addLiquidityETH ($)
- [Ext] removeLiquidity #
- [Ext] removeLiquidityETH #
- [Ext] removeLiquidityWithPermit #
- [Ext] removeLiquidityETHWithPermit #
- [Ext] swapExactTokensForTokens #
- [Ext] swapTokensForExactTokens #
- [Ext] swapExactETHForTokens ($)
- [Ext] swapTokensForExactETH #
- [Ext] swapExactTokensForETH #
- [Ext] swapETHForExactTokens ($)
- [Ext] quote
- [Ext] getAmountOut
- [Ext] getAmountIn
- [Ext] getAmountsOut
- [Ext] getAmountsIn
+ [Int] IUniswapV2Router02 (IUniswapV2Router01)
- [Ext] removeLiquidityETHSupportingFeeOnTransferTokens #
- [Ext] removeLiquidityETHWithPermitSupportingFeeOnTransferTokens #
- [Ext] swapExactTokensForTokensSupportingFeeOnTransferTokens #
- [Ext] swapExactETHForTokensSupportingFeeOnTransferTokens ($)
- [Ext] swapExactTokensForETHSupportingFeeOnTransferTokens #
+ [Int] IUniswapV2Factory
- [Ext] feeTo
- [Ext] feeToSetter
- [Ext] getPair
- [Ext] allPairs
- [Ext] allPairsLength
- [Ext] createPair #
- [Ext] setFeeTo #
- [Ext] setFeeToSetter #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] #
- [Pub] owner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Int] IERC20Metadata (IERC20)
- [Ext] name
- [Ext] symbol
- [Ext] decimals
+ DogeVikingMetaData (IERC20Metadata)
- [Ext] name
- [Ext] symbol
- [Ext] decimals
+ DogeViking (DogeVikingMetaData, Ownable)
- [Pub] #
- [Ext] totalSupply
- [Ext] isExcludedFromFees
- [Prv] _getRate
- [Prv] _reflectionFromToken
- [Prv] _tokenFromReflection
- [Pub] balanceOf
- [Ext] totalFees
- [Pub] deliver #
- [Ext] excludeFromFees #
- modifiers: onlyOwner
- [Ext] includeInFees #
- modifiers: onlyOwner
- [Prv] _removeAllFees #
- [Prv] _restoreAllFees #
- [Ext] setSwapAndLiquifyingState #
- modifiers: onlyOwner
- [Prv] _calculateFee
- [Prv] _calculateTxFee
- [Prv] _calculateLiquidityFee
- [Prv] _calculatePoolFee
- [Prv] _reflectFee #
- [Prv] _takeLiquidity #
- [Ext] ($)
- [Prv] _transferToken #
- [Prv] _swapTokensForEth #
- [Prv] _addLiquidity #
- [Prv] _swapAndLiquefy #
- modifiers: lockTheSwap
- [Ext] enableTrading #
- modifiers: onlyOwner
- [Ext] freeWhales #
- modifiers: onlyOwner
- [Prv] _transfer #
- [Prv] _approve #
- [Ext] setLiquidityFee #
- modifiers: onlyOwner
- [Ext] setDogeVikingFundFee #
- modifiers: onlyOwner
- [Ext] setTxFee #
- modifiers: onlyOwner
- [Ext] setPoolAddress #
- modifiers: onlyOwner
- [Ext] transfer #
- [Ext] approve #
- [Ext] transferFrom #
- [Ext] allowance
- [Ext] increaseAllowance #
- [Ext] decreaseAllowance #