GLMR Price: $0.020839 (-1.16%)

Contract

0x878729D5bbD9637eEEb57815e827cFdcc93D5BB2

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo0 GLMR

GLMR Value

$0.00

More Info

Private Name Tags

Transaction Hash
Block
From
To
Transfer Ownersh...29389852023-02-13 8:22:361077 days ago1676276556IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.00288819101
Initial Skills A...28495322023-01-31 16:49:121090 days ago1675183752IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02512808102.5
Initial Skills A...28495302023-01-31 16:48:481090 days ago1675183728IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02970327102.5
Initial Skills A...28495282023-01-31 16:48:241090 days ago1675183704IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02511824102.5
Initial Skills A...28495262023-01-31 16:48:001090 days ago1675183680IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02512439102.5
Initial Skills A...28495242023-01-31 16:47:301090 days ago1675183650IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02510963102.5
Initial Skills A...28495222023-01-31 16:47:001090 days ago1675183620IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.025133102.5
Initial Skills A...28495202023-01-31 16:46:361090 days ago1675183596IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.02511578102.5
Initial Skills A...28494192023-01-31 16:26:121090 days ago1675182372IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22814214102.5
Initial Skills A...28494172023-01-31 16:25:481090 days ago1675182348IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22801176102.5
Initial Skills A...28494152023-01-31 16:25:241090 days ago1675182324IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22812861102.5
Initial Skills A...28494132023-01-31 16:24:541090 days ago1675182294IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.23262385102.5
Initial Skills A...28494112023-01-31 16:24:301090 days ago1675182270IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.24178653102.5
Initial Skills A...28494092023-01-31 16:24:061090 days ago1675182246IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.23267797102.5
Initial Skills A...28494072023-01-31 16:23:421090 days ago1675182222IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.23273578102.5
Initial Skills A...28494052023-01-31 16:23:181090 days ago1675182198IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22809417102.5
Initial Skills A...28494032023-01-31 16:22:541090 days ago1675182174IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22800315102.5
Initial Skills A...28494012023-01-31 16:22:301090 days ago1675182150IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.23267182102.5
Initial Skills A...28493992023-01-31 16:22:061090 days ago1675182126IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22811262102.5
Initial Skills A...28493972023-01-31 16:21:421090 days ago1675182102IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22806711102.5
Initial Skills A...28493952023-01-31 16:21:181090 days ago1675182078IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22809417102.5
Initial Skills A...28493932023-01-31 16:20:481090 days ago1675182048IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22808187102.5
Initial Skills A...28493912023-01-31 16:20:241090 days ago1675182024IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.23270626102.5
Initial Skills A...28493892023-01-31 16:20:001090 days ago1675182000IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22805604102.5
Initial Skills A...28493872023-01-31 16:19:241090 days ago1675181964IN
Damned Pirates Society: Pirate Features V1
0 GLMR0.22807326102.5
View all transactions

