FTM Price: $0.99 (-3.15%)
Gas: 75 GWei

Contract

0x8D8493C879ee6De7832167e1132F2035aed09807
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Migrate Node468908902022-09-13 20:29:16562 days ago1663100956IN
0x8D8493C8...5aed09807
0 FTM0.0454735500
Migrate Node466522142022-09-09 17:16:00566 days ago1662743760IN
0x8D8493C8...5aed09807
0 FTM0.000650486.09562227
Migrate Node440426692022-08-02 4:04:03605 days ago1659413043IN
0x8D8493C8...5aed09807
0 FTM0.003753827.9323813
Migrate Node432674542022-07-21 22:31:04616 days ago1658442664IN
0x8D8493C8...5aed09807
0 FTM0.0012064515.29923738
Migrate Node432674542022-07-21 22:31:04616 days ago1658442664IN
0x8D8493C8...5aed09807
0 FTM0.000470245.96330786
Migrate Node431871322022-07-20 18:31:08617 days ago1658341868IN
0x8D8493C8...5aed09807
0 FTM0.0027324425.60529061
Migrate Node428348702022-07-15 18:52:55622 days ago1657911175IN
0x8D8493C8...5aed09807
0 FTM0.0046988334.9644372
Migrate Node426555212022-07-13 7:49:22625 days ago1657698562IN
0x8D8493C8...5aed09807
0 FTM0.0038099640.35086277
Migrate Node424573292022-07-10 13:19:45628 days ago1657459185IN
0x8D8493C8...5aed09807
0 FTM0.0010863811.94086684
Migrate Node424573292022-07-10 13:19:45628 days ago1657459185IN
0x8D8493C8...5aed09807
0 FTM0.0023592425.93149801
Migrate Node419903142022-07-04 10:42:05634 days ago1656931325IN
0x8D8493C8...5aed09807
0 FTM0.000570615.33637518
Migrate Node416249272022-06-29 15:52:03638 days ago1656517923IN
0x8D8493C8...5aed09807
0 FTM0.003216219.62716931
Migrate Node416208442022-06-29 14:33:37639 days ago1656513217IN
0x8D8493C8...5aed09807
0 FTM0.0042967912.86261522
Migrate Node416208122022-06-29 14:33:04639 days ago1656513184IN
0x8D8493C8...5aed09807
0 FTM0.0126999612.91208724
Migrate Node416087392022-06-29 10:32:35639 days ago1656498755IN
0x8D8493C8...5aed09807
0 FTM0.0070361911.85276783
Migrate Node416086462022-06-29 10:30:24639 days ago1656498624IN
0x8D8493C8...5aed09807
0 FTM0.001587064.75178277
Migrate Node415987722022-06-29 7:27:25639 days ago1656487645IN
0x8D8493C8...5aed09807
0 FTM0.001846395.2586343
Migrate Node415970842022-06-29 6:55:08639 days ago1656485708IN
0x8D8493C8...5aed09807
0 FTM0.008162924.94658984
Migrate Node415965682022-06-29 6:45:48639 days ago1656485148IN
0x8D8493C8...5aed09807
0 FTM0.001764895.02721262
Migrate Node415949992022-06-29 6:17:14639 days ago1656483434IN
0x8D8493C8...5aed09807
0 FTM0.004876844.95847849
Migrate Node415944492022-06-29 6:06:08639 days ago1656482768IN
0x8D8493C8...5aed09807
0 FTM0.0250439722.49731872
Migrate Node415877992022-06-29 4:03:31639 days ago1656475411IN
0x8D8493C8...5aed09807
0 FTM0.002338633.93913555
Migrate Node415816652022-06-29 2:10:00639 days ago1656468600IN
0x8D8493C8...5aed09807
0 FTM0.001191563.5672566
Migrate Node415816612022-06-29 2:09:55639 days ago1656468595IN
0x8D8493C8...5aed09807
0 FTM0.001191523.5672566
Migrate Node415806642022-06-29 1:51:41639 days ago1656467501IN
0x8D8493C8...5aed09807
0 FTM0.001184553.5281911
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
394746952022-05-31 15:02:36668 days ago1654009356  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PowerMigration

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 3 : power_migration.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

