Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x1a0059b090ccc2C751B422D9E9A766356CD5D6D4
Balance 0 ETH
Nonce 1
Code Size 8175 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

8175 bytes
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a578063a22cb465116100ad578063c87b56dd1161007c578063c87b56dd146104a4578063e985e9c5146104b7578063f2fde38b146104e5578063f487c602146104f8578063f64c6a071461050b57600080fd5b8063a22cb46514610450578063a3f7fe8214610463578063aeb327b01461047e578063b88d4fde1461049157600080fd5b80637f1e250c116100e95780637f1e250c146104055780638da5cb5b1461041857806394a443781461042b57806395d89b411461044857600080fd5b80636352211e1461038957806370a08231146103b257806370d5ae05146103d25780637dffeb5f146103db57600080fd5b80632f745c59116101925780633d607f65116101615780633d607f651461033057806342842e0e14610343578063438b63001461035657806349c389c91461037657600080fd5b80632f745c59146102e357806330176e13146102f657806335b944bf146103095780633a3473b61461031d57600080fd5b8063095ea7b3116101ce578063095ea7b31461029357806318160ddd146102a65780631b1ca044146102bd57806323b872dd146102d057600080fd5b806301ffc9a71461020057806302ffaed11461022857806306fdde031461023d578063081812fc14610252575b600080fd5b61021361020e366004611b95565b61051e565b60405190151581526020015b60405180910390f35b61023b610236366004611bcf565b610570565b005b6102456105e6565b60405161021f9190611df0565b61027b610260366004611c41565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b61023b6102a1366004611b50565b610674565b6102af60045481565b60405190815260200161021f565b600a5461027b906001600160a01b031681565b61023b6102de366004611a8e565b610798565b6102af6102f1366004611b50565b610815565b61023b610304366004611bcf565b610846565b600a5461021390600160a01b900460ff1681565b61023b61032b366004611a09565b6108af565b6102af61033e366004611c41565b6108f9565b61023b610351366004611a8e565b610a19565b61036961036436600461195d565b610a34565b60405161021f9190611dac565b61023b610384366004611c41565b610b6c565b61027b610397366004611c41565b6005602052600090815260409020546001600160a01b031681565b6102af6103c036600461195d565b60066020526000908152604090205481565b61027b61dead81565b6102136103e9366004611c41565b60601c73077afa85c86ac799b04d0f7aab6c81bfe41867731490565b61023b610413366004611b7a565b610cf1565b60095461027b906001600160a01b031681565b6102af610439366004611c41565b60281c66ffffffffffffff1690565b610245610d39565b61023b61045e366004611b26565b610d46565b61027b73495f947276749ce646f68ac8c248420045cb7b5e81565b61023b61048c36600461195d565b610d51565b61023b61049f366004611aca565b610d9e565b6102456104b2366004611c41565b610efd565b6102136104c5366004611978565b600860209081526000928352604080842090915290825290205460ff1681565b61023b6104f336600461195d565b610fab565b61023b6105063660046119ab565b610ff7565b6102af610519366004611c41565b611039565b60006301ffc9a760e01b6001600160e01b03198316148061054f57506380ac58cd60e01b6001600160e01b03198316145b8061056a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6009546001600160a01b031633146105a35760405162461bcd60e51b815260040161059a90611e03565b60405180910390fd5b6105e282828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110d592505050565b5050565b600080546105f390611ede565b80601f016020809104026020016040519081016040528092919081815260200182805461061f90611ede565b801561066c5780601f106106415761010080835404028352916020019161066c565b820191906000526020600020905b81548152906001019060200180831161064f57829003601f168201915b505050505081565b6000818152600560205260409020546001600160a01b039081169083168114156106f45760405162461bcd60e51b815260206004820152602b60248201527f455243373231493a20617070726f766528292043616e6e6f7420617070726f7660448201526a6520796f757273656c662160a81b606482015260840161059a565b336001600160a01b038216148061072e57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b6107895760405162461bcd60e51b815260206004820152602660248201527f455243373231493a2043616c6c6572206e6f74206f776e6572206f7220417070604482015265726f7665642160d01b606482015260840161059a565b61079383836110e8565b505050565b6107a23382611170565b61080a5760405162461bcd60e51b815260206004820152603360248201527f455243373231493a207472616e7366657246726f6d2829205f6973417070726f6044820152727665644f724f776e6572203d2066616c73652160681b606482015260840161059a565b61079383838361126c565b60008061082184610a34565b905080838151811061083557610835611f74565b602002602001015191505092915050565b6009546001600160a01b031633146108705760405162461bcd60e51b815260040161059a90611e03565b6105e282828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061143e92505050565b60005b82518110156108f2576108e085858584815181106108d2576108d2611f74565b602002602001015185610d9e565b806108ea81611f19565b9150506108b2565b5050505050565b60006047821015801561090d575060508211155b806109185750816052145b1561092557506046919050565b81605314806109415750605d8210158015610941575060668211155b80610959575060698210158015610959575060708211155b1561096657506048919050565b605482101580156109785750605b8211155b1561098557506047919050565b607382101580156109975750607c8211155b156109a45750604a919050565b81607114806109b35750816072145b156109c057506052919050565b60405162461bcd60e51b815260206004820152602360248201527f474153204f473a20556e61626c6520746f2064657465726d696e65206f66667360448201526265742160e81b606482015260840161059a565b919050565b61079383838360405180602001604052806000815250610d9e565b6001600160a01b0381166000908152600660205260408120546060918167ffffffffffffffff811115610a6957610a69611f8a565b604051908082528060200260200182016040528015610a92578160200160208202803683370190505b50600454909150600090815b81811015610b61576000818152600560205260409020546001600160a01b0316158015610aee575083610ad2600187611e84565b81518110610ae257610ae2611f74565b60200260200101516000145b15610b015781610afd81611f19565b9250505b6000818152600560205260409020546001600160a01b0388811691161415610b4f5780848481518110610b3657610b36611f74565b602090810291909101015282610b4b81611f19565b9350505b80610b5981611f19565b915050610a9e565b509195945050505050565b333214610bb15760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b604482015260640161059a565b600a54600160a01b900460ff16610c005760405162461bcd60e51b81526020600482015260136024820152724d6967726174696f6e2044697361626c65642160681b604482015260640161059a565b6000610c0b82611039565b600a54604051637921219560e11b815233600482015261dead6024820152604481018590526001606482015260a06084820152600060a48201529192506001600160a01b03169063f242432a9060c401600060405180830381600087803b158015610c7557600080fd5b505af1158015610c89573d6000803e3d6000fd5b50505050610c973382611451565b60048054906000610ca783611f19565b909155505060408051338152602081018390529081018390527fd083678824038160bef3975359ab29f19c3f0e9bcf9d7ead540a492d4d678b639060600160405180910390a15050565b6009546001600160a01b03163314610d1b5760405162461bcd60e51b815260040161059a90611e03565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b600180546105f390611ede565b6105e23383836115b3565b6009546001600160a01b03163314610d7b5760405162461bcd60e51b815260040161059a90611e03565b610d86816013611451565b60048054906000610d9683611f19565b919050555050565b610da9848484610798565b6001600160a01b0383163b15610ef7576000836001600160a01b031663150b7a0233878686604051602401610de19493929190611d6f565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610e1a9190611d20565b600060405180830381855afa9150503d8060008114610e55576040519150601f19603f3d011682016040523d82523d6000602084013e610e5a565b606091505b50915050600081806020019051810190610e749190611bb2565b9050630a85bd0160e11b6001600160e01b0319821614610ef45760405162461bcd60e51b815260206004820152603560248201527f455243373231493a20736166655472616e7366657246726f6d282920746f5f206044820152746e6f742045524337323152656365697661626c652160581b606482015260840161059a565b50505b50505050565b6000818152600560205260409020546060906001600160a01b0316610f765760405162461bcd60e51b815260206004820152602960248201527f455243373231493a20746f6b656e555249282920546f6b656e20646f6573206e6044820152686f742065786973742160b81b606482015260840161059a565b6002610f81836116a8565b6003604051602001610f9593929190611d3c565b6040516020818303038152906040529050919050565b6009546001600160a01b03163314610fd55760405162461bcd60e51b815260040161059a90611e03565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610ef757611027848484848151811061101a5761101a611f74565b6020026020010151610798565b8061103181611f19565b915050610ffa565b6000606082901c73077afa85c86ac799b04d0f7aab6c81bfe4186773146110ad5760405162461bcd60e51b815260206004820152602260248201527f5468697320746f6b656e20776173206e6f742063726561746564206279204741604482015261532160f01b606482015260840161059a565b66ffffffffffffff602883901c166110c4816108f9565b6110ce9082611e84565b9392505050565b80516105e29060039060208401906117a7565b6000818152600760205260409020546001600160a01b038381169116146105e257600081815260076020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556005909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000818152600560205260408120546001600160a01b03166111f15760405162461bcd60e51b815260206004820152603460248201527f455243373231493a205f6973417070726f7665644f724f776e65722829204f776044820152736e6572206973205a65726f20416464726573732160601b606482015260840161059a565b6000828152600560205260409020546001600160a01b0390811690841681148061123457506000838152600760205260409020546001600160a01b038581169116145b8061126457506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b6000818152600560205260409020546001600160a01b038481169116146112ef5760405162461bcd60e51b815260206004820152603160248201527f455243373231493a205f7472616e736665722829205472616e73666572204e6f60448201527074204f776e6572206f6620546f6b656e2160781b606482015260840161059a565b6001600160a01b03821661135c5760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f7472616e736665722829205472616e7366657220746f60448201526d205a65726f20416464726573732160901b606482015260840161059a565b6000818152600760205260409020546001600160a01b031615611384576113846000826110e8565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b038781169190911790915586168352600690915281208054916113ca83611ec7565b90915550506001600160a01b03821660009081526006602052604081208054916113f383611f19565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80516105e29060029060208401906117a7565b6001600160a01b0382166114b55760405162461bcd60e51b815260206004820152602560248201527f455243373231493a205f6d696e742829204d696e7420746f205a65726f204164604482015264647265737360d81b606482015260840161059a565b6000818152600560205260409020546001600160a01b0316156115315760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f6d696e74282920546f6b656e20746f204d696e74204160448201526d6c7265616479204578697374732160901b606482015260840161059a565b6001600160a01b038216600090815260066020526040812080549161155583611f19565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b0316141561163b5760405162461bcd60e51b815260206004820152603d60248201527f455243373231493a205f736574417070726f76616c466f72416c6c2829204f7760448201527f6e6572206d757374206e6f7420626520746865204f70657261746f7221000000606482015260840161059a565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060816116cc5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116f657806116e081611f19565b91506116ef9050600a83611e70565b91506116d0565b60008167ffffffffffffffff81111561171157611711611f8a565b6040519080825280601f01601f19166020018201604052801561173b576020820181803683370190505b5090505b8415611264578161174f81611ec7565b925061175e9050600a86611f34565b611769906030611e58565b60f81b81838151811061177e5761177e611f74565b60200101906001600160f81b031916908160001a9053506117a0600a86611e70565b945061173f565b8280546117b390611ede565b90600052602060002090601f0160209004810192826117d5576000855561181b565b82601f106117ee57805160ff191683800117855561181b565b8280016001018555821561181b579182015b8281111561181b578251825591602001919060010190611800565b5061182792915061182b565b5090565b5b80821115611827576000815560010161182c565b80356001600160a01b0381168114610a1457600080fd5b600082601f83011261186857600080fd5b8135602067ffffffffffffffff82111561188457611884611f8a565b8160051b611893828201611e27565b8381528281019086840183880185018910156118ae57600080fd5b600093505b858410156118d15780358352600193909301929184019184016118b3565b50979650505050505050565b80358015158114610a1457600080fd5b600082601f8301126118fe57600080fd5b813567ffffffffffffffff81111561191857611918611f8a565b61192b601f8201601f1916602001611e27565b81815284602083860101111561194057600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561196f57600080fd5b6110ce82611840565b6000806040838503121561198b57600080fd5b61199483611840565b91506119a260208401611840565b90509250929050565b6000806000606084860312156119c057600080fd5b6119c984611840565b92506119d760208501611840565b9150604084013567ffffffffffffffff8111156119f357600080fd5b6119ff86828701611857565b9150509250925092565b60008060008060808587031215611a1f57600080fd5b611a2885611840565b9350611a3660208601611840565b9250604085013567ffffffffffffffff80821115611a5357600080fd5b611a5f88838901611857565b93506060870135915080821115611a7557600080fd5b50611a82878288016118ed565b91505092959194509250565b600080600060608486031215611aa357600080fd5b611aac84611840565b9250611aba60208501611840565b9150604084013590509250925092565b60008060008060808587031215611ae057600080fd5b611ae985611840565b9350611af760208601611840565b925060408501359150606085013567ffffffffffffffff811115611b1a57600080fd5b611a82878288016118ed565b60008060408385031215611b3957600080fd5b611b4283611840565b91506119a2602084016118dd565b60008060408385031215611b6357600080fd5b611b6c83611840565b946020939093013593505050565b600060208284031215611b8c57600080fd5b6110ce826118dd565b600060208284031215611ba757600080fd5b81356110ce81611fa0565b600060208284031215611bc457600080fd5b81516110ce81611fa0565b60008060208385031215611be257600080fd5b823567ffffffffffffffff80821115611bfa57600080fd5b818501915085601f830112611c0e57600080fd5b813581811115611c1d57600080fd5b866020828501011115611c2f57600080fd5b60209290920196919550909350505050565b600060208284031215611c5357600080fd5b5035919050565b60008151808452611c72816020860160208601611e9b565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680611ca057607f831692505b6020808410821415611cc257634e487b7160e01b600052602260045260246000fd5b818015611cd65760018114611ce757611d14565b60ff19861689528489019650611d14565b60008881526020902060005b86811015611d0c5781548b820152908501908301611cf3565b505084890196505b50505050505092915050565b60008251611d32818460208701611e9b565b9190910192915050565b6000611d488286611c86565b8451611d58818360208901611e9b565b611d6481830186611c86565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611da290830184611c5a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611de457835183529284019291840191600101611dc8565b50909695505050505050565b6020815260006110ce6020830184611c5a565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e5057611e50611f8a565b604052919050565b60008219821115611e6b57611e6b611f48565b500190565b600082611e7f57611e7f611f5e565b500490565b600082821015611e9657611e96611f48565b500390565b60005b83811015611eb6578181015183820152602001611e9e565b83811115610ef75750506000910152565b600081611ed657611ed6611f48565b506000190190565b600181811c90821680611ef257607f821691505b60208210811415611f1357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f2d57611f2d611f48565b5060010190565b600082611f4357611f43611f5e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611fb657600080fd5b5056fea2646970667358221220e2a457130edded151ac7d69bc1eff98bf338a3ea0d433fac33520b27e21615c264736f6c63430008070033

