EthereumEthereum
0x35...a2a3
Hacker Federation

Hacker Federation

HE-3

代币
市值
$1.00
 
价格
2%
此合同的源代码已经过验证!
合同元数据
编译器
0.6.12+commit.27d51765
语言
Solidity
合同源代码
文件 1 的 6:Address.sol
合同源代码
文件 2 的 6:Context.sol
合同源代码
文件 3 的 6:ERC20.sol
合同源代码
文件 4 的 6:IERC20.sol
合同源代码
文件 5 的 6:SafeMath.sol
合同源代码
文件 6 的 6:hrerc20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.6;

import "https://github.com/qq79324055/openzeppelin-contracts/blob/release-v3.0.0/contracts/token/ERC20/ERC20.sol";

interface HackerFederation {
    function isUser(address _userAddress) external view returns (bool);
}

contract HE3 is ERC20 {
    // Current supply
    uint256 public _currentSupply;
    // Manager
    address public _owner;
    // Burn address
    address public _burnAddress;
    // Fee address
    address public _feeAddress;
    // Initial Address
    address public _initialAddress;
    // Initial amount
    uint256 public _initialToken;
    // HF address
    address public _interfacehf;

    /**
     * Constuctor func.
     *
     * Requirements:
     *
     * - `initialSupply`: total amount
     * - `name`: token name
     * - `symbol`: token symbol
     */
    constructor(
        uint256 initialSupply, 
        string memory name, 
        string memory symbol, 
        address initialAddress, 
        uint256 initialToken, 
        address feeAddress, 
        address burnAddress,
        address hfcontract
    ) ERC20(name, symbol) public {
        _owner = msg.sender;
        _interfacehf = hfcontract;
        _initialAddress = initialAddress;
        _initialToken = initialToken;
        _feeAddress = feeAddress;
        _burnAddress = burnAddress;
        _totalSupply = _totalSupply.add(initialSupply * 10 ** uint256(decimals()));
        _balances[_initialAddress] = _balances[_initialAddress].add(_initialToken * 10 ** uint256(decimals()));
        _currentSupply = _currentSupply.add(_initialToken * 10 ** uint256(decimals()));
        emit Transfer(address(0), _initialAddress, _initialToken * 10 ** uint256(decimals()));
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "This function is restricted to the owner");
        _;
    }

    modifier notAddress0(address newAddress) {
        require(newAddress != address(0), "Address should not be address(0)");
        _;
    }


    // Update owner
    function updateOwnerAddress(address newOwnerAddress) public onlyOwner notAddress0(newOwnerAddress) {
        _owner = newOwnerAddress;
    }

    // Update burn address
    function updateBurnAddress(address newBurnAddress) public onlyOwner notAddress0(newBurnAddress) {
        _burnAddress = newBurnAddress;
    }

    // Update fee address
    function updateFeeAddress(address newFeeAddress) public onlyOwner notAddress0(newFeeAddress) {
        _feeAddress = newFeeAddress;
    }
    
    // Update hfcontract address
    function updateHfcontractAddress(address newHfcontractAddress) public onlyOwner notAddress0(newHfcontractAddress) {
        _interfacehf = newHfcontractAddress;
    }

    /**
     * Mint token, only owner have permission
     *
     * Requirements:
     *
     *  `userAddress`: to account address
     * - `userToken`: reward amount
     * - `feeToken`: fee amount
     */
    function mint(address userAddress, uint256 userToken, uint256 feeToken) public onlyOwner{
        require(userAddress != address(0), "ERC20: mint to the zero address");
        require(HackerFederation(_interfacehf).isUser(userAddress), "userAddress must be user");
        uint256 mintTotal = userToken.add(feeToken);
        _currentSupply = _currentSupply.add(mintTotal);
        require(_currentSupply <= _totalSupply, "TotalMintBalance should be less than or equal totalSupply");
        _balances[_feeAddress] = _balances[_feeAddress].add(feeToken);
        emit Transfer(address(0), _feeAddress, feeToken);
        // mint to user
        _balances[userAddress] = _balances[userAddress].add(userToken);
        emit Transfer(address(0), userAddress, userToken);
    }

    /**
     * Only owner can burn token
     *
     * Requirements:
     *
     * - `_amount`: burn amount
     */
    function burnFromOwner(uint256 amount) public onlyOwner {
        _totalSupply = _totalSupply.sub(amount);
        _balances[_burnAddress] = _balances[_burnAddress].add(amount);
        emit Transfer(address(0), _burnAddress, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        if (recipient == _burnAddress) {
            _totalSupply = _totalSupply.sub(amount);
            _currentSupply = _currentSupply.sub(amount);
        }

        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
}
设置
{
  "compilationTarget": {
    "hrerc20.sol": "HE3"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"initialAddress","type":"address"},{"internalType":"uint256","name":"initialToken","type":"uint256"},{"internalType":"address","name":"feeAddress","type":"address"},{"internalType":"address","name":"burnAddress","type":"address"},{"internalType":"address","name":"hfcontract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initialAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initialToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_interfacehf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFromOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"userToken","type":"uint256"},{"internalType":"uint256","name":"feeToken","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBurnAddress","type":"address"}],"name":"updateBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeAddress","type":"address"}],"name":"updateFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHfcontractAddress","type":"address"}],"name":"updateHfcontractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwnerAddress","type":"address"}],"name":"updateOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]