//import "hardhat/console.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

library strings {
    struct slice {
        uint256 _len;
        uint256 _ptr;
    }

    function memcpy(
        uint256 dest,
        uint256 src,
        uint256 len
    ) private pure {
        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint256 mask = type(uint256).max;
        if (len > 0) {
            mask = 256**(32 - len) - 1;
        }
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    /*
     * @dev Returns a slice containing the entire string.
     * @param self The string to make a slice from.
     * @return A newly allocated slice containing the entire string.
     */
    function toSlice(string memory self) internal pure returns (slice memory) {
        uint256 ptr;
        assembly {
            ptr := add(self, 0x20)
        }
        return slice(bytes(self).length, ptr);
    }

    /*
     * @dev Copies a slice to a new string.
     * @param self The slice to copy.
     * @return A newly allocated string containing the slice's text.
     */
    function toString(slice memory self) internal pure returns (string memory) {
        string memory ret = new string(self._len);
        uint256 retptr;
        assembly {
            retptr := add(ret, 32)
        }

        memcpy(retptr, self._ptr, self._len);
        return ret;
    }

    /*
     * @dev Returns the length in runes of the slice. Note that this operation
     *      takes time proportional to the length of the slice; avoid using it
     *      in loops, and call `slice.empty()` if you only need to know whether
     *      the slice is empty or not.
     * @param self The slice to operate on.
     * @return The length of the slice in runes.
     */
    function len(slice memory self) internal pure returns (uint256 l) {
        // Starting at ptr-31 means the LSB will be the byte we care about
        uint256 ptr = self._ptr - 31;
        uint256 end = ptr + self._len;
        for (l = 0; ptr < end; l++) {
            uint8 b;
            assembly {
                b := and(mload(ptr), 0xFF)
            }
            if (b < 0x80) {
                ptr += 1;
            } else if (b < 0xE0) {
                ptr += 2;
            } else if (b < 0xF0) {
                ptr += 3;
            } else if (b < 0xF8) {
                ptr += 4;
            } else if (b < 0xFC) {
                ptr += 5;
            } else {
                ptr += 6;
            }
        }
    }

    // Returns the memory address of the first byte of the first occurrence of
    // `needle` in `self`, or the first byte after `self` if not found.
    function findPtr(
        uint256 selflen,
        uint256 selfptr,
        uint256 needlelen,
        uint256 needleptr
    ) private pure returns (uint256) {
        uint256 ptr = selfptr;
        uint256 idx;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask;
                if (needlelen > 0) {
                    mask = bytes32(~(2**(8 * (32 - needlelen)) - 1));
                }

                bytes32 needledata;
                assembly {
                    needledata := and(mload(needleptr), mask)
                }

                uint256 end = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly {
                    ptrdata := and(mload(ptr), mask)
                }

                while (ptrdata != needledata) {
                    if (ptr >= end) return selfptr + selflen;
                    ptr++;
                    assembly {
                        ptrdata := and(mload(ptr), mask)
                    }
                }
                return ptr;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly {
                    hash := keccak256(needleptr, needlelen)
                }

                for (idx = 0; idx <= selflen - needlelen; idx++) {
                    bytes32 testHash;
                    assembly {
                        testHash := keccak256(ptr, needlelen)
                    }
                    if (hash == testHash) return ptr;
                    ptr += 1;
                }
            }
        }
        return selfptr + selflen;
    }

    // Returns the memory address of the first byte after the last occurrence of
    // `needle` in `self`, or the address of `self` if not found.
    function rfindPtr(
        uint256 selflen,
        uint256 selfptr,
        uint256 needlelen,
        uint256 needleptr
    ) private pure returns (uint256) {
        uint256 ptr;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask;
                if (needlelen > 0) {
                    mask = bytes32(~(2**(8 * (32 - needlelen)) - 1));
                }

                bytes32 needledata;
                assembly {
                    needledata := and(mload(needleptr), mask)
                }

                ptr = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly {
                    ptrdata := and(mload(ptr), mask)
                }

                while (ptrdata != needledata) {
                    if (ptr <= selfptr) return selfptr;
                    ptr--;
                    assembly {
                        ptrdata := and(mload(ptr), mask)
                    }
                }
                return ptr + needlelen;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly {
                    hash := keccak256(needleptr, needlelen)
                }
                ptr = selfptr + (selflen - needlelen);
                while (ptr >= selfptr) {
                    bytes32 testHash;
                    assembly {
                        testHash := keccak256(ptr, needlelen)
                    }
                    if (hash == testHash) return ptr + needlelen;
                    ptr -= 1;
                }
            }
        }
        return selfptr;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and `token` to everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and `token` is set to the entirety of `self`.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @param token An output parameter to which the first token is written.
     * @return `token`.
     */
    function split(
        slice memory self,
        slice memory needle,
        slice memory token
    ) internal pure returns (slice memory) {
        uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);
        token._ptr = self._ptr;
        token._len = ptr - self._ptr;
        if (ptr == self._ptr + self._len) {
            // Not found
            self._len = 0;
        } else {
            self._len -= token._len + needle._len;
            self._ptr = ptr + needle._len;
        }
        return token;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and returning everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and the entirety of `self` is returned.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @return The part of `self` up to the first occurrence of `delim`.
     */
    function split(slice memory self, slice memory needle)
        internal
        pure
        returns (slice memory token)
    {
        split(self, needle, token);
    }


    /*
     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.
     * @param self The slice to search.
     * @param needle The text to search for in `self`.
     * @return The number of occurrences of `needle` found in `self`.
     */
    function count(slice memory self, slice memory needle)
        internal
        pure
        returns (uint256 cnt)
    {
        uint256 ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) +
            needle._len;
        while (ptr <= self._ptr + self._len) {
            cnt++;
            ptr =
                findPtr(
                    self._len - (ptr - self._ptr),
                    ptr,
                    needle._len,
                    needle._ptr
                ) +
                needle._len;
        }
    }
}