Verified Source Code Partial Match

Compiler: v0.8.7+commit.e28d00a7 EVM: london Optimization: Yes (200 runs)
GangsterAllStarOG.sol 314 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

//////////////////////////////////////////////////////////////////////////////
//    _____                   __            ___   ____  ______              //
//   / ___/__ ____  ___ ____ / /____ ____  / _ | / / / / __/ /____ _____    //
//  / (_ / _ `/ _ \/ _ `(_-</ __/ -_) __/ / __ |/ / / _\ \/ __/ _ `/ __/    //
//  \___/\_,_/_//_/\_, /___/\__/\__/_/   /_/ |_/_/_/ /___/\__/\_,_/_/       //
//                /___/                                                     //
//     ____ ___    ___                                                      //
//    / __// _ \  / _ )___  ___ ___ ___ ___                                 //
//   /__ \/ // / / _  / _ \(_-<(_-</ -_|_-<                                 //
//  /____/\___/ /____/\___/___/___/\__/___/                                 //
//                                                                          //
//   Migration by: 0xInuarashi                                              //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////

contract ERC721I {

    string public name; string public symbol;
    string internal baseTokenURI; string internal baseTokenURI_EXT;
    constructor(string memory name_, string memory symbol_) {
        name = name_; symbol = symbol_; 
    }

    uint256 public totalSupply; 
    mapping(uint256 => address) public ownerOf; 
    mapping(address => uint256) public balanceOf; 

    mapping(uint256 => address) public getApproved; 
    mapping(address => mapping(address => bool)) public isApprovedForAll; 

    // Events
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Mint(address indexed to, uint256 tokenId);
    event Approval(address indexed owner, address indexed approved, 
    uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, 
    bool approved);

    // // internal write functions
    // mint
    function _mint(address to_, uint256 tokenId_) internal virtual {
        require(to_ != address(0x0), 
            "ERC721I: _mint() Mint to Zero Address");
        require(ownerOf[tokenId_] == address(0x0), 
            "ERC721I: _mint() Token to Mint Already Exists!");

        balanceOf[to_]++;
        ownerOf[tokenId_] = to_;

        emit Transfer(address(0x0), to_, tokenId_);
    }

    // transfer
    function _transfer(address from_, address to_, uint256 tokenId_) internal virtual {
        require(from_ == ownerOf[tokenId_], 
            "ERC721I: _transfer() Transfer Not Owner of Token!");
        require(to_ != address(0x0), 
            "ERC721I: _transfer() Transfer to Zero Address!");

        // checks if there is an approved address clears it if there is
        if (getApproved[tokenId_] != address(0x0)) { 
            _approve(address(0x0), tokenId_); 
        } 

        ownerOf[tokenId_] = to_; 
        balanceOf[from_]--;
        balanceOf[to_]++;

        emit Transfer(from_, to_, tokenId_);
    }

    // approve
    function _approve(address to_, uint256 tokenId_) internal virtual {
        if (getApproved[tokenId_] != to_) {
            getApproved[tokenId_] = to_;
            emit Approval(ownerOf[tokenId_], to_, tokenId_);
        }
    }
    function _setApprovalForAll(address owner_, address operator_, bool approved_)
    internal virtual {
        require(owner_ != operator_, 
            "ERC721I: _setApprovalForAll() Owner must not be the Operator!");
        isApprovedForAll[owner_][operator_] = approved_;
        emit ApprovalForAll(owner_, operator_, approved_);
    }

    // token uri
    function _setBaseTokenURI(string memory uri_) internal virtual {
        baseTokenURI = uri_;
    }
    function _setBaseTokenURI_EXT(string memory ext_) internal virtual {
        baseTokenURI_EXT = ext_;
    }

    // // Internal View Functions
    // Embedded Libraries
    function _toString(uint256 value_) internal pure returns (string memory) {
        if (value_ == 0) { return "0"; }
        uint256 _iterate = value_; uint256 _digits;
        while (_iterate != 0) { _digits++; _iterate /= 10; } // get digits in value_
        bytes memory _buffer = new bytes(_digits);
        while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8(
            48 + uint256(value_ % 10 ))); value_ /= 10; } // create bytes of value_
        return string(_buffer); // return string converted bytes of value_
    }

    // Functional Views
    function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal 
    view virtual returns (bool) {
        require(ownerOf[tokenId_] != address(0x0), 
            "ERC721I: _isApprovedOrOwner() Owner is Zero Address!");
        address _owner = ownerOf[tokenId_];
        return (spender_ == _owner 
            || spender_ == getApproved[tokenId_] 
            || isApprovedForAll[_owner][spender_]);
    }
    function _exists(uint256 tokenId_) internal view virtual returns (bool) {
        return ownerOf[tokenId_] != address(0x0);
    }

    // // public write functions
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf[tokenId_];
        require(to_ != _owner, 
            "ERC721I: approve() Cannot approve yourself!");
        require(msg.sender == _owner || isApprovedForAll[_owner][msg.sender],
            "ERC721I: Caller not owner or Approved!");
        _approve(to_, tokenId_);
    }
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        _setApprovalForAll(msg.sender, operator_, approved_);
    }
    function transferFrom(address from_, address to_, uint256 tokenId_) 
    public virtual {
        require(_isApprovedOrOwner(msg.sender, tokenId_), 
            "ERC721I: transferFrom() _isApprovedOrOwner = false!");
        _transfer(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, 
    bytes memory data_) public virtual {
        transferFrom(from_, to_, tokenId_);
        if (to_.code.length != 0) {
            (, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(
                0x150b7a02, msg.sender, from_, tokenId_, data_));
            bytes4 _selector = abi.decode(_returned, (bytes4));
            require(_selector == 0x150b7a02, 
                "ERC721I: safeTransferFrom() to_ not ERC721Receivable!");
        }
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_) 
    public virtual {
        safeTransferFrom(from_, to_, tokenId_, "");
    }

    // 0xInuarashi Custom Functions
    function multiTransferFrom(address from_, address to_, uint256[] memory tokenIds_)
    public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            transferFrom(from_, to_, tokenIds_[i]);
        }
    }
    function multiSafeTransferFrom(address from_, address to_, 
    uint256[] memory tokenIds_, bytes memory data_) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            safeTransferFrom(from_, to_, tokenIds_[i], data_);
        }
    }

    // OZ Standard Stuff
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }
    
    function tokenURI(uint256 tokenId_) public view virtual returns (string memory) {
        require(ownerOf[tokenId_] != address(0x0), 
            "ERC721I: tokenURI() Token does not exist!");
        return string(abi.encodePacked(
            baseTokenURI, _toString(tokenId_), baseTokenURI_EXT));
    }
    // // public view functions
    // never use these for functions ever, they are expensive af and for view only 
    function walletOfOwner(address address_) public virtual view 
    returns (uint256[] memory) {
        uint256 _balance = balanceOf[address_];
        uint256[] memory _tokens = new uint256[] (_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply;
        for (uint256 i = 0; i < _loopThrough; i++) {
            if (ownerOf[i] == address(0x0) && _tokens[_balance - 1] == 0) {
                _loopThrough++; 
            }
            if (ownerOf[i] == address_) { 
                _tokens[_index] = i; _index++; 
            }
        }
        return _tokens;
    }

    // not sure when this will ever be needed but it conforms to erc721 enumerable
    function tokenOfOwnerByIndex(address address_, uint256 index_) public 
    virtual view returns (uint256) {
        uint256[] memory _wallet = walletOfOwner(address_);
        return _wallet[index_];
    }
}

