ETH Price: $2,157.51 (+0.77%)

Transaction Decoder

Block:
11107771 at Oct-22-2020 06:54:50 PM +UTC
Transaction Fee:
0.00328068 ETH $7.08
Gas Used:
72,904 Gas / 45 Gwei

Emitted Events:

289 DEX.Transfer( from=[Receiver] 0xf06e97f30ead2fceea67e344f71aa882c9126f07, to=[Sender] 0x1e8c12a5a17d069bf464cbb6d7a2e95c7272f576, value=458112383682506596 )
290 0xf06e97f30ead2fceea67e344f71aa882c9126f07.0xe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486( 0xe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486, 0x0000000000000000000000001e8c12a5a17d069bf464cbb6d7a2e95c7272f576, 000000000000000000000000000000000000000000000000065b8ac9289a6f64 )

Account State Difference:

  Address   Before After State Difference Code
0x1e8c12a5...c7272f576
6.52696341633526553 Eth
Nonce: 792
6.52368273633526553 Eth
Nonce: 793
0.00328068
0x35164151...3FbD5F11a
(Spark Pool)
93.425139046602589293 Eth93.428419726602589293 Eth0.00328068
0xF06E97f3...2C9126F07

Execution Trace

0xf06e97f30ead2fceea67e344f71aa882c9126f07.CALL( )
  • DEX.transfer( recipient=0x1e8c12a5a17D069bf464CbB6d7A2E95c7272f576, amount=458112383682506596 ) => ( True )
    //   _    _ _   _                __ _                            
    //  | |  (_) | | |              / _(_)                           
    //  | | ___| |_| |_ ___ _ __   | |_ _ _ __   __ _ _ __   ___ ___ 
    //  | |/ / | __| __/ _ \ '_ \  |  _| | '_ \ / _` | '_ \ / __/ _ \
    //  |   <| | |_| ||  __/ | | |_| | | | | | | (_| | | | | (_|  __/
    //  |_|\_\_|\__|\__\___|_| |_(_)_| |_|_| |_|\__,_|_| |_|\___\___|
    //
    //  DEX : the token for AlphaSwap & AlphaDex
    //
    //  https://www.AlphaSwap.org
    //
    pragma solidity ^0.5.16;
    
    interface IERC20 {
        function totalSupply() external view returns (uint);
        function balanceOf(address account) external view returns (uint);
        function transfer(address recipient, uint amount) external returns (bool);
        function allowance(address owner, address spender) external view returns (uint);
        function approve(address spender, uint amount) external returns (bool);
        function transferFrom(address sender, address recipient, uint amount) external returns (bool);
        event Transfer(address indexed from, address indexed to, uint value);
        event Approval(address indexed owner, address indexed spender, uint value);
    }
    
    contract Context {
        constructor () internal { }
        // solhint-disable-previous-line no-empty-blocks
    
        function _msgSender() internal view returns (address payable) {
            return msg.sender;
        }
    }
    
    contract ERC20 is Context, IERC20 {
        using SafeMath for uint;
    
        mapping (address => uint) private _balances;
    
        mapping (address => mapping (address => uint)) private _allowances;
    
        uint private _totalSupply;
        function totalSupply() public view returns (uint) {
            return _totalSupply;
        }
        function balanceOf(address account) public view returns (uint) {
            return _balances[account];
        }
        function transfer(address recipient, uint amount) public returns (bool) {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }
        function allowance(address owner, address spender) public view returns (uint) {
            return _allowances[owner][spender];
        }
        function approve(address spender, uint amount) public returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }
        function transferFrom(address sender, address recipient, uint amount) public returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }
        function increaseAllowance(address spender, uint addedValue) public returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
            return true;
        }
        function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
            return true;
        }
        function _transfer(address sender, address recipient, uint amount) internal {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");
    
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
        function _mint(address account, uint amount) internal {
            require(account != address(0), "ERC20: mint to the zero address");
    
            _totalSupply = _totalSupply.add(amount);
            _balances[account] = _balances[account].add(amount);
            emit Transfer(address(0), account, amount);
        }
        function _burn(address account, uint amount) internal {
            require(account != address(0), "ERC20: burn from the zero address");
    
            _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
            _totalSupply = _totalSupply.sub(amount);
            emit Transfer(account, address(0), amount);
        }
        function _approve(address owner, address spender, uint amount) internal {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");
    
            _allowances[owner][spender] = amount;
            emit Approval(owner, spender, amount);
        }
    }
    
    contract ERC20Detailed is IERC20 {
        string private _name;
        string private _symbol;
        uint8 private _decimals;
    
        constructor (string memory name, string memory symbol, uint8 decimals) public {
            _name = name;
            _symbol = symbol;
            _decimals = decimals;
        }
        function name() public view returns (string memory) {
            return _name;
        }
        function symbol() public view returns (string memory) {
            return _symbol;
        }
        function decimals() public view returns (uint8) {
            return _decimals;
        }
    }
    
    library SafeMath {
        function add(uint a, uint b) internal pure returns (uint) {
            uint c = a + b;
            require(c >= a, "SafeMath: addition overflow");
    
            return c;
        }
        function sub(uint a, uint b) internal pure returns (uint) {
            return sub(a, b, "SafeMath: subtraction overflow");
        }
        function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
            require(b <= a, errorMessage);
            uint c = a - b;
    
            return c;
        }
        function mul(uint a, uint b) internal pure returns (uint) {
            if (a == 0) {
                return 0;
            }
    
            uint c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");
    
            return c;
        }
        function div(uint a, uint b) internal pure returns (uint) {
            return div(a, b, "SafeMath: division by zero");
        }
        function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
            // Solidity only automatically asserts when dividing by 0
            require(b > 0, errorMessage);
            uint c = a / b;
    
            return c;
        }
    }
    
    library Address {
        function isContract(address account) internal view returns (bool) {
            bytes32 codehash;
            bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
            // solhint-disable-next-line no-inline-assembly
            assembly { codehash := extcodehash(account) }
            return (codehash != 0x0 && codehash != accountHash);
        }
    }
    
    library SafeERC20 {
        using SafeMath for uint;
        using Address for address;
    
        function safeTransfer(IERC20 token, address to, uint value) internal {
            callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
        }
    
        function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
            callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
        }
    
        function safeApprove(IERC20 token, address spender, uint value) internal {
            require((value == 0) || (token.allowance(address(this), spender) == 0),
                "SafeERC20: approve from non-zero to non-zero allowance"
            );
            callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
        }
        function callOptionalReturn(IERC20 token, bytes memory data) private {
            require(address(token).isContract(), "SafeERC20: call to non-contract");
    
            // solhint-disable-next-line avoid-low-level-calls
            (bool success, bytes memory returndata) = address(token).call(data);
            require(success, "SafeERC20: low-level call failed");
    
            if (returndata.length > 0) { // Return data is optional
                // solhint-disable-next-line max-line-length
                require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
            }
        }
    }
    
    contract DEX is ERC20, ERC20Detailed {
        using SafeERC20 for IERC20;
        using Address for address;
        using SafeMath for uint;
    
        address public governance;
        mapping (address => bool) public minters;
    
        constructor () public ERC20Detailed("AlphaDex", "DEX", 18) {
            governance = msg.sender;
        }
    
        function mint(address account, uint256 amount) public {
            require(minters[msg.sender], "!minter");
            _mint(account, amount);
        }
    
        function burn(uint256 amount) public {
            _burn(msg.sender, amount);
        }
    
        function setGovernance(address _governance) public {
            require(msg.sender == governance, "!governance");
            governance = _governance;
        }
    
        function addMinter(address _minter) public {
            require(msg.sender == governance, "!governance");
            minters[_minter] = true;
        }
    
        function removeMinter(address _minter) public {
            require(msg.sender == governance, "!governance");
            minters[_minter] = false;
        }
    }