library PowerLibrary {
    using strings for *;

    function strToArrayUint256(string memory str, string memory delim)
        internal
        pure
        returns (uint256[] memory)
    {
        strings.slice memory stringSlice = str.toSlice();
        strings.slice memory delimeterSlice = delim.toSlice();
        uint256[] memory result = new uint256[](
            stringSlice.count(delimeterSlice) + 1
        );
        for (uint256 i = 0; i < result.length; i++) {
            (uint256 res, bool err) = strToUint(
                stringSlice.split(delimeterSlice).toString()
            );
            if (err) {
                result[i] = res;
            }
        }
        return result;
    }

    function strToArrayString(string memory str, string memory delim)
        internal
        pure
        returns (string[] memory)
    {
        strings.slice memory stringSlice = str.toSlice();
        strings.slice memory delimeterSlice = delim.toSlice();
        string[] memory result = new string[](
            stringSlice.count(delimeterSlice) + 1
        );
        for (uint256 i = 0; i < result.length; i++) {
            result[i] = stringSlice.split(delimeterSlice).toString();
        }
        return result;
    }

    function strToUint(string memory _str)
        internal
        pure
        returns (uint256 res, bool err)
    {
        for (uint256 i = 0; i < bytes(_str).length; i++) {
            if (
                (uint8(bytes(_str)[i]) - 48) < 0 ||
                (uint8(bytes(_str)[i]) - 48) > 9
            ) {
                return (0, false);
            }
            res +=
                (uint8(bytes(_str)[i]) - 48) *
                10**(bytes(_str).length - i - 1);
        }
        return (res, true);
    }
}

contract NODERewardManagement {
    function _getNodesNames(address account)
        external
        view
        returns (string memory)
    {
        return "";
    }

    function _getNodesCreationTime(address account)
        external
        view
        returns (string memory)
    {
        return "";
    }

    function _getNodesLastClaimTime(address account)
        external
        view
        returns (string memory)
    {
        return "";
    }

    function _getNodeNumberOf(address account)
        public
        view
        returns (uint256)
    {
        return 0;
    }
}