abstract contract Ownable {
    address public owner; 
    constructor() { owner = msg.sender; }
    modifier onlyOwner { require(owner == msg.sender, "Not Owner!"); _; }
    function transferOwnership(address new_) external onlyOwner { owner = new_; }
}

interface IERC1155 {
    function safeTransferFrom(address from_, address to_, uint256 id_,
    uint256 amount_, bytes calldata data_) external;
}

contract GangsterAllStarOG is ERC721I, Ownable {
    constructor() ERC721I("Gangster All Star OG", "GAS OG") {}

    // Migration Variables
    address public constant burnAddress = 0x000000000000000000000000000000000000dEaD;
    address public constant OSAddress = 0x495f947276749Ce646f68AC8c248420045cb7b5e;
    IERC1155 public OSStore = IERC1155(OSAddress);
    bool public migrationEnabled = true; 

    // Events
    event Migrated(address migrator_, uint256 newTokenId_, uint256 oldTokenId_);

    // Modifiers
    modifier onlySender { require(msg.sender == tx.origin, "No Smart Contracts!"); _; }
    modifier onlyMigration { require(migrationEnabled, "Migration Disabled!"); _; }

    // Administration
    function setMigration(bool bool_) external onlyOwner {
        migrationEnabled = bool_;
    }

    function setBaseTokenURI(string calldata uri_) external onlyOwner {
        _setBaseTokenURI(uri_);
    }
    function setBaseTokenURI_EXT(string calldata ext_) external onlyOwner {
        _setBaseTokenURI_EXT(ext_);
    }

    // Token ID Finder
    function getRawIdFromOS(uint256 tokenId_) public pure returns (uint256) {
        return (tokenId_ 
        & 0x0000000000000000000000000000000000000000ffffffffffffff0000000000) >> 40;
    }
    function isCreatedByGAS(uint256 tokenId_) public pure returns (bool) {
        return tokenId_ >> 96 
            == 0x000000000000000000000000077afa85c86ac799b04d0f7aab6c81bfe4186773;
    }
    function getTokenOffsets(uint256 tokenId_) public pure returns (uint256) {
        if ((tokenId_ >= 71 && tokenId_ <= 80)
            || tokenId_ == 82) 
            return 70;

        if (tokenId_ == 83 
            || (tokenId_ >= 93 && tokenId_ <= 102)
            || (tokenId_ >= 105 && tokenId_ <= 112)) 
            return 72;

        if ((tokenId_ >= 84 && tokenId_ <= 91)) 
            return 71;
        
        if ((tokenId_ >= 115 && tokenId_ <= 124))
            return 74;

        if (tokenId_ == 113 
            || tokenId_ == 114)
            return 82;
        
        else revert ("GAS OG: Unable to determine offset!");
    }
    function getValidOGTokenId(uint256 tokenId_) public pure returns (uint256) {
        require(isCreatedByGAS(tokenId_), 
            "This token was not created by GAS!");

        uint256 _rawId = getRawIdFromOS(tokenId_);
        return _rawId - getTokenOffsets(_rawId);
    }

    // Migration Logic
    function migrateGangster(uint256 tokenId_) external onlySender onlyMigration {
        uint256 _newTokenId = getValidOGTokenId(tokenId_);

        // Burn the OpenStore Token
        OSStore.safeTransferFrom(msg.sender, burnAddress, tokenId_, 1, "");

        // Mint the new Token ID to msg.sender
        _mint(msg.sender, _newTokenId);

        // Increment TotalSupply
        totalSupply++;

        // Emit the Migration Event
        emit Migrated(msg.sender, _newTokenId, tokenId_);
    }

    // Mint ID 19
    function mintStuck(address to_) external onlyOwner {
        _mint(to_, 19);
        totalSupply++;
    }
}

