Contract 0x77f6a5f1b7a2b6d6c322af8581317d6bb0a52689

 

Contract Overview

Spore Engineering: SPORE Token
Balance:
0 BNB

BNB Value:
$0.00

Token:
Ad
Ad
Txn Hash
Block
From
To
Value [Txn Fee]
0x375d1d2abe0b350951ed8cff886b489358a19fa952c7bd3819a96564721c484f66333962021-04-17 3:08:384 mins ago0x4908522e9f40cf1a561aa40d3fea0b1fd0ab5be9 IN  Spore Engineering: SPORE Token0 BNB0.000222515
0xc0b4f6b7e1d314276e2addda2f15d391ac5d38874680ea1c07b96bdd482cd72466286922021-04-16 23:12:214 hrs ago0xda257d7d759e10975bff91e37ecfd4444506f6fb IN  Spore Engineering: SPORE Token0 BNB0.000181705
0x4a6ba69f74e876525fa82ebe9ba8b91008e6b968247f891f396fc5e68ab47cc366283142021-04-16 22:53:274 hrs 19 mins ago0xda257d7d759e10975bff91e37ecfd4444506f6fb IN  Spore Engineering: SPORE Token0 BNB0.000222515
0xdc58af896737f3b23f73b001d85acd1a0da9c9210b65fd27973e2fd16c7a9b5166278212021-04-16 22:28:484 hrs 44 mins ago0x7e086b3da8ce6fd96b165fde9a512ef61108b2a2 IN  Spore Engineering: SPORE Token0 BNB0.000106705
0x39f46caaf36618f3ddebdf7a1260e2df13b94d7d65552c39ff6cedd77c53f53766254572021-04-16 20:30:366 hrs 42 mins ago0x036600c5daa442ddff31eab662da8149653494fc IN  Spore Engineering: SPORE Token0 BNB0.000222515
0x172d1cf5e75aba5a1bf8c887ed030799dac36ca910df2ba6d9567e918ae5434866246592021-04-16 19:50:227 hrs 22 mins ago0x80f22ec4bd235ad6acf2456f0eee1c5c9c288dbb IN  Spore Engineering: SPORE Token0 BNB0.000222515
0x7a119ceebcb2b643a651ebe2cce7c295fb0c74da63781ab613af17e8107a8fce66246002021-04-16 19:47:257 hrs 25 mins ago0x80301924481d6ae5dacfa324bdc73416590ad48a IN  Spore Engineering: SPORE Token0 BNB0.000222515
0xc11fc185f848d5e45626bbcd92dc366aa12a956deebb8a2f283c03aad46d0caa66241692021-04-16 19:25:527 hrs 47 mins ago0xc47879865443827c02065073e30e07151cc0bb68 IN  Spore Engineering: SPORE Token0 BNB0.000106705
0xc5d45530f21541417566ba7a7d116bdcddf25205f9804cb6a91b8e051fe0057c66240322021-04-16 19:19:017 hrs 53 mins ago0xc47879865443827c02065073e30e07151cc0bb68 IN  Spore Engineering: SPORE Token0 BNB0.000181765
0x5556c98a887f265be9a3644f89cc8e8fec1aa4db1c3a27e23433a92515b46b6e66237032021-04-16 19:02:348 hrs 10 mins ago0x1323c9d038c6dbef9dcfdcf94df7f19bd8f2fc92 IN  Spore Engineering: SPORE Token0 BNB0.000221075
0xcd4001cd40f8624133a54fb107874d5aaa73d2f640201cd9af12236d1ff261fb66231112021-04-16 18:32:588 hrs 40 mins ago0xeb5eb1e0dd3a2637311004e2f5b9b46b43780689 IN  Spore Engineering: SPORE Token0 BNB0.000221075
0xcb8bccb0c47a3fa8e8d91ac1f8b52d9062c45bd707b5a717668674b5b00581fc66227552021-04-16 18:15:108 hrs 57 mins ago0x4d95a2761d1f905efd0450dcc55a8901361409b9 IN  Spore Engineering: SPORE Token0 BNB0.000106705
0x5d285588e4af8da698ca470986da4d37892e4281951cf9058bfbc98bd2caf12266208602021-04-16 16:40:2510 hrs 32 mins ago0x8a531fafaeee93bf59695e95c596d26030603cc0 IN  Spore Engineering: SPORE Token0 BNB0.000146135
0x718f2913bfcf623f1cc576708c357dc32590587687b4106195f1ce0868c7f84a66199752021-04-16 15:52:2811 hrs 20 mins ago0xa6151db8747538ab8b0285149fba103e932778cb IN  Spore Engineering: SPORE Token0 BNB0.000222515
0x379a6b887f4f376028cc857e01c9f3ab53b682b1d96531f1a2f1a70251b5496266196932021-04-16 15:38:2211 hrs 34 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181585
0xcc94bf6d074a427a916842caed724f47c95508d821a68d7b38b6e2fe0108f5b266196482021-04-16 15:36:0711 hrs 36 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181585
0xba169a2cb4809a3541abd1d35b98c620f96f21cebf2c1db11c5295f0f992397766192732021-04-16 15:17:2211 hrs 55 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000256585
0x3456857c7bcd5398b073d562b8dc7951681ddd039656a6604a0021e25dabd5c566192222021-04-16 15:14:4911 hrs 58 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181585
0x1e2b24050f83460b4efc367665eeb04d037ec74fb9102523087841e38045ca8766191592021-04-16 15:11:4012 hrs 1 min agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181585
0x5343d522e6ecb381f61298c7f0921c36e9804f94fbaeac8d54f523def61583da66190932021-04-16 15:08:2212 hrs 4 mins ago0x51007d17c1238e2a2f945c3b5861f1806ed9c4a1 IN  Spore Engineering: SPORE Token0 BNB0.000222515
0x91dcb016b60c84193253d94960eae602f8b85647ded6ce7f19e6372280b60e1c66190702021-04-16 15:07:1312 hrs 5 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181525
0x0fcdeef2daa14e5ee2ab51419113c059466932be2252621b6b157dacd3a8ca7566189912021-04-16 15:03:1612 hrs 9 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181585
0x36faf8f07c754075e742cd4797ec4733a2b4d12a9017ec94cacb983a66280e9666189232021-04-16 14:59:5012 hrs 13 mins ago0x69cf24c91986a9b79362be371c646ee67cc3c60d IN  Spore Engineering: SPORE Token0 BNB0.000181585
0xf59a722c3ea1812d2c2dc9c1ae8e253f98af0b80c4504860bfb8c7068935b33266188972021-04-16 14:58:2312 hrs 14 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000256585
0x880b740fa77486496430d11706b1d05bf4132e93c6711f2ebffb5c28b97a833066188312021-04-16 14:54:3912 hrs 18 mins agoSpore Engineering: Deployer IN  Spore Engineering: SPORE Token0 BNB0.000181525
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb67e472bfd05721de9a02c498a80c0cc975b04efbf7bb889f3c1416d660a2e9854712262021-03-07 11:54:1540 days 15 hrs ago PancakeSwap: BUSD-T-SPORE Spore Engineering: SPORE Token0 BNB
0xb67e472bfd05721de9a02c498a80c0cc975b04efbf7bb889f3c1416d660a2e9854712262021-03-07 11:54:1540 days 15 hrs ago PancakeSwap: Router Spore Engineering: SPORE Token0 BNB
0x90a58dbbc25fab83b7aa7e3361e80800d05523f14efd1a922440466c000cb16654710872021-03-07 11:47:1840 days 15 hrs ago PancakeSwap: SPORE Spore Engineering: SPORE Token0 BNB
0x90a58dbbc25fab83b7aa7e3361e80800d05523f14efd1a922440466c000cb16654710872021-03-07 11:47:1840 days 15 hrs ago PancakeSwap: Router Spore Engineering: SPORE Token0 BNB
0x2df91e694f77bdef37093db67c01664e7036a1e5eba9266aa8ee97b0915580c054710742021-03-07 11:46:3940 days 15 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x8761c649ee75b31305851d00ce4fea0df668de00382d7eacaff70d5a3fad86e554707922021-03-07 11:32:3340 days 15 hrs ago Spore Engineering: Staking Contract Spore Engineering: SPORE Token0 BNB
0xcf00fe140e25d5163515b2d2f7df4799c536a227ff2388e7c42962bcb60d701754707852021-03-07 11:32:1240 days 15 hrs ago Spore Engineering: USDT Farm Spore Engineering: SPORE Token0 BNB
0x8e8b24b892776fe526f091d2e77f644daa23f1e9039fbfc6459ae7a3c2d6b2e754701692021-03-07 11:01:2440 days 16 hrs ago Spore Engineering: Staking Contract Spore Engineering: SPORE Token0 BNB
0x81228025e33496dda72c00f8b37a331e5cd5705740d9544984cfd96948342a8954701602021-03-07 11:00:5740 days 16 hrs ago Spore Engineering: BUSD Farm Spore Engineering: SPORE Token0 BNB
0x72b8d58fc9dbf4d4aee21e7a36ebfbf070be5024e2411d21f0d280a9c7cdec5c54700922021-03-07 10:57:3340 days 16 hrs ago PancakeSwap: SPORE-BUSD Spore Engineering: SPORE Token0 BNB
0x72b8d58fc9dbf4d4aee21e7a36ebfbf070be5024e2411d21f0d280a9c7cdec5c54700922021-03-07 10:57:3340 days 16 hrs ago PancakeSwap: Cake-SPORE Spore Engineering: SPORE Token0 BNB
0x72b8d58fc9dbf4d4aee21e7a36ebfbf070be5024e2411d21f0d280a9c7cdec5c54700922021-03-07 10:57:3340 days 16 hrs ago 0xc0b8cfa2e472619ee4b025604a3af7ce4fcac1ad Spore Engineering: SPORE Token0 BNB
0x72b8d58fc9dbf4d4aee21e7a36ebfbf070be5024e2411d21f0d280a9c7cdec5c54700922021-03-07 10:57:3340 days 16 hrs ago PancakeSwap: SPORE-BUSD Spore Engineering: SPORE Token0 BNB
0xd3807af9ced7e314d0e07968ee765b44b6b80c0ab147b7a748e218db0fa3d42254698212021-03-07 10:44:0040 days 16 hrs ago PancakeSwap: SPORE-BUSD Spore Engineering: SPORE Token0 BNB
0xd3807af9ced7e314d0e07968ee765b44b6b80c0ab147b7a748e218db0fa3d42254698212021-03-07 10:44:0040 days 16 hrs ago PancakeSwap: Cake-SPORE Spore Engineering: SPORE Token0 BNB
0xd3807af9ced7e314d0e07968ee765b44b6b80c0ab147b7a748e218db0fa3d42254698212021-03-07 10:44:0040 days 16 hrs ago PancakeSwap: Cake-SPORE Spore Engineering: SPORE Token0 BNB
0xd80396378fec7613652c526ebba33bdf3ed256983e2d1b5cae001f84f80fd7f454698202021-03-07 10:43:5740 days 16 hrs ago PancakeSwap: SPORE-BUSD Spore Engineering: SPORE Token0 BNB
0xd80396378fec7613652c526ebba33bdf3ed256983e2d1b5cae001f84f80fd7f454698202021-03-07 10:43:5740 days 16 hrs ago 0x0c5362f7c80ff3124843df2510b9e7368e237ea6 Spore Engineering: SPORE Token0 BNB
0xd80396378fec7613652c526ebba33bdf3ed256983e2d1b5cae001f84f80fd7f454698202021-03-07 10:43:5740 days 16 hrs ago PancakeSwap: SPORE Spore Engineering: SPORE Token0 BNB
0xd80396378fec7613652c526ebba33bdf3ed256983e2d1b5cae001f84f80fd7f454698202021-03-07 10:43:5740 days 16 hrs ago PancakeSwap: SPORE Spore Engineering: SPORE Token0 BNB
0x5b6428cf899f22a50024f9532b23d836bf45eb26ed1f27548a0bfc599fec250354697782021-03-07 10:41:5140 days 16 hrs ago Spore Engineering: Staking Contract Spore Engineering: SPORE Token0 BNB
0xf0a6ac2990d845c61c33eac9f5ca768ab4ae6f55406c7315a080e0e1241077d054697722021-03-07 10:41:3340 days 16 hrs ago Spore Engineering: WBNB Farm Spore Engineering: SPORE Token0 BNB
0x2668ea7a1985447b30f82536d255d90f38e94fd84ca91c6fd31f25640e077b8f54697442021-03-07 10:40:0940 days 16 hrs ago PancakeSwap: BUSD-T-SPORE Spore Engineering: SPORE Token0 BNB
0x2668ea7a1985447b30f82536d255d90f38e94fd84ca91c6fd31f25640e077b8f54697442021-03-07 10:40:0940 days 16 hrs ago 0x0c5362f7c80ff3124843df2510b9e7368e237ea6 Spore Engineering: SPORE Token0 BNB
0x2668ea7a1985447b30f82536d255d90f38e94fd84ca91c6fd31f25640e077b8f54697442021-03-07 10:40:0940 days 16 hrs ago PancakeSwap: SPORE Spore Engineering: SPORE Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SporeToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-01-26
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.7.6 <0.8.0;