struct NodeTier {
    string name;
    NODERewardManagement manager;
    uint256 cashOutFee;
}

contract oldPowerStation {
    
    mapping(string => NodeTier) public tiers;
    string[] public allTiers;

    function getNodeNumberOf(address account, string memory tierName)
        public
        view
        returns (uint256)
    {
        return 0;
    }

    function cashoutAll(string memory tierName, address user) public {
        
    }
}

contract newPowerStation {
    
    function migrateNode (
        string[] memory name,
        string memory tier,
        address user,
        uint256 lastClaimTime
    ) external {

    }
}

contract PowerMigration is Ownable{

    oldPowerStation oldStation;
    newPowerStation newStation;

    mapping( address => mapping( string => uint256 )) public alreadyMigrate;

    function setStation(address _oldStation, address _newStation) external onlyOwner {
        oldStation = oldPowerStation(_oldStation);
        newStation = newPowerStation(_newStation);
    }

    string[] allTiers = [
        "FLATVERSAL", "MICROSCOPIC", "HUMAN", "SUPERHUMAN"
    ];

    function migrateNode(address user, string memory tier, string[] memory nodeNames) external {
        (,NODERewardManagement test,) = oldStation.tiers(tier);
        require(alreadyMigrate[user][tier] + nodeNames.length <= test._getNodeNumberOf(user), "You already migrate!");

        newStation.migrateNode(
            nodeNames,
            tier,
            user,
            block.timestamp
        );

        oldStation.cashoutAll(tier, user);

        alreadyMigrate[user][tier] += nodeNames.length;
    }
}