View more zero value Internal Transactions in Advanced View mode

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DPSPirateFeatures

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract DPSPirateFeatures is Ownable {
    string[] private traitsNames;
    string[] private skillsNames;

    mapping(uint16 => string[8]) traitsPerPirate;
    mapping(uint16 => uint16[3]) skillsPerPirate;

    constructor() {
        traitsNames = ["Uniform", "Hat", "Peg Leg", "Feathers", "Eyes", "Earring", "Beak", "Background"];
        skillsNames = ["Luck", "Navigation", "Strength"];
    }

    /**
     * @dev initialize in batches
     */
    function initialSkillsAndTraitsBatch(
        uint16[] calldata _dpsIds,
        string[][] calldata _traits,
        uint16[][] calldata _skills
    ) external onlyOwner {
        unchecked {
            uint256 len = _dpsIds.length;
            for (uint256 i = 0; i < len; ) {
                initialSkillsAndTraits(_dpsIds[i], _traits[i], _skills[i]);
                ++i;
            }
        }
    }

    function initialSkillsAndTraits(uint16 _dpsId, string[] calldata _traits, uint16[] calldata _skills) internal {
        string[8] memory traits;
        traits[0] = _traits[0];
        traits[1] = _traits[1];
        traits[2] = _traits[2];
        traits[3] = _traits[3];
        traits[4] = _traits[4];
        traits[5] = _traits[5];
        traits[6] = _traits[6];
        traits[7] = _traits[7];

        uint16[3] memory skills;
        skills[0] = _skills[0];
        skills[1] = _skills[1];
        skills[2] = _skills[2];
        traitsPerPirate[_dpsId] = traits;
        skillsPerPirate[_dpsId] = skills;
    }

    function getTraitsAndSkills(uint16 _dpsId) external view returns (string[8] memory, uint16[3] memory) {
        return (traitsPerPirate[_dpsId], skillsPerPirate[_dpsId]);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
     * consuming from one or the other at each step according to the instructions given by
     * `proofFlags`.
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// 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
{
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint16","name":"_dpsId","type":"uint16"}],"name":"getTraitsAndSkills","outputs":[{"internalType":"string[8]","name":"","type":"string[8]"},{"internalType":"uint16[3]","name":"","type":"uint16[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_dpsIds","type":"uint16[]"},{"internalType":"string[][]","name":"_traits","type":"string[][]"},{"internalType":"uint16[][]","name":"_skills","type":"uint16[][]"}],"name":"initialSkillsAndTraitsBatch","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506200001d33620001ee565b60405180610100016040528060405180604001604052806007815260200166556e69666f726d60c81b81525081526020016040518060400160405280600381526020016212185d60ea1b815250815260200160405180604001604052806007815260200166506567204c656760c81b815250815260200160405180604001604052806008815260200167466561746865727360c01b8152508152602001604051806040016040528060048152602001634579657360e01b81525081526020016040518060400160405280600781526020016645617272696e6760c81b8152508152602001604051806040016040528060048152602001634265616b60e01b81525081526020016040518060400160405280600a815260200169109858dad9dc9bdd5b9960b21b81525081525060019060086200015b9291906200023e565b506040518060600160405280604051806040016040528060048152602001634c75636b60e01b81525081526020016040518060400160405280600a8152602001692730bb34b3b0ba34b7b760b11b8152508152602001604051806040016040528060088152602001670a6e8e4cadccee8d60c31b8152508152506002906003620001e79291906200029b565b50620004d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821562000289579160200282015b8281111562000289578251829062000278908262000405565b50916020019190600101906200025f565b5062000297929150620002e6565b5090565b82805482825590600052602060002090810192821562000289579160200282015b82811115620002895782518290620002d5908262000405565b5091602001919060010190620002bc565b8082111562000297576000620002fd828262000307565b50600101620002e6565b508054620003159062000376565b6000825580601f1062000326575050565b601f01602090049060005260206000209081019062000346919062000349565b50565b5b808211156200029757600081556001016200034a565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200038b57607f821691505b602082108103620003ac57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200040057600081815260208120601f850160051c81016020861015620003db5750805b601f850160051c820191505b81811015620003fc57828155600101620003e7565b5050505b505050565b81516001600160401b0381111562000421576200042162000360565b620004398162000432845462000376565b84620003b2565b602080601f831160018114620004715760008415620004585750858301515b600019600386901b1c1916600185901b178555620003fc565b600085815260208120601f198616915b82811015620004a25788860151825594840194600190910190840162000481565b5085821015620004c15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610dac80620004e16000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063340a71c81461005c578063715018a6146100865780638da5cb5b146100905780639bb7cd93146100ab578063f2fde38b146100be575b600080fd5b61006f61006a3660046109a5565b6100d1565b60405161007d9291906109fd565b60405180910390f35b61008e61021a565b005b6000546040516001600160a01b03909116815260200161007d565b61008e6100b9366004610ad6565b61022e565b61008e6100cc366004610b70565b6102cb565b6100d9610818565b6100e1610840565b61ffff8316600090815260036020908152604080832060049092528083208151610100810190925291928390600890835b828210156101b557838201805461012890610b99565b80601f016020809104026020016040519081016040528092919081815260200182805461015490610b99565b80156101a15780601f10610176576101008083540402835291602001916101a1565b820191906000526020600020905b81548152906001019060200180831161018457829003601f168201915b505050505081526020019060010190610112565b505060408051606081019182905293955084925060039150826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116101d25790505050505050905091509150915091565b610222610349565b61022c60006103a3565b565b610236610349565b8460005b818110156102c1576102b988888381811061025757610257610bd3565b905060200201602081019061026c91906109a5565b87878481811061027e5761027e610bd3565b90506020028101906102909190610be9565b8787868181106102a2576102a2610bd3565b90506020028101906102b49190610be9565b6103f3565b60010161023a565b5050505050505050565b6102d3610349565b6001600160a01b03811661033d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610346816103a3565b50565b6000546001600160a01b0316331461022c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610334565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103fb610818565b8484600081811061040e5761040e610bd3565b90506020028101906104209190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250859350915061045c9050565b60200201528484600181811061047457610474610bd3565b90506020028101906104869190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600191506104c59050565b6020020152848460028181106104dd576104dd610bd3565b90506020028101906104ef9190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508492506002915061052e9050565b60200201528484600381811061054657610546610bd3565b90506020028101906105589190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600391506105979050565b6020020152848460048181106105af576105af610bd3565b90506020028101906105c19190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600491506106009050565b60200201528484600581811061061857610618610bd3565b905060200281019061062a9190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600591506106699050565b60200201528484600681811061068157610681610bd3565b90506020028101906106939190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600691506106d29050565b6020020152848460078181106106ea576106ea610bd3565b90506020028101906106fc9190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508492506007915061073b9050565b6020020152610748610840565b8383600081811061075b5761075b610bd3565b905060200201602081019061077091906109a5565b61ffff1681528383600181811061078957610789610bd3565b905060200201602081019061079e91906109a5565b61ffff166020820152838360028181106107ba576107ba610bd3565b90506020020160208101906107cf91906109a5565b61ffff90811660408084019190915290881660009081526003602052206107f89083600861085e565b5061ffff871660009081526004602052604090206102c1908260036108a7565b6040518061010001604052806008905b60608152602001906001900390816108285790505090565b60405180606001604052806003906020820280368337509192915050565b8260088101928215610897579160200282015b8281111561089757825182906108879082610cdf565b5091602001919060010190610871565b506108a3929150610939565b5090565b60018301918390821561092d5791602002820160005b838211156108fd57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026108bd565b801561092b5782816101000a81549061ffff02191690556002016020816001010492830192600103026108fd565b505b506108a3929150610956565b808211156108a357600061094d828261096b565b50600101610939565b5b808211156108a35760008155600101610957565b50805461097790610b99565b6000825580601f10610987575050565b601f0160209004906000526020600020908101906103469190610956565b6000602082840312156109b757600080fd5b813561ffff811681146109c957600080fd5b9392505050565b8060005b60038110156109f757815161ffff168452602093840193909101906001016109d4565b50505050565b608080825260009061018083019083018583805b6008811015610a7557868503607f1901845282518051808752835b81811015610a4857602081840181015189830182015201610a2c565b508681016020908101859052601f909101601f191690960186019594850194939093019250600101610a11565b50505050809150506109c960208301846109d0565b60008083601f840112610a9c57600080fd5b50813567ffffffffffffffff811115610ab457600080fd5b6020830191508360208260051b8501011115610acf57600080fd5b9250929050565b60008060008060008060608789031215610aef57600080fd5b863567ffffffffffffffff80821115610b0757600080fd5b610b138a838b01610a8a565b90985096506020890135915080821115610b2c57600080fd5b610b388a838b01610a8a565b90965094506040890135915080821115610b5157600080fd5b50610b5e89828a01610a8a565b979a9699509497509295939492505050565b600060208284031215610b8257600080fd5b81356001600160a01b03811681146109c957600080fd5b600181811c90821680610bad57607f821691505b602082108103610bcd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c0057600080fd5b83018035915067ffffffffffffffff821115610c1b57600080fd5b6020019150600581901b3603821315610acf57600080fd5b6000808335601e19843603018112610c4a57600080fd5b83018035915067ffffffffffffffff821115610c6557600080fd5b602001915036819003821315610acf57600080fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610cda57600081815260208120601f850160051c81016020861015610cb75750805b601f850160051c820191505b81811015610cd657828155600101610cc3565b5050505b505050565b815167ffffffffffffffff811115610cf957610cf9610c7a565b610d0d81610d078454610b99565b84610c90565b602080601f831160018114610d425760008415610d2a5750858301515b600019600386901b1c1916600185901b178555610cd6565b600085815260208120601f198616915b82811015610d7157888601518255948401946001909101908401610d52565b5085821015610d8f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000811000a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063340a71c81461005c578063715018a6146100865780638da5cb5b146100905780639bb7cd93146100ab578063f2fde38b146100be575b600080fd5b61006f61006a3660046109a5565b6100d1565b60405161007d9291906109fd565b60405180910390f35b61008e61021a565b005b6000546040516001600160a01b03909116815260200161007d565b61008e6100b9366004610ad6565b61022e565b61008e6100cc366004610b70565b6102cb565b6100d9610818565b6100e1610840565b61ffff8316600090815260036020908152604080832060049092528083208151610100810190925291928390600890835b828210156101b557838201805461012890610b99565b80601f016020809104026020016040519081016040528092919081815260200182805461015490610b99565b80156101a15780601f10610176576101008083540402835291602001916101a1565b820191906000526020600020905b81548152906001019060200180831161018457829003601f168201915b505050505081526020019060010190610112565b505060408051606081019182905293955084925060039150826000855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116101d25790505050505050905091509150915091565b610222610349565b61022c60006103a3565b565b610236610349565b8460005b818110156102c1576102b988888381811061025757610257610bd3565b905060200201602081019061026c91906109a5565b87878481811061027e5761027e610bd3565b90506020028101906102909190610be9565b8787868181106102a2576102a2610bd3565b90506020028101906102b49190610be9565b6103f3565b60010161023a565b5050505050505050565b6102d3610349565b6001600160a01b03811661033d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610346816103a3565b50565b6000546001600160a01b0316331461022c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610334565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103fb610818565b8484600081811061040e5761040e610bd3565b90506020028101906104209190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250859350915061045c9050565b60200201528484600181811061047457610474610bd3565b90506020028101906104869190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600191506104c59050565b6020020152848460028181106104dd576104dd610bd3565b90506020028101906104ef9190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508492506002915061052e9050565b60200201528484600381811061054657610546610bd3565b90506020028101906105589190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600391506105979050565b6020020152848460048181106105af576105af610bd3565b90506020028101906105c19190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600491506106009050565b60200201528484600581811061061857610618610bd3565b905060200281019061062a9190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600591506106699050565b60200201528484600681811061068157610681610bd3565b90506020028101906106939190610c33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250849250600691506106d29050565b6020020152848460078181106106ea576106ea610bd3565b90506020028101906106fc9190610c33565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508492506007915061073b9050565b6020020152610748610840565b8383600081811061075b5761075b610bd3565b905060200201602081019061077091906109a5565b61ffff1681528383600181811061078957610789610bd3565b905060200201602081019061079e91906109a5565b61ffff166020820152838360028181106107ba576107ba610bd3565b90506020020160208101906107cf91906109a5565b61ffff90811660408084019190915290881660009081526003602052206107f89083600861085e565b5061ffff871660009081526004602052604090206102c1908260036108a7565b6040518061010001604052806008905b60608152602001906001900390816108285790505090565b60405180606001604052806003906020820280368337509192915050565b8260088101928215610897579160200282015b8281111561089757825182906108879082610cdf565b5091602001919060010190610871565b506108a3929150610939565b5090565b60018301918390821561092d5791602002820160005b838211156108fd57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026108bd565b801561092b5782816101000a81549061ffff02191690556002016020816001010492830192600103026108fd565b505b506108a3929150610956565b808211156108a357600061094d828261096b565b50600101610939565b5b808211156108a35760008155600101610957565b50805461097790610b99565b6000825580601f10610987575050565b601f0160209004906000526020600020908101906103469190610956565b6000602082840312156109b757600080fd5b813561ffff811681146109c957600080fd5b9392505050565b8060005b60038110156109f757815161ffff168452602093840193909101906001016109d4565b50505050565b608080825260009061018083019083018583805b6008811015610a7557868503607f1901845282518051808752835b81811015610a4857602081840181015189830182015201610a2c565b508681016020908101859052601f909101601f191690960186019594850194939093019250600101610a11565b50505050809150506109c960208301846109d0565b60008083601f840112610a9c57600080fd5b50813567ffffffffffffffff811115610ab457600080fd5b6020830191508360208260051b8501011115610acf57600080fd5b9250929050565b60008060008060008060608789031215610aef57600080fd5b863567ffffffffffffffff80821115610b0757600080fd5b610b138a838b01610a8a565b90985096506020890135915080821115610b2c57600080fd5b610b388a838b01610a8a565b90965094506040890135915080821115610b5157600080fd5b50610b5e89828a01610a8a565b979a9699509497509295939492505050565b600060208284031215610b8257600080fd5b81356001600160a01b03811681146109c957600080fd5b600181811c90821680610bad57607f821691505b602082108103610bcd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112610c0057600080fd5b83018035915067ffffffffffffffff821115610c1b57600080fd5b6020019150600581901b3603821315610acf57600080fd5b6000808335601e19843603018112610c4a57600080fd5b83018035915067ffffffffffffffff821115610c6557600080fd5b602001915036819003821315610acf57600080fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610cda57600081815260208120601f850160051c81016020861015610cb75750805b601f850160051c820191505b81811015610cd657828155600101610cc3565b5050505b505050565b815167ffffffffffffffff811115610cf957610cf9610c7a565b610d0d81610d078454610b99565b84610c90565b602080601f831160018114610d425760008415610d2a5750858301515b600019600386901b1c1916600185901b178555610cd6565b600085815260208120601f198616915b82811015610d7157888601518255948401946001909101908401610d52565b5085821015610d8f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000811000a

Block Transaction Gas Used Reward
view all blocks collator

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

OVERVIEW

On-chain Features.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.