Token GMBL COMPUTER CHiP

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
99,748,023.486967 GMBL

Holders:
428 addresses

Transfers:
-

Contract:
0xE9A5aF50874c0ef2748b5DB70104B5ccb5557f6d0xE9A5aF50874c0ef2748b5DB70104B5ccb5557f6d

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GMBL

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion
File 1 of 3 : ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

File 2 of 3 : Kernel.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.15;

//============================================================================================//
//                                        GLOBAL TYPES                                        //
//============================================================================================//

/// @notice Actions to trigger state changes in the kernel. Passed by the executor
enum Actions {
    InstallModule,
    UpgradeModule,
    ActivatePolicy,
    DeactivatePolicy,
    ChangeExecutor,
    MigrateKernel
}

/// @notice Used by executor to select an action and a target contract for a kernel action
struct Instruction {
    Actions action;
    address target;
}

/// @notice Used to define which module functions a policy needs access to
struct Permissions {
    Keycode keycode;
    bytes4 funcSelector;
}

type Keycode is bytes5;

//============================================================================================//
//                                       UTIL FUNCTIONS                                       //
//============================================================================================//

error TargetNotAContract(address target_);
error InvalidKeycode(Keycode keycode_);

// solhint-disable-next-line func-visibility
function toKeycode(bytes5 keycode_) pure returns (Keycode) {
    return Keycode.wrap(keycode_);
}

// solhint-disable-next-line func-visibility
function fromKeycode(Keycode keycode_) pure returns (bytes5) {
    return Keycode.unwrap(keycode_);
}

// solhint-disable-next-line func-visibility
function ensureContract(address target_) view {
    if (target_.code.length == 0) revert TargetNotAContract(target_);
}

// solhint-disable-next-line func-visibility
function ensureValidKeycode(Keycode keycode_) pure {
    bytes5 unwrapped = Keycode.unwrap(keycode_);

    for (uint256 i = 0; i < 5; ) {
        bytes1 char = unwrapped[i];
        if (char < 0x41 || char > 0x5A) revert InvalidKeycode(keycode_); // A-Z only
        unchecked {
            i++;
        }
    }
}

//============================================================================================//
//                                        COMPONENTS                                          //
//============================================================================================//

/// @notice Generic adapter interface for kernel access in modules and policies.
abstract contract KernelAdapter {
    error KernelAdapter_OnlyKernel(address caller_);

    Kernel public kernel;

    constructor(Kernel kernel_) {
        kernel = kernel_;
    }

    /// @notice Modifier to restrict functions to be called only by kernel.
    modifier onlyKernel() {
        if (msg.sender != address(kernel)) revert KernelAdapter_OnlyKernel(msg.sender);
        _;
    }

    /// @notice Function used by kernel when migrating to a new kernel.
    function changeKernel(Kernel newKernel_) external onlyKernel {
        kernel = newKernel_;
    }
}

/// @notice Base level extension of the kernel. Modules act as independent state components to be
///         interacted with and mutated through policies.
/// @dev    Modules are installed and uninstalled via the executor.
abstract contract Module is KernelAdapter {
    error Module_PolicyNotPermitted(address policy_);

    constructor(Kernel kernel_) KernelAdapter(kernel_) {}

    /// @notice Modifier to restrict which policies have access to module functions.
    modifier permissioned() {
        if (!kernel.modulePermissions(KEYCODE(), Policy(msg.sender), msg.sig))
            revert Module_PolicyNotPermitted(msg.sender);
        _;
    }

    /// @notice 5 byte identifier for a module.
    function KEYCODE() public pure virtual returns (Keycode) {}

    /// @notice Returns which semantic version of a module is being implemented.
    /// @return major - Major version upgrade indicates breaking change to the interface.
    /// @return minor - Minor version change retains backward-compatible interface.
    function VERSION() external pure virtual returns (uint8 major, uint8 minor) {}

    /// @notice Initialization function for the module
    /// @dev    This function is called when the module is installed or upgraded by the kernel.
    /// @dev    MUST BE GATED BY onlyKernel. Used to encompass any initialization or upgrade logic.
    function INIT() external virtual onlyKernel {}
}

