Contract 0x73f0a6927a3c04e679074e70dfb9105f453e799d 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x35e57037d3f86f8c69ca3c3d9c00da4705274e31ca4feb6e2ca59061cea56931Unstake130123712021-11-28 2:27:175 mins ago0xf8293d0e0a006faddfe13159d67702f4bb28c8b2 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00340236
0x60d9dd18081b7980ef097518d79fd21eb8cd8918d27e65b7e17a387bcb5a9545Unstake130123492021-11-28 2:26:116 mins ago0x9ea14348b4ba58049d4425b2acf084a7e7397a12 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00340188
0xca384b802b6e483ff4c23944c367b676959e930569ae9cdfb3c37ea8c6943f95Stake130121532021-11-28 2:15:3916 mins ago0x700f3042b45a1dd7dbe7ba17d35290806607e5aa IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.003333795
0xf7ca20172fb133dfdb656da028d907c702b79e1fe292b37dcd7a9f3801cb10c2Unstake130118312021-11-28 1:58:4033 mins ago0xe49514f1b56d2b9a229a1bbd648f80711930bde2 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00326108
0x04df9a1c3e1e3ac0e6817b4861be8ea8662838cf64804d074881154b5eb02006Stake130116442021-11-28 1:48:5543 mins ago0x379220b978a59d267becddd2c57e8441059160bb IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00470972
0x56b00c6e00d51c632ea95e8d8f7122109f226e2a77567ca74178cc6b6b112bffStake130111822021-11-28 1:24:051 hr 8 mins ago0x1b60da9427cf1a4d13cd23f149e982c9ba636523 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001783248
0x46365d70c530d944b0a5c0db8cecf5588af4ecc8c799c60280d6543764adba80Stake130111262021-11-28 1:20:581 hr 11 mins ago0x88ce9baae307d610dd7500ed508cea6edcfaefed IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001898304
0x4d493eb71a7432d30bde460250231672c4af0f7132c7c866c22af980a9811d4bUnstake130110852021-11-28 1:18:341 hr 13 mins ago0x2786de79c7a4b5f217bc0b5a8ebe7c09ba2417d0 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00107118
0x8b4099d22bdd608a8618af07ed82192a6eed594c76c1719f92a2840e8688b16bStake130108342021-11-28 1:04:511 hr 27 mins ago0x6ba157f1b056b437e6ae04aeb6fb7a63a64f2fc8 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.0059444
0x2fc087c74cdbfd6589d594215fbd601eda13594536f5d3f2ba83eed16a0a6d94Unstake130107912021-11-28 1:02:191 hr 30 mins ago0x6ba157f1b056b437e6ae04aeb6fb7a63a64f2fc8 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.0034026
0x0ca11c4fc95d263b65bdd140f1fed8585a51418e2b305445b40ae13c5a235e0cStake130106102021-11-28 0:51:401 hr 40 mins ago0xf8293d0e0a006faddfe13159d67702f4bb28c8b2 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00632816
0x1d03581a5502acd6d1ffa16d6c64bab12ad95451a1f7c9182d19fadc7eabb235Unstake130105242021-11-28 0:46:451 hr 45 mins ago0x5746c8859d0eba946d073266819e55d84dec17f5 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00310212
0x1f2c37c9569f981c730c54a3c2d9ec9dad2f6dd447fa8088ce2b337c781aaaf5Stake130102982021-11-28 0:33:501 hr 58 mins ago0x0ec1187b44b53328b95b83b4252a5537baf3f464 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001783248
0x5fb171fe1538281da50123f2c5dd2ce40b2debb87760f19799861bd50f213ee9Unstake130102312021-11-28 0:30:122 hrs 2 mins ago0x0ec1187b44b53328b95b83b4252a5537baf3f464 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001071036
0x6a9413f9f560b170e80683c2661c31c7642163cf6794f2be85ce861a7284b34dStake130101442021-11-28 0:25:472 hrs 6 mins ago0xcbb68af9bb4ba8e4cf6dc74314f4cb414359738e IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00632768
0xd62839a502e1a6ca217d4ed44ca754d9dd60953ea03ed7294ead6531375674e8Stake130100822021-11-28 0:22:112 hrs 10 mins ago0xcc816eee670cb48811cba461ec599a815c64f89b IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00594416
0x4a3375d4a9ecdc08b4478ad7f471af9805afc1a1e14be047a069ea17eac0c10cUnstake130098402021-11-28 0:08:382 hrs 23 mins ago0xcc816eee670cb48811cba461ec599a815c64f89b IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00357036
0xc49b80fcc3fbe6657ebcd35412ac02a11f114bc671ff9f0a409e9e81f0912ffeUnstake130097552021-11-28 0:03:482 hrs 28 mins ago0xf68cfca66ba00687f1a0ee4ea07758c7926c0c4e IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00357036
0x5a5e5f7f6209047117c1e0cc8b9091bdd987a80527ab5d9701e9033ab32b149cUnstake130096952021-11-28 0:00:332 hrs 31 mins ago0xb20e2c59fc19eedee0c19b2527479aee7f0981af IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00290882
0x32d2e6a24702133decf0f23e031e62d79e807565411c8be2572f79c227717511Stake130091472021-11-27 23:32:432 hrs 59 mins ago0x1a37cbe026ee4e83132d84a2fd24f20f68cdeb98 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001473846
0xa6c4df6b5e71a0292406a439c600aff3f7fd630a779614a0e4f092134e3f15ebStake130090892021-11-27 23:29:493 hrs 2 mins ago0x3209e8e4fb641139b6f8f2f68eacabe7b89e3f40 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001333446
0x5bbc61b2efff3947affec66e0a3641a77a946540ec2b884408a83d2542fc0dd9Stake130090812021-11-27 23:29:253 hrs 2 mins ago0x0a7668c62637d8eb2920782dcba48a5aec1de9e3 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.00444506
0xa10152d2565bc339db345b2d874095a8a8b6f9b3bd3fab61d1c65791715d0c77Stake130090472021-11-27 23:27:413 hrs 4 mins ago0x05465b6a4986d589612abfc8cc93a11a9fabc112 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001442934
0xacd887e5405e4c0a0fa4917475c80b396dfaea5cbb26662a014eea1263f81043Stake130081002021-11-27 22:38:463 hrs 53 mins ago0xc3aed8440ff24e77d7deb8ff07491bf53560a519 IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001898376
0xd3c730693a4e29d25429781f1f26819e521cb0acaa88d66cfd5f43ffb200e399Stake130080312021-11-27 22:35:133 hrs 57 mins ago0x6a7828d1b44953e157be9f37d87f18bbbda5a34b IN  0x73f0a6927a3c04e679074e70dfb9105f453e799d0 BNB0.001808448
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8f3ed55fd8ed5fa0ad37b409a6419830f48a18c244aae2511b130fee751c97a054713152021-03-07 11:58:42265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0x8f3ed55fd8ed5fa0ad37b409a6419830f48a18c244aae2511b130fee751c97a054713152021-03-07 11:58:42265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0x8f3ed55fd8ed5fa0ad37b409a6419830f48a18c244aae2511b130fee751c97a054713152021-03-07 11:58:42265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0x8f3ed55fd8ed5fa0ad37b409a6419830f48a18c244aae2511b130fee751c97a054713152021-03-07 11:58:42265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0xdbe930551e2e5647757735ef70c1336ab24044bd6c9efde686ffa2625a0339a954713132021-03-07 11:58:36265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0xdbe930551e2e5647757735ef70c1336ab24044bd6c9efde686ffa2625a0339a954713132021-03-07 11:58:36265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0xdbe930551e2e5647757735ef70c1336ab24044bd6c9efde686ffa2625a0339a954713132021-03-07 11:58:36265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0xdbe930551e2e5647757735ef70c1336ab24044bd6c9efde686ffa2625a0339a954713132021-03-07 11:58:36265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0x067bdb856ba45cd6fed4f5c69244792482e3d0c2c31de149a0346b30513bd1b254712892021-03-07 11:57:24265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0x067bdb856ba45cd6fed4f5c69244792482e3d0c2c31de149a0346b30513bd1b254712892021-03-07 11:57:24265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0x067bdb856ba45cd6fed4f5c69244792482e3d0c2c31de149a0346b30513bd1b254712892021-03-07 11:57:24265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0x067bdb856ba45cd6fed4f5c69244792482e3d0c2c31de149a0346b30513bd1b254712892021-03-07 11:57:24265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0xf457b563c2d01009a0aaad88674548063d508dc9f317943589fcfc0ef0febed054712862021-03-07 11:57:15265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0xf457b563c2d01009a0aaad88674548063d508dc9f317943589fcfc0ef0febed054712862021-03-07 11:57:15265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0xf457b563c2d01009a0aaad88674548063d508dc9f317943589fcfc0ef0febed054712862021-03-07 11:57:15265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0xf457b563c2d01009a0aaad88674548063d508dc9f317943589fcfc0ef0febed054712862021-03-07 11:57:15265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0x3fd773854b549aaeb94131b239263e609db2548f0c26e84c27083e8269ebc3ea54712612021-03-07 11:56:00265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0x3fd773854b549aaeb94131b239263e609db2548f0c26e84c27083e8269ebc3ea54712612021-03-07 11:56:00265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0x3fd773854b549aaeb94131b239263e609db2548f0c26e84c27083e8269ebc3ea54712612021-03-07 11:56:00265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0x3fd773854b549aaeb94131b239263e609db2548f0c26e84c27083e8269ebc3ea54712612021-03-07 11:56:00265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0x0f391f7cfed52f88126c45ae475bdf556ce2e0f23c63a8cd742b687e2a64844f54712582021-03-07 11:55:51265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xd41b24bba51fac0e4827b6f94c0d6ddeb183cd640 BNB
0x0f391f7cfed52f88126c45ae475bdf556ce2e0f23c63a8cd742b687e2a64844f54712582021-03-07 11:55:51265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0x59a0a6d73e6a5224871f45e6d845ce1574063ade0 BNB
0x0f391f7cfed52f88126c45ae475bdf556ce2e0f23c63a8cd742b687e2a64844f54712582021-03-07 11:55:51265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 0xccf6b19bc2419e776b6ee030044811da846686fb0 BNB
0x0f391f7cfed52f88126c45ae475bdf556ce2e0f23c63a8cd742b687e2a64844f54712582021-03-07 11:55:51265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
0x17cc9c4e4b95430a641668f2f0fd8b8fb674224c1c850f17149c84a993ad090154712552021-03-07 11:55:42265 days 14 hrs ago 0x73f0a6927a3c04e679074e70dfb9105f453e799d 1inch Exchange: 1INCH Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GovernanceMothership

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : GovernanceMothership.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/EnumerableSet.sol";
import "./interfaces/IGovernanceModule.sol";
import "./utils/BalanceAccounting.sol";


