ZARP Token - Smart Contract Audit Report
Summary
ZARP ($ZARP) is a new Stablecoin on the Ethereum Blockchain.
Notes on the Contract:Audit Findings Summary
- There was no token allocation for our team to analyze as the project was recently deployed.
- The contract utilizes a Minter role, Burner role, Verifier role, and Default Admin role. The assigned addresses to these roles have access to certain functionality of the contract.
- Any Minter address has the ability to mint any amount of tokens to any Verified address at any time.
- Any Burner address can burn their own tokens to reduce the total supply. Only a Verified address can send tokens to a Burner address.
- Although the contract utilizes the Burner role, any user also has the ability to burn their own tokens to reduce the total supply.
- The Default Admin role previously had the ability to pause/unpause all trading at any time. As the Default Admin role has been transferred to the 0x00 address, this feature can no longer be utilized.
- The contract complies with the ERC20 standard.
- As the project is implemented with Solidity v0.8.7, it is protected from overflows.
- No external threats were identified.
- Date: October 18th, 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] IAccessControl
- [Ext] hasRole
- [Ext] getRoleAdmin
- [Ext] grantRole #
- [Ext] revokeRole #
- [Ext] renounceRole #
+ Context
- [Int] _msgSender
- [Int] _msgData
+ [Lib] Strings
- [Int] toString
- [Int] toHexString
- [Int] toHexString
+ [Int] IERC165
- [Ext] supportsInterface
+ ERC165 (IERC165)
- [Pub] supportsInterface
+ AccessControl (Context, IAccessControl, ERC165)
- [Pub] supportsInterface
- [Pub] hasRole
- [Int] _checkRole
- [Pub] getRoleAdmin
- [Pub] grantRole #
- modifiers: onlyRole
- [Pub] revokeRole #
- modifiers: onlyRole
- [Pub] renounceRole #
- [Int] _setupRole #
- [Int] _setRoleAdmin #
- [Prv] _grantRole #
- [Prv] _revokeRole #
+ Pausable (Context)
- [Pub] #
- [Pub] paused
- [Int] _pause #
- modifiers: whenNotPaused
- [Int] _unpause #
- modifiers: whenPaused
+ [Int] IERC20
- [Ext] totalSupply
- [Ext] balanceOf
- [Ext] transfer #
- [Ext] allowance
- [Ext] approve #
- [Ext] transferFrom #
+ [Int] IERC20Metadata (IERC20)
- [Ext] name
- [Ext] symbol
- [Ext] decimals
+ ERC20 (Context, IERC20, IERC20Metadata)
- [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] _beforeTokenTransfer #
- [Int] _afterTokenTransfer #
+ ERC20Burnable (Context, ERC20)
- [Pub] burn #
- [Pub] burnFrom #
+ ZARP (ERC20, ERC20Burnable, AccessControl, Pausable)
- [Pub] #
- modifiers: ERC20
- [Pub] verify #
- modifiers: whenNotPaused,onlyRole
- [Pub] removeVerification #
- modifiers: whenNotPaused,onlyRole
- [Pub] isVerified
- [Pub] mint #
- modifiers: onlyRole
- [Pub] burn #
- modifiers: onlyRole
- [Pub] burnFrom #
- modifiers: onlyRole
- [Pub] transfer #
- [Pub] pause #
- modifiers: onlyRole
- [Pub] unpause #
- modifiers: onlyRole
- [Int] _beforeTokenTransfer #
- modifiers: whenNotPaused