library EnumerableSet {

    struct Set {
        bytes32[] _values;

        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.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];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }
    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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;
    }
}

abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

interface IBEP20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ERC20 is Context, IBEP20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

contract SporeToken is ERC20, AccessControl {
    
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    
    constructor() ERC20("Spore Token", "SPORE") {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _mint(to, amount);
    }
    
    function burn(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "must have minter role to mint");
        _burn(to, amount);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f53706f726520546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f53504f5245000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620002d0565b508060049080519060200190620000af929190620002d0565b506012600560006101000a81548160ff021916908360ff1602179055505050620000f26000801b620000e66200013960201b60201c565b6200014160201b60201c565b620001337f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620001276200013960201b60201c565b6200014160201b60201c565b62000386565b600033905090565b6200015382826200015760201b60201c565b5050565b620001868160066000858152602001908152602001600020600001620001fb60201b6200112a1790919060201c565b15620001f7576200019c6200013960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200022b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200023360201b60201c565b905092915050565b6000620002478383620002ad60201b60201c565b620002a2578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002a7565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000308576000855562000354565b82601f106200032357805160ff191683800117855562000354565b8280016001018555821562000354579182015b828111156200035357825182559160200191906001019062000336565b5b50905062000363919062000367565b5090565b5b808211156200038257600081600090555060010162000368565b5090565b61212c80620003966000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80639010d07c116100b8578063a457c2d71161007c578063a457c2d71461068e578063a9059cbb146106f2578063ca15c87314610756578063d539139314610798578063d547741f146107b6578063dd62ed3e1461080457610142565b80639010d07c146104d957806391d148541461053b57806395d89b411461059f5780639dc29fac14610622578063a217fddf1461067057610142565b80632f2ff15d1161010a5780632f2ff15d14610312578063313ce5671461036057806336568abe1461038157806339509351146103cf57806340c10f191461043357806370a082311461048157610142565b806306fdde0314610147578063095ea7b3146101ca57806318160ddd1461022e57806323b872dd1461024c578063248a9ca3146102d0575b600080fd5b61014f61087c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610216600480360360408110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061091e565b60405180821515815260200191505060405180910390f35b61023661093c565b6040518082815260200191505060405180910390f35b6102b86004803603606081101561026257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610946565b60405180821515815260200191505060405180910390f35b6102fc600480360360208110156102e657600080fd5b8101908080359060200190929190505050610a1f565b6040518082815260200191505060405180910390f35b61035e6004803603604081101561032857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a3f565b005b610368610ac9565b604051808260ff16815260200191505060405180910390f35b6103cd6004803603604081101561039757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ae0565b005b61041b600480360360408110156103e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b79565b60405180821515815260200191505060405180910390f35b61047f6004803603604081101561044957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c2c565b005b6104c36004803603602081101561049757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cdd565b6040518082815260200191505060405180910390f35b61050f600480360360408110156104ef57600080fd5b810190808035906020019092919080359060200190929190505050610d25565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105876004803603604081101561055157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d57565b60405180821515815260200191505060405180910390f35b6105a7610d89565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e75780820151818401526020810190506105cc565b50505050905090810190601f1680156106145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61066e6004803603604081101561063857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e2b565b005b610678610edc565b6040518082815260200191505060405180910390f35b6106da600480360360408110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ee3565b60405180821515815260200191505060405180910390f35b61073e6004803603604081101561070857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb0565b60405180821515815260200191505060405180910390f35b6107826004803603602081101561076c57600080fd5b8101908080359060200190929190505050610fce565b6040518082815260200191505060405180910390f35b6107a0610ff5565b6040518082815260200191505060405180910390f35b610802600480360360408110156107cc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611019565b005b6108666004803603604081101561081a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110a3565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109145780601f106108e957610100808354040283529160200191610914565b820191906000526020600020905b8154815290600101906020018083116108f757829003601f168201915b5050505050905090565b600061093261092b61115a565b8484611162565b6001905092915050565b6000600254905090565b6000610953848484611359565b610a148461095f61115a565b610a0f8560405180606001604052806028815260200161201160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109c561115a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161a9092919063ffffffff16565b611162565b600190509392505050565b600060066000838152602001908152602001600020600201549050919050565b610a666006600084815260200190815260200160002060020154610a6161115a565b610d57565b610abb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f48602f913960400191505060405180910390fd5b610ac582826116da565b5050565b6000600560009054906101000a900460ff16905090565b610ae861115a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806120c8602f913960400191505060405180910390fd5b610b75828261176e565b5050565b6000610c22610b8661115a565b84610c1d8560016000610b9761115a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180290919063ffffffff16565b611162565b6001905092915050565b610c5d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610c5861115a565b610d57565b610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d7573742068617665206d696e74657220726f6c6520746f206d696e7400000081525060200191505060405180910390fd5b610cd9828261188a565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d4f8260066000868152602001908152602001600020600001611a5190919063ffffffff16565b905092915050565b6000610d818260066000868152602001908152602001600020600001611a6b90919063ffffffff16565b905092915050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e215780601f10610df657610100808354040283529160200191610e21565b820191906000526020600020905b815481529060010190602001808311610e0457829003601f168201915b5050505050905090565b610e5c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610e5761115a565b610d57565b610ece576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d7573742068617665206d696e74657220726f6c6520746f206d696e7400000081525060200191505060405180910390fd5b610ed88282611a9b565b5050565b6000801b81565b6000610fa6610ef061115a565b84610fa1856040518060600160405280602581526020016120a36025913960016000610f1a61115a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161a9092919063ffffffff16565b611162565b6001905092915050565b6000610fc4610fbd61115a565b8484611359565b6001905092915050565b6000610fee60066000848152602001908152602001600020600001611c5f565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b611040600660008481526020019081526020016000206002015461103b61115a565b610d57565b611095576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611fe16030913960400191505060405180910390fd5b61109f828261176e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611152836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611c74565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061207f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f996022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061205a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611465576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611f256023913960400191505060405180910390fd5b611470838383611ce4565b6114db81604051806060016040528060268152602001611fbb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061156e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561168c578082015181840152602081019050611671565b50505050905090810190601f1680156116b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b611702816006600085815260200190815260200160002060000161112a90919063ffffffff16565b1561176a5761170f61115a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6117968160066000858152602001908152602001600020600001611ce990919063ffffffff16565b156117fe576117a361115a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600080828401905083811015611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61193960008383611ce4565b61194e8160025461180290919063ffffffff16565b6002819055506119a5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461180290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611a608360000183611d19565b60001c905092915050565b6000611a93836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611d9c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120396021913960400191505060405180910390fd5b611b2d82600083611ce4565b611b9881604051806060016040528060228152602001611f77602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161a9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bef81600254611dbf90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000611c6d82600001611e09565b9050919050565b6000611c808383611d9c565b611cd9578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611cde565b600090505b92915050565b505050565b6000611d11836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611e1a565b905092915050565b600081836000018054905011611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611f036022913960400191505060405180910390fd5b826000018281548110611d8957fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000611e0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061161a565b905092915050565b600081600001805490509050919050565b60008083600101600084815260200190815260200160002054905060008114611ef65760006001820390506000600186600001805490500390506000866000018281548110611e6557fe5b9060005260206000200154905080876000018481548110611e8257fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480611eba57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611efc565b60009150505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220a3971de797ad1fb303f73787f2d6e3b4974d2b8e40aa1ada06a49e027b1df24864736f6c63430007060033

Deployed ByteCode Sourcemap

16846:674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13073:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13927:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13350:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14104:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10370:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10492:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13259:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10965:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14433:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17145:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13458:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10224:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9942:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13164:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17337:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9576:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14659:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13585:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10089:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16903:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10727:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13768:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13073:83;13110:13;13143:5;13136:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13073:83;:::o;13927:169::-;14010:4;14027:39;14036:12;:10;:12::i;:::-;14050:7;14059:6;14027:8;:39::i;:::-;14084:4;14077:11;;13927:169;;;;:::o;13350:100::-;13403:7;13430:12;;13423:19;;13350:100;:::o;14104:321::-;14210:4;14227:36;14237:6;14245:9;14256:6;14227:9;:36::i;:::-;14274:121;14283:6;14291:12;:10;:12::i;:::-;14305:89;14343:6;14305:89;;;;;;;;;;;;;;;;;:11;:19;14317:6;14305:19;;;;;;;;;;;;;;;:33;14325:12;:10;:12::i;:::-;14305:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14274:8;:121::i;:::-;14413:4;14406:11;;14104:321;;;;;:::o;10370:114::-;10427:7;10454:6;:12;10461:4;10454:12;;;;;;;;;;;:22;;;10447:29;;10370:114;;;:::o;10492:227::-;10576:45;10584:6;:12;10591:4;10584:12;;;;;;;;;;;:22;;;10608:12;:10;:12::i;:::-;10576:7;:45::i;:::-;10568:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10686:25;10697:4;10703:7;10686:10;:25::i;:::-;10492:227;;:::o;13259:83::-;13300:5;13325:9;;;;;;;;;;;13318:16;;13259:83;:::o;10965:209::-;11063:12;:10;:12::i;:::-;11052:23;;:7;:23;;;11044:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11140:26;11152:4;11158:7;11140:11;:26::i;:::-;10965:209;;:::o;14433:218::-;14521:4;14538:83;14547:12;:10;:12::i;:::-;14561:7;14570:50;14609:10;14570:11;:25;14582:12;:10;:12::i;:::-;14570:25;;;;;;;;;;;;;;;:34;14596:7;14570:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14538:8;:83::i;:::-;14639:4;14632:11;;14433:218;;;;:::o;17145:180::-;17221:34;16941:24;17242:12;:10;:12::i;:::-;17221:7;:34::i;:::-;17213:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17300:17;17306:2;17310:6;17300:5;:17::i;:::-;17145:180;;:::o;13458:119::-;13524:7;13551:9;:18;13561:7;13551:18;;;;;;;;;;;;;;;;13544:25;;13458:119;;;:::o;10224:138::-;10297:7;10324:30;10348:5;10324:6;:12;10331:4;10324:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;10317:37;;10224:138;;;;:::o;9942:139::-;10011:4;10035:38;10065:7;10035:6;:12;10042:4;10035:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;10028:45;;9942:139;;;;:::o;13164:87::-;13203:13;13236:7;13229:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13164:87;:::o;17337:180::-;17413:34;16941:24;17434:12;:10;:12::i;:::-;17413:7;:34::i;:::-;17405:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17492:17;17498:2;17502:6;17492:5;:17::i;:::-;17337:180;;:::o;9576:49::-;9621:4;9576:49;;;:::o;14659:269::-;14752:4;14769:129;14778:12;:10;:12::i;:::-;14792:7;14801:96;14840:15;14801:96;;;;;;;;;;;;;;;;;:11;:25;14813:12;:10;:12::i;:::-;14801:25;;;;;;;;;;;;;;;:34;14827:7;14801:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14769:8;:129::i;:::-;14916:4;14909:11;;14659:269;;;;:::o;13585:175::-;13671:4;13688:42;13698:12;:10;:12::i;:::-;13712:9;13723:6;13688:9;:42::i;:::-;13748:4;13741:11;;13585:175;;;;:::o;10089:127::-;10152:7;10179:29;:6;:12;10186:4;10179:12;;;;;;;;;;;:20;;:27;:29::i;:::-;10172:36;;10089:127;;;:::o;16903:62::-;16941:24;16903:62;:::o;10727:230::-;10812:45;10820:6;:12;10827:4;10820:12;;;;;;;;;;;:22;;;10844:12;:10;:12::i;:::-;10812:7;:45::i;:::-;10804:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10923:26;10935:4;10941:7;10923:11;:26::i;:::-;10727:230;;:::o;13768:151::-;13857:7;13884:11;:18;13896:5;13884:18;;;;;;;;;;;;;;;:27;13903:7;13884:27;;;;;;;;;;;;;;;;13877:34;;13768:151;;;;:::o;2396:143::-;2466:4;2490:41;2495:3;:10;;2523:5;2515:14;;2507:23;;2490:4;:41::i;:::-;2483:48;;2396:143;;;;:::o;8927:106::-;8980:15;9015:10;9008:17;;8927:106;:::o;16295:346::-;16414:1;16397:19;;:5;:19;;;;16389:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16495:1;16476:21;;:7;:21;;;;16468:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16579:6;16549:11;:18;16561:5;16549:18;;;;;;;;;;;;;;;:27;16568:7;16549:27;;;;;;;;;;;;;;;:36;;;;16617:7;16601:32;;16610:5;16601:32;;;16626:6;16601:32;;;;;;;;;;;;;;;;;;16295:346;;;:::o;14936:539::-;15060:1;15042:20;;:6;:20;;;;15034:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:1;15123:23;;:9;:23;;;;15115:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15199:47;15220:6;15228:9;15239:6;15199:20;:47::i;:::-;15279:71;15301:6;15279:71;;;;;;;;;;;;;;;;;:9;:17;15289:6;15279:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;15259:9;:17;15269:6;15259:17;;;;;;;;;;;;;;;:91;;;;15384:32;15409:6;15384:9;:20;15394:9;15384:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;15361:9;:20;15371:9;15361:20;;;;;;;;;;;;;;;:55;;;;15449:9;15432:35;;15441:6;15432:35;;;15460:6;15432:35;;;;;;;;;;;;;;;;;;14936:539;;;:::o;7699:192::-;7785:7;7818:1;7813;:6;;7821:12;7805:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7845:9;7861:1;7857;:5;7845:17;;7882:1;7875:8;;;7699:192;;;;;:::o;11509:188::-;11583:33;11608:7;11583:6;:12;11590:4;11583:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;11579:111;;;11665:12;:10;:12::i;:::-;11638:40;;11656:7;11638:40;;11650:4;11638:40;;;;;;;;;;11579:111;11509:188;;:::o;11705:192::-;11780:36;11808:7;11780:6;:12;11787:4;11780:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;11776:114;;;11865:12;:10;:12::i;:::-;11838:40;;11856:7;11838:40;;11850:4;11838:40;;;;;;;;;;11776:114;11705:192;;:::o;7366:181::-;7424:7;7444:9;7460:1;7456;:5;7444:17;;7485:1;7480;:6;;7472:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7538:1;7531:8;;;7366:181;;;;:::o;15483:378::-;15586:1;15567:21;;:7;:21;;;;15559:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15637:49;15666:1;15670:7;15679:6;15637:20;:49::i;:::-;15714:24;15731:6;15714:12;;:16;;:24;;;;:::i;:::-;15699:12;:39;;;;15770:30;15793:6;15770:9;:18;15780:7;15770:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;15749:9;:18;15759:7;15749:18;;;;;;;;;;;;;;;:51;;;;15837:7;15816:37;;15833:1;15816:37;;;15846:6;15816:37;;;;;;;;;;;;;;;;;;15483:378;;:::o;2999:149::-;3073:7;3116:22;3120:3;:10;;3132:5;3116:3;:22::i;:::-;3108:31;;3093:47;;2999:149;;;;:::o;2708:158::-;2788:4;2812:46;2822:3;:10;;2850:5;2842:14;;2834:23;;2812:9;:46::i;:::-;2805:53;;2708:158;;;;:::o;15869:418::-;15972:1;15953:21;;:7;:21;;;;15945:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16025:49;16046:7;16063:1;16067:6;16025:20;:49::i;:::-;16108:68;16131:6;16108:68;;;;;;;;;;;;;;;;;:9;:18;16118:7;16108:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;16087:9;:18;16097:7;16087:18;;;;;;;;;;;;;;;:89;;;;16202:24;16219:6;16202:12;;:16;;:24;;;;:::i;:::-;16187:12;:39;;;;16268:1;16242:37;;16251:7;16242:37;;;16272:6;16242:37;;;;;;;;;;;;;;;;;;15869:418;;:::o;2874:117::-;2937:7;2964:19;2972:3;:10;;2964:7;:19::i;:::-;2957:26;;2874:117;;;:::o;217:291::-;280:4;302:21;312:3;317:5;302:9;:21::i;:::-;297:204;;340:3;:11;;357:5;340:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;400:3;:11;;:18;;;;378:3;:12;;:19;391:5;378:19;;;;;;;;;;;:40;;;;440:4;433:11;;;;297:204;484:5;477:12;;217:291;;;;;:::o;16747:92::-;;;;:::o;2547:149::-;2620:4;2644:44;2652:3;:10;;2680:5;2672:14;;2664:23;;2644:7;:44::i;:::-;2637:51;;2547:149;;;;:::o;1390:204::-;1457:7;1506:5;1485:3;:11;;:18;;;;:26;1477:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1568:3;:11;;1580:5;1568:18;;;;;;;;;;;;;;;;1561:25;;1390:204;;;;:::o;1132:129::-;1205:4;1252:1;1229:3;:12;;:19;1242:5;1229:19;;;;;;;;;;;;:24;;1222:31;;1132:129;;;;:::o;7555:136::-;7613:7;7640:43;7644:1;7647;7640:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7633:50;;7555:136;;;;:::o;1273:109::-;1329:7;1356:3;:11;;:18;;;;1349:25;;1273:109;;;:::o;516:608::-;582:4;599:18;620:3;:12;;:19;633:5;620:19;;;;;;;;;;;;599:40;;670:1;656:10;:15;652:465;;688:21;725:1;712:10;:14;688:38;;741:17;782:1;761:3;:11;;:18;;;;:22;741:42;;800:17;820:3;:11;;832:9;820:22;;;;;;;;;;;;;;;;800:42;;888:9;859:3;:11;;871:13;859:26;;;;;;;;;;;;;;;:38;;;;954:1;938:13;:17;912:3;:12;;:23;925:9;912:23;;;;;;;;;;;:43;;;;972:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;1013:3;:12;;:19;1026:5;1013:19;;;;;;;;;;;1006:26;;;1056:4;1049:11;;;;;;;;652:465;1100:5;1093:12;;;516:608;;;;;:::o

Swarm Source

ipfs://a3971de797ad1fb303f73787f2d6e3b4974d2b8e40aa1ada06a49e027b1df248
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.