Monopoly Finance
Smart Contract Audit Report
Audit Summary
Monopoly Finance is releasing a new staking platform where users can earn rewards in their native token with additional rewards from Strategy contracts.
For this audit, we reviewed the project team's MonoMaster, BaseStrategy, StrategyStorage, and StrategyZyber contracts at commit 5f78aa7b5d05c484d98cb17c3bf320d8b862fb53 on the team's GitHub repository.
Audit Findings
No findings were identified, though some centralized aspects are present.
Date: April 5th, 2023.
Contracts Overview
MonoMaster Contract:
- As the contracts are implemented with Solidity v0.8, they are safe from any possible overflows/underflows.
- The team must exercise caution when assigning the staking tokens to avoid using fee-on-transfer tokens and ERC-777 tokens.
StrategyZyber Contract:
- This contract allows Externally Owned Addresses (EOAs) and whitelisted contracts to stake tokens into various Pools to earn rewards in the project's native token.
- Any address may deposit when the whitelist is not enabled.
- Each Pool has its own staking token and Strategy contract associated with it.
- All tokens staked into a Pool will be deposited in the corresponding Strategy.
- A deposit fee may be taken and transferred to the PerformanceFee address controlled by the team if the Pool has a fee percentage set.
- Users may optionally specify a referrer address if the EarningReferral fee has been set.
- The EarningReferral contract is outside the scope of this audit so we are unable to give an assessment in regard to security.
- Users will receive a reward amount on each block based on the amount staked and the amount of points allocated to the pool.
- On deposits and withdrawals, any pending rewards for the Pool are calculated and minted to the contract.
- When a Pool's rewards are updated an additional "dev percentage" of rewards tokens are minted to the Dev address.
- An additional fee may be taken during withdraws if the Pool has withdrawal fees enabled.
- The withdrawal fee will decrease over time from the last time the user withdrew from a Pool until reaching the "minimum withdraw fee".
- Users may harvest their rewards at any time. This will collect the user's rewards from this contract as well as any pending rewards from the Strategy contract.
- If the harvesting user has supplied a referrer address, the referrer will be minted a "commission amount" of rewards tokens.
- The user may also trigger an emergency withdraw, which will withdraw all of the user's deposited tokens and forfeit any earned rewards.
- The owner may add a new Pool at any time.
- The owner may update a Pool's allocated points, deposit fee, and whether there is a withdraw fee at any time.
- The owner may migrate a Pool's associated Strategy at any time. This will transfer all deposited tokens to the new Strategy.
- The owner may update the Strategy for a Pool at any time.
- The owner may manually mint any amount of rewards tokens to any address at any time.
- The owner may update the EarningReferral, Dev, and PerformanceFee addresses at any time.
- The owner may set the Dev rate and rewards rate at any time.
- The owner may add and remove any address from the whitelist at any time.
- The owner may toggle whether contracts must be on the whitelist to deposit and withdraw at any time.
- The owner may withdraw any errant tokens from a Strategy address at any time.
- The owner may update a Strategy's token allowances at any time.
- The owner may update a Strategy's performance fee basis points at any time.
- The owner may update the commission amount percentage at any time.
StrategyStorage Contract:
- This contract functions as a Strategy for the MonoMaster contract. This means the MonoMaster contract is intended to be the owner of this contract.
- The owner may deposit a specified "deposit token" to earn rewards on behalf of users.
- The owner may withdraw tokens on behalf of users. An additional fee may be taken if the Pool associated with this contract has withdrawals enabled.
- All deposited tokens are deposited into a Staking contract.
- The Staking contract is outside the scope of this audit so we are unable to give an assessment in regard to security.
- Users will receive rewards per token staked as the contract accumulates rewards from the Strategy contract.
- On deposits and withdrawals, any pending rewards are calculated and minted to the user.
- The owner may withdraw any non-deposit token from the contract at any time.
- The owner may set the allowance for a specified token at any time.
- The owner may migrate at any time. This will transfer all deposit and rewards tokens to a new address.
- The owner may transfer ownership at any time.
- The owner may set the performance fee at any time.
- This contract is used to manage users' reward debt in the StrategyZyber contract.
- The owner may increase and decrease a user's reward debt by a specified amount at any time.
- The owner may set a user's reward debt to any value at any time.
- The owner may increase the reward tokens per share at any time.
Audit Results
Vulnerability Category | Notes | Result |
---|---|---|
Arbitrary Jump/Storage Write | N/A | PASS |
Centralization of Control |
|
WARNING |
Compiler Issues | N/A | PASS |
Delegate Call to Untrusted Contract | N/A | PASS |
Dependence on Predictable Variables | N/A | PASS |
Ether/Token Theft | N/A | PASS |
Flash Loans | N/A | PASS |
Front Running | N/A | PASS |
Improper Events | N/A | PASS |
Improper Authorization Scheme | N/A | PASS |
Integer Over/Underflow | N/A | PASS |
Logical Issues | N/A | PASS |
Oracle Issues | N/A | PASS |
Outdated Compiler Version | N/A | PASS |
Race Conditions | N/A | PASS |
Reentrancy | N/A | PASS |
Signature Issues | N/A | PASS |
Sybil Attack | N/A | PASS |
Unbounded Loops | N/A | PASS |
Unused Code | N/A | PASS |
Overall Contract Safety | PASS |
MonoMaster Contract
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] Constructor #
- [Pub] owner
- [Int] _checkOwner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Int] _transferOwnership #
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Int] IERC20Permit
- [Ext] permit #
- [Ext] nonces
- [Ext] DOMAIN_SEPARATOR
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Int] functionStaticCall
- [Int] functionStaticCall
- [Int] functionDelegateCall #
- [Int] functionDelegateCall #
- [Int] verifyCallResultFromTarget
- [Int] verifyCallResult
- [Prv] _revert
+ [Lib] SafeERC20
- [Int] safeTransfer #
- [Int] safeTransferFrom #
- [Int] safeApprove #
- [Int] safeIncreaseAllowance #
- [Int] safeDecreaseAllowance #
- [Int] safePermit #
- [Prv] _callOptionalReturn #
+ [Int] IStrategy
- [Ext] deposit #
- [Ext] withdraw #
- [Ext] inCaseTokensGetStuck #
- [Ext] setAllowances #
- [Ext] revokeAllowance #
- [Ext] migrate #
- [Ext] onMigration #
- [Ext] pendingTokens
- [Ext] transferOwnership #
- [Ext] setPerformanceFeeBips #
+ [Int] IERC20Metadata (IERC20)
- [Ext] name
- [Ext] symbol
- [Ext] decimals
+ ERC20 (Context, IERC20, IERC20Metadata)
- [Pub] Constructor #
- [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] _spendAllowance #
- [Int] _beforeTokenTransfer #
- [Int] _afterTokenTransfer #
+ [Lib] Math
- [Int] max
- [Int] min
- [Int] average
- [Int] ceilDiv
- [Int] mulDiv
- [Int] mulDiv
- [Int] sqrt
- [Int] sqrt
- [Int] log2
- [Int] log2
- [Int] log10
- [Int] log10
- [Int] log256
- [Int] log256
+ [Lib] Strings
- [Int] toString
- [Int] toHexString
- [Int] toHexString
- [Int] toHexString
+ [Lib] ECDSA
- [Prv] _throwError
- [Int] tryRecover
- [Int] recover
- [Int] tryRecover
- [Int] recover
- [Int] tryRecover
- [Int] recover
- [Int] toEthSignedMessageHash
- [Int] toEthSignedMessageHash
- [Int] toTypedDataHash
+ EIP712
- [Pub] Constructor #
- [Int] _domainSeparatorV4
- [Prv] _buildDomainSeparator
- [Int] _hashTypedDataV4
+ [Lib] Counters
- [Int] current
- [Int] increment #
- [Int] decrement #
- [Int] reset #
+ ERC20Permit (ERC20, IERC20Permit, EIP712)
- [Pub] Constructor #
- modifiers: EIP712
- [Pub] permit #
- [Pub] nonces
- [Ext] DOMAIN_SEPARATOR
- [Int] _useNonce #
+ ERC20Burnable (Context, ERC20)
- [Pub] burn #
- [Pub] burnFrom #
+ [Int] IAccessControl
- [Ext] hasRole
- [Ext] getRoleAdmin
- [Ext] grantRole #
- [Ext] revokeRole #
- [Ext] renounceRole #
+ [Int] IERC165
- [Ext] supportsInterface
+ ERC165 (IERC165)
- [Pub] supportsInterface
+ AccessControl (Context, IAccessControl, ERC165)
- [Pub] supportsInterface
- [Pub] hasRole
- [Int] _checkRole
- [Int] _checkRole
- [Pub] getRoleAdmin
- [Pub] grantRole #
- modifiers: onlyRole
- [Pub] revokeRole #
- modifiers: onlyRole
- [Pub] renounceRole #
- [Int] _setupRole #
- [Int] _setRoleAdmin #
- [Int] _grantRole #
- [Int] _revokeRole #
+ Pausable (Context)
- [Pub] Constructor #
- [Pub] paused
- [Int] _requireNotPaused
- [Int] _requirePaused
- [Int] _pause #
- modifiers: whenNotPaused
- [Int] _unpause #
- modifiers: whenPaused
+ MonopolyToken (ERC20Burnable, ERC20Permit, AccessControl, Pausable)
- [Pub] Constructor #
- modifiers: ERC20,ERC20Permit
- [Pub] mint #
- modifiers: onlyRole
- [Ext] getMaxTotalSupply
- [Pub] pause #
- modifiers: onlyRole
- [Pub] unpause #
- modifiers: onlyRole
- [Int] _beforeTokenTransfer #
- modifiers: whenNotPaused
- [Ext] rescueTokens #
- modifiers: onlyRole
+ [Int] IEarningsReferral
- [Ext] recordReferral #
- [Ext] recordReferralCommission #
- [Ext] getReferrer
+ MonoMaster (Ownable)
- [Pub] Constructor #
- [Pub] poolLength
- [Pub] pendingEarnings
- [Ext] pendingTokens
- [Pub] reward
- [Pub] earningPerYear
- [Pub] earningPerYearToMonopoly
- [Pub] totalShares
- [Pub] totalLP
- [Pub] userShares
- [Pub] updatePool #
- [Pub] massUpdatePools #
- [Ext] deposit #
- modifiers: onlyApprovedContractOrEOA
- [Ext] withdraw #
- modifiers: onlyApprovedContractOrEOA
- [Ext] harvest #
- modifiers: onlyApprovedContractOrEOA
- [Ext] withdrawAndHarvest #
- modifiers: onlyApprovedContractOrEOA
- [Ext] emergencyWithdraw #
- modifiers: onlyApprovedContractOrEOA
- [Ext] add #
- modifiers: onlyOwner
- [Ext] set #
- modifiers: onlyOwner
- [Ext] migrateStrategy #
- modifiers: onlyOwner
- [Ext] setStrategy #
- modifiers: onlyOwner
- [Ext] manualMint #
- modifiers: onlyOwner
- [Ext] setDev #
- modifiers: onlyOwner
- [Ext] setPerfomanceFeeAddress #
- modifiers: onlyOwner
- [Ext] setDevMintBips #
- modifiers: onlyOwner
- [Ext] setEarningsEmission #
- modifiers: onlyOwner
- [Ext] modifyApprovedContracts #
- modifiers: onlyOwner
- [Ext] setOnlyApprovedContractOrEOAStatus #
- modifiers: onlyOwner
- [Ext] inCaseTokensGetStuck #
- modifiers: onlyOwner
- [Ext] setAllowances #
- modifiers: onlyOwner
- [Ext] revokeAllowance #
- modifiers: onlyOwner
- [Ext] setPerformanceFeeBips #
- modifiers: onlyOwner
- [Int] safeEarningsTransfer #
- [Pub] getWithdrawFee
- [Pub] setWithdrawFee #
- modifiers: onlyOwner
- [Pub] setEarningsReferral #
- modifiers: onlyOwner
- [Pub] setReferralCommissionRate #
- modifiers: onlyOwner
- [Int] payReferralCommission #
StrategyZyber Contract
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] Constructor #
- [Pub] owner
- [Int] _checkOwner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Int] _transferOwnership #
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Int] IERC20Permit
- [Ext] permit #
- [Ext] nonces
- [Ext] DOMAIN_SEPARATOR
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Int] functionStaticCall
- [Int] functionStaticCall
- [Int] functionDelegateCall #
- [Int] functionDelegateCall #
- [Int] verifyCallResultFromTarget
- [Int] verifyCallResult
- [Prv] _revert
+ [Lib] SafeERC20
- [Int] safeTransfer #
- [Int] safeTransferFrom #
- [Int] safeApprove #
- [Int] safeIncreaseAllowance #
- [Int] safeDecreaseAllowance #
- [Int] safePermit #
- [Prv] _callOptionalReturn #
+ [Int] IStrategy
- [Ext] deposit #
- [Ext] withdraw #
- [Ext] inCaseTokensGetStuck #
- [Ext] setAllowances #
- [Ext] revokeAllowance #
- [Ext] migrate #
- [Ext] onMigration #
- [Ext] pendingTokens
- [Ext] transferOwnership #
- [Ext] setPerformanceFeeBips #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] Constructor #
- [Pub] owner
- [Int] _checkOwner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Int] _transferOwnership #
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Int] IERC20Permit
- [Ext] permit #
- [Ext] nonces
- [Ext] DOMAIN_SEPARATOR
+ [Lib] Address
- [Int] isContract
- [Int] sendValue #
- [Int] functionCall #
- [Int] functionCall #
- [Int] functionCallWithValue #
- [Int] functionCallWithValue #
- [Int] functionStaticCall
- [Int] functionStaticCall
- [Int] functionDelegateCall #
- [Int] functionDelegateCall #
- [Int] verifyCallResultFromTarget
- [Int] verifyCallResult
- [Prv] _revert
+ [Lib] SafeERC20
- [Int] safeTransfer #
- [Int] safeTransferFrom #
- [Int] safeApprove #
- [Int] safeIncreaseAllowance #
- [Int] safeDecreaseAllowance #
- [Int] safePermit #
- [Prv] _callOptionalReturn #
+ [Int] IERC20Metadata (IERC20)
- [Ext] name
- [Ext] symbol
- [Ext] decimals
+ ERC20 (Context, IERC20, IERC20Metadata)
- [Pub] Constructor #
- [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] _spendAllowance #
- [Int] _beforeTokenTransfer #
- [Int] _afterTokenTransfer #
+ [Lib] Math
- [Int] max
- [Int] min
- [Int] average
- [Int] ceilDiv
- [Int] mulDiv
- [Int] mulDiv
- [Int] sqrt
- [Int] sqrt
- [Int] log2
- [Int] log2
- [Int] log10
- [Int] log10
- [Int] log256
- [Int] log256
+ [Lib] Strings
- [Int] toString
- [Int] toHexString
- [Int] toHexString
- [Int] toHexString
+ [Lib] ECDSA
- [Prv] _throwError
- [Int] tryRecover
- [Int] recover
- [Int] tryRecover
- [Int] recover
- [Int] tryRecover
- [Int] recover
- [Int] toEthSignedMessageHash
- [Int] toEthSignedMessageHash
- [Int] toTypedDataHash
+ EIP712
- [Pub] Constructor #
- [Int] _domainSeparatorV4
- [Prv] _buildDomainSeparator
- [Int] _hashTypedDataV4
+ [Lib] Counters
- [Int] current
- [Int] increment #
- [Int] decrement #
- [Int] reset #
+ ERC20Permit (ERC20, IERC20Permit, EIP712)
- [Pub] Constructor #
- modifiers: EIP712
- [Pub] permit #
- [Pub] nonces
- [Ext] DOMAIN_SEPARATOR
- [Int] _useNonce #
+ ERC20Burnable (Context, ERC20)
- [Pub] burn #
- [Pub] burnFrom #
+ [Int] IAccessControl
- [Ext] hasRole
- [Ext] getRoleAdmin
- [Ext] grantRole #
- [Ext] revokeRole #
- [Ext] renounceRole #
+ [Int] IERC165
- [Ext] supportsInterface
+ ERC165 (IERC165)
- [Pub] supportsInterface
+ AccessControl (Context, IAccessControl, ERC165)
- [Pub] supportsInterface
- [Pub] hasRole
- [Int] _checkRole
- [Int] _checkRole
- [Pub] getRoleAdmin
- [Pub] grantRole #
- modifiers: onlyRole
- [Pub] revokeRole #
- modifiers: onlyRole
- [Pub] renounceRole #
- [Int] _setupRole #
- [Int] _setRoleAdmin #
- [Int] _grantRole #
- [Int] _revokeRole #
+ Pausable (Context)
- [Pub] Constructor #
- [Pub] paused
- [Int] _requireNotPaused
- [Int] _requirePaused
- [Int] _pause #
- modifiers: whenNotPaused
- [Int] _unpause #
- modifiers: whenPaused
+ MonopolyToken (ERC20Burnable, ERC20Permit, AccessControl, Pausable)
- [Pub] Constructor #
- modifiers: ERC20,ERC20Permit
- [Pub] mint #
- modifiers: onlyRole
- [Ext] getMaxTotalSupply
- [Pub] pause #
- modifiers: onlyRole
- [Pub] unpause #
- modifiers: onlyRole
- [Int] _beforeTokenTransfer #
- modifiers: whenNotPaused
- [Ext] rescueTokens #
- modifiers: onlyRole
+ [Int] IEarningsReferral
- [Ext] recordReferral #
- [Ext] recordReferralCommission #
- [Ext] getReferrer
+ MonoMaster (Ownable)
- [Pub] Constructor #
- [Pub] poolLength
- [Pub] pendingEarnings
- [Ext] pendingTokens
- [Pub] reward
- [Pub] earningPerYear
- [Pub] earningPerYearToMonopoly
- [Pub] totalShares
- [Pub] totalLP
- [Pub] userShares
- [Pub] updatePool #
- [Pub] massUpdatePools #
- [Ext] deposit #
- modifiers: onlyApprovedContractOrEOA
- [Ext] withdraw #
- modifiers: onlyApprovedContractOrEOA
- [Ext] harvest #
- modifiers: onlyApprovedContractOrEOA
- [Ext] withdrawAndHarvest #
- modifiers: onlyApprovedContractOrEOA
- [Ext] emergencyWithdraw #
- modifiers: onlyApprovedContractOrEOA
- [Ext] add #
- modifiers: onlyOwner
- [Ext] set #
- modifiers: onlyOwner
- [Ext] migrateStrategy #
- modifiers: onlyOwner
- [Ext] setStrategy #
- modifiers: onlyOwner
- [Ext] manualMint #
- modifiers: onlyOwner
- [Ext] setDev #
- modifiers: onlyOwner
- [Ext] setPerfomanceFeeAddress #
- modifiers: onlyOwner
- [Ext] setDevMintBips #
- modifiers: onlyOwner
- [Ext] setEarningsEmission #
- modifiers: onlyOwner
- [Ext] modifyApprovedContracts #
- modifiers: onlyOwner
- [Ext] setOnlyApprovedContractOrEOAStatus #
- modifiers: onlyOwner
- [Ext] inCaseTokensGetStuck #
- modifiers: onlyOwner
- [Ext] setAllowances #
- modifiers: onlyOwner
- [Ext] revokeAllowance #
- modifiers: onlyOwner
- [Ext] setPerformanceFeeBips #
- modifiers: onlyOwner
- [Int] safeEarningsTransfer #
- [Pub] getWithdrawFee
- [Pub] setWithdrawFee #
- modifiers: onlyOwner
- [Pub] setEarningsReferral #
- modifiers: onlyOwner
- [Pub] setReferralCommissionRate #
- modifiers: onlyOwner
- [Int] payReferralCommission #
+ BaseStrategy (IStrategy, Ownable)
- [Pub] Constructor #
- [Ext] pendingTokens
- [Ext] deposit #
- modifiers: onlyOwner
- [Ext] withdraw #
- modifiers: onlyOwner
- [Ext] inCaseTokensGetStuck #
- modifiers: onlyOwner
- [Ext] setAllowances #
- modifiers: onlyOwner
- [Ext] revokeAllowance #
- modifiers: onlyOwner
- [Ext] migrate #
- modifiers: onlyOwner
- [Ext] onMigration #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Ext] setPerformanceFeeBips #
- modifiers: onlyOwner
+ StrategyStorage (Ownable)
- [Ext] increaseRewardDebt #
- modifiers: onlyOwner
- [Ext] decreaseRewardDebt #
- modifiers: onlyOwner
- [Ext] setRewardDebt #
- modifiers: onlyOwner
- [Ext] increaseRewardTokensPerShare #
- modifiers: onlyOwner
+ [Int] IBoringERC20
- [Ext] mint #
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] allowance
- [Ext] approve #
- [Ext] permit #
+ [Int] IMultipleRewards
- [Ext] onZyberReward #
- [Ext] pendingTokens
- [Ext] rewardToken
- [Ext] poolRewardsPerSec
+ [Int] IZyberChef
- [Ext] deposit #
- [Ext] withdraw #
- [Ext] pendingTokens
- [Ext] userInfo
+ StrategyZyber (BaseStrategy)
- [Pub] Constructor #
- modifiers: BaseStrategy
- [Pub] checkReward
- [Pub] pendingRewards
- [Ext] rewardTokens
- [Ext] pendingTokens
- [Ext] harvest #
- [Ext] deposit #
- modifiers: onlyOwner
- [Ext] withdraw #
- modifiers: onlyOwner
- [Ext] migrate #
- modifiers: onlyOwner
- [Ext] onMigration #
- modifiers: onlyOwner
- [Ext] setAllowances #
- modifiers: onlyOwner
- [Int] _claimRewards #
- [Int] _harvest #
- [Int] _safeRewardTokenTransfer #
StrategyStorage Contract
($) = payable function
# = non-constant function
Int = Internal
Ext = External
Pub = Public
+ Context
- [Int] _msgSender
- [Int] _msgData
+ Ownable (Context)
- [Pub] Constructor #
- [Pub] owner
- [Int] _checkOwner
- [Pub] renounceOwnership #
- modifiers: onlyOwner
- [Pub] transferOwnership #
- modifiers: onlyOwner
- [Int] _transferOwnership #
+ StrategyStorage (Ownable)
- [Ext] increaseRewardDebt #
- modifiers: onlyOwner
- [Ext] decreaseRewardDebt #
- modifiers: onlyOwner
- [Ext] setRewardDebt #
- modifiers: onlyOwner
- [Ext] increaseRewardTokensPerShare #
- modifiers: onlyOwner
About SourceHat
SourceHat has quickly grown to have one of the most experienced and well-equipped smart contract auditing teams in the industry. Our team has conducted 1800+ solidity smart contract audits covering all major project types and protocols, securing a total of over $50 billion U.S. dollars in on-chain value!
Our firm is well-reputed in the community and is trusted as a top smart contract auditing company for the review of solidity code, no matter how complex. Our team of experienced solidity smart contract auditors performs audits for tokens, NFTs, crowdsales, marketplaces, gambling games, financial protocols, and more!
Contact us today to get a free quote for a smart contract audit of your project!
What is a SourceHat Audit?
Typically, a smart contract audit is a comprehensive review process designed to discover logical errors, security vulnerabilities, and optimization opportunities within code. A SourceHat Audit takes this a step further by verifying economic logic to ensure the stability of smart contracts and highlighting privileged functionality to create a report that is easy to understand for developers and community members alike.
How Do I Interpret the Findings?
Each of our Findings will be labeled with a Severity level. We always recommend the team resolve High, Medium, and Low severity findings prior to deploying the code to the mainnet. Here is a breakdown on what each Severity level means for the project:
- High severity indicates that the issue puts a large number of users' funds at risk and has a high probability of exploitation, or the smart contract contains serious logical issues which can prevent the code from operating as intended.
- Medium severity issues are those which place at least some users' funds at risk and has a medium to high probability of exploitation.
- Low severity issues have a relatively minor risk association; these issues have a low probability of occurring or may have a minimal impact.
- Informational issues pose no immediate risk, but inform the project team of opportunities for gas optimizations and following smart contract security best practices.