Address io1t585efypl4e9ex7xks2upnjm8saawfk0v0s5sj

Contract Overview

Balance:
0 IOTX

IOTX Value:
$ 0

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
fdcf19defdc3f333eba89464f1bf977e7d3f059418b3a60c7152be790e5d7148 22818330 2023-03-25 23:04:25 +0000 UTC about an hour ago io146r64l3l7pgwdwvs0kvvklmltgr5lwzd6uttk9  IN    Contract: GFS 0 IOTX 0.237447
d1e196b9018711ba4251d9dae5d3620e7206b4513014eccc5707fb697e738f91 22817737 2023-03-25 22:15:00 +0000 UTC 2 hours ago io10f90e6ht9angmtqnlau5h4q80pcewwr9hzcdhz  IN    Contract: GFS 0 IOTX 0.237447
77583b4ab29c62b1330aa3895ead4248679ca3b8378668c7efe315cc35f6d6bb 22817689 2023-03-25 22:11:00 +0000 UTC 2 hours ago io10f90e6ht9angmtqnlau5h4q80pcewwr9hzcdhz  IN    Contract: GFS 0 IOTX 0.237447
92d55a1099f9fc72febea3fd5150c2cfa13498b6cd5a7c859f4414e7a59712cc 22817650 2023-03-25 22:07:45 +0000 UTC 2 hours ago io10f90e6ht9angmtqnlau5h4q80pcewwr9hzcdhz  IN    Contract: GFS 0 IOTX 0.237447
1a18b6bae595072b9e8246cf99a2671c55a91e2ec582d42b123242fc477af491 22817485 2023-03-25 21:54:00 +0000 UTC 2 hours ago io1vdq95ekue67uwg9aygy443eha8nle0sypy8sch  IN    Contract: GFS 0 IOTX 0.237447
22ec5a67e00e5d409402b67ea7778e0c6fdc1b7bfb215b2d12667175b2f3a20f 22817424 2023-03-25 21:48:55 +0000 UTC 2 hours ago io1vdq95ekue67uwg9aygy443eha8nle0sypy8sch  IN    Contract: GFS 0 IOTX 0.237447
579a23636bfd68c451ed9ea49ce5fa9a16974be562f33743861b6ed52a6e8343 22817360 2023-03-25 21:43:35 +0000 UTC 2 hours ago io1vdq95ekue67uwg9aygy443eha8nle0sypy8sch  IN    Contract: GFS 0 IOTX 0.237447
5c998b8f8f534581d33723d33966a411ac6578b665a086e2dd1a466fb46f0928 22817288 2023-03-25 21:37:35 +0000 UTC 3 hours ago io1hv5ewj4srp55ume69t7mn6vs4ry6p7thuu5970  IN    Contract: GFS 0 IOTX 0.039044
54c4cc27a77d68ec6c6f2608f1c53d60b43b8e497c1ea238d3059dcd88e6b8e5 22816103 2023-03-25 19:58:50 +0000 UTC 4 hours ago io1h9gq34pv2twcdn5fgexcaptmj5x9zzf599478e  IN    Contract: GFS 0 IOTX 0.048325
6ed42503c2957147ce0f0425f813b031e6e1c8b758939880b704e757d54c790a 22815331 2023-03-25 18:54:30 +0000 UTC 5 hours ago io1ulrfdvduy9x40n7j468cg5wlj44efc8qanhga9  IN    Contract: GFS 0 IOTX 0.237447
f842e469dd153d1b830ec120834ef3a16060ae0efa4d5f7e9a3a63d9c153b8ae 22814034 2023-03-25 17:06:25 +0000 UTC 7 hours ago io1qksv6k46h0frq4snupkka4uq90yj2ttswxmalq  IN    Contract: GFS 0 IOTX 0.237447
9e0b4bf299e2d1a0a3552ad130a1b045274281a3e5409a8c1b8df2563540d886 22814022 2023-03-25 17:05:25 +0000 UTC 7 hours ago io1qksv6k46h0frq4snupkka4uq90yj2ttswxmalq  IN    Contract: GFS 0 IOTX 0.237447
1af32fbf16a36e68cf364b62e2ef5a78327f7be80f47c5f07d597679940ed64e 22814009 2023-03-25 17:04:20 +0000 UTC 7 hours ago io1qksv6k46h0frq4snupkka4uq90yj2ttswxmalq  IN    Contract: GFS 0 IOTX 0.237447
c6dd2f137c1e2694589fb5e4d93355e92abe43c922ad0b3f630d3cb7bbbfa89d 22813758 2023-03-25 16:43:25 +0000 UTC 7 hours ago io1n4nnex7znqp6etxjc2cyg5selhn66kffy6gu3d  IN    Contract: GFS 0 IOTX 0.237447
e09154345edffcb685e7d02119e7615a8df3ab40d8e1a86d579ab949716dc95a 22813109 2023-03-25 15:49:20 +0000 UTC 8 hours ago io1ulrfdvduy9x40n7j468cg5wlj44efc8qanhga9  IN    Contract: GFS 0 IOTX 0.237447
0896ac8bc456365b4d37718431842f76bd404358e75c1be246af31571228fb16 22812355 2023-03-25 14:46:30 +0000 UTC 9 hours ago io14wf6h2sy0rg5t3rvz3g6rsnp6k59d2ec9ktptd  IN    Contract: GFS 0 IOTX 0.237447
2a47ba1ca15a9cba59b04953d005a70a6e558159e3b4950797bfb9a2dc0b4062 22812340 2023-03-25 14:45:15 +0000 UTC 9 hours ago io14wf6h2sy0rg5t3rvz3g6rsnp6k59d2ec9ktptd  IN    Contract: GFS 0 IOTX 0.237447
6418a6bf52f1ba697e60c506bae1c73427572eeb82b1c91f2a37ea85fd1ee99c 22812329 2023-03-25 14:44:20 +0000 UTC 9 hours ago io14wf6h2sy0rg5t3rvz3g6rsnp6k59d2ec9ktptd  IN    Contract: GFS 0 IOTX 0.237447
c446d1b0a50a99c9987c4cf163aae62e23a257dd9028e5972789b7d8e8c5dd7a 22811748 2023-03-25 13:55:55 +0000 UTC 10 hours ago io1vdq95ekue67uwg9aygy443eha8nle0sypy8sch  IN    Contract: GFS 0 IOTX 0.039044
a557ec8baf2e63ce0913ddea0901f21167dcc0d1c51289987832dd558f6e3482 22811170 2023-03-25 13:07:45 +0000 UTC 11 hours ago io1qf0c57dg8un0n305tr0eclz0m378rx7nx9xvqq  IN    Contract: GFS 0 IOTX 0.051344
ffe6e527a2f7ff25b0336fe31b314d05bc994bac906c430d3c15b1732374a587 22810571 2023-03-25 12:17:50 +0000 UTC 12 hours ago io1qqrgthxs06zza8f9e7uzm9270gj0r5smdyz87z  IN    Contract: GFS 0 IOTX 0.039044
6dbe205843be781f067a054d078e17091666dd5863df7cb3cfa90821d60fe7ce 22809766 2023-03-25 11:10:45 +0000 UTC 13 hours ago io1s90s5cl4znfepkedpwctzum4lrx3z5fma7eduy  IN    Contract: GFS 0 IOTX 0.039044
59a1d4985d978f29608f9b85f029042755f3193c76f1962d51e3cb6e4ef30e53 22809314 2023-03-25 10:33:05 +0000 UTC 14 hours ago io1ulrfdvduy9x40n7j468cg5wlj44efc8qanhga9  IN    Contract: GFS 0 IOTX 0.237447
cd021bb29fb51a22465bb96ad96b1857778710cddfa55b233fa7e031e2e545b0 22805378 2023-03-25 05:05:00 +0000 UTC 19 hours ago io1qksv6k46h0frq4snupkka4uq90yj2ttswxmalq  IN    Contract: GFS 0 IOTX 0.237447
a043473690305444302c252a347341ca701d0b305b792f361326658b87e37620 22805313 2023-03-25 04:59:35 +0000 UTC 19 hours ago io1qksv6k46h0frq4snupkka4uq90yj2ttswxmalq  IN    Contract: GFS 0 IOTX 0.237447
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GFS

