Featured: Register HENS (.etc) Domain Name Click to register
Overview [ERC-1155]
Max Total Supply:
0
Holders:
12
Transfers:
79
Profile Summary
Decimals:
0
Official Site:
FILTERED BY TOKEN HOLDER
BALANCE
1
VALUE
$0 (~0 ETC)
Contract name:
TMWSTW_BLUEPRINTS
Optimization enabled :
true
Compiler version:
v0.8.20+commit.a1b79de6
EVM Version:
berlin
Contract source code
// SPDX-License-Identifier: GLWTPL
pragma solidity ^0.8.20;


contract TMWSTW_BLUEPRINTS{

    string private token_name = "TMWSTW Blueprints";
    string private token_symbol = "TMWSTW_BP";
    string private _uri = "";
	address private contract_creator;
	address private BP_ROUTER_address;
	uint public token_counter = 0;

    //AT START
    constructor(){
		contract_creator = msg.sender;
		update_URI("https://bprouter.tmwstw.io:21900/data@json@");
		update_BP_ROUTER(0xE23c12d4E1C697C183cF07Fc8bA7578DCc8fA1F8);
    }
	
	//............................SETTINGS
	function update_URI(string memory new_uri) public CREATOR_ONLY{
        _uri = new_uri;
		emit URI(new_uri, 0);
    }
	function update_BP_ROUTER(address new_router) public CREATOR_ONLY{
		BP_ROUTER_address = new_router;
    }
	
	//.............................MODIFIERS
    modifier CREATOR_ONLY{
        require(msg.sender == contract_creator,"must be creator"); 
        _;
    }
	modifier BP_ROUTER_ONLY{
        require(msg.sender == BP_ROUTER_address,"must be BP router"); 
        _;
    }
	
    //MAPS
	mapping(uint256 id => mapping(address account => uint256)) private _balances;
    mapping(address account => mapping(address operator => bool)) private _operatorApprovals;

    function mint(address to, uint256 value) public BP_ROUTER_ONLY{
		require(to != address(0),"Cant mint to null");
		
		token_counter += 1;
		inner_update_one(address(0), to, token_counter, value);
		
		emit new_blueprint(token_counter,value,to);
    }
	
    function uri(uint256 /* id */) public view returns (string memory){
        return _uri;
    }

    function balanceOf(address account, uint256 id) public view returns (uint256){
        return _balances[id][account];
    }
	
    function balanceOfBatch(address[] memory accounts,uint256[] memory ids) public view returns (uint256[] memory){
		require(accounts.length == ids.length,"Bad array length");
        uint256[] memory batchBalances = new uint256[](accounts.length);
        for (uint256 i = 0; i < accounts.length; ++i){
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }
        return batchBalances;
    }
	
    function setApprovalForAll(address operator, bool approved) public{
		require(operator != address(0),"Operator cant be null");
        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view returns (bool){
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes memory data) public{
		check_transfer(from,to);
		inner_update_one(from, to, id, value);
    }

    function safeBatchTransferFrom(address from,address to,uint256[] memory ids,uint256[] memory values,bytes memory data) public {
		check_transfer(from,to);
		update_inner_many(from, to, ids, values);
    }
	
	function check_transfer(address from,address to) internal view{
		require(to != from,"Cant transfer to self");
		require(to != address(0),"Cant transfer to null");
		require(from != address(0),"Cant transfer from null");
		if(msg.sender != from){
			require(isApprovedForAll(from, msg.sender),"Not approved to transfer");
		}
	}

	function inner_update_one(address from, address to, uint256 id, uint256 value)internal {
		update_stats_per_id(from, to, id, value);
		emit TransferSingle(msg.sender, from, to, id, value);
	}
	
	function update_inner_many(address from, address to, uint256[] memory ids, uint256[] memory values) internal {
		require(ids.length == values.length,"Bad array length");
		
		for(uint256 i = 0; i < ids.length; ++i){
            uint256 id = ids[i];
            uint256 value = values[i];
			
			update_stats_per_id(from, to, id, value);
        }
		emit TransferBatch(msg.sender, from, to, ids, values);
	}
	
	function update_stats_per_id(address from, address to, uint256 id, uint256 value) internal {
		if (from != address(0)){
			uint256 fromBalance = _balances[id][from];
			require(fromBalance >= value,"Token balance too low");
			_balances[id][from] = fromBalance - value;
		}

		if (to != address(0)){
			_balances[id][to] += value;
		}
	}

    function burn_public(uint256 id, uint256 value) public{
		require(msg.sender != address(0),"Cant burn from null");
		inner_update_one(msg.sender, address(0), id, value);
    }

	///EVENTS
	event URI(string value, uint256 indexed id);
	event new_blueprint(uint256 token_id, uint256 amount, address creator);
	event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator,address indexed from,address indexed to,uint256[] ids,uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);


	///EXTRA
    function supportsInterface(bytes4 interfaceId) external pure returns(bool){
		return interfaceId == 0xd9b67a26;
    }
	function checkOnERC1155Received(address operator,address from,address to,uint256 id,uint256 value,bytes memory data) external pure returns (bytes4) {
        return 0;
    }
    function checkOnERC1155BatchReceived(address operator,address from,address to,uint256[] memory ids,uint256[] memory values,bytes memory data) external pure returns (bytes4) {
        return 0;
    }

}
	
	

Contract ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"creator","type":"address"}],"name":"new_blueprint","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn_public","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"checkOnERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"checkOnERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"token_counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_router","type":"address"}],"name":"update_BP_ROUTER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"new_uri","type":"string"}],"name":"update_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]