Sepolia Testnet

Contract

0x462D3f1920285C5D537D6f3711C2f822AbA44fcb

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Mint Daily Alloc...71209452024-11-21 6:44:4855 days ago1732171488IN
0x462D3f19...2AbA44fcb
0 ETH0.000252034.81853361

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MagicTestnetFacetSimple

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 14 : MagicTestnetFacetSimple.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ERC20 } from './dependencies/solidstate/token/ERC20/ERC20.sol';
import { OwnableInternal } from './dependencies/solidstate/accesscontrol/OwnableInternal.sol';

import { IMagicFacet_Testnet } from './interfaces/IMagicFacet_Testnet.sol';

// This facet is the sole magic/ERC20 related facet for the MagicProxy contract on Sepolia.
//
contract MagicTestnetFacetSimple is IMagicFacet_Testnet, ERC20, OwnableInternal {
    // Used to store the team's mint amount. No longer used.
    //
    uint256 private DEPRECATED_1;
    // Used to store those that were whitelist. The whitelist got moved to a different storage slot.
    // Eventually, whitelisting and minting were removed.
    //
    mapping(address => bool) private DEPRECATED_2;

    uint256 public maxMagicPerDay;
    mapping(address => uint256) public lastMintedTime;

    function adminMint(address account, uint256 amount) external onlyOwner {
        _mint(account, amount);
    }

    // Initial maxMagicPerDay will be 0, so owner will need to use changeDailyAllocation() to set
    // maxMagicPerDay to a nonzero value to enable minting.
    function changeDailyAllocation(uint256 amount) external onlyOwner {
        maxMagicPerDay = amount;
    }

    function mintDailyAllocation() external {
        require(lastMintedTime[msg.sender] + 1 days <= block.timestamp, 'Already claimed daily MAGIC!');

        lastMintedTime[msg.sender] = block.timestamp;

        _mint(msg.sender, maxMagicPerDay);
    }
}

File 2 of 14 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { OwnableStorage } from './OwnableStorage.sol';

abstract contract OwnableInternal {
    using OwnableStorage for OwnableStorage.Layout;

    modifier onlyOwner() {
        require(
            msg.sender == OwnableStorage.layout().owner,
            'Ownable: sender must be owner'
        );
        _;
    }
}

File 3 of 14 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library OwnableStorage {
    struct Layout {
        address owner;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.Ownable');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setOwner(Layout storage l, address owner) internal {
        l.owner = owner;
    }
}

File 4 of 14 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ERC20Base } from './base/ERC20Base.sol';
import { ERC20Extended } from './extended/ERC20Extended.sol';
import { ERC20Metadata } from './metadata/ERC20Metadata.sol';

/**
 * @title SolidState ERC20 implementation, including recommended extensions
 */
abstract contract ERC20 is ERC20Base, ERC20Extended, ERC20Metadata {

}