Compiler Version
v0.5.5+commit.47a71e8f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 12: ./contract/ownership/DSAuthority.sol
pragma solidity ^0.5.0;

interface DSAuthority {
    function canCall(
        address src,
        address dst,
        bytes4 sig
    ) external view returns (bool);
}

File 2 of 12: ./contract/token/DSToken.sol
pragma solidity ^0.5.0;

import "../math/SafeMath.sol";
import "../ownership/DSAuth.sol";

contract DSToken is DSAuth {
    using SafeMath for uint256;
    bool public _stopped;
    uint256 internal _totalSupply;
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;
    string private _name;
    string private _symbol;

    constructor(string memory symbol_, string memory name_) public {
        _symbol = symbol_;
        _name = name_;
    }

    event Approval(address indexed src, address indexed guy, uint256 wad);
    event Transfer(address indexed src, address indexed dst, uint256 wad);
    event Mint(address indexed guy, uint256 wad);
    event Burn(address indexed guy, uint256 wad);
    event Stop();
    event Start();

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        require(
            account != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[account];
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    modifier stoppable {
        require(!_stopped, "ds-stop-is-stopped");
        _;
    }

    function approve(address guy) external returns (bool) {
        return approve(guy, uint256(-1));
    }

    function approve(address guy, uint256 wad) public stoppable returns (bool) {
        require(guy != address(0), "ERC20: approve to the zero address");

        _allowances[msg.sender][guy] = wad;

        emit Approval(msg.sender, guy, wad);

        return true;
    }

    function transfer(address dst, uint256 wad) external returns (bool) {
        return transferFrom(msg.sender, dst, wad);
    }

    function transferFrom(
        address src,
        address dst,
        uint256 wad
    ) public stoppable returns (bool) {
        if (src != msg.sender && _allowances[src][msg.sender] != uint256(-1)) {
            require(
                _allowances[src][msg.sender] >= wad,
                "ds-token-insufficient-approval"
            );
            _allowances[src][msg.sender] = _allowances[src][msg.sender].sub(
                wad
            );
        }

        require(_balances[src] >= wad, "ds-token-insufficient-balance");
        _balances[src] = _balances[src].sub(wad);
        _balances[dst] = _balances[dst].add(wad);

        emit Transfer(src, dst, wad);

        return true;
    }

    function push(address dst, uint256 wad) external {
        transferFrom(msg.sender, dst, wad);
    }

    function pull(address src, uint256 wad) external {
        transferFrom(src, msg.sender, wad);
    }

    function move(
        address src,
        address dst,
        uint256 wad
    ) external {
        transferFrom(src, dst, wad);
    }

    function mint(uint256 wad) external {
        mint(msg.sender, wad);
    }

    function burn(uint256 wad) external {
        burn(msg.sender, wad);
    }

    function mint(address guy, uint256 wad) public auth stoppable {
        _balances[guy] = _balances[guy].add(wad);
        _totalSupply = _totalSupply.add(wad);
        emit Mint(guy, wad);
    }

    function burn(address guy, uint256 wad) public auth stoppable {
        if (guy != msg.sender && _allowances[guy][msg.sender] != uint256(-1)) {
            require(
                _allowances[guy][msg.sender] >= wad,
                "ds-token-insufficient-approval"
            );
            _allowances[guy][msg.sender] = _allowances[guy][msg.sender].sub(
                wad
            );
        }

        require(_balances[guy] >= wad, "ds-token-insufficient-balance");
        _balances[guy] = _balances[guy].sub(wad);
        _totalSupply = _totalSupply.sub(wad);
        emit Burn(guy, wad);
    }

    function destroy(address from_, uint256 amount_) public auth stoppable {
        // do not require allowance

        require(_balances[from_] >= amount_, "ds-token-insufficient-balance");
        _balances[from_] = _balances[from_].sub(amount_);
        _totalSupply = _totalSupply.sub(amount_);
        emit Burn(from_, amount_);
        emit Transfer(from_, address(0), amount_);
    }

    function dsStop() public auth {
        _stopped = true;
        emit Stop();
    }

    function start() public auth {
        _stopped = false;
        emit Start();
    }
}

File 3 of 12: ./contract/token/IApproveAndCallFallBack.sol
pragma solidity ^0.5.0;

contract IApproveAndCallFallBack {
    function receiveApproval(
        address from,
        uint256 amount_,
        address token_,
        bytes memory data_
    ) public;
}

File 4 of 12: ./contract/token/IERC223.sol
pragma solidity <0.6.0 >=0.4.21;

interface IERC223 {
    function transfer(
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool ok);

    function transferFrom(
        address from,
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool ok);

    event ERC223Transfer(
        address indexed from,
        address indexed to,
        uint256 amount,
        bytes data
    );
}

File 5 of 12: ./contract/token/IERC223Receiving.sol
pragma solidity ^0.5.0;

/// @title IERC223Receiving - Standard interface implementation for compatibility with ERC223 tokens.
interface IERC223Receiving {
    /// @dev Function that is called when a user or another contract wants to transfer funds.
    /// @param from_ Transaction initiator, analogue of msg.sender
    /// @param value_ Number of tokens to transfer.
    /// @param data_ Data containig a function signature and/or parameters
    function tokenFallback(
        address from_,
        uint256 value_,
        bytes calldata data_
    ) external;
}

File 6 of 12: ./contract/token/ITokenController.sol
pragma solidity ^0.5.0;

/// @dev The token _controller contract must implement these functions
contract ITokenController {
    /// @notice Called when `owner_` sends ether to the MiniMe Token contract
    /// @param owner_ The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(
        address owner_,
        bytes4 sig,
        bytes memory data
    ) public payable returns (bool);

    /// @notice Notifies the _controller about a token transfer allowing the
    ///  _controller to react if desired
    /// @param from_ The origin of the transfer
    /// @param to_ The destination of the transfer
    /// @param amount_ The amount of the transfer
    /// @return False if the _controller does not authorize the transfer
    function onTransfer(
        address from_,
        address to_,
        uint256 amount_
    ) public returns (bool);

    /// @notice Notifies the _controller about an approval allowing the
    ///  _controller to react if desired
    /// @param owner_ The address that calls `approve()`
    /// @param spender_ The spender in the `approve()` call
    /// @param amount_ The amount in the `approve()` call
    /// @return False if the _controller does not authorize the approval
    function onApprove(
        address owner_,
        address spender_,
        uint256 amount_
    ) public returns (bool);
}