/// @notice Policies are application logic and external interface for the kernel and installed modules.
/// @dev    Policies are activated and deactivated in the kernel by the executor.
/// @dev    Module dependencies and function permissions must be defined in appropriate functions.
abstract contract Policy is KernelAdapter {
    error Policy_ModuleDoesNotExist(Keycode keycode_);

    constructor(Kernel kernel_) KernelAdapter(kernel_) {}

    /// @notice Easily accessible indicator for if a policy is activated or not.
    function isActive() external view returns (bool) {
        return kernel.isPolicyActive(this);
    }

    /// @notice Function to grab module address from a given keycode.
    function getModuleAddress(Keycode keycode_) internal view returns (address) {
        address moduleForKeycode = address(kernel.getModuleForKeycode(keycode_));
        if (moduleForKeycode == address(0)) revert Policy_ModuleDoesNotExist(keycode_);
        return moduleForKeycode;
    }

    /// @notice Define module dependencies for this policy.
    /// @return dependencies - Keycode array of module dependencies.
    function configureDependencies() external virtual returns (Keycode[] memory dependencies) {}

    /// @notice Function called by kernel to set module function permissions.
    /// @return requests - Array of keycodes and function selectors for requested permissions.
    function requestPermissions() external view virtual returns (Permissions[] memory requests) {}
}