File 5 of 14 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC20Internal } from './IERC20Internal.sol';

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 is IERC20Internal {
    /**
     * @notice query the total minted token supply
     * @return token supply
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice query the token balance of given account
     * @param account address to query
     * @return token balance
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @notice query the allowance granted from given holder to given spender
     * @param holder approver of allowance
     * @param spender recipient of allowance
     * @return token allowance
     */
    function allowance(address holder, address spender)
        external
        view
        returns (uint256);

    /**
     * @notice grant approval to spender to spend tokens
     * @dev prefer ERC20Extended functions to avoid transaction-ordering vulnerability (see https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)
     * @param spender recipient of allowance
     * @param amount quantity of tokens approved for spending
     * @return success status (always true; otherwise function should revert)
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @notice transfer tokens to given recipient
     * @param recipient beneficiary of token transfer
     * @param amount quantity of tokens to transfer
     * @return success status (always true; otherwise function should revert)
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @notice transfer tokens to given recipient on behalf of given holder
     * @param holder holder of tokens prior to transfer
     * @param recipient beneficiary of token transfer
     * @param amount quantity of tokens to transfer
     * @return success status (always true; otherwise function should revert)
     */
    function transferFrom(
        address holder,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

File 6 of 14 : IERC20Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Partial ERC20 interface needed by internal functions
 */
interface IERC20Internal {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 7 of 14 : ERC20Base.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC20 } from '../IERC20.sol';
import { ERC20BaseInternal } from './ERC20BaseInternal.sol';
import { ERC20BaseStorage } from './ERC20BaseStorage.sol';

/**
 * @title Base ERC20 implementation, excluding optional extensions
 */
abstract contract ERC20Base is IERC20, ERC20BaseInternal {
    /**
     * @inheritdoc IERC20
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply();
    }

    /**
     * @inheritdoc IERC20
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balanceOf(account);
    }

    /**
     * @inheritdoc IERC20
     */
    function allowance(address holder, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return ERC20BaseStorage.layout().allowances[holder][spender];
    }

    /**
     * @inheritdoc IERC20
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @inheritdoc IERC20
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @inheritdoc IERC20
     */
    function transferFrom(
        address holder,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = ERC20BaseStorage.layout().allowances[holder][
            msg.sender
        ];
        require(
            currentAllowance >= amount,
            'ERC20: transfer amount exceeds allowance'
        );
        unchecked {
            _approve(holder, msg.sender, currentAllowance - amount);
        }
        _transfer(holder, recipient, amount);
        return true;
    }
}

File 8 of 14 : ERC20BaseInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC20Internal } from '../IERC20Internal.sol';
import { ERC20BaseStorage } from './ERC20BaseStorage.sol';

/**
 * @title Base ERC20 implementation, excluding optional extensions
 */
abstract contract ERC20BaseInternal is IERC20Internal {
    /**
     * @notice query the total minted token supply
     * @return token supply
     */
    function _totalSupply() internal view virtual returns (uint256) {
        return ERC20BaseStorage.layout().totalSupply;
    }

    /**
     * @notice query the token balance of given account
     * @param account address to query
     * @return token balance
     */
    function _balanceOf(address account)
        internal
        view
        virtual
        returns (uint256)
    {
        return ERC20BaseStorage.layout().balances[account];
    }

    /**
     * @notice enable spender to spend tokens on behalf of holder
     * @param holder address on whose behalf tokens may be spent
     * @param spender recipient of allowance
     * @param amount quantity of tokens approved for spending
     */
    function _approve(
        address holder,
        address spender,
        uint256 amount
    ) internal virtual {
        require(holder != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');

        ERC20BaseStorage.layout().allowances[holder][spender] = amount;

        emit Approval(holder, spender, amount);
    }

    /**
     * @notice mint tokens for given account
     * @param account recipient of minted tokens
     * @param amount quantity of tokens minted
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), 'ERC20: mint to the zero address');

        _beforeTokenTransfer(address(0), account, amount);

        ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
        l.totalSupply += amount;
        l.balances[account] += amount;

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

    /**
     * @notice burn tokens held by given account
     * @param account holder of burned tokens
     * @param amount quantity of tokens burned
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), 'ERC20: burn from the zero address');

        _beforeTokenTransfer(account, address(0), amount);

        ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
        uint256 balance = l.balances[account];
        require(balance >= amount, 'ERC20: burn amount exceeds balance');
        unchecked {
            l.balances[account] = balance - amount;
        }
        l.totalSupply -= amount;

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

    /**
     * @notice transfer tokens from holder to recipient
     * @param holder owner of tokens to be transferred
     * @param recipient beneficiary of transfer
     * @param amount quantity of tokens transferred
     */
    function _transfer(
        address holder,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(holder != address(0), 'ERC20: transfer from the zero address');
        require(recipient != address(0), 'ERC20: transfer to the zero address');

        _beforeTokenTransfer(holder, recipient, amount);

        ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
        uint256 holderBalance = l.balances[holder];
        require(
            holderBalance >= amount,
            'ERC20: transfer amount exceeds balance'
        );
        unchecked {
            l.balances[holder] = holderBalance - amount;
        }
        l.balances[recipient] += amount;

        emit Transfer(holder, recipient, amount);
    }

    /**
     * @notice ERC20 hook, called before all transfers including mint and burn
     * @dev function should be overridden and new implementation must call super
     * @param from sender of tokens
     * @param to receiver of tokens
     * @param amount quantity of tokens transferred
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 9 of 14 : ERC20BaseStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC20BaseStorage {
    struct Layout {
        mapping(address => uint256) balances;
        mapping(address => mapping(address => uint256)) allowances;
        uint256 totalSupply;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC20Base');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }
}

File 10 of 14 : ERC20Extended.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ERC20Base, ERC20BaseStorage } from '../base/ERC20Base.sol';

/**
 * @title ERC20 safe approval extensions
 * @dev mitigations for transaction-ordering vulnerability (see https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)
 */
abstract contract ERC20Extended is ERC20Base {
    /**
     * @notice increase spend amount granted to spender
     * @param spender address whose allowance to increase
     * @param amount quantity by which to increase allowance
     * @return success status (always true; otherwise function will revert)
     */
    function increaseAllowance(address spender, uint256 amount)
        public
        virtual
        returns (bool)
    {
        unchecked {
            mapping(address => uint256) storage allowances = ERC20BaseStorage
                .layout()
                .allowances[msg.sender];

            uint256 allowance = allowances[spender];
            require(
                allowance + amount >= allowance,
                'ERC20Extended: excessive allowance'
            );

            _approve(
                msg.sender,
                spender,
                allowances[spender] = allowance + amount
            );

            return true;
        }
    }

    /**
     * @notice decrease spend amount granted to spender
     * @param spender address whose allowance to decrease
     * @param amount quantity by which to decrease allowance
     * @return success status (always true; otherwise function will revert)
     */
    function decreaseAllowance(address spender, uint256 amount)
        public
        virtual
        returns (bool)
    {
        unchecked {
            mapping(address => uint256) storage allowances = ERC20BaseStorage
                .layout()
                .allowances[msg.sender];

            uint256 allowance = allowances[spender];
            require(
                amount <= allowance,
                'ERC20Extended: insufficient allowance'
            );

            _approve(
                msg.sender,
                spender,
                allowances[spender] = allowance - amount
            );

            return true;
        }
    }
}

File 11 of 14 : ERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { ERC20MetadataStorage } from './ERC20MetadataStorage.sol';
import { IERC20Metadata } from './IERC20Metadata.sol';

/**
 * @title ERC20 metadata extensions
 */
abstract contract ERC20Metadata is IERC20Metadata {
    /**
     * @inheritdoc IERC20Metadata
     */
    function name() public view virtual override returns (string memory) {
        return ERC20MetadataStorage.layout().name;
    }

    /**
     * @inheritdoc IERC20Metadata
     */
    function symbol() public view virtual override returns (string memory) {
        return ERC20MetadataStorage.layout().symbol;
    }

    /**
     * @inheritdoc IERC20Metadata
     */
    function decimals() public view virtual override returns (uint8) {
        return ERC20MetadataStorage.layout().decimals;
    }
}

File 12 of 14 : ERC20MetadataStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC20MetadataStorage {
    struct Layout {
        string name;
        string symbol;
        uint8 decimals;
    }

    bytes32 internal constant STORAGE_SLOT =
        keccak256('solidstate.contracts.storage.ERC20Metadata');

    function layout() internal pure returns (Layout storage l) {
        bytes32 slot = STORAGE_SLOT;
        assembly {
            l.slot := slot
        }
    }

    function setName(Layout storage l, string memory name) internal {
        l.name = name;
    }

    function setSymbol(Layout storage l, string memory symbol) internal {
        l.symbol = symbol;
    }

    function setDecimals(Layout storage l, uint8 decimals) internal {
        l.decimals = decimals;
    }
}

File 13 of 14 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC20 metadata interface
 */
interface IERC20Metadata {
    /**
     * @notice return token name
     * @return token name
     */
    function name() external view returns (string memory);

    /**
     * @notice return token symbol
     * @return token symbol
     */
    function symbol() external view returns (string memory);

    /**
     * @notice return token decimals, generally used only for display purposes
     * @return token decimals
     */
    function decimals() external view returns (uint8);
}

File 14 of 14 : IMagicFacet_Testnet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import { IERC20 } from '../dependencies/solidstate/token/ERC20/IERC20.sol';

interface IMagicFacet_Testnet is IERC20 {
    function adminMint(address account, uint256 amount) external;
    function changeDailyAllocation(uint256 amount) external;
    function mintDailyAllocation() external;
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"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":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":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"changeDailyAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastMintedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMagicPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintDailyAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610e0b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806371de48d011610097578063b5b9a32f11610066578063b5b9a32f14610221578063dd62ed3e1461022a578063e58306f914610270578063f83e4b001461028357600080fd5b806371de48d0146101e957806395d89b41146101f3578063a457c2d7146101fb578063a9059cbb1461020e57600080fd5b806323b872dd116100d357806323b872dd1461017c578063313ce5671461018f57806339509351146101c357806370a08231146101d657600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd146101465780631e8557cf1461015c575b600080fd5b61010d610296565b60405161011a9190610c1b565b60405180910390f35b610136610131366004610c86565b610347565b604051901515815260200161011a565b61014e61035e565b60405190815260200161011a565b61014e61016a366004610cb0565b60036020526000908152604090205481565b61013661018a366004610cd2565b61038d565b7f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f7430495460405160ff909116815260200161011a565b6101366101d1366004610c86565b610447565b61014e6101e4366004610cb0565b61050a565b6101f1610547565b005b61010d6105d5565b610136610209366004610c86565b610606565b61013661021c366004610c86565b6106ca565b61014e60025481565b61014e610238366004610d0e565b6001600160a01b039182166000908152600080516020610db68339815191526020908152604080832093909416825291909152205490565b6101f161027e366004610c86565b6106d7565b6101f1610291366004610d41565b61075e565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304780546102c490610d5a565b80601f01602080910402602001604051908101604052809291908181526020018280546102f090610d5a565b801561033d5780601f106103125761010080835404028352916020019161033d565b820191906000526020600020905b81548152906001019060200180831161032057829003601f168201915b5050505050905090565b60006103543384846107dc565b5060015b92915050565b60006103887fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b65490565b905090565b6001600160a01b0383166000908152600080516020610db683398151915260209081526040808320338452909152812054828110156104245760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61043185338584036107dc565b61043c85858561090e565b506001949350505050565b336000908152600080516020610db6833981519152602090815260408083206001600160a01b0386168452918290528220548381018111156104d65760405162461bcd60e51b815260206004820152602260248201527f4552433230457874656e6465643a2065786365737369766520616c6c6f77616e604482015261636560f01b606482015260840161041b565b61043c33868684018560008a6001600160a01b03166001600160a01b031681526020019081526020016000208190556107dc565b6001600160a01b03811660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b46020526040812054610358565b3360009081526003602052604090205442906105669062015180610d94565b11156105b45760405162461bcd60e51b815260206004820152601c60248201527f416c726561647920636c61696d6564206461696c79204d414749432100000000604482015260640161041b565b3360008181526003602052604090204290556002546105d39190610b00565b565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304760010180546102c490610d5a565b336000908152600080516020610db6833981519152602090815260408083206001600160a01b038616845291829052822054808411156106965760405162461bcd60e51b815260206004820152602560248201527f4552433230457874656e6465643a20696e73756666696369656e7420616c6c6f60448201526477616e636560d81b606482015260840161041b565b61043c33868684038560008a6001600160a01b03166001600160a01b031681526020019081526020016000208190556107dc565b600061035433848461090e565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107505760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161041b565b61075a8282610b00565b5050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107d75760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161041b565b600255565b6001600160a01b03831661083e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161041b565b6001600160a01b03821661089f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161041b565b6001600160a01b038381166000818152600080516020610db6833981519152602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166109725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161041b565b6001600160a01b0382166109d45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161041b565b6001600160a01b03831660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602081905260409091205482811015610a6e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161041b565b6001600160a01b03808616600090815260208490526040808220868503905591861681529081208054859290610aa5908490610d94565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610af191815260200190565b60405180910390a35050505050565b6001600160a01b038216610b565760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161041b565b7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b680547fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4918391600090610bab908490610d94565b90915550506001600160a01b03831660009081526020829052604081208054849290610bd8908490610d94565b90915550506040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610901565b60006020808352835180602085015260005b81811015610c4957858101830151858201604001528201610c2d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c8157600080fd5b919050565b60008060408385031215610c9957600080fd5b610ca283610c6a565b946020939093013593505050565b600060208284031215610cc257600080fd5b610ccb82610c6a565b9392505050565b600080600060608486031215610ce757600080fd5b610cf084610c6a565b9250610cfe60208501610c6a565b9150604084013590509250925092565b60008060408385031215610d2157600080fd5b610d2a83610c6a565b9150610d3860208401610c6a565b90509250929050565b600060208284031215610d5357600080fd5b5035919050565b600181811c90821680610d6e57607f821691505b602082108103610d8e57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561035857634e487b7160e01b600052601160045260246000fdfec991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b5a26469706673582212206009bf5f432d91ffc0e70a55e7b7cd3a1846b838edee4107ef1d19e70d1f6e8964736f6c63430008170033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806371de48d011610097578063b5b9a32f11610066578063b5b9a32f14610221578063dd62ed3e1461022a578063e58306f914610270578063f83e4b001461028357600080fd5b806371de48d0146101e957806395d89b41146101f3578063a457c2d7146101fb578063a9059cbb1461020e57600080fd5b806323b872dd116100d357806323b872dd1461017c578063313ce5671461018f57806339509351146101c357806370a08231146101d657600080fd5b806306fdde0314610105578063095ea7b31461012357806318160ddd146101465780631e8557cf1461015c575b600080fd5b61010d610296565b60405161011a9190610c1b565b60405180910390f35b610136610131366004610c86565b610347565b604051901515815260200161011a565b61014e61035e565b60405190815260200161011a565b61014e61016a366004610cb0565b60036020526000908152604090205481565b61013661018a366004610cd2565b61038d565b7f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f7430495460405160ff909116815260200161011a565b6101366101d1366004610c86565b610447565b61014e6101e4366004610cb0565b61050a565b6101f1610547565b005b61010d6105d5565b610136610209366004610c86565b610606565b61013661021c366004610c86565b6106ca565b61014e60025481565b61014e610238366004610d0e565b6001600160a01b039182166000908152600080516020610db68339815191526020908152604080832093909416825291909152205490565b6101f161027e366004610c86565b6106d7565b6101f1610291366004610d41565b61075e565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304780546102c490610d5a565b80601f01602080910402602001604051908101604052809291908181526020018280546102f090610d5a565b801561033d5780601f106103125761010080835404028352916020019161033d565b820191906000526020600020905b81548152906001019060200180831161032057829003601f168201915b5050505050905090565b60006103543384846107dc565b5060015b92915050565b60006103887fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b65490565b905090565b6001600160a01b0383166000908152600080516020610db683398151915260209081526040808320338452909152812054828110156104245760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61043185338584036107dc565b61043c85858561090e565b506001949350505050565b336000908152600080516020610db6833981519152602090815260408083206001600160a01b0386168452918290528220548381018111156104d65760405162461bcd60e51b815260206004820152602260248201527f4552433230457874656e6465643a2065786365737369766520616c6c6f77616e604482015261636560f01b606482015260840161041b565b61043c33868684018560008a6001600160a01b03166001600160a01b031681526020019081526020016000208190556107dc565b6001600160a01b03811660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b46020526040812054610358565b3360009081526003602052604090205442906105669062015180610d94565b11156105b45760405162461bcd60e51b815260206004820152601c60248201527f416c726561647920636c61696d6564206461696c79204d414749432100000000604482015260640161041b565b3360008181526003602052604090204290556002546105d39190610b00565b565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304760010180546102c490610d5a565b336000908152600080516020610db6833981519152602090815260408083206001600160a01b038616845291829052822054808411156106965760405162461bcd60e51b815260206004820152602560248201527f4552433230457874656e6465643a20696e73756666696369656e7420616c6c6f60448201526477616e636560d81b606482015260840161041b565b61043c33868684038560008a6001600160a01b03166001600160a01b031681526020019081526020016000208190556107dc565b600061035433848461090e565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107505760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161041b565b61075a8282610b00565b5050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107d75760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161041b565b600255565b6001600160a01b03831661083e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161041b565b6001600160a01b03821661089f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161041b565b6001600160a01b038381166000818152600080516020610db6833981519152602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166109725760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161041b565b6001600160a01b0382166109d45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161041b565b6001600160a01b03831660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602081905260409091205482811015610a6e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161041b565b6001600160a01b03808616600090815260208490526040808220868503905591861681529081208054859290610aa5908490610d94565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610af191815260200190565b60405180910390a35050505050565b6001600160a01b038216610b565760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161041b565b7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b680547fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4918391600090610bab908490610d94565b90915550506001600160a01b03831660009081526020829052604081208054849290610bd8908490610d94565b90915550506040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610901565b60006020808352835180602085015260005b81811015610c4957858101830151858201604001528201610c2d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610c8157600080fd5b919050565b60008060408385031215610c9957600080fd5b610ca283610c6a565b946020939093013593505050565b600060208284031215610cc257600080fd5b610ccb82610c6a565b9392505050565b600080600060608486031215610ce757600080fd5b610cf084610c6a565b9250610cfe60208501610c6a565b9150604084013590509250925092565b60008060408385031215610d2157600080fd5b610d2a83610c6a565b9150610d3860208401610c6a565b90509250929050565b600060208284031215610d5357600080fd5b5035919050565b600181811c90821680610d6e57607f821691505b602082108103610d8e57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561035857634e487b7160e01b600052601160045260246000fdfec991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b5a26469706673582212206009bf5f432d91ffc0e70a55e7b7cd3a1846b838edee4107ef1d19e70d1f6e8964736f6c63430008170033

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

Transaction 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.