contract GovernanceMothership is Ownable, BalanceAccounting {
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event AddModule(address indexed module);
    event RemoveModule(address indexed module);

    IERC20 public immutable inchToken;

    EnumerableSet.AddressSet private _modules;

    constructor(IERC20 _inchToken) public {
        inchToken = _inchToken;
    }

    function name() external pure returns(string memory) {
        return "1INCH Token (Staked)";
    }

    function symbol() external pure returns(string memory) {
        return "st1INCH";
    }

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

    function stake(uint256 amount) external {
        require(amount > 0, "Empty stake is not allowed");

        inchToken.transferFrom(msg.sender, address(this), amount);
        _mint(msg.sender, amount);
        _notifyFor(msg.sender, balanceOf(msg.sender));
        emit Transfer(address(0), msg.sender, amount);
    }

    function unstake(uint256 amount) external {
        require(amount > 0, "Empty unstake is not allowed");

        _burn(msg.sender, amount);
        _notifyFor(msg.sender, balanceOf(msg.sender));
        inchToken.transfer(msg.sender, amount);
        emit Transfer(msg.sender, address(0), amount);
    }

    function notify() external {
        _notifyFor(msg.sender, balanceOf(msg.sender));
    }

    function notifyFor(address account) external {
        _notifyFor(account, balanceOf(account));
    }

    function batchNotifyFor(address[] memory accounts) external {
        uint256 modulesLength = _modules.length();
        uint256[] memory balances = new uint256[](accounts.length);
        for (uint256 j = 0; j < accounts.length; ++j) {
            balances[j] = balanceOf(accounts[j]);
        }
        for (uint256 i = 0; i < modulesLength; ++i) {
            IGovernanceModule(_modules.at(i)).notifyStakesChanged(accounts, balances);
        }
    }

    function addModule(address module) external onlyOwner {
        require(_modules.add(module), "Module already registered");
        emit AddModule(module);
    }

    function removeModule(address module) external onlyOwner {
        require(_modules.remove(module), "Module was not registered");
        emit RemoveModule(module);
    }

    function _notifyFor(address account, uint256 balance) private {
        bytes32[] memory cached = _modules._inner._values;
        for (uint256 i = 0; i < cached.length; ++i) {
            IGovernanceModule(address(uint256(cached[i]))).notifyStakeChanged(account, balance);
        }
    }
}