/// @notice Main contract that acts as a central component registry for the protocol.
/// @dev    The kernel manages modules and policies. The kernel is mutated via predefined Actions,
/// @dev    which are input from any address assigned as the executor. The executor can be changed as needed.
contract Kernel {
    // =========  EVENTS ========= //

    event PermissionsUpdated(
        Keycode indexed keycode_,
        Policy indexed policy_,
        bytes4 funcSelector_,
        bool granted_
    );
    event ActionExecuted(Actions indexed action_, address indexed target_);

    // =========  ERRORS ========= //

    error Kernel_OnlyExecutor(address caller_);
    error Kernel_ModuleAlreadyInstalled(Keycode module_);
    error Kernel_InvalidModuleUpgrade(Keycode module_);
    error Kernel_PolicyAlreadyActivated(address policy_);
    error Kernel_PolicyNotActivated(address policy_);

    // =========  PRIVILEGED ADDRESSES ========= //

    /// @notice Address that is able to initiate Actions in the kernel. Can be assigned to a multisig or governance contract.
    address public executor;

    // =========  MODULE MANAGEMENT ========= //

    /// @notice Array of all modules currently installed.
    Keycode[] public allKeycodes;

    /// @notice Mapping of module address to keycode.
    mapping(Keycode => Module) public getModuleForKeycode;

    /// @notice Mapping of keycode to module address.
    mapping(Module => Keycode) public getKeycodeForModule;

    /// @notice Mapping of a keycode to all of its policy dependents. Used to efficiently reconfigure policy dependencies.
    mapping(Keycode => Policy[]) public moduleDependents;

    /// @notice Helper for module dependent arrays. Prevents the need to loop through array.
    mapping(Keycode => mapping(Policy => uint256)) public getDependentIndex;

    /// @notice Module <> Policy Permissions.
    /// @dev    Keycode -> Policy -> Function Selector -> bool for permission
    mapping(Keycode => mapping(Policy => mapping(bytes4 => bool))) public modulePermissions;

    // =========  POLICY MANAGEMENT ========= //

    /// @notice List of all active policies
    Policy[] public activePolicies;

    /// @notice Helper to get active policy quickly. Prevents need to loop through array.
    mapping(Policy => uint256) public getPolicyIndex;

    //============================================================================================//
    //                                       CORE FUNCTIONS                                       //
    //============================================================================================//

    constructor() {
        executor = msg.sender;
    }

    /// @notice Modifier to check if caller is the executor.
    modifier onlyExecutor() {
        if (msg.sender != executor) revert Kernel_OnlyExecutor(msg.sender);
        _;
    }

    function isPolicyActive(Policy policy_) public view returns (bool) {
        return activePolicies.length > 0 && activePolicies[getPolicyIndex[policy_]] == policy_;
    }

    /// @notice Main kernel function. Initiates state changes to kernel depending on Action passed in.
    function executeAction(Actions action_, address target_) external onlyExecutor {
        if (action_ == Actions.InstallModule) {
            ensureContract(target_);
            ensureValidKeycode(Module(target_).KEYCODE());
            _installModule(Module(target_));
        } else if (action_ == Actions.UpgradeModule) {
            ensureContract(target_);
            ensureValidKeycode(Module(target_).KEYCODE());
            _upgradeModule(Module(target_));
        } else if (action_ == Actions.ActivatePolicy) {
            ensureContract(target_);
            _activatePolicy(Policy(target_));
        } else if (action_ == Actions.DeactivatePolicy) {
            ensureContract(target_);
            _deactivatePolicy(Policy(target_));
        } else if (action_ == Actions.ChangeExecutor) {
            executor = target_;
        } else if (action_ == Actions.MigrateKernel) {
            ensureContract(target_);
            _migrateKernel(Kernel(target_));
        }

        emit ActionExecuted(action_, target_);
    }

    function _installModule(Module newModule_) internal {
        Keycode keycode = newModule_.KEYCODE();

        if (address(getModuleForKeycode[keycode]) != address(0))
            revert Kernel_ModuleAlreadyInstalled(keycode);

        getModuleForKeycode[keycode] = newModule_;
        getKeycodeForModule[newModule_] = keycode;
        allKeycodes.push(keycode);

        newModule_.INIT();
    }

    function _upgradeModule(Module newModule_) internal {
        Keycode keycode = newModule_.KEYCODE();
        Module oldModule = getModuleForKeycode[keycode];

        if (address(oldModule) == address(0) || oldModule == newModule_)
            revert Kernel_InvalidModuleUpgrade(keycode);

        getKeycodeForModule[oldModule] = Keycode.wrap(bytes5(0));
        getKeycodeForModule[newModule_] = keycode;
        getModuleForKeycode[keycode] = newModule_;

        newModule_.INIT();

        _reconfigurePolicies(keycode);
    }

    function _activatePolicy(Policy policy_) internal {
        if (isPolicyActive(policy_)) revert Kernel_PolicyAlreadyActivated(address(policy_));

        // Add policy to list of active policies
        activePolicies.push(policy_);
        getPolicyIndex[policy_] = activePolicies.length - 1;

        // Record module dependencies
        Keycode[] memory dependencies = policy_.configureDependencies();
        uint256 depLength = dependencies.length;

        for (uint256 i; i < depLength; ) {
            Keycode keycode = dependencies[i];

            moduleDependents[keycode].push(policy_);
            getDependentIndex[keycode][policy_] = moduleDependents[keycode].length - 1;

            unchecked {
                ++i;
            }
        }

        // Grant permissions for policy to access restricted module functions
        Permissions[] memory requests = policy_.requestPermissions();
        _setPolicyPermissions(policy_, requests, true);
    }

    function _deactivatePolicy(Policy policy_) internal {
        if (!isPolicyActive(policy_)) revert Kernel_PolicyNotActivated(address(policy_));

        // Revoke permissions
        Permissions[] memory requests = policy_.requestPermissions();
        _setPolicyPermissions(policy_, requests, false);

        // Remove policy from all policy data structures
        uint256 idx = getPolicyIndex[policy_];
        Policy lastPolicy = activePolicies[activePolicies.length - 1];

        activePolicies[idx] = lastPolicy;
        activePolicies.pop();
        getPolicyIndex[lastPolicy] = idx;
        delete getPolicyIndex[policy_];

        // Remove policy from module dependents
        _pruneFromDependents(policy_);
    }

    /// @notice All functionality will move to the new kernel. WARNING: ACTION WILL BRICK THIS KERNEL.
    /// @dev    New kernel must add in all of the modules and policies via executeAction.
    /// @dev    NOTE: Data does not get cleared from this kernel.
    function _migrateKernel(Kernel newKernel_) internal {
        uint256 keycodeLen = allKeycodes.length;
        for (uint256 i; i < keycodeLen; ) {
            Module module = Module(getModuleForKeycode[allKeycodes[i]]);
            module.changeKernel(newKernel_);
            unchecked {
                ++i;
            }
        }

        uint256 policiesLen = activePolicies.length;
        for (uint256 j; j < policiesLen; ) {
            Policy policy = activePolicies[j];

            // Deactivate before changing kernel
            policy.changeKernel(newKernel_);
            unchecked {
                ++j;
            }
        }
    }

    function _reconfigurePolicies(Keycode keycode_) internal {
        Policy[] memory dependents = moduleDependents[keycode_];
        uint256 depLength = dependents.length;

        for (uint256 i; i < depLength; ) {
            dependents[i].configureDependencies();

            unchecked {
                ++i;
            }
        }
    }

    function _setPolicyPermissions(
        Policy policy_,
        Permissions[] memory requests_,
        bool grant_
    ) internal {
        uint256 reqLength = requests_.length;
        for (uint256 i = 0; i < reqLength; ) {
            Permissions memory request = requests_[i];
            modulePermissions[request.keycode][policy_][request.funcSelector] = grant_;

            emit PermissionsUpdated(request.keycode, policy_, request.funcSelector, grant_);

            unchecked {
                ++i;
            }
        }
    }

    function _pruneFromDependents(Policy policy_) internal {
        Keycode[] memory dependencies = policy_.configureDependencies();
        uint256 depcLength = dependencies.length;

        for (uint256 i; i < depcLength; ) {
            Keycode keycode = dependencies[i];
            Policy[] storage dependents = moduleDependents[keycode];

            uint256 origIndex = getDependentIndex[keycode][policy_];
            Policy lastPolicy = dependents[dependents.length - 1];

            // Swap with last and pop
            dependents[origIndex] = lastPolicy;
            dependents.pop();

            // Record new index and delete deactivated policy index
            getDependentIndex[keycode][lastPolicy] = origIndex;
            delete getDependentIndex[keycode][policy_];

            unchecked {
                ++i;
            }
        }
    }
}