File 7 of 12: ./contract/ownership/DSAuth.sol
pragma solidity ^0.5.0;

import "./DSAuthority.sol";

contract DSAuthEvents {
    event LogSetAuthority(address indexed authority);
    event LogSetOwner(address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority public _authority;
    address public _owner;

    constructor() public {
        _owner = msg.sender;
        emit LogSetOwner(msg.sender);
    }

    function setOwner(address owner_) public auth {
        _owner = owner_;
        emit LogSetOwner(_owner);
    }

    function setAuthority(DSAuthority authority_) public auth {
        _authority = authority_;
        emit LogSetAuthority(address(_authority));
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig), "ds-auth-unauthorized");
        _;
    }

    function isAuthorized(address src, bytes4 sig)
        internal
        view
        returns (bool)
    {
        if (src == address(this)) {
            return true;
        } else if (src == _owner) {
            return true;
        } else if (_authority == DSAuthority(address(0))) {
            return false;
        } else {
            return _authority.canCall(src, address(this), sig);
        }
    }
}

File 8 of 12: ./contract/math/SafeMath.sol
pragma solidity <0.6.0 >=0.4.21;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
     * @dev Multiplies two numbers, throws on overflow.
     */

    /*@CTK SafeMath_mul
    @tag spec
    @post __reverted == __has_assertion_failure
    @post __has_assertion_failure == __has_overflow
    @post __reverted == false -> c == a * b
    @post msg == msg__post
   */
    /* CertiK Smart Labelling, for more details visit: https://certik.org */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
     * @dev Integer division of two numbers, truncating the quotient.
     */
    /*@CTK SafeMath_div
    @tag spec
    @pre b != 0
    @post __reverted == __has_assertion_failure
    @post __has_overflow == true -> __has_assertion_failure == true
    @post __reverted == false -> __return == a / b
    @post msg == msg__post
   */
    /* CertiK Smart Labelling, for more details visit: https://certik.org */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
     * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     */
    /*@CTK SafeMath_sub
    @tag spec
    @post __reverted == __has_assertion_failure
    @post __has_overflow == true -> __has_assertion_failure == true
    @post __reverted == false -> __return == a - b
    @post msg == msg__post
   */
    /* CertiK Smart Labelling, for more details visit: https://certik.org */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
     * @dev Adds two numbers, throws on overflow.
     */
    /*@CTK SafeMath_add
    @tag spec
    @post __reverted == __has_assertion_failure
    @post __has_assertion_failure == __has_overflow
    @post __reverted == false -> c == a + b
    @post msg == msg__post
   */
    /* CertiK Smart Labelling, for more details visit: https://certik.org */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}

