Goerli Testnet

Contract

0x43F99c5517928be62935A1d7714408fae90d1896

Overview

ETH Balance

0 ETH

Token Holdings

Multi Chain

Multichain Addresses

1 address found via
Transaction Hash
Method
Block
From
To
Value
Mint87434152023-03-30 9:57:24181 days 5 hrs ago1680170244IN
0x43F99c...e90d1896
0 ETH0.00546581117.17653434
0x60a0604087434112023-03-30 9:56:12181 days 5 hrs ago1680170172IN
 Contract Creation
0 ETH0.12764029125.83432553

Advanced mode:
Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x3eD7eB...f40f11b6
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
TroisPainsZeroJNF

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 2: TroisPainsZeroJNF.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "./ERC1155.sol";

contract TroisPainsZeroJNF is ERC1155 {
    /*//////////////////////////////////////////////////////////////
                          CONSTANTS/IMMUTABLES
    //////////////////////////////////////////////////////////////*/
    string constant BASE_URI =
        'data:application/json;base64,eyJuYW1lIjogIlRyb2lzIFBhaW5zIFplcm8iLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYnN0ZXJkb2cgcGFzdHJ5IGNoZWYuIiwKICAgICAgICAgICJpbWFnZSI6ICJodHRwczovL25mdC5xdWF0cmUtcXUuYXJ0L25mdC1saWJyYXJ5LnBocD9pZD0xMiIsCiAgICAgICAgICAiZXh0ZXJuYWxfdXJsIjogImh0dHBzOi8vbmZ0LnF1YXRyZS1xdS5hcnQvbmZ0LWxpYnJhcnkucGhwP2lkPTEyIn0K';
    bytes constant MINT_DATA = bytes("");
    uint256 public constant COLLECTION_ID = 1;
    address payable public immutable OWNER;

    /*//////////////////////////////////////////////////////////////
                            ERRORS
    //////////////////////////////////////////////////////////////*/
    error NotOwner();

    constructor(address payable _owner) {
        OWNER = _owner;
    }

    modifier onlyOwner() {
        if (msg.sender != OWNER) revert NotOwner();
        _;
    }

    /// @notice Get the URI of a token. The param is unused as we only have one collection.
    /** @dev The EIP-1155 suppose that the URI is the same for all tokens of a collection.
     ** As we only plan to use one collection for our challenge, I decided to override the param for gas efficiency. */
    function uri(uint256) public pure override returns (string memory) {
        return BASE_URI;
    }

    /** @notice Do a transfer of tokens from the owner reserve. Only the owner can do a transfer.
        The first and third parameter (from and ID) are enforced in the function
        as only the owner can transfer token AND we only plan to use one collection in our challenge */
    /// @param to address to transfer to
    /// @param amount amount of tokens to transfer. Must be 1 for our challenge
    /// @param data data to send to the receiver. Must be empty for our challenge
    function safeTransferFrom(
        address,
        address to,
        uint256,
        uint256 amount,
        bytes calldata data
    ) public override onlyOwner {
        super.safeTransferFrom(OWNER, to, COLLECTION_ID, amount, data);
    }

    /// @notice Do a batch transfer of token from the owner reserves. Only the owner can do a batch transfer.
    /// @param tos addresses to transfer to
    /// @param data data to send to the receiver. Must be empty for our challenge
    /// @dev Keep in mind this function uses a loop, which means it is susceptible to trigger an out-of-gas error.
    function batchSafeTransferFrom(
        address[] calldata tos,
        bytes calldata data
    ) external onlyOwner {
        uint256 length = tos.length;
        uint256 i;

        for (i; i < length; ) {
            super.safeTransferFrom(OWNER, tos[i], COLLECTION_ID, 1, data);

            unchecked {
                ++i;
            }
        }
    }

    /// @notice Disable the safeBatchTransferFrom function as we only have one collection for our challenge
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public override onlyOwner {
        // useless as we will only use one collection for our challenge
    }

    /** @notice Mint new tokens to the owner. Only the owner can mint new tokens.
        As we only have one collection for our challenge, the id param is enforced. */
    function mint(uint256 amount) external onlyOwner {
        _mint(OWNER, COLLECTION_ID, amount, MINT_DATA);
    }

    /// @notice Destruct the smart-contract
    /// @dev The function uses the deprecated selfdestruct() opcode. Funds are send to the owner.
    function destruct() external onlyOwner {
        // destruct the smart-contract and send the potential
        // ethers holded by the smart-contract to the owner
        selfdestruct(OWNER);
    }
}