File 3 of 3 : GMBL.sol
// SPDX-License-Identifier: BUSL1.1
pragma solidity ^0.8.0;

import {ERC20} from "solmate/tokens/ERC20.sol";
import {Kernel, Module, Keycode} from "Default/Kernel.sol";


contract GMBL is ERC20, Module {
    error GMBL_Mint_MaxSupplyExceeded();

    /// @notice maximum totalSupply
    uint256 public maxSupply;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 maxSupply_,
        Kernel kernel_
    ) ERC20(name_, symbol_, decimals_) Module(kernel_) {
        maxSupply = maxSupply_;
    }

    /// @inheritdoc Module
    function KEYCODE() public pure override returns (Keycode) {
        return Keycode.wrap("GMBLE");
    }

    /// @notice Default-compatible permissioned mint for token module
    /// @param to Address to be credited minted supply
    /// @param amount Amount to credit
    function mint(address to, uint256 amount) external permissioned {
        _mint(to, amount);
    }

    /// @notice Burn `amount` of msg.sender's tokens
    /// @param amount Amount to burn
    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    /// @notice Custom implementation of Solmate ERC20 `mint`
    /// @dev totalSupply cannot exceed maximum supply
    /// @param to Address to mint to
    /// @param amount Amount to mint
    function _mint(address to, uint256 amount) internal override {
        totalSupply += amount;

        if (totalSupply > maxSupply) revert GMBL_Mint_MaxSupplyExceeded();

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "remappings": [
    "Default/=src/Default2/src/",
    "ds-test/=lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "prb-test/=lib/Default/lib/prb-test/src/",
    "solmate/=lib/solmate/src/",
    "test-utils/=lib/Default/lib/test-utils/src/",
    "weird-erc20/=lib/Default/lib/solmate/lib/weird-erc20/src/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "src/=src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solidity-examples/=lib/solidity-examples/contracts/"
  ],
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"contract Kernel","name":"kernel_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"GMBL_Mint_MaxSupplyExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"caller_","type":"address"}],"name":"KernelAdapter_OnlyKernel","type":"error"},{"inputs":[{"internalType":"address","name":"policy_","type":"address"}],"name":"Module_PolicyNotPermitted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"KEYCODE","outputs":[{"internalType":"Keycode","name":"","type":"bytes5"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint8","name":"major","type":"uint8"},{"internalType":"uint8","name":"minor","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Kernel","name":"newKernel_","type":"address"}],"name":"changeKernel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kernel","outputs":[{"internalType":"contract Kernel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b50604051620012d8380380620012d883398101604081905262000034916200020b565b808086868660006200004784826200034a565b5060016200005683826200034a565b5060ff81166080524660a0526200006c620000a2565b60c0525050600680546001600160a01b0319166001600160a01b0393909316929092179091555050506007555062000494915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000d6919062000416565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016657600080fd5b81516001600160401b03808211156200018357620001836200013e565b604051601f8301601f19908116603f01168101908282118183101715620001ae57620001ae6200013e565b81604052838152602092508683858801011115620001cb57600080fd5b600091505b83821015620001ef5785820183015181830184015290820190620001d0565b83821115620002015760008385830101525b9695505050505050565b600080600080600060a086880312156200022457600080fd5b85516001600160401b03808211156200023c57600080fd5b6200024a89838a0162000154565b965060208801519150808211156200026157600080fd5b50620002708882890162000154565b945050604086015160ff811681146200028857600080fd5b6060870151608088015191945092506001600160a01b0381168114620002ad57600080fd5b809150509295509295909350565b600181811c90821680620002d057607f821691505b602082108103620002f157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034557600081815260208120601f850160051c81016020861015620003205750805b601f850160051c820191505b8181101562000341578281556001016200032c565b5050505b505050565b81516001600160401b038111156200036657620003666200013e565b6200037e81620003778454620002bb565b84620002f7565b602080601f831160018114620003b657600084156200039d5750858301515b600019600386901b1c1916600185901b17855562000341565b600085815260208120601f198616915b82811015620003e757888601518255948401946001909101908401620003c6565b5085821015620004065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200042681620002bb565b60018281168015620004415760018114620004575762000488565b60ff198416875282151583028701945062000488565b8760005260208060002060005b858110156200047f5781548a82015290840190820162000464565b50505082870194505b50929695505050505050565b60805160a05160c051610e14620004c460003960006104f4015260006104bf015260006101920152610e146000f3fe608060405234801561001057600080fd5b50600436106100fc5760003560e01c806306fdde0314610101578063095ea7b31461011f57806318160ddd146101425780631ae7ec2e1461015957806323b872dd1461017a578063313ce5671461018d5780633644e515146101c657806340c10f19146101ce57806342966c68146101e35780634657b36c146101f657806370a08231146102095780637ecebe001461022957806395d89b4114610249578063a9059cbb14610251578063d4aae0c414610264578063d505accf14610284578063d5abeb0114610297578063dd62ed3e146102a0578063ea643914146102cb578063ffa1ad74146102d3575b600080fd5b6101096102e7565b6040516101169190610a86565b60405180910390f35b61013261012d366004610af0565b610375565b6040519015158152602001610116565b61014b60025481565b604051908152602001610116565b6101616103cf565b6040516001600160d81b03199091168152602001610116565b610132610188366004610b1c565b6103db565b6101b47f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610116565b61014b6104bb565b6101e16101dc366004610af0565b610516565b005b6101e16101f1366004610b5d565b6105e1565b6101e1610204366004610b76565b6105ee565b61014b610217366004610b76565b60036020526000908152604090205481565b61014b610237366004610b76565b60056020526000908152604090205481565b61010961063d565b61013261025f366004610af0565b61064a565b600654610277906001600160a01b031681565b6040516101169190610b9a565b6101e1610292366004610bae565b6106b0565b61014b60075481565b61014b6102ae366004610c25565b600460209081526000928352604080842090915290825290205481565b6101e16108dc565b604080516000808252602082015201610116565b600080546102f490610c5e565b80601f016020809104026020016040519081016040528092919081815260200182805461032090610c5e565b801561036d5780601f106103425761010080835404028352916020019161036d565b820191906000526020600020905b81548152906001019060200180831161035057829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020610dbf833981519152906103be9086815260200190565b60405180910390a350600192915050565b64474d424c4560d81b90565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610437576104128382610cae565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b0385166000908152600360205260408120805485929061045f908490610cae565b90915550506001600160a01b0380851660008181526003602052604090819020805487019055519091871690600080516020610d9f833981519152906104a89087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104f1576104ec61090b565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b031663f166d9eb61052f6103cf565b6040516001600160e01b031960e084901b811682526001600160d81b03199290921660048201523360248201526000359091166044820152606401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190610cc5565b6105d357336040516311bf00c960e01b81526004016105ca9190610b9a565b60405180910390fd5b6105dd82826109a5565b5050565b6105eb3382610a24565b50565b6006546001600160a01b0316331461061b573360405163053e900f60e21b81526004016105ca9190610b9a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600180546102f490610c5e565b3360009081526003602052604081208054839190839061066b908490610cae565b90915550506001600160a01b03831660008181526003602052604090819020805485019055513390600080516020610d9f833981519152906103be9086815260200190565b428410156106fa5760405162461bcd60e51b815260206004820152601760248201527614115493525517d11150511312539157d1561412549151604a1b60448201526064016105ca565b600060016107066104bb565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610812573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906108485750876001600160a01b0316816001600160a01b0316145b6108855760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105ca565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a1691600080516020610dbf833981519152910160405180910390a350505050505050565b6006546001600160a01b03163314610909573360405163053e900f60e21b81526004016105ca9190610b9a565b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161093d9190610ce7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546109b79190610d86565b909155505060075460025411156109e157604051636df36a9560e01b815260040160405180910390fd5b6001600160a01b038216600081815260036020908152604080832080548601905551848152600080516020610d9f83398151915291015b60405180910390a35050565b6001600160a01b03821660009081526003602052604081208054839290610a4c908490610cae565b90915550506002805482900390556040518181526000906001600160a01b03841690600080516020610d9f83398151915290602001610a18565b600060208083528351808285015260005b81811015610ab357858101830151858201604001528201610a97565b81811115610ac5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146105eb57600080fd5b60008060408385031215610b0357600080fd5b8235610b0e81610adb565b946020939093013593505050565b600080600060608486031215610b3157600080fd5b8335610b3c81610adb565b92506020840135610b4c81610adb565b929592945050506040919091013590565b600060208284031215610b6f57600080fd5b5035919050565b600060208284031215610b8857600080fd5b8135610b9381610adb565b9392505050565b6001600160a01b0391909116815260200190565b600080600080600080600060e0888a031215610bc957600080fd5b8735610bd481610adb565b96506020880135610be481610adb565b95506040880135945060608801359350608088013560ff81168114610c0857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610c3857600080fd5b8235610c4381610adb565b91506020830135610c5381610adb565b809150509250929050565b600181811c90821680610c7257607f821691505b602082108103610c9257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610cc057610cc0610c98565b500390565b600060208284031215610cd757600080fd5b81518015158114610b9357600080fd5b600080835481600182811c915080831680610d0357607f831692505b60208084108203610d2257634e487b7160e01b86526022600452602486fd5b818015610d365760018114610d4b57610d78565b60ff1986168952841515850289019650610d78565b60008a81526020902060005b86811015610d705781548b820152908501908301610d57565b505084890196505b509498975050505050505050565b60008219821115610d9957610d99610c98565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212205b9fb1323d2f5996b1ce3c31a07cc27dd34c2cc1b1598b5ddef26b0ac31938d664736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000db427829f48c73709fa488298a95586c4031e80000000000000000000000000000000000000000000000000000000000000012474d424c20434f4d5055544552204348695000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004474d424c00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100fc5760003560e01c806306fdde0314610101578063095ea7b31461011f57806318160ddd146101425780631ae7ec2e1461015957806323b872dd1461017a578063313ce5671461018d5780633644e515146101c657806340c10f19146101ce57806342966c68146101e35780634657b36c146101f657806370a08231146102095780637ecebe001461022957806395d89b4114610249578063a9059cbb14610251578063d4aae0c414610264578063d505accf14610284578063d5abeb0114610297578063dd62ed3e146102a0578063ea643914146102cb578063ffa1ad74146102d3575b600080fd5b6101096102e7565b6040516101169190610a86565b60405180910390f35b61013261012d366004610af0565b610375565b6040519015158152602001610116565b61014b60025481565b604051908152602001610116565b6101616103cf565b6040516001600160d81b03199091168152602001610116565b610132610188366004610b1c565b6103db565b6101b47f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610116565b61014b6104bb565b6101e16101dc366004610af0565b610516565b005b6101e16101f1366004610b5d565b6105e1565b6101e1610204366004610b76565b6105ee565b61014b610217366004610b76565b60036020526000908152604090205481565b61014b610237366004610b76565b60056020526000908152604090205481565b61010961063d565b61013261025f366004610af0565b61064a565b600654610277906001600160a01b031681565b6040516101169190610b9a565b6101e1610292366004610bae565b6106b0565b61014b60075481565b61014b6102ae366004610c25565b600460209081526000928352604080842090915290825290205481565b6101e16108dc565b604080516000808252602082015201610116565b600080546102f490610c5e565b80601f016020809104026020016040519081016040528092919081815260200182805461032090610c5e565b801561036d5780601f106103425761010080835404028352916020019161036d565b820191906000526020600020905b81548152906001019060200180831161035057829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020610dbf833981519152906103be9086815260200190565b60405180910390a350600192915050565b64474d424c4560d81b90565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610437576104128382610cae565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b0385166000908152600360205260408120805485929061045f908490610cae565b90915550506001600160a01b0380851660008181526003602052604090819020805487019055519091871690600080516020610d9f833981519152906104a89087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000a4b146146104f1576104ec61090b565b905090565b507f0f18bd463dfcfc994bea956c2e0837701f07f3c43a0d844b4601ae0329ad16d990565b6006546001600160a01b031663f166d9eb61052f6103cf565b6040516001600160e01b031960e084901b811682526001600160d81b03199290921660048201523360248201526000359091166044820152606401602060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190610cc5565b6105d357336040516311bf00c960e01b81526004016105ca9190610b9a565b60405180910390fd5b6105dd82826109a5565b5050565b6105eb3382610a24565b50565b6006546001600160a01b0316331461061b573360405163053e900f60e21b81526004016105ca9190610b9a565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600180546102f490610c5e565b3360009081526003602052604081208054839190839061066b908490610cae565b90915550506001600160a01b03831660008181526003602052604090819020805485019055513390600080516020610d9f833981519152906103be9086815260200190565b428410156106fa5760405162461bcd60e51b815260206004820152601760248201527614115493525517d11150511312539157d1561412549151604a1b60448201526064016105ca565b600060016107066104bb565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610812573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906108485750876001600160a01b0316816001600160a01b0316145b6108855760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016105ca565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a1691600080516020610dbf833981519152910160405180910390a350505050505050565b6006546001600160a01b03163314610909573360405163053e900f60e21b81526004016105ca9190610b9a565b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405161093d9190610ce7565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80600260008282546109b79190610d86565b909155505060075460025411156109e157604051636df36a9560e01b815260040160405180910390fd5b6001600160a01b038216600081815260036020908152604080832080548601905551848152600080516020610d9f83398151915291015b60405180910390a35050565b6001600160a01b03821660009081526003602052604081208054839290610a4c908490610cae565b90915550506002805482900390556040518181526000906001600160a01b03841690600080516020610d9f83398151915290602001610a18565b600060208083528351808285015260005b81811015610ab357858101830151858201604001528201610a97565b81811115610ac5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146105eb57600080fd5b60008060408385031215610b0357600080fd5b8235610b0e81610adb565b946020939093013593505050565b600080600060608486031215610b3157600080fd5b8335610b3c81610adb565b92506020840135610b4c81610adb565b929592945050506040919091013590565b600060208284031215610b6f57600080fd5b5035919050565b600060208284031215610b8857600080fd5b8135610b9381610adb565b9392505050565b6001600160a01b0391909116815260200190565b600080600080600080600060e0888a031215610bc957600080fd5b8735610bd481610adb565b96506020880135610be481610adb565b95506040880135945060608801359350608088013560ff81168114610c0857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610c3857600080fd5b8235610c4381610adb565b91506020830135610c5381610adb565b809150509250929050565b600181811c90821680610c7257607f821691505b602082108103610c9257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610cc057610cc0610c98565b500390565b600060208284031215610cd757600080fd5b81518015158114610b9357600080fd5b600080835481600182811c915080831680610d0357607f831692505b60208084108203610d2257634e487b7160e01b86526022600452602486fd5b818015610d365760018114610d4b57610d78565b60ff1986168952841515850289019650610d78565b60008a81526020902060005b86811015610d705781548b820152908501908301610d57565b505084890196505b509498975050505050505050565b60008219821115610d9957610d99610c98565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212205b9fb1323d2f5996b1ce3c31a07cc27dd34c2cc1b1598b5ddef26b0ac31938d664736f6c634300080f0033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000db427829f48c73709fa488298a95586c4031e80000000000000000000000000000000000000000000000000000000000000012474d424c20434f4d5055544552204348695000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004474d424c00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): GMBL COMPUTER CHiP
Arg [1] : symbol_ (string): GMBL
Arg [2] : decimals_ (uint8): 18
Arg [3] : maxSupply_ (uint256): 100000000000000000000000000
Arg [4] : kernel_ (address): 0x00db427829f48c73709fa488298A95586c4031E8

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [4] : 00000000000000000000000000db427829f48c73709fa488298a95586c4031e8
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [6] : 474d424c20434f4d505554455220434869500000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 474d424c00000000000000000000000000000000000000000000000000000000


Loading