Read Contract

OSAddress 0xa3f7fe82 → address
OSStore 0x1b1ca044 → address
balanceOf 0x70a08231 → uint256
burnAddress 0x70d5ae05 → address
getApproved 0x081812fc → address
getRawIdFromOS 0x94a44378 → uint256
getTokenOffsets 0x3d607f65 → uint256
getValidOGTokenId 0xf64c6a07 → uint256
isApprovedForAll 0xe985e9c5 → bool
isCreatedByGAS 0x7dffeb5f → bool
migrationEnabled 0x35b944bf → bool
name 0x06fdde03 → string
owner 0x8da5cb5b → address
ownerOf 0x6352211e → address
supportsInterface 0x01ffc9a7 → bool
symbol 0x95d89b41 → string
tokenOfOwnerByIndex 0x2f745c59 → uint256
tokenURI 0xc87b56dd → string
totalSupply 0x18160ddd → uint256
walletOfOwner 0x438b6300 → uint256[]

Write Contract 13 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address to_
uint256 tokenId_
migrateGangster 0x49c389c9
uint256 tokenId_
mintStuck 0xaeb327b0
address to_
multiSafeTransferFrom 0x3a3473b6
address from_
address to_
uint256[] tokenIds_
bytes data_
multiTransferFrom 0xf487c602
address from_
address to_
uint256[] tokenIds_
safeTransferFrom 0x42842e0e
address from_
address to_
uint256 tokenId_
safeTransferFrom 0xb88d4fde
address from_
address to_
uint256 tokenId_
bytes data_
setApprovalForAll 0xa22cb465
address operator_
bool approved_
setBaseTokenURI 0x30176e13
string uri_
setBaseTokenURI_EXT 0x02ffaed1
string ext_
setMigration 0x7f1e250c
bool bool_
transferFrom 0x23b872dd
address from_
address to_
uint256 tokenId_
transferOwnership 0xf2fde38b
address new_

Recent Transactions

No transactions found for this address