File 2 of 3 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 3 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "yul": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"}],"name":"alreadyMigrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"string","name":"tier","type":"string"},{"internalType":"string[]","name":"nodeNames","type":"string[]"}],"name":"migrateNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldStation","type":"address"},{"internalType":"address","name":"_newStation","type":"address"}],"name":"setStation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600a610100818152691193105515915494d05360b21b610120526080908152600b6101409081526a4d4943524f53434f50494360a81b6101605260a052600561018090815264242aa6a0a760d91b6101a05260c0526102006040526101c09182526929aaa822a9242aa6a0a760b11b6101e05260e091909152620000879060049081620000f7565b503480156200009557600080fd5b50620000a133620000a7565b6200029d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821562000149579160200282015b82811115620001495782518051620001389184916020909101906200015b565b509160200191906001019062000118565b5062000157929150620001e6565b5090565b828054620001699062000260565b90600052602060002090601f0160209004810192826200018d5760008555620001d8565b82601f10620001a857805160ff1916838001178555620001d8565b82800160010185558215620001d8579182015b82811115620001d8578251825591602001919060010190620001bb565b506200015792915062000207565b8082111562000157576000620001fd82826200021e565b50600101620001e6565b5b8082111562000157576000815560010162000208565b5080546200022c9062000260565b6000825580601f106200023d575050565b601f0160209004906000526020600020908101906200025d919062000207565b50565b600181811c908216806200027557607f821691505b602082108114156200029757634e487b7160e01b600052602260045260246000fd5b50919050565b610a5180620002ad6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806329d1eae0146100675780635b4ea304146100b6578063715018a6146100cb5780638da5cb5b146100d3578063c54f63f9146100ee578063f2fde38b14610101575b600080fd5b6100a36100753660046105fd565b6003602090815260009283526040909220815180830184018051928152908401929093019190912091525481565b6040519081526020015b60405180910390f35b6100c96100c43660046105c4565b610114565b005b6100c9610175565b6000546040516001600160a01b0390911681526020016100ad565b6100c96100fc36600461064d565b6101ab565b6100c961010f3660046105a0565b61045f565b6000546001600160a01b031633146101475760405162461bcd60e51b815260040161013e9061090c565b60405180910390fd5b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000546001600160a01b0316331461019f5760405162461bcd60e51b815260040161013e9061090c565b6101a960006104fa565b565b60015460405163fe551b0560e01b81526000916001600160a01b03169063fe551b05906101dc9086906004016108cf565b60006040518083038186803b1580156101f457600080fd5b505afa158015610208573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610230919081019061074d565b5060405163112469f960e21b81526001600160a01b0387811660048301529193509083169150634491a7e49060240160206040518083038186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af91906107e4565b82516001600160a01b0386166000908152600360205260409081902090516102d8908790610829565b9081526020016040518091039020546102f1919061099a565b11156103365760405162461bcd60e51b8152602060048201526014602482015273596f7520616c7265616479206d6967726174652160601b604482015260640161013e565b600254604051630e3718c160e01b81526001600160a01b0390911690630e3718c19061036c908590879089904290600401610845565b600060405180830381600087803b15801561038657600080fd5b505af115801561039a573d6000803e3d6000fd5b505060015460405163f011d4dd60e01b81526001600160a01b03909116925063f011d4dd91506103d090869088906004016108e2565b600060405180830381600087803b1580156103ea57600080fd5b505af11580156103fe573d6000803e3d6000fd5b50505050815160036000866001600160a01b03166001600160a01b03168152602001908152602001600020846040516104379190610829565b90815260200160405180910390206000828254610454919061099a565b909155505050505050565b6000546001600160a01b031633146104895760405162461bcd60e51b815260040161013e9061090c565b6001600160a01b0381166104ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161013e565b6104f7816104fa565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f83011261055b57600080fd5b813561056e61056982610972565b610941565b81815284602083860101111561058357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156105b257600080fd5b81356105bd81610a06565b9392505050565b600080604083850312156105d757600080fd5b82356105e281610a06565b915060208301356105f281610a06565b809150509250929050565b6000806040838503121561061057600080fd5b823561061b81610a06565b9150602083013567ffffffffffffffff81111561063757600080fd5b6106438582860161054a565b9150509250929050565b60008060006060848603121561066257600080fd5b833561066d81610a06565b925060208481013567ffffffffffffffff8082111561068b57600080fd5b6106978883890161054a565b945060408701359150808211156106ad57600080fd5b818701915087601f8301126106c157600080fd5b8135818111156106d3576106d36109f0565b8060051b6106e2858201610941565b8281528581019085870183870188018d10156106fd57600080fd5b60009350835b8581101561073a57813587811115610719578586fd5b6107278f8b838c010161054a565b8552509288019290880190600101610703565b5050809750505050505050509250925092565b60008060006060848603121561076257600080fd5b835167ffffffffffffffff81111561077957600080fd5b8401601f8101861361078a57600080fd5b805161079861056982610972565b8181528760208385010111156107ad57600080fd5b6107be8260208301602086016109c0565b80955050505060208401516107d281610a06565b80925050604084015190509250925092565b6000602082840312156107f657600080fd5b5051919050565b600081518084526108158160208601602086016109c0565b601f01601f19169290920160200192915050565b6000825161083b8184602087016109c0565b9190910192915050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b8381101561089c57609f1988870301855261088a8683516107fd565b9550938201939082019060010161086e565b5050858403818701525050506108b281876107fd565b6001600160a01b0395909516604084015250506060015292915050565b6020815260006105bd60208301846107fd565b6040815260006108f560408301856107fd565b905060018060a01b03831660208301529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561096a5761096a6109f0565b604052919050565b600067ffffffffffffffff82111561098c5761098c6109f0565b50601f01601f191660200190565b600082198211156109bb57634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156109db5781810151838201526020016109c3565b838111156109ea576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfea2646970667358221220f499542b887daa9122860ce802fa3f61ae946deabba236c3b6ab3beac1651d9b64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100625760003560e01c806329d1eae0146100675780635b4ea304146100b6578063715018a6146100cb5780638da5cb5b146100d3578063c54f63f9146100ee578063f2fde38b14610101575b600080fd5b6100a36100753660046105fd565b6003602090815260009283526040909220815180830184018051928152908401929093019190912091525481565b6040519081526020015b60405180910390f35b6100c96100c43660046105c4565b610114565b005b6100c9610175565b6000546040516001600160a01b0390911681526020016100ad565b6100c96100fc36600461064d565b6101ab565b6100c961010f3660046105a0565b61045f565b6000546001600160a01b031633146101475760405162461bcd60e51b815260040161013e9061090c565b60405180910390fd5b600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b6000546001600160a01b0316331461019f5760405162461bcd60e51b815260040161013e9061090c565b6101a960006104fa565b565b60015460405163fe551b0560e01b81526000916001600160a01b03169063fe551b05906101dc9086906004016108cf565b60006040518083038186803b1580156101f457600080fd5b505afa158015610208573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610230919081019061074d565b5060405163112469f960e21b81526001600160a01b0387811660048301529193509083169150634491a7e49060240160206040518083038186803b15801561027757600080fd5b505afa15801561028b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102af91906107e4565b82516001600160a01b0386166000908152600360205260409081902090516102d8908790610829565b9081526020016040518091039020546102f1919061099a565b11156103365760405162461bcd60e51b8152602060048201526014602482015273596f7520616c7265616479206d6967726174652160601b604482015260640161013e565b600254604051630e3718c160e01b81526001600160a01b0390911690630e3718c19061036c908590879089904290600401610845565b600060405180830381600087803b15801561038657600080fd5b505af115801561039a573d6000803e3d6000fd5b505060015460405163f011d4dd60e01b81526001600160a01b03909116925063f011d4dd91506103d090869088906004016108e2565b600060405180830381600087803b1580156103ea57600080fd5b505af11580156103fe573d6000803e3d6000fd5b50505050815160036000866001600160a01b03166001600160a01b03168152602001908152602001600020846040516104379190610829565b90815260200160405180910390206000828254610454919061099a565b909155505050505050565b6000546001600160a01b031633146104895760405162461bcd60e51b815260040161013e9061090c565b6001600160a01b0381166104ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161013e565b6104f7816104fa565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f83011261055b57600080fd5b813561056e61056982610972565b610941565b81815284602083860101111561058357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156105b257600080fd5b81356105bd81610a06565b9392505050565b600080604083850312156105d757600080fd5b82356105e281610a06565b915060208301356105f281610a06565b809150509250929050565b6000806040838503121561061057600080fd5b823561061b81610a06565b9150602083013567ffffffffffffffff81111561063757600080fd5b6106438582860161054a565b9150509250929050565b60008060006060848603121561066257600080fd5b833561066d81610a06565b925060208481013567ffffffffffffffff8082111561068b57600080fd5b6106978883890161054a565b945060408701359150808211156106ad57600080fd5b818701915087601f8301126106c157600080fd5b8135818111156106d3576106d36109f0565b8060051b6106e2858201610941565b8281528581019085870183870188018d10156106fd57600080fd5b60009350835b8581101561073a57813587811115610719578586fd5b6107278f8b838c010161054a565b8552509288019290880190600101610703565b5050809750505050505050509250925092565b60008060006060848603121561076257600080fd5b835167ffffffffffffffff81111561077957600080fd5b8401601f8101861361078a57600080fd5b805161079861056982610972565b8181528760208385010111156107ad57600080fd5b6107be8260208301602086016109c0565b80955050505060208401516107d281610a06565b80925050604084015190509250925092565b6000602082840312156107f657600080fd5b5051919050565b600081518084526108158160208601602086016109c0565b601f01601f19169290920160200192915050565b6000825161083b8184602087016109c0565b9190910192915050565b6000608082016080835280875180835260a08501915060a08160051b86010192506020808a0160005b8381101561089c57609f1988870301855261088a8683516107fd565b9550938201939082019060010161086e565b5050858403818701525050506108b281876107fd565b6001600160a01b0395909516604084015250506060015292915050565b6020815260006105bd60208301846107fd565b6040815260006108f560408301856107fd565b905060018060a01b03831660208301529392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561096a5761096a6109f0565b604052919050565b600067ffffffffffffffff82111561098c5761098c6109f0565b50601f01601f191660200190565b600082198211156109bb57634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156109db5781810151838201526020016109c3565b838111156109ea576000848401525b50505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146104f757600080fdfea2646970667358221220f499542b887daa9122860ce802fa3f61ae946deabba236c3b6ab3beac1651d9b64736f6c63430008070033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.