File 2 of 8 : IGovernanceModule.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;


interface IGovernanceModule {
    function notifyStakeChanged(address account, uint256 newBalance) external;
    function notifyStakesChanged(address[] calldata accounts, uint256[] calldata newBalances) external;
}

File 3 of 8 : BalanceAccounting.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "@openzeppelin/contracts/math/SafeMath.sol";


contract BalanceAccounting {
    using SafeMath for uint256;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function _mint(address account, uint256 amount) internal virtual {
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        _balances[account] = _balances[account].sub(amount, "Burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
    }

    function _set(address account, uint256 amount) internal virtual returns(uint256 oldAmount) {
        oldAmount = _balances[account];
        if (oldAmount != amount) {
            _balances[account] = amount;
            _totalSupply = _totalSupply.add(amount).sub(oldAmount);
        }
    }
}

File 4 of 8 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 5 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "../GSN/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 6 of 8 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 7 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 8 of 8 : EnumerableSet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256`
 * (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_inchToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"AddModule","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"module","type":"address"}],"name":"RemoveModule","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":[{"internalType":"address","name":"module","type":"address"}],"name":"addModule","outputs":[],"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":"address[]","name":"accounts","type":"address[]"}],"name":"batchNotifyFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"inchToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"notify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"notifyFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"module","type":"address"}],"name":"removeModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b506040516112dd3803806112dd8339818101604052602081101561003357600080fd5b5051600061003f61009e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060601b6001600160601b0319166080526100a2565b3390565b60805160601c6112146100c9600039806105965280610ab85280610b8152506112146000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a063246111610066578063a06324611461032a578063a694fc3a14610350578063ec9545941461036d578063f2fde38b1461037557610100565b8063715018a6146102ee578063899f5898146102f65780638da5cb5b146102fe57806395d89b411461032257610100565b80632e17de78116100d35780632e17de78146101ea578063313ce567146102075780635cf1cd2b1461022557806370a08231146102c857610100565b806306fdde0314610105578063132b4fc81461018257806318160ddd146101aa5780631ed86f19146101c4575b600080fd5b61010d61039b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a86004803603602081101561019857600080fd5b50356001600160a01b03166103d2565b005b6101b26103e7565b60408051918252519081900360200190f35b6101a8600480360360208110156101da57600080fd5b50356001600160a01b03166103ed565b6101a86004803603602081101561020057600080fd5b50356104ea565b61020f610645565b6040805160ff9092168252519081900360200190f35b6101a86004803603602081101561023b57600080fd5b81019060208101813564010000000081111561025657600080fd5b82018360208201111561026857600080fd5b8035906020019184602083028401116401000000008311171561028a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061064a945050505050565b6101b2600480360360208110156102de57600080fd5b50356001600160a01b03166107ef565b6101a861080a565b6101a86108cb565b6103066108da565b604080516001600160a01b039092168252519081900360200190f35b61010d6108e9565b6101a86004803603602081101561034057600080fd5b50356001600160a01b0316610920565b6101a86004803603602081101561036657600080fd5b5035610a1d565b610306610b7f565b6101a86004803603602081101561038b57600080fd5b50356001600160a01b0316610ba3565b60408051808201909152601481527f31494e434820546f6b656e20285374616b656429000000000000000000000000602082015290565b6103e4816103df836107ef565b610cba565b50565b60015490565b6103f5610daa565b6000546001600160a01b03908116911614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610462600382610dae565b6104b3576040805162461bcd60e51b815260206004820152601960248201527f4d6f64756c6520616c7265616479207265676973746572656400000000000000604482015290519081900360640190fd5b6040516001600160a01b038216907f0e8ab0265c955b9584b70d255e316c63717f1fb52ba0acfff63bca74ca2e8fad90600090a250565b6000811161053f576040805162461bcd60e51b815260206004820152601c60248201527f456d70747920756e7374616b65206973206e6f7420616c6c6f77656400000000604482015290519081900360640190fd5b6105493382610dcc565b610556336103df336107ef565b604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163a9059cbb9160448083019260209291908290030181600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505050506040513d602081101561060857600080fd5b505060408051828152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b601290565b60006106566003610e54565b90506060825167ffffffffffffffff8111801561067257600080fd5b5060405190808252806020026020018201604052801561069c578160200160208202803683370190505b50905060005b83518110156106e6576106c78482815181106106ba57fe5b60200260200101516107ef565b8282815181106106d357fe5b60209081029190910101526001016106a2565b5060005b828110156107e9576106fd600382610e5f565b6001600160a01b031663ad33334885846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610760578181015183820152602001610748565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561079f578181015183820152602001610787565b50505050905001945050505050600060405180830381600087803b1580156107c657600080fd5b505af11580156107da573d6000803e3d6000fd5b505050508060010190506106ea565b50505050565b6001600160a01b031660009081526002602052604090205490565b610812610daa565b6000546001600160a01b03908116911614610874576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6108d8336103df336107ef565b565b6000546001600160a01b031690565b60408051808201909152600781527f737431494e434800000000000000000000000000000000000000000000000000602082015290565b610928610daa565b6000546001600160a01b0390811691161461098a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610995600382610e6b565b6109e6576040805162461bcd60e51b815260206004820152601960248201527f4d6f64756c6520776173206e6f74207265676973746572656400000000000000604482015290519081900360640190fd5b6040516001600160a01b038216907f75f4e5771d2cdd015405ae76feb37f5792736e71ff18f8a9dd690772a48111a390600090a250565b60008111610a72576040805162461bcd60e51b815260206004820152601a60248201527f456d707479207374616b65206973206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd9160648083019260209291908290030181600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b50610b3790503382610e80565b610b44336103df336107ef565b60408051828152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bab610daa565b6000546001600160a01b03908116911614610c0d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610c525760405162461bcd60e51b81526004018080602001828103825260268152602001806111b96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600380546040805160208084028201810190925282815260609390929091830182828015610d0757602002820191906000526020600020905b815481526020019060010190808311610cf3575b5050505050905060005b81518110156107e957818181518110610d2657fe5b602002602001015160001c6001600160a01b03166327a2743385856040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610d8757600080fd5b505af1158015610d9b573d6000803e3d6000fd5b50505050806001019050610d11565b3390565b6000610dc3836001600160a01b038416610ed3565b90505b92915050565b604080518082018252601b81527f4275726e20616d6f756e7420657863656564732062616c616e636500000000006020808301919091526001600160a01b038516600090815260029091529190912054610e27918390610f1d565b6001600160a01b038316600090815260026020526040902055600154610e4d9082610fb4565b6001555050565b6000610dc682610ff6565b6000610dc38383610ffa565b6000610dc3836001600160a01b03841661105e565b600154610e8d9082611124565b6001556001600160a01b038216600090815260026020526040902054610eb39082611124565b6001600160a01b0390921660009081526002602052604090209190915550565b6000610edf838361117e565b610f1557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc6565b506000610dc6565b60008184841115610fac5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f71578181015183820152602001610f59565b50505050905090810190601f168015610f9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000610dc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f1d565b5490565b8154600090821061103c5760405162461bcd60e51b81526004018080602001828103825260228152602001806111976022913960400191505060405180910390fd5b82600001828154811061104b57fe5b9060005260206000200154905092915050565b6000818152600183016020526040812054801561111a578354600019808301919081019060009087908390811061109157fe5b90600052602060002001549050808760000184815481106110ae57fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806110de57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610dc6565b6000915050610dc6565b600082820183811015610dc3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000908152600191909101602052604090205415159056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220fff78fe6122be64cfa37aeb7c3eb577860bb9bed95f0c2dc5ce751949af263d664736f6c634300060c0033000000000000000000000000111111111117dc0aa78b770fa6a738034120c302

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000111111111117dc0aa78b770fa6a738034120c302

-----Decoded View---------------
Arg [0] : _inchToken (address): 0x111111111117dc0aa78b770fa6a738034120c302

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000111111111117dc0aa78b770fa6a738034120c302


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.