TMWSTW TMWSTW_PROFITS
Featured: Register HENS (.etc) Domain Name Click to register
Overview [ERC-20]
Max Total Supply:
100,000,000
Holders:
50
Transfers:
649
Profile Summary
Decimals:
0
Official Site:
FILTERED BY TOKEN HOLDER
BALANCE
64,022 TMWSTW
VALUE
$0 (~0 ETC)
Contract name:
TMWSTW_PROFITS
Optimization enabled :
true
Compiler version:
v0.8.11+commit.d7f03943
EVM Version:
default
Contract source code
// SPDX-License-Identifier: GLWTPL
pragma solidity ^0.8.11;

//TMWSTW Metaverse profit tokens
//100 million total supply, that represent 100% of TMWSTW metaverse income from resource claiming fees
//70% of tokens represent DAO profits (forever locked)
//20% of tokens claimed at start by creator 
//10% of tokens can be claimed by list of early plot claimers (claim period ~1year)
contract TMWSTW_PROFITS{
    string private _name = "TMWSTW_PROFITS";
    string private _symbol = "TMWSTW";
    uint256 private _totalSupply = 100000000; // 100 million total supply
    uint256 private creator_claim_amount = 20000000;//20%
    uint256 private predefined_supply = 90000000;//90% creator+DAO
    address private _creator;
	bool private og_tables_locked;
	uint256 private claim_end_block;
	

    //AT START
    constructor() {
        _balanceOf[address(this)] = _totalSupply;
        _creator = msg.sender;
		claim_end_block = block.number+2500000;
		claim_tokens(msg.sender,creator_claim_amount);
    }
	
	///////////////////////////////////////////OG LIST and CLAIM
	
	mapping(address => uint256) private og_claimable_amount;//amount OG can claim

	//SETUP OG TABLES ONCE
    function set_og_tables(uint256[] calldata og_points, address[] calldata  og_wallets) external CREATOR_ONLY{
        require(!og_tables_locked,"tables locked"); //must be unlocked to change
        for (uint i = 0; i < og_wallets.length; i++){
			og_claimable_amount[og_wallets[i]] = og_points[i];
        }
		og_tables_locked = true;
    }
	
	//OG CLAIM -- !!! make time limit
	function og_claim()public {
        require(og_tables_locked,"OG tables not set yet");
		require(block.number<claim_end_block,"Claim period finished");
		require(og_claimable_amount[msg.sender]>0,"Not on OG list");//ignore non OGs

		claim_tokens(msg.sender, og_claimable_amount[msg.sender]);
		og_claimable_amount[msg.sender]=0;		
    }
	function claim_unclaimed()public CREATOR_ONLY{
		require(block.number>claim_end_block,"Claim still going");
		uint current_supply = contract_balance();
		require(current_supply>predefined_supply,"Nothing left to claim");
		uint remaining_tokens = current_supply - predefined_supply;
		claim_tokens(msg.sender,remaining_tokens);
	}
	function claim_tokens(address claimer_address, uint256 claim_amount) internal{
		_transfer(address(this),claimer_address,claim_amount);
		emit Tokens_claimed(claimer_address,claim_amount);
	}
	event Tokens_claimed(address claimer,uint256 amount);
	
	function claimable_amount(address this_address)public view returns(uint256){
		return og_claimable_amount[this_address];
	}
	

    ////////////////////////////////EXTRA READS
    //check balance of contract
    function contract_balance() public view returns (uint256){
        return _balanceOf[address(this)];
    }
	
	///////////////////////////////////CREATOR
	//change CREATOR
    function change_creator(address _this_address)public CREATOR_ONLY{
        _creator = _this_address;
    }
    modifier CREATOR_ONLY {
        require(msg.sender == _creator,"must be creator"); //must be creator
        _;
    }

    /////////////////////////////////ERC20 CLASSICS

    //mappings
    mapping(address => uint256) private _balanceOf;
    mapping(address => mapping(address => uint256)) private _allowance;

    //events
    event Transfer(address indexed _from, address indexed _to, uint256 _value);  //transfer event
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);  //aproval event

    //transfer tokens
    function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender,_to,_value);
    }

    //internal transfer function
    function _transfer(address _from,address _to, uint256 _value) internal virtual {
        require(_from != address(0)); //ignore null address
        require(_to != address(0)); //ignore null address
        require(_balanceOf[_from] >= _value); //check if balance is good
        _balanceOf[_from] -= _value;  //sunstract balance of sender
        _balanceOf[_to] += _value; //add to balance of receiver
        emit Transfer(_from, _to, _value); //emit transfer event
    }

    //aprove 3rd party to transfer tokens
    function approve(address _spender, uint256 _value) public {
        require(msg.sender != address(0)); //ignore null address
        require(_spender != address(0)); //ignore null address
        _allowance[msg.sender][_spender] = _value; //update allowance array
        emit Approval(msg.sender, _spender, _value); //emit aproval event
    }

    //transfer by 3rd party
    function transferFrom(address _from, address _to, uint256 _value) public {
        uint256 currentAllowance = _allowance[_from][msg.sender];
        if(currentAllowance != type(uint256).max){
            require(_allowance[_from][msg.sender] >= _value); //check if allowance is clear
            _allowance[_from][msg.sender] -= _value; //substract from allowance
        }
        _transfer(_from,_to,_value);
    }

    //check name
    function name() public view returns (string memory){
        return _name;
    }
    //check symbol
    function symbol() public view returns (string memory){
        return _symbol;
    }
    //check supply
    function totalSupply() public view returns (uint256){
        return _totalSupply;
    }
    //check balance
    function balanceOf(address _account) public view returns (uint256){
        return _balanceOf[_account];
    }
    
    //show allowance
    function allowance(address _owner, address _spender) public view returns (uint256){
        return _allowance[_owner][_spender];
    }
    //show decimals
    function decimals() public pure returns (uint8){
        return 0;
    }
}

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":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Tokens_claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_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":"_value","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_this_address","type":"address"}],"name":"change_creator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim_unclaimed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"this_address","type":"address"}],"name":"claimable_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contract_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og_claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"og_points","type":"uint256[]"},{"internalType":"address[]","name":"og_wallets","type":"address[]"}],"name":"set_og_tables","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":"_value","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]