initial commit
This commit is contained in:
		
						commit
						020f49cd1e
					
				
							
								
								
									
										87
									
								
								IBSCoin.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								IBSCoin.sol
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
// SPDX-License-Identifier: WTFPL
 | 
			
		||||
pragma solidity ^0.8.4;
 | 
			
		||||
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/token/ERC20/ERC20Upgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/security/PausableUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/access/AccessControlUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/token/ERC20/extensions/draft-ERC20PermitUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/token/ERC20/extensions/ERC20VotesUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/token/ERC20/extensions/ERC20FlashMintUpgradeable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/proxy/utils/Initializable.sol";
 | 
			
		||||
import "@openzeppelin/contracts-upgradeable@4.5.0/proxy/utils/UUPSUpgradeable.sol";
 | 
			
		||||
 | 
			
		||||
/// @custom:security-contact vance@vance.land
 | 
			
		||||
contract IBSCoin is Initializable, ERC20Upgradeable, ERC20BurnableUpgradeable, PausableUpgradeable, AccessControlUpgradeable, ERC20PermitUpgradeable, ERC20VotesUpgradeable, ERC20FlashMintUpgradeable, UUPSUpgradeable {
 | 
			
		||||
    bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
 | 
			
		||||
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
 | 
			
		||||
    bytes32 public constant UPGRADER_ROLE = keccak256("UPGRADER_ROLE");
 | 
			
		||||
 | 
			
		||||
    /// @custom:oz-upgrades-unsafe-allow constructor
 | 
			
		||||
    constructor() initializer {}
 | 
			
		||||
 | 
			
		||||
    function initialize() initializer public {
 | 
			
		||||
        __ERC20_init("IBS Coin", "IBSC");
 | 
			
		||||
        __ERC20Burnable_init();
 | 
			
		||||
        __Pausable_init();
 | 
			
		||||
        __AccessControl_init();
 | 
			
		||||
        __ERC20Permit_init("IBS Coin");
 | 
			
		||||
        __ERC20FlashMint_init();
 | 
			
		||||
        __UUPSUpgradeable_init();
 | 
			
		||||
 | 
			
		||||
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
 | 
			
		||||
        _grantRole(PAUSER_ROLE, msg.sender);
 | 
			
		||||
        _mint(msg.sender, 69420 * 10 ** decimals());
 | 
			
		||||
        _grantRole(MINTER_ROLE, msg.sender);
 | 
			
		||||
        _grantRole(UPGRADER_ROLE, msg.sender);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function pause() public onlyRole(PAUSER_ROLE) {
 | 
			
		||||
        _pause();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function unpause() public onlyRole(PAUSER_ROLE) {
 | 
			
		||||
        _unpause();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {
 | 
			
		||||
        _mint(to, amount);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function _beforeTokenTransfer(address from, address to, uint256 amount)
 | 
			
		||||
        internal
 | 
			
		||||
        whenNotPaused
 | 
			
		||||
        override
 | 
			
		||||
    {
 | 
			
		||||
        super._beforeTokenTransfer(from, to, amount);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function _authorizeUpgrade(address newImplementation)
 | 
			
		||||
        internal
 | 
			
		||||
        onlyRole(UPGRADER_ROLE)
 | 
			
		||||
        override
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
    // The following functions are overrides required by Solidity.
 | 
			
		||||
 | 
			
		||||
    function _afterTokenTransfer(address from, address to, uint256 amount)
 | 
			
		||||
        internal
 | 
			
		||||
        override(ERC20Upgradeable, ERC20VotesUpgradeable)
 | 
			
		||||
    {
 | 
			
		||||
        super._afterTokenTransfer(from, to, amount);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function _mint(address to, uint256 amount)
 | 
			
		||||
        internal
 | 
			
		||||
        override(ERC20Upgradeable, ERC20VotesUpgradeable)
 | 
			
		||||
    {
 | 
			
		||||
        super._mint(to, amount);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function _burn(address account, uint256 amount)
 | 
			
		||||
        internal
 | 
			
		||||
        override(ERC20Upgradeable, ERC20VotesUpgradeable)
 | 
			
		||||
    {
 | 
			
		||||
        super._burn(account, amount);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
Version 2, December 2004
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 | 
			
		||||
 | 
			
		||||
Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed.
 | 
			
		||||
 | 
			
		||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
			
		||||
 | 
			
		||||
  0. You just DO WHAT THE FUCK YOU WANT TO.
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user