File 1 of 2: ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*//////////////////////////////////////////////////////////////
                             ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

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

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

    /*//////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                              ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

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

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

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

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"amounts","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":"amount","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"},{"inputs":[],"name":"COLLECTION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"destruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","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":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"amount","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ce5760003560e01c80632eb2c2d61161008c578063a22cb46511610066578063a22cb465146101e8578063e95fa34b146101fb578063e985e9c51461020e578063f242432a1461023c57600080fd5b80632eb2c2d6146101a25780634e1273f4146101b5578063a0712d68146101d557600080fd5b8062fdd58e146100d357806301ffc9a71461010e5780630e89341c14610131578063117803e314610151578063201c338b146101905780632b68b9c614610198575b600080fd5b6100fb6100e1366004610a89565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61012161011c366004610ac9565b61024f565b6040519015158152602001610105565b61014461013f366004610aed565b6102a1565b6040516101059190610b4c565b6101787f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a581565b6040516001600160a01b039091168152602001610105565b6100fb600181565b6101a06102c5565b005b6101a06101b0366004610bed565b61033a565b6101c86101c3366004610ca8565b61038d565b6040516101059190610d14565b6101a06101e3366004610aed565b6104c7565b6101a06101f6366004610d58565b61054f565b6101a0610209366004610d94565b6105bb565b61012161021c366004610df4565b600160209081526000928352604080842090915290825290205460ff1681565b6101a061024a366004610e27565b610675565b60006301ffc9a760e01b6001600160e01b0319831614806102805750636cdb3d1360e11b6001600160e01b03198316145b8061029b57506303a24d0760e21b6001600160e01b03198316145b92915050565b606060405180610180016040528061014d8152602001610fe161014d913992915050565b336001600160a01b037f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a5161461030e576040516330cd747160e01b815260040160405180910390fd5b7f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a56001600160a01b0316ff5b336001600160a01b037f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a51614610383576040516330cd747160e01b815260040160405180910390fd5b5050505050505050565b60608382146103d55760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064015b60405180910390fd5b8367ffffffffffffffff8111156103ee576103ee610e9f565b604051908082528060200260200182016040528015610417578160200160208202803683370190505b50905060005b848110156104be5760008087878481811061043a5761043a610eb5565b905060200201602081019061044f9190610ecb565b6001600160a01b03166001600160a01b03168152602001908152602001600020600085858481811061048357610483610eb5565b905060200201358152602001908152602001600020548282815181106104ab576104ab610eb5565b602090810291909101015260010161041d565b50949350505050565b336001600160a01b037f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a51614610510576040516330cd747160e01b815260040160405180910390fd5b61054c7f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a5600183604051806020016040528060008152506106ed565b50565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336001600160a01b037f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a51614610604576040516330cd747160e01b815260040160405180910390fd5b8260005b8181101561066d576106657f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a587878481811061064657610646610eb5565b905060200201602081019061065b9190610ecb565b6001808888610858565b600101610608565b505050505050565b336001600160a01b037f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a516146106be576040516330cd747160e01b815260040160405180910390fd5b61066d7f0000000000000000000000006db2e8998858eea01bd0f4b32ad9f2565041a5a5866001868686610858565b6001600160a01b0384166000908152602081815260408083208684529091528120805484929061071e908490610efc565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156108065760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e61906107b3903390600090899089908990600401610f0f565b6020604051808303816000875af11580156107d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f69190610f54565b6001600160e01b03191614610813565b6001600160a01b03841615155b6108525760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103cc565b50505050565b336001600160a01b038716148061089257506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6108cf5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016103cc565b6001600160a01b03861660009081526020818152604080832087845290915281208054859290610900908490610f71565b90915550506001600160a01b03851660009081526020818152604080832087845290915281208054859290610936908490610efc565b909155505060408051858152602081018590526001600160a01b03808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0385163b15610a215760405163f23a6e6160e01b808252906001600160a01b0387169063f23a6e61906109ce9033908b908a908a908a908a90600401610f84565b6020604051808303816000875af11580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a119190610f54565b6001600160e01b03191614610a2e565b6001600160a01b03851615155b61066d5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103cc565b80356001600160a01b0381168114610a8457600080fd5b919050565b60008060408385031215610a9c57600080fd5b610aa583610a6d565b946020939093013593505050565b6001600160e01b03198116811461054c57600080fd5b600060208284031215610adb57600080fd5b8135610ae681610ab3565b9392505050565b600060208284031215610aff57600080fd5b5035919050565b6000815180845260005b81811015610b2c57602081850181015186830182015201610b10565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ae66020830184610b06565b60008083601f840112610b7157600080fd5b50813567ffffffffffffffff811115610b8957600080fd5b6020830191508360208260051b8501011115610ba457600080fd5b9250929050565b60008083601f840112610bbd57600080fd5b50813567ffffffffffffffff811115610bd557600080fd5b602083019150836020828501011115610ba457600080fd5b60008060008060008060008060a0898b031215610c0957600080fd5b610c1289610a6d565b9750610c2060208a01610a6d565b9650604089013567ffffffffffffffff80821115610c3d57600080fd5b610c498c838d01610b5f565b909850965060608b0135915080821115610c6257600080fd5b610c6e8c838d01610b5f565b909650945060808b0135915080821115610c8757600080fd5b50610c948b828c01610bab565b999c989b5096995094979396929594505050565b60008060008060408587031215610cbe57600080fd5b843567ffffffffffffffff80821115610cd657600080fd5b610ce288838901610b5f565b90965094506020870135915080821115610cfb57600080fd5b50610d0887828801610b5f565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015610d4c57835183529284019291840191600101610d30565b50909695505050505050565b60008060408385031215610d6b57600080fd5b610d7483610a6d565b915060208301358015158114610d8957600080fd5b809150509250929050565b60008060008060408587031215610daa57600080fd5b843567ffffffffffffffff80821115610dc257600080fd5b610dce88838901610b5f565b90965094506020870135915080821115610de757600080fd5b50610d0887828801610bab565b60008060408385031215610e0757600080fd5b610e1083610a6d565b9150610e1e60208401610a6d565b90509250929050565b60008060008060008060a08789031215610e4057600080fd5b610e4987610a6d565b9550610e5760208801610a6d565b94506040870135935060608701359250608087013567ffffffffffffffff811115610e8157600080fd5b610e8d89828a01610bab565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610edd57600080fd5b610ae682610a6d565b634e487b7160e01b600052601160045260246000fd5b8082018082111561029b5761029b610ee6565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090610f4990830184610b06565b979650505050505050565b600060208284031215610f6657600080fd5b8151610ae681610ab3565b8181038181111561029b5761029b610ee6565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f850116830101905097965050505050505056fe646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65794a755957316c496a6f67496c527962326c7a494642686157357a4946706c636d38694c416f67494341674943416749434167496d526c63324e796158423061573975496a6f67496b7876596e4e305a584a6b623263676347467a64484a3549474e6f5a5759754969774b49434167494341674943416749434a706257466e5a53493649434a6f64485277637a6f764c32356d6443357864574630636d55746358557559584a304c32356d6443317361574a7959584a354c6e426f634439705a4430784d694973436941674943416749434167494341695a5868305a584a755957786664584a73496a6f67496d68306448427a4f693876626d5a304c6e4631595852795a53317864533568636e5176626d5a304c577870596e4a68636e6b756347687750326c6b50544579496e304ba2646970667358221220af7705702feef375aca8557bb363781890bb074f290935dbd832332499adff0564736f6c63430008110033

Deployed Bytecode Sourcemap

83:3987:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1119:64:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;597:25:2;;;585:2;570:18;1119:64:0;;;;;;;;4606:340;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:2;;1177:22;1159:41;;1147:2;1132:18;4606:340:0;1019:187:2;1491:99:1;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;777:38::-;;;;;;;;-1:-1:-1;;;;;2229:32:2;;;2211:51;;2199:2;2184:18;777:38:1;2049:219:2;730:41:1;;770:1;730:41;;3871:197;;;:::i;:::-;;3155:281;;;;;;:::i;:::-;;:::i;3835:583:0:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3611:112:1:-;;;;;;:::i;:::-;;:::i;1706:203:0:-;;;;;;:::i;:::-;;:::i;2683:358:1:-;;;;;;:::i;:::-;;:::i;1190:68:0:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:244:1;;;;;;:::i;:::-;;:::i;4606:340:0:-;4682:4;-1:-1:-1;;;;;;;;;4717:25:0;;;;:100;;-1:-1:-1;;;;;;;;;;4792:25:0;;;4717:100;:176;;;-1:-1:-1;;;;;;;;;;4868:25:0;;;4717:176;4698:195;4606:340;-1:-1:-1;;4606:340:0:o;1491:99:1:-;1543:13;1575:8;;;;;;;;;;;;;;;;;1568:15;1491:99;-1:-1:-1;;1491:99:1:o;3871:197::-;1126:10;-1:-1:-1;;;;;1140:5:1;1126:19;;1122:42;;1154:10;;-1:-1:-1;;;1154:10:1;;;;;;;;;;;1122:42;4055:5:::1;-1:-1:-1::0;;;;;4042:19:1::1;;3155:281:::0;1126:10;-1:-1:-1;;;;;1140:5:1;1126:19;;1122:42;;1154:10;;-1:-1:-1;;;1154:10:1;;;;;;;;;;;1122:42;3155:281;;;;;;;;:::o;3835:583:0:-;3971:25;4020:27;;;4012:55;;;;-1:-1:-1;;;4012:55:0;;7896:2:2;4012:55:0;;;7878:21:2;7935:2;7915:18;;;7908:30;-1:-1:-1;;;7954:18:2;;;7947:45;8009:18;;4012:55:0;;;;;;;;;4103:6;4089:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4089:28:0;;4078:39;;4288:9;4283:119;4303:17;;;4283:119;;;4359:9;:20;4369:6;;4376:1;4369:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4359:20:0;-1:-1:-1;;;;;4359:20:0;;;;;;;;;;;;:28;4380:3;;4384:1;4380:6;;;;;;;:::i;:::-;;;;;;;4359:28;;;;;;;;;;;;4345:8;4354:1;4345:11;;;;;;;;:::i;:::-;;;;;;;;;;:42;4322:3;;4283:119;;;;3835:583;;;;;;:::o;3611:112:1:-;1126:10;-1:-1:-1;;;;;1140:5:1;1126:19;;1122:42;;1154:10;;-1:-1:-1;;;1154:10:1;;;;;;;;;;;1122:42;3670:46:::1;3676:5;770:1;3698:6;715:9;;;;;;;;;;;::::0;3670:5:::1;:46::i;:::-;3611:112:::0;:::o;1706:203:0:-;1808:10;1791:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;1791:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;1791:49:0;;;;;;;;;;1856:46;;1159:41:2;;;1791:38:0;;1808:10;1856:46;;1132:18:2;1856:46:0;;;;;;;1706:203;;:::o;2683:358:1:-;1126:10;-1:-1:-1;;;;;1140:5:1;1126:19;;1122:42;;1154:10;;-1:-1:-1;;;1154:10:1;;;;;;;;;;;1122:42;2827:3;2810:14:::1;2867:168;2879:6;2875:1;:10;2867:168;;;2903:61;2926:5;2933:3;;2937:1;2933:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;770:1;2956::::0;2959:4:::1;;2903:22;:61::i;:::-;3007:3;;2867:168;;;2800:241;;2683:358:::0;;;;:::o;2082:244::-;1126:10;-1:-1:-1;;;;;1140:5:1;1126:19;;1122:42;;1154:10;;-1:-1:-1;;;1154:10:1;;;;;;;;;;;1122:42;2257:62:::1;2280:5;2287:2;770:1;2306:6;2314:4;;2257:22;:62::i;5140:545:0:-:0;-1:-1:-1;;;;;5279:13:0;;:9;:13;;;;;;;;;;;:17;;;;;;;;:27;;5300:6;;5279:9;:27;;5300:6;;5279:27;:::i;:::-;;;;-1:-1:-1;;5322:54:0;;;8929:25:2;;;8985:2;8970:18;;8963:34;;;-1:-1:-1;;;;;5322:54:0;;;5357:1;;5337:10;;5322:54;;8902:18:2;5322:54:0;;;;;;;-1:-1:-1;;;;;5408:14:0;;;:19;:228;;5481:84;;-1:-1:-1;;;5481:84:0;;;5589:47;-1:-1:-1;;;;;5481:42:0;;;5589:47;;5481:84;;5524:10;;5544:1;;5548:2;;5552:6;;5560:4;;5481:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;5481:155:0;;5408:228;;;-1:-1:-1;;;;;5446:16:0;;;;5408:228;5387:291;;;;-1:-1:-1;;;5387:291:0;;10030:2:2;5387:291:0;;;10012:21:2;10069:2;10049:18;;;10042:30;-1:-1:-1;;;10088:18:2;;;10081:46;10144:18;;5387:291:0;9828:340:2;5387:291:0;5140:545;;;;:::o;1915:699::-;2095:10;-1:-1:-1;;;;;2095:18:0;;;;:56;;-1:-1:-1;;;;;;2117:22:0;;;;;;:16;:22;;;;;;;;2140:10;2117:34;;;;;;;;;;2095:56;2087:83;;;;-1:-1:-1;;;2087:83:0;;10375:2:2;2087:83:0;;;10357:21:2;10414:2;10394:18;;;10387:30;-1:-1:-1;;;10433:18:2;;;10426:44;10487:18;;2087:83:0;10173:338:2;2087:83:0;-1:-1:-1;;;;;2181:15:0;;:9;:15;;;;;;;;;;;:19;;;;;;;;:29;;2204:6;;2181:9;:29;;2204:6;;2181:29;:::i;:::-;;;;-1:-1:-1;;;;;;;2220:13:0;;:9;:13;;;;;;;;;;;:17;;;;;;;;:27;;2241:6;;2220:9;:27;;2241:6;;2220:27;:::i;:::-;;;;-1:-1:-1;;2263:48:0;;;8929:25:2;;;8985:2;8970:18;;8963:34;;;-1:-1:-1;;;;;2263:48:0;;;;;;;;2278:10;;2263:48;;8902:18:2;2263:48:0;;;;;;;-1:-1:-1;;;;;2343:14:0;;;:19;:222;;2416:78;;-1:-1:-1;;;2416:78:0;;;2518:47;-1:-1:-1;;;;;2416:42:0;;;2518:47;;2416:78;;2459:10;;2471:4;;2477:2;;2481:6;;2489:4;;;;2416:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2416:149:0;;2343:222;;;-1:-1:-1;;;;;2381:16:0;;;;2343:222;2322:285;;;;-1:-1:-1;;;2322:285:0;;10030:2:2;2322:285:0;;;10012:21:2;10069:2;10049:18;;;10042:30;-1:-1:-1;;;10088:18:2;;;10081:46;10144:18;;2322:285:0;9828:340:2;14:173;82:20;;-1:-1:-1;;;;;131:31:2;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:2:o;633:131::-;-1:-1:-1;;;;;;707:32:2;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:2:o;1211:180::-;1270:6;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;-1:-1:-1;1362:23:2;;1211:180;-1:-1:-1;1211:180:2:o;1396:423::-;1438:3;1476:5;1470:12;1503:6;1498:3;1491:19;1528:1;1538:162;1552:6;1549:1;1546:13;1538:162;;;1614:4;1670:13;;;1666:22;;1660:29;1642:11;;;1638:20;;1631:59;1567:12;1538:162;;;1542:3;1745:1;1738:4;1729:6;1724:3;1720:16;1716:27;1709:38;1808:4;1801:2;1797:7;1792:2;1784:6;1780:15;1776:29;1771:3;1767:39;1763:50;1756:57;;;1396:423;;;;:::o;1824:220::-;1973:2;1962:9;1955:21;1936:4;1993:45;2034:2;2023:9;2019:18;2011:6;1993:45;:::i;2273:367::-;2336:8;2346:6;2400:3;2393:4;2385:6;2381:17;2377:27;2367:55;;2418:1;2415;2408:12;2367:55;-1:-1:-1;2441:20:2;;2484:18;2473:30;;2470:50;;;2516:1;2513;2506:12;2470:50;2553:4;2545:6;2541:17;2529:29;;2613:3;2606:4;2596:6;2593:1;2589:14;2581:6;2577:27;2573:38;2570:47;2567:67;;;2630:1;2627;2620:12;2567:67;2273:367;;;;;:::o;2645:347::-;2696:8;2706:6;2760:3;2753:4;2745:6;2741:17;2737:27;2727:55;;2778:1;2775;2768:12;2727:55;-1:-1:-1;2801:20:2;;2844:18;2833:30;;2830:50;;;2876:1;2873;2866:12;2830:50;2913:4;2905:6;2901:17;2889:29;;2965:3;2958:4;2949:6;2941;2937:19;2933:30;2930:39;2927:59;;;2982:1;2979;2972:12;2997:1210;3157:6;3165;3173;3181;3189;3197;3205;3213;3266:3;3254:9;3245:7;3241:23;3237:33;3234:53;;;3283:1;3280;3273:12;3234:53;3306:29;3325:9;3306:29;:::i;:::-;3296:39;;3354:38;3388:2;3377:9;3373:18;3354:38;:::i;:::-;3344:48;;3443:2;3432:9;3428:18;3415:32;3466:18;3507:2;3499:6;3496:14;3493:34;;;3523:1;3520;3513:12;3493:34;3562:70;3624:7;3615:6;3604:9;3600:22;3562:70;:::i;:::-;3651:8;;-1:-1:-1;3536:96:2;-1:-1:-1;3739:2:2;3724:18;;3711:32;;-1:-1:-1;3755:16:2;;;3752:36;;;3784:1;3781;3774:12;3752:36;3823:72;3887:7;3876:8;3865:9;3861:24;3823:72;:::i;:::-;3914:8;;-1:-1:-1;3797:98:2;-1:-1:-1;4002:3:2;3987:19;;3974:33;;-1:-1:-1;4019:16:2;;;4016:36;;;4048:1;4045;4038:12;4016:36;;4087:60;4139:7;4128:8;4117:9;4113:24;4087:60;:::i;:::-;2997:1210;;;;-1:-1:-1;2997:1210:2;;-1:-1:-1;2997:1210:2;;;;;;4166:8;-1:-1:-1;;;2997:1210:2:o;4212:773::-;4334:6;4342;4350;4358;4411:2;4399:9;4390:7;4386:23;4382:32;4379:52;;;4427:1;4424;4417:12;4379:52;4467:9;4454:23;4496:18;4537:2;4529:6;4526:14;4523:34;;;4553:1;4550;4543:12;4523:34;4592:70;4654:7;4645:6;4634:9;4630:22;4592:70;:::i;:::-;4681:8;;-1:-1:-1;4566:96:2;-1:-1:-1;4769:2:2;4754:18;;4741:32;;-1:-1:-1;4785:16:2;;;4782:36;;;4814:1;4811;4804:12;4782:36;;4853:72;4917:7;4906:8;4895:9;4891:24;4853:72;:::i;:::-;4212:773;;;;-1:-1:-1;4944:8:2;-1:-1:-1;;;;4212:773:2:o;4990:632::-;5161:2;5213:21;;;5283:13;;5186:18;;;5305:22;;;5132:4;;5161:2;5384:15;;;;5358:2;5343:18;;;5132:4;5427:169;5441:6;5438:1;5435:13;5427:169;;;5502:13;;5490:26;;5571:15;;;;5536:12;;;;5463:1;5456:9;5427:169;;;-1:-1:-1;5613:3:2;;4990:632;-1:-1:-1;;;;;;4990:632:2:o;5627:347::-;5692:6;5700;5753:2;5741:9;5732:7;5728:23;5724:32;5721:52;;;5769:1;5766;5759:12;5721:52;5792:29;5811:9;5792:29;:::i;:::-;5782:39;;5871:2;5860:9;5856:18;5843:32;5918:5;5911:13;5904:21;5897:5;5894:32;5884:60;;5940:1;5937;5930:12;5884:60;5963:5;5953:15;;;5627:347;;;;;:::o;5979:745::-;6085:6;6093;6101;6109;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6218:9;6205:23;6247:18;6288:2;6280:6;6277:14;6274:34;;;6304:1;6301;6294:12;6274:34;6343:70;6405:7;6396:6;6385:9;6381:22;6343:70;:::i;:::-;6432:8;;-1:-1:-1;6317:96:2;-1:-1:-1;6520:2:2;6505:18;;6492:32;;-1:-1:-1;6536:16:2;;;6533:36;;;6565:1;6562;6555:12;6533:36;;6604:60;6656:7;6645:8;6634:9;6630:24;6604:60;:::i;6729:260::-;6797:6;6805;6858:2;6846:9;6837:7;6833:23;6829:32;6826:52;;;6874:1;6871;6864:12;6826:52;6897:29;6916:9;6897:29;:::i;:::-;6887:39;;6945:38;6979:2;6968:9;6964:18;6945:38;:::i;:::-;6935:48;;6729:260;;;;;:::o;6994:695::-;7100:6;7108;7116;7124;7132;7140;7193:3;7181:9;7172:7;7168:23;7164:33;7161:53;;;7210:1;7207;7200:12;7161:53;7233:29;7252:9;7233:29;:::i;:::-;7223:39;;7281:38;7315:2;7304:9;7300:18;7281:38;:::i;:::-;7271:48;;7366:2;7355:9;7351:18;7338:32;7328:42;;7417:2;7406:9;7402:18;7389:32;7379:42;;7472:3;7461:9;7457:19;7444:33;7500:18;7492:6;7489:30;7486:50;;;7532:1;7529;7522:12;7486:50;7571:58;7621:7;7612:6;7601:9;7597:22;7571:58;:::i;:::-;6994:695;;;;-1:-1:-1;6994:695:2;;-1:-1:-1;6994:695:2;;7648:8;;6994:695;-1:-1:-1;;;6994:695:2:o;8038:127::-;8099:10;8094:3;8090:20;8087:1;8080:31;8130:4;8127:1;8120:15;8154:4;8151:1;8144:15;8170:127;8231:10;8226:3;8222:20;8219:1;8212:31;8262:4;8259:1;8252:15;8286:4;8283:1;8276:15;8302:186;8361:6;8414:2;8402:9;8393:7;8389:23;8385:32;8382:52;;;8430:1;8427;8420:12;8382:52;8453:29;8472:9;8453:29;:::i;8493:127::-;8554:10;8549:3;8545:20;8542:1;8535:31;8585:4;8582:1;8575:15;8609:4;8606:1;8599:15;8625:125;8690:9;;;8711:10;;;8708:36;;;8724:18;;:::i;9008:561::-;-1:-1:-1;;;;;9305:15:2;;;9287:34;;9357:15;;9352:2;9337:18;;9330:43;9404:2;9389:18;;9382:34;;;9447:2;9432:18;;9425:34;;;9267:3;9490;9475:19;;9468:32;;;9230:4;;9517:46;;9543:19;;9535:6;9517:46;:::i;:::-;9509:54;9008:561;-1:-1:-1;;;;;;;9008:561:2:o;9574:249::-;9643:6;9696:2;9684:9;9675:7;9671:23;9667:32;9664:52;;;9712:1;9709;9702:12;9664:52;9744:9;9738:16;9763:30;9787:5;9763:30;:::i;10516:128::-;10583:9;;;10604:11;;;10601:37;;;10618:18;;:::i;10649:734::-;-1:-1:-1;;;;;10956:15:2;;;10938:34;;11008:15;;11003:2;10988:18;;10981:43;11055:2;11040:18;;11033:34;;;11098:2;11083:18;;11076:34;;;10918:3;11141;11126:19;;11119:32;;;11167:19;;11160:35;;;10881:4;11188:6;11238;11232:3;11217:19;;11204:49;11303:1;11297:3;11288:6;11277:9;11273:22;11269:32;11262:43;11373:3;11366:2;11362:7;11357:2;11349:6;11345:15;11341:29;11330:9;11326:45;11322:55;11314:63;;10649:734;;;;;;;;;:::o

Swarm Source

ipfs://af7705702feef375aca8557bb363781890bb074f290935dbd832332499adff05

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.