File 9 of 12: ./contract/token/IERC20.sol
pragma solidity <0.6.0 >=0.4.21;

import "./IERC20Basic.sol";

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20 is IERC20Basic {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function allowance(address owner, address spender)
        public
        view
        returns (uint256);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public returns (bool);

    function approve(address spender, uint256 value) public returns (bool);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 10 of 12: ./contract/token/IERC20Basic.sol
pragma solidity <0.6.0 >=0.4.21;

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract IERC20Basic {
    function totalSupply() public view returns (uint256);

    function balanceOf(address who) public view returns (uint256);

    function transfer(address to, uint256 value) public returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
}

File 11 of 12: ./contract/token/ISmartToken.sol
pragma solidity <0.6.0 >=0.4.21;

interface ISmartToken {
    function transferOwnership(address newOwner_) external;

    function acceptOwnership() external;

    function disableTransfers(bool disable_) external;

    function issue(address to_, uint256 amount_) external;
}

File 12 of 12: ./contract/GFS.sol
pragma solidity ^0.5.0;

import "./math/SafeMath.sol";
import "./token/IERC20.sol";
import "./token/IERC223.sol";
import "./token/ISmartToken.sol";
import "./token/DSToken.sol";
import "./token/IApproveAndCallFallBack.sol";
import "./token/ITokenController.sol";
import "./token/IERC223Receiving.sol";

contract GFS is DSToken("GFS", "Game Fantasy Star"), IERC223, ISmartToken {
    using SafeMath for uint256;
    address private _newOwner;
    bool public _transfersEnabled = true; // true if transfer/transferFrom are enabled, false if not

    uint256 private _cap;

    address private _controller;

    // allows execution only when transfers aren't disabled
    modifier transfersAllowed() {
        assert(_transfersEnabled);
        _;
    }

    constructor() public {
        _controller = msg.sender;
        uint256 perCoin = 1e18;
        _cap = perCoin.mul(3000 * 10000);
    }

    //////////
    // IOwned Methods
    //////////

    /**
        @dev allows transferring the contract ownership
        the new owner still needs to accept the transfer
        can only be called by the contract owner
        @param newOwner_    new contract owner
    */
    function transferOwnership(address newOwner_) public auth {
        require(newOwner_ != _owner, "GFS-already-an-owner");
        _newOwner = newOwner_;
    }

    /**
        @dev used by a new owner to accept an ownership transfer
    */
    function acceptOwnership() public {
        require(msg.sender == _newOwner, "GFS-not-new-owner");
        _owner = _newOwner;
        _newOwner = address(0);
    }

    //////////
    // SmartToken Methods
    //////////
    /**
        @dev disables/enables transfers
        can only be called by the contract owner
        @param disable_    true to disable transfers, false to enable them
    */
    function disableTransfers(bool disable_) public auth {
        _transfersEnabled = !disable_;
    }

    function issue(address to_, uint256 amount_) public auth stoppable {
        mint(to_, amount_);
    }

    //////////
    // Cap Methods
    //////////
    function cap() public view returns (uint256) {
        return _cap;
    }

    //////////
    // Cap Methods
    //////////
    function changeCap(uint256 newCap_) public auth {
        require(newCap_ >= totalSupply());

        _cap = newCap_;
    }

    //////////
    // Controller Methods
    //////////
    /// @notice Changes the _controller of the contract
    /// @param newController_ The new _controller of the contract
    function changeController(address newController_) public auth {
        _controller = newController_;
    }

    /// @notice Send `amount_` tokens to `to_` from `from_` on the condition it
    ///  is approved by `from_`
    /// @param from_ The address holding the tokens being transferred
    /// @param to_ The address of the recipient
    /// @param amount_ The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(
        address from_,
        address to_,
        uint256 amount_
    ) public transfersAllowed returns (bool success) {
        // Alerts the token _controller of the transfer
        if (isContract(_controller)) {
            if (!ITokenController(_controller).onTransfer(from_, to_, amount_))
                revert();
        }

        success = super.transferFrom(from_, to_, amount_);
    }

    /*
     * ERC 223
     * Added support for the ERC 223 "tokenFallback" method in a "transfer" function with a payload.
     */
    function transferFrom(
        address from_,
        address to_,
        uint256 amount_,
        bytes memory data_
    ) public transfersAllowed returns (bool success) {
        // Alerts the token _controller of the transfer
        if (isContract(_controller)) {
            if (!ITokenController(_controller).onTransfer(from_, to_, amount_))
                revert();
        }

        require(
            super.transferFrom(from_, to_, amount_),
            "GFS-insufficient-balance"
        );

        if (isContract(to_)) {
            IERC223Receiving receiver = IERC223Receiving(to_);
            receiver.tokenFallback(from_, amount_, data_);
        }

        emit ERC223Transfer(from_, to_, amount_, data_);

        return true;
    }

    /*
     * ERC 223
     * Added support for the ERC 223 "tokenFallback" method in a "transfer" function with a payload.
     * https://github.com/ethereum/EIPs/issues/223
     * function transfer(address to_, uint256 value_, bytes memory data_) public returns (bool success);
     */
    /// @notice Send `value_` tokens to `to_` from `msg.sender` and trigger
    /// tokenFallback if sender is a contract.
    /// @dev Function that is called when a user or another contract wants to transfer funds.
    /// @param to_ Address of token receiver.
    /// @param amount_ Number of tokens to transfer.
    /// @param data_ Data to be sent to tokenFallback
    /// @return Returns success of function call.
    function transfer(
        address to_,
        uint256 amount_,
        bytes memory data_
    ) public returns (bool success) {
        return transferFrom(msg.sender, to_, amount_, data_);
    }

    /// @notice `msg.sender` approves `spender_` to spend `amount_` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param spender_ The address of the account able to transfer the tokens
    /// @param amount_ The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address spender_, uint256 amount_)
        public
        returns (bool success)
    {
        // Alerts the token _controller of the approve function call
        if (isContract(_controller)) {
            if (
                !ITokenController(_controller).onApprove(
                    msg.sender,
                    spender_,
                    amount_
                )
            ) revert();
        }

        return super.approve(spender_, amount_);
    }

    function mint(address guy_, uint256 wad_) public auth stoppable {
        require(totalSupply().add(wad_) <= _cap, "GFS-insufficient-cap");

        super.mint(guy_, wad_);

        emit Transfer(address(0), guy_, wad_);
    }

    function burn(address guy_, uint256 wad_) public auth stoppable {
        super.burn(guy_, wad_);

        emit Transfer(guy_, address(0), wad_);
    }

    /// @notice `msg.sender` approves `spender_` to send `amount_` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `spender_`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param spender_ The address of the contract able to transfer the tokens
    /// @param amount_ The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(
        address spender_,
        uint256 amount_,
        bytes memory extraData_
    ) public returns (bool success) {
        if (!approve(spender_, amount_)) revert();

        IApproveAndCallFallBack(spender_).receiveApproval(
            msg.sender,
            amount_,
            address(this),
            extraData_
        );

        return true;
    }

    /// @dev Internal function to determine if an address is a contract
    /// @param addr_ The address being queried
    /// @return True if `addr_` is a contract
    function isContract(address addr_) internal view returns (bool) {
        uint256 size;
        if (addr_ == address(0)) return false;
        assembly {
            size := extcodesize(addr_)
        }
        return size > 0;
    }

    /// @notice The fallback function: If the contract's _controller has not been
    ///  set to 0, then the `proxyPayment` method is called which relays the
    ///  ether and creates tokens as described in the token _controller contract
    function() external payable {
        if (isContract(_controller)) {
            if (
                !ITokenController(_controller).proxyPayment.value(msg.value)(
                    msg.sender,
                    msg.sig,
                    msg.data
                )
            ) revert();
        } else {
            revert();
        }
    }

    //////////
    // Safety Methods
    //////////

    /// @notice This method can be used by the owner to extract mistakenly
    ///  sent tokens to this contract.
    /// @param token_ The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address token_) public auth {
        if (token_ == address(0)) {
            address(msg.sender).transfer(address(this).balance);
            return;
        }

        IERC20 token = IERC20(token_);
        uint256 balance = token.balanceOf(address(this));
        token.transfer(address(msg.sender), balance);

        emit ClaimedTokens(token_, address(msg.sender), balance);
    }

    function withdrawTokens(
        IERC20 token_,
        address to_,
        uint256 amount_
    ) public auth {
        assert(token_.transfer(to_, amount_));
    }

    ////////////////
    // Events
    ////////////////

    event ClaimedTokens(
        address indexed token_,
        address indexed controller_,
        uint256 amount_
    );
}

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender_","type":"address"},{"name":"amount_","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_stopped","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"disable_","type":"bool"}],"name":"disableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"to_","type":"address"},{"name":"amount_","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newController_","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"guy_","type":"address"},{"name":"wad_","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token_","type":"address"},{"name":"to_","type":"address"},{"name":"amount_","type":"uint256"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCap_","type":"uint256"}],"name":"changeCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"dsStop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to_","type":"address"},{"name":"amount_","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"guy_","type":"address"},{"name":"wad_","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"amount_","type":"uint256"}],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"to_","type":"address"},{"name":"amount_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"push","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"move","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to_","type":"address"},{"name":"amount_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender_","type":"address"},{"name":"amount_","type":"uint256"},{"name":"extraData_","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"guy","type":"address"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token_","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"wad","type":"uint256"}],"name":"pull","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token_","type":"address"},{"indexed":true,"name":"controller_","type":"address"},{"indexed":false,"name":"amount_","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ERC223Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"guy","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"src","type":"address"},{"indexed":true,"name":"dst","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"guy","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"guy","type":"address"},{"indexed":false,"name":"wad","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[],"name":"Stop","type":"event"},{"anonymous":false,"inputs":[],"name":"Start","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]

Contract Creation Code

6080604052600436106102255760003560e01c8063867904b411610123578063bb35783b116100ab578063daea85c51161006f578063daea85c514610b19578063dd62ed3e14610b4c578063df8de3e714610b87578063f2d5d56b14610bba578063f2fde38b14610bf357610225565b8063bb35783b1461091c578063be45fd621461095f578063be9a655514610a27578063c2205ee114610a3c578063cae9ca5114610a5157610225565b8063a24835d1116100f2578063a24835d11461076d578063a9059cbb146107a6578063ab67aa58146107df578063b2bdfa7b146108b2578063b753a98c146108e357610225565b8063867904b4146106bc57806395d89b41146106f55780639dc29fac1461070a578063a0712d681461074357610225565b80633cebb823116101b157806379ba50971161017557806379ba5097146106205780637a9e5e4b14610635578063800edb9d1461066857806383d5978a1461069257806385438bc0146106a757610225565b80633cebb8231461051457806340c10f191461054757806342966c68146105805780635e35359e146105aa57806370a08231146105ed57610225565b80631608f18f116101f85780631608f18f1461043e57806318160ddd1461046a57806323b872dd14610491578063313ce567146104d4578063355274ea146104ff57610225565b806306fdde031461031f578063095ea7b3146103a957806313af4035146103f65780631417629714610429575b60095461023a906001600160a01b0316610c26565b1561031857600954604051600160e11b632535112f0281523360048201818152600080356001600160e01b0319166024850181905260606044860190815236606487018190526001600160a01b0390971696634a6a225e96349695939493919290608401848480828437600081840152601f19601f820116905080830192505050955050505050506020604051808303818588803b1580156102db57600080fd5b505af11580156102ef573d6000803e3d6000fd5b50505050506040513d602081101561030657600080fd5b5051151561031357600080fd5b61031d565b600080fd5b005b34801561032b57600080fd5b50610334610c4f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561036e578181015183820152602001610356565b50505050905090810190601f16801561039b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103b557600080fd5b506103e2600480360360408110156103cc57600080fd5b506001600160a01b038135169060200135610ce5565b604080519115158252519081900360200190f35b34801561040257600080fd5b5061031d6004803603602081101561041957600080fd5b50356001600160a01b0316610dab565b34801561043557600080fd5b506103e2610e55565b34801561044a57600080fd5b5061031d6004803603602081101561046157600080fd5b50351515610e65565b34801561047657600080fd5b5061047f610edd565b60408051918252519081900360200190f35b34801561049d57600080fd5b506103e2600480360360608110156104b457600080fd5b506001600160a01b03813581169160208101359091169060400135610ee3565b3480156104e057600080fd5b506104e9610fc0565b6040805160ff9092168252519081900360200190f35b34801561050b57600080fd5b5061047f610fc5565b34801561052057600080fd5b5061031d6004803603602081101561053757600080fd5b50356001600160a01b0316610fcb565b34801561055357600080fd5b5061031d6004803603604081101561056a57600080fd5b506001600160a01b038135169060200135611047565b34801561058c57600080fd5b5061031d600480360360208110156105a357600080fd5b503561119f565b3480156105b657600080fd5b5061031d600480360360608110156105cd57600080fd5b506001600160a01b038135811691602081013590911690604001356111ac565b3480156105f957600080fd5b5061047f6004803603602081101561061057600080fd5b50356001600160a01b031661129f565b34801561062c57600080fd5b5061031d611307565b34801561064157600080fd5b5061031d6004803603602081101561065857600080fd5b50356001600160a01b0316611390565b34801561067457600080fd5b5061031d6004803603602081101561068b57600080fd5b5035611436565b34801561069e57600080fd5b5061031d6114a9565b3480156106b357600080fd5b506103e2611544565b3480156106c857600080fd5b5061031d600480360360408110156106df57600080fd5b506001600160a01b038135169060200135611554565b34801561070157600080fd5b5061033461160c565b34801561071657600080fd5b5061031d6004803603604081101561072d57600080fd5b506001600160a01b03813516906020013561166d565b34801561074f57600080fd5b5061031d6004803603602081101561076657600080fd5b5035611754565b34801561077957600080fd5b5061031d6004803603604081101561079057600080fd5b506001600160a01b03813516906020013561175e565b3480156107b257600080fd5b506103e2600480360360408110156107c957600080fd5b506001600160a01b038135169060200135611942565b3480156107eb57600080fd5b506103e26004803603608081101561080257600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561083d57600080fd5b82018360208201111561084f57600080fd5b8035906020019184600183028401116401000000008311171561087157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061194f945050505050565b3480156108be57600080fd5b506108c7611c24565b604080516001600160a01b039092168252519081900360200190f35b3480156108ef57600080fd5b5061031d6004803603604081101561090657600080fd5b506001600160a01b038135169060200135611c33565b34801561092857600080fd5b5061031d6004803603606081101561093f57600080fd5b506001600160a01b03813581169160208101359091169060400135611c3e565b34801561096b57600080fd5b506103e26004803603606081101561098257600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156109b257600080fd5b8201836020820111156109c457600080fd5b803590602001918460018302840111640100000000831117156109e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c4f945050505050565b348015610a3357600080fd5b5061031d611c5d565b348015610a4857600080fd5b506108c7611cf2565b348015610a5d57600080fd5b506103e260048036036060811015610a7457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610aa457600080fd5b820183602082011115610ab657600080fd5b80359060200191846001830284011164010000000083111715610ad857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d01945050505050565b348015610b2557600080fd5b506103e260048036036020811015610b3c57600080fd5b50356001600160a01b0316611e06565b348015610b5857600080fd5b5061047f60048036036040811015610b6f57600080fd5b506001600160a01b0381358116916020013516611e14565b348015610b9357600080fd5b5061031d60048036036020811015610baa57600080fd5b50356001600160a01b0316611e3f565b348015610bc657600080fd5b5061031d60048036036040811015610bdd57600080fd5b506001600160a01b03813516906020013561201d565b348015610bff57600080fd5b5061031d60048036036020811015610c1657600080fd5b50356001600160a01b0316612028565b6000806001600160a01b0383161515610c43576000915050610c4a565b5050803b15155b919050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b5050505050905090565b600954600090610cfd906001600160a01b0316610c26565b15610d985760095460408051600160e01b63da682aeb0281523360048201526001600160a01b038681166024830152604482018690529151919092169163da682aeb9160648083019260209291908290030181600087803b158015610d6157600080fd5b505af1158015610d75573d6000803e3d6000fd5b505050506040513d6020811015610d8b57600080fd5b50511515610d9857600080fd5b610da2838361210a565b90505b92915050565b610dc1336000356001600160e01b03191661220e565b1515610e055760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b600154600160a01b900460ff1681565b610e7b336000356001600160e01b03191661220e565b1515610ebf5760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b60078054600160a01b60ff0219169115600160a01b02919091179055565b60025490565b600754600090600160a01b900460ff161515610efb57fe5b600954610f10906001600160a01b0316610c26565b15610fad5760095460408051600160e01b634a3931490281526001600160a01b03878116600483015286811660248301526044820186905291519190921691634a3931499160648083019260209291908290030181600087803b158015610f7657600080fd5b505af1158015610f8a573d6000803e3d6000fd5b505050506040513d6020811015610fa057600080fd5b50511515610fad57600080fd5b610fb88484846122fa565b949350505050565b601290565b60085490565b610fe1336000356001600160e01b03191661220e565b15156110255760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61105d336000356001600160e01b03191661220e565b15156110a15760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156110f15760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b60085461110c82611100610edd565b9063ffffffff61258116565b11156111625760408051600160e51b62461bcd02815260206004820152601460248201527f4746532d696e73756666696369656e742d636170000000000000000000000000604482015290519081900360640190fd5b61116c828261258e565b6040805182815290516001600160a01b03841691600091600080516020612a278339815191529181900360200190a35050565b6111a9338261166d565b50565b6111c2336000356001600160e01b03191661220e565b15156112065760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b5051151561129a57fe5b505050565b60006001600160a01b03821615156112eb57604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806129fd602a913960400191505060405180910390fd5b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b031633146113695760408051600160e51b62461bcd02815260206004820152601160248201527f4746532d6e6f742d6e65772d6f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60078054600180546001600160a01b03199081166001600160a01b03841617909155169055565b6113a6336000356001600160e01b03191661220e565b15156113ea5760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b61144c336000356001600160e01b03191661220e565b15156114905760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b611498610edd565b8110156114a457600080fd5b600855565b6114bf336000356001600160e01b03191661220e565b15156115035760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b60018054600160a01b60ff021916600160a01b1790556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b90600090a1565b600754600160a01b900460ff1681565b61156a336000356001600160e01b03191661220e565b15156115ae5760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156115fe5760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6116088282611047565b5050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b611683336000356001600160e01b03191661220e565b15156116c75760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156117175760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b61172182826126d3565b6040805182815290516000916001600160a01b03851691600080516020612a278339815191529181900360200190a35050565b6111a93382611047565b611774336000356001600160e01b03191661220e565b15156117b85760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156118085760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600360205260409020548111156118785760408051600160e51b62461bcd02815260206004820152601d60248201527f64732d746f6b656e2d696e73756666696369656e742d62616c616e6365000000604482015290519081900360640190fd5b6001600160a01b0382166000908152600360205260409020546118a1908263ffffffff61299f16565b6001600160a01b0383166000908152600360205260409020556002546118cd908263ffffffff61299f16565b6002556040805182815290516001600160a01b038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a26040805182815290516000916001600160a01b03851691600080516020612a278339815191529181900360200190a35050565b6000610da2338484610ee3565b600754600090600160a01b900460ff16151561196757fe5b60095461197c906001600160a01b0316610c26565b15611a195760095460408051600160e01b634a3931490281526001600160a01b03888116600483015287811660248301526044820187905291519190921691634a3931499160648083019260209291908290030181600087803b1580156119e257600080fd5b505af11580156119f6573d6000803e3d6000fd5b505050506040513d6020811015611a0c57600080fd5b50511515611a1957600080fd5b611a248585856122fa565b1515611a7a5760408051600160e51b62461bcd02815260206004820152601860248201527f4746532d696e73756666696369656e742d62616c616e63650000000000000000604482015290519081900360640190fd5b611a8384610c26565b15611b6457604051600160e11b63607705c50281526001600160a01b03868116600483019081526024830186905260606044840190815285516064850152855188949385169363c0ee0b8a938b938a938a9360840190602085019080838360005b83811015611afc578181015183820152602001611ae4565b50505050905090810190601f168015611b295780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b50505050505b836001600160a01b0316856001600160a01b03167f9bfafdc2ae8835972d7b64ef3f8f307165ac22ceffde4a742c52da5487f45fd185856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611bde578181015183820152602001611bc6565b50505050905090810190601f168015611c0b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3506001949350505050565b6001546001600160a01b031681565b61129a338383610ee3565b611c49838383610ee3565b50505050565b6000610fb83385858561194f565b611c73336000356001600160e01b03191661220e565b1515611cb75760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b60018054600160a01b60ff02191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b6000546001600160a01b031681565b6000611d0d8484610ce5565b1515611d1857600080fd5b604051600160e01b638f4ffcb102815233600482018181526024830186905230604484018190526080606485019081528651608486015286516001600160a01b038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015611d95578181015183820152602001611d7d565b50505050905090810190601f168015611dc25780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611de457600080fd5b505af1158015611df8573d6000803e3d6000fd5b506001979650505050505050565b6000610da582600019610ce5565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b611e55336000356001600160e01b03191661220e565b1515611e995760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b6001600160a01b0381161515611edc576040513390303180156108fc02916000818181858888f19350505050158015611ed6573d6000803e3d6000fd5b506111a9565b60408051600160e01b6370a08231028152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015611f2a57600080fd5b505afa158015611f3e573d6000803e3d6000fd5b505050506040513d6020811015611f5457600080fd5b505160408051600160e01b63a9059cbb0281523360048201526024810183905290519192506001600160a01b0384169163a9059cbb916044808201926020929091908290030181600087803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050506040513d6020811015611fd657600080fd5b505060408051828152905133916001600160a01b038616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c9181900360200190a3505050565b61129a823383610ee3565b61203e336000356001600160e01b03191661220e565b15156120825760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b6001546001600160a01b03828116911614156120e85760408051600160e51b62461bcd02815260206004820152601460248201527f4746532d616c72656164792d616e2d6f776e6572000000000000000000000000604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600154600090600160a01b900460ff161561215d5760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6001600160a01b03831615156121a757604051600160e51b62461bcd0281526004018080602001828103825260228152602001806129db6022913960400191505060405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60006001600160a01b03831630141561222957506001610da5565b6001546001600160a01b038481169116141561224757506001610da5565b6000546001600160a01b0316151561226157506000610da5565b60005460408051600160e01b63b70096130281526001600160a01b0386811660048301523060248301526001600160e01b0319861660448301529151919092169163b7009613916064808301926020929190829003018186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d60208110156122f157600080fd5b50519050610da5565b600154600090600160a01b900460ff161561234d5760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6001600160a01b038416331480159061238b57506001600160a01b038416600090815260046020908152604080832033845290915290205460001914155b15612464576001600160a01b038416600090815260046020908152604080832033845290915290205482111561240b5760408051600160e51b62461bcd02815260206004820152601e60248201527f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c0000604482015290519081900360640190fd5b6001600160a01b038416600090815260046020908152604080832033845290915290205461243f908363ffffffff61299f16565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b6001600160a01b0384166000908152600360205260409020548211156124d45760408051600160e51b62461bcd02815260206004820152601d60248201527f64732d746f6b656e2d696e73756666696369656e742d62616c616e6365000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600360205260409020546124fd908363ffffffff61299f16565b6001600160a01b038086166000908152600360205260408082209390935590851681522054612532908363ffffffff61258116565b6001600160a01b038085166000818152600360209081526040918290209490945580518681529051919392881692600080516020612a2783398151915292918290030190a35060019392505050565b81810182811015610da557fe5b6125a4336000356001600160e01b03191661220e565b15156125e85760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156126385760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260036020526040902054612661908263ffffffff61258116565b6001600160a01b03831660009081526003602052604090205560025461268d908263ffffffff61258116565b6002556040805182815290516001600160a01b038416917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a25050565b6126e9336000356001600160e01b03191661220e565b151561272d5760408051600160e51b62461bcd0281526020600482015260146024820152600080516020612a67833981519152604482015290519081900360640190fd5b600154600160a01b900460ff161561277d5760408051600160e51b62461bcd0281526020600482015260126024820152600080516020612a47833981519152604482015290519081900360640190fd5b6001600160a01b03821633148015906127bb57506001600160a01b038216600090815260046020908152604080832033845290915290205460001914155b15612894576001600160a01b038216600090815260046020908152604080832033845290915290205481111561283b5760408051600160e51b62461bcd02815260206004820152601e60248201527f64732d746f6b656e2d696e73756666696369656e742d617070726f76616c0000604482015290519081900360640190fd5b6001600160a01b038216600090815260046020908152604080832033845290915290205461286f908263ffffffff61299f16565b6001600160a01b03831660009081526004602090815260408083203384529091529020555b6001600160a01b0382166000908152600360205260409020548111156129045760408051600160e51b62461bcd02815260206004820152601d60248201527f64732d746f6b656e2d696e73756666696369656e742d62616c616e6365000000604482015290519081900360640190fd5b6001600160a01b03821660009081526003602052604090205461292d908263ffffffff61299f16565b6001600160a01b038316600090815260036020526040902055600254612959908263ffffffff61299f16565b6002556040805182815290516001600160a01b038416917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a25050565b6000828211156129ab57fe5b50900390565b60008215156129c257506000610da5565b508181028183828115156129d257fe5b0414610da557fefe45524332303a20617070726f766520746f20746865207a65726f20616464726573734552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef64732d73746f702d69732d73746f70706564000000000000000000000000000064732d617574682d756e617574686f72697a6564000000000000000000000000a165627a7a72305820354a3b7bba26786df1c3076ad61e6a2f5691c774425d69d00d7afb41efce96c20029

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.