Contract 0xD9d2bA613068f17A70880Ef63F048d94550B1742

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc253fb68a8cca9995a7bca5c58428cc21e206e4f1d2b88b6089b734023794b5cInitial Skills A...244554702022-01-31 15:59:25151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.000678260002 2.500000009
0xd615aecc6c84d92ceadbdd7e0f79adf4e7b70273f02dfdde8b72ba80a107b0aaInitial Skills A...244554582022-01-31 15:59:01151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030854837623 2.50000001
0x522bdb8621958a367d4d50f5799819faaaf8531c9be32730628971dcf3f10b4fInitial Skills A...244554542022-01-31 15:58:53151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030979462636 2.500000011
0x45b19d5048b7bbd6118fb3b86b573f8817a3b7184da49b68b6d02aafec3f0c71Initial Skills A...244554512022-01-31 15:58:47151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030663455147 2.500000012
0x06e4524c9a09897fc7c6ee8157517637dfcf000cd32e0671fd60714db38c82d6Initial Skills A...244554472022-01-31 15:58:39151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030883102672 2.500000014
0x0664ef464ad6487aaabdc0e1d1f9ffb15778785f157cd961584e36febfb5db33Initial Skills A...244554442022-01-31 15:58:33151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030529430183 2.500000015
0x7b3fc77dc2ff40763d49ed101c501031feda550d4519a3239ac3ae9cf0294057Initial Skills A...244554402022-01-31 15:58:25151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030974575198 2.500000016
0x6947785d888cc182ca594cc04f9f1f5053fe30188e52d1a1fd29b0a2c6cf2122Initial Skills A...244554362022-01-31 15:58:17151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030846042734 2.500000019
0xbe1ca9ba00ff18602b1d0a9956c2527ebbc258ce563d794dde26c1847b31fafaInitial Skills A...244554322022-01-31 15:58:09151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.03075127277 2.500000022
0x7cd71d16f6ab199414164a99b2202da7771bb56c3d2525287d5e27a514eb82eaInitial Skills A...244554292022-01-31 15:58:03151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030970017797 2.500000024
0x8fdc97451c1b1347a0326186015e5050ff5d1f8b64edff7a14bb8095badffdd3Initial Skills A...244554242022-01-31 15:57:53151 days 15 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030763167856 2.500000029
0x6dfa8e9b222955e06129c6d1ebfce6eec1f0fe2caa7129691c5d8e102c654716Initial Skills A...244554222022-01-31 15:57:43151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030503062841 2.500000028
0x9ccb36df8fb2bf6bc1c31c169428cf72f17915653d25e615a12e6f223e71b50cInitial Skills A...244554202022-01-31 15:57:35151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030760282832 2.500000027
0x52dc4b7e0c01e90e7279236646257aebd870531d1150fc1b75c8ad02fe51fd53Initial Skills A...244554192022-01-31 15:57:31151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.03077123532 2.500000026
0xeec12f0598d5b108ee86bd115b717a61ec7ffbef56bb58464519b40d0ce835f4Initial Skills A...244554172022-01-31 15:57:23151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030765652807 2.500000025
0x8434d9e363850550cb2bbcd442f1edc1d35f2a3b512e49c9061a0ec7a5a9f596Initial Skills A...244554152022-01-31 15:57:15151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030758905307 2.500000025
0xa5ce57d34c1e42627e2879956ec0619e68421c67481000a476eea5b6fca4650bInitial Skills A...244554132022-01-31 15:57:07151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030749035307 2.500000025
0x770a7a91794fc10286e8eba7a79f505f273e27d71645e02cfd7cb61051624e12Initial Skills A...244554112022-01-31 15:56:59151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030754002807 2.500000025
0xfeac31f75b9ca5a611c04598f9b83bbf1b243a7e790897cf6d732d49f8a9d9fdInitial Skills A...244554092022-01-31 15:56:51151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030625907794 2.500000024
0x214fce555f2f13874f31b6bfa3b636bebaa414824b26b4ee7ff8c85acf29c8d5Initial Skills A...244554082022-01-31 15:56:47151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030871532784 2.500000023
0x14f2f234ac2ec1d367e078bc3d88e419e303870fd1a9b501605560c97443ab59Initial Skills A...244554062022-01-31 15:56:39151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030861287783 2.500000023
0x3db1b26272afa67e45efad765b349f520d8b46719cab611b932920a6dc1a843cInitial Skills A...244554042022-01-31 15:56:31151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030757247758 2.500000021
0x06867eea04f1a3c5669fd817a18b610a7139e3b1e6af9156cb38fd7052028400Initial Skills A...244554022022-01-31 15:56:23151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030529632744 2.50000002
0x6b489dcf6e03890486b08082e57ccd96cc82b5a764e41c1f41ba7502496da65cInitial Skills A...244554012022-01-31 15:56:19151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.03064199772 2.500000018
0x1fe2075dad04d4e8a075bd9e19d9f3382d532679cc258561db5fde13909cb805Initial Skills A...244553992022-01-31 15:56:11151 days 16 hrs ago0x9f4a55be4e15261756b90a8cd8bce2e4a396381b IN  0xd9d2ba613068f17a70880ef63f048d94550b17420 MATIC0.030751040221 2.500000018
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DPSPirateFeatures

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : DPSPirateFeatures.sol
//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 {
    bytes32 public merkleRoot;
    string public merkleLink;

    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(
        bytes32[] calldata _leafs,
        bytes32[][] calldata _merkleProofs,
        uint16[] calldata _dpsIds,
        string[][] calldata _traits,
        uint16[][] calldata _skills
    ) external onlyOwner {
        for (uint256 i = 0; i < _leafs.length; i++) {
            initialSkillsAndTraits(
                _leafs[i],
                _merkleProofs[i],
                _dpsIds[i],
                _traits[i],
                _skills[i]
            );
        }
    }

    function initialSkillsAndTraits(
        bytes32 _leaf,
        bytes32[] calldata _merkleProof,
        uint16 _dpsId,
        string[] calldata _traits,
        uint16[] calldata _skills
    ) internal {
        string memory concatenatedTraits = string(
            abi.encodePacked(
                string(
                    abi.encodePacked(
                        _traits[0],
                        _traits[1],
                        _traits[2],
                        _traits[3],
                        _traits[4]
                    )
                ),
                _traits[5],
                _traits[6],
                _traits[7]
            )
        );

        string memory concatenatedSkills = string(
            abi.encodePacked(
                Strings.toString(_skills[0]),
                Strings.toString(_skills[1]),
                Strings.toString(_skills[2])
            )
        );
        bytes32 node = keccak256(
            abi.encodePacked(_dpsId, concatenatedTraits, concatenatedSkills)
        );

        require(node == _leaf, "Leaf not matching the node");
        require(
            MerkleProof.verify(_merkleProof, merkleRoot, _leaf),
            "Invalid proof."
        );

        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]);
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setMerkleTreeLink(string calldata _link) external onlyOwner {
        merkleLink = _link;
    }
}

File 2 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.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 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 5 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees 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.
 */
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 Returns the rebuilt hash obtained by traversing a Merklee 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++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

File 4 of 5 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    /**
     * @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);
    }
}

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"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":"bytes32[]","name":"_leafs","type":"bytes32[]"},{"internalType":"bytes32[][]","name":"_merkleProofs","type":"bytes32[][]"},{"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":"merkleLink","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_link","type":"string"}],"name":"setMerkleTreeLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506200001d33620001ee565b60405180610100016040528060405180604001604052806007815260200166556e69666f726d60c81b81525081526020016040518060400160405280600381526020016212185d60ea1b815250815260200160405180604001604052806007815260200166506567204c656760c81b815250815260200160405180604001604052806008815260200167466561746865727360c01b8152508152602001604051806040016040528060048152602001634579657360e01b81525081526020016040518060400160405280600781526020016645617272696e6760c81b8152508152602001604051806040016040528060048152602001634265616b60e01b81525081526020016040518060400160405280600a815260200169109858dad9dc9bdd5b9960b21b81525081525060039060086200015b9291906200023e565b506040518060600160405280604051806040016040528060048152602001634c75636b60e01b81525081526020016040518060400160405280600a8152602001692730bb34b3b0ba34b7b760b11b8152508152602001604051806040016040528060088152602001670a6e8e4cadccee8d60c31b8152508152506004906003620001e7929190620002a2565b5062000436565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805482825590600052602060002090810192821562000290579160200282015b828111156200029057825180516200027f918491602090910190620002f4565b50916020019190600101906200025f565b506200029e9291506200037f565b5090565b82805482825590600052602060002090810192821562000290579160200282015b82811115620002905782518051620002e3918491602090910190620002f4565b5091602001919060010190620002c3565b8280546200030290620003f9565b90600052602060002090601f01602090048101928262000326576000855562000371565b82601f106200034157805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037157825182559160200191906001019062000354565b506200029e929150620003a0565b808211156200029e576000620003968282620003b7565b506001016200037f565b5b808211156200029e5760008155600101620003a1565b508054620003c590620003f9565b6000825580601f10620003d6575050565b601f016020900490600052602060002090810190620003f69190620003a0565b50565b600181811c908216806200040e57607f821691505b602082108114156200043057634e487b7160e01b600052602260045260246000fd5b50919050565b61174580620004466000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a6146100ff57806371bd680f146101075780637cb647591461011a5780638da5cb5b1461012d578063f2fde38b1461014857600080fd5b80632eb4a7ab14610098578063340a71c8146100b45780633b4401e6146100d557806342396938146100ea575b600080fd5b6100a160015481565b6040519081526020015b60405180910390f35b6100c76100c2366004611148565b61015b565b6040516100ab9291906111cf565b6100e86100e3366004611250565b6102a4565b005b6100f26102e8565b6040516100ab91906112c2565b6100e8610376565b6100e8610115366004611321565b6103ac565b6100e8610128366004611412565b6104b4565b6000546040516001600160a01b0390911681526020016100ab565b6100e861015636600461142b565b6104e3565b610163610ec5565b61016b610eed565b61ffff8316600090815260056020908152604080832060069092528083208151610100810190925291928390600890835b8282101561023f5783820180546101b290611454565b80601f01602080910402602001604051908101604052809291908181526020018280546101de90611454565b801561022b5780601f106102005761010080835404028352916020019161022b565b820191906000526020600020905b81548152906001019060200180831161020e57829003601f168201915b50505050508152602001906001019061019c565b505060408051606081019182905293955084925060039150826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161025c5790505050505050905091509150915091565b6000546001600160a01b031633146102d75760405162461bcd60e51b81526004016102ce9061148f565b60405180910390fd5b6102e360028383610f0b565b505050565b600280546102f590611454565b80601f016020809104026020016040519081016040528092919081815260200182805461032190611454565b801561036e5780601f106103435761010080835404028352916020019161036e565b820191906000526020600020905b81548152906001019060200180831161035157829003601f168201915b505050505081565b6000546001600160a01b031633146103a05760405162461bcd60e51b81526004016102ce9061148f565b6103aa600061057e565b565b6000546001600160a01b031633146103d65760405162461bcd60e51b81526004016102ce9061148f565b60005b898110156104a7576104958b8b838181106103f6576103f66114c4565b905060200201358a8a8481811061040f5761040f6114c4565b905060200281019061042191906114da565b8a8a86818110610433576104336114c4565b90506020020160208101906104489190611148565b89898781811061045a5761045a6114c4565b905060200281019061046c91906114da565b89898981811061047e5761047e6114c4565b905060200281019061049091906114da565b6105ce565b8061049f8161153a565b9150506103d9565b5050505050505050505050565b6000546001600160a01b031633146104de5760405162461bcd60e51b81526004016102ce9061148f565b600155565b6000546001600160a01b0316331461050d5760405162461bcd60e51b81526004016102ce9061148f565b6001600160a01b0381166105725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ce565b61057b8161057e565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000848460008181106105e3576105e36114c4565b90506020028101906105f59190611555565b86866001818110610608576106086114c4565b905060200281019061061a9190611555565b8888600281811061062d5761062d6114c4565b905060200281019061063f9190611555565b8a8a6003818110610652576106526114c4565b90506020028101906106649190611555565b8c8c6004818110610677576106776114c4565b90506020028101906106899190611555565b6040516020016106a29a9998979695949392919061159c565b604051602081830303815290604052858560058181106106c4576106c46114c4565b90506020028101906106d69190611555565b878760068181106106e9576106e96114c4565b90506020028101906106fb9190611555565b8989600781811061070e5761070e6114c4565b90506020028101906107209190611555565b60405160200161073697969594939291906115e8565b6040516020818303038152906040529050600061077d8484600081811061075f5761075f6114c4565b90506020020160208101906107749190611148565b61ffff16610cfd565b6107938585600181811061075f5761075f6114c4565b6107a98686600281811061075f5761075f6114c4565b6040516020016107bb9392919061162c565b604051602081830303815290604052905060008783836040516020016107e39392919061166f565b6040516020818303038152906040528051906020012090508a811461084a5760405162461bcd60e51b815260206004820152601a60248201527f4c656166206e6f74206d61746368696e6720746865206e6f646500000000000060448201526064016102ce565b61088b8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060015491508e9050610e03565b6108c85760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016102ce565b6108d0610ec5565b878760008181106108e3576108e36114c4565b90506020028101906108f59190611555565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525085935091506109319050565b602002015287876001818110610949576109496114c4565b905060200281019061095b9190611555565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508492506001915061099a9050565b6020020152878760028181106109b2576109b26114c4565b90506020028101906109c49190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060029150610a039050565b602002015287876003818110610a1b57610a1b6114c4565b9050602002810190610a2d9190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060039150610a6c9050565b602002015287876004818110610a8457610a846114c4565b9050602002810190610a969190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060049150610ad59050565b602002015287876005818110610aed57610aed6114c4565b9050602002810190610aff9190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060059150610b3e9050565b602002015287876006818110610b5657610b566114c4565b9050602002810190610b689190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060069150610ba79050565b602002015287876007818110610bbf57610bbf6114c4565b9050602002810190610bd19190611555565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525084925060079150610c109050565b6020020152610c1d610eed565b86866000818110610c3057610c306114c4565b9050602002016020810190610c459190611148565b61ffff16815286866001818110610c5e57610c5e6114c4565b9050602002016020810190610c739190611148565b61ffff16602082015286866002818110610c8f57610c8f6114c4565b9050602002016020810190610ca49190611148565b61ffff908116604080840191909152908b166000908152600560205220610ccd90836008610f8f565b5061ffff8a166000908152600660205260409020610ced90826003610fdb565b5050505050505050505050505050565b606081610d215750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d4b5780610d358161153a565b9150610d449050600a836116cb565b9150610d25565b60008167ffffffffffffffff811115610d6657610d666116df565b6040519080825280601f01601f191660200182016040528015610d90576020820181803683370190505b5090505b8415610dfb57610da56001836116f5565b9150610db2600a8661170c565b610dbd906030611720565b60f81b818381518110610dd257610dd26114c4565b60200101906001600160f81b031916908160001a905350610df4600a866116cb565b9450610d94565b949350505050565b600082610e108584610e19565b14949350505050565b600081815b8451811015610ebd576000858281518110610e3b57610e3b6114c4565b60200260200101519050808311610e7d576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610eaa565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080610eb58161153a565b915050610e1e565b509392505050565b6040518061010001604052806008905b6060815260200190600190039081610ed55790505090565b60405180606001604052806003906020820280368337509192915050565b828054610f1790611454565b90600052602060002090601f016020900481019282610f395760008555610f7f565b82601f10610f525782800160ff19823516178555610f7f565b82800160010185558215610f7f579182015b82811115610f7f578235825591602001919060010190610f64565b50610f8b929150611068565b5090565b8260088101928215610fcf579160200282015b82811115610fcf5782518051610fbf91849160209091019061107d565b5091602001919060010190610fa2565b50610f8b9291506110f1565b600183019183908215610f7f5791602002820160005b8382111561103157835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610ff1565b801561105f5782816101000a81549061ffff0219169055600201602081600101049283019260010302611031565b5050610f8b9291505b5b80821115610f8b5760008155600101611069565b82805461108990611454565b90600052602060002090601f0160209004810192826110ab5760008555610f7f565b82601f106110c457805160ff1916838001178555610f7f565b82800160010185558215610f7f579182015b82811115610f7f5782518255916020019190600101906110d6565b80821115610f8b576000611105828261110e565b506001016110f1565b50805461111a90611454565b6000825580601f1061112a575050565b601f01602090049060005260206000209081019061057b9190611068565b60006020828403121561115a57600080fd5b813561ffff8116811461116c57600080fd5b9392505050565b60005b8381101561118e578181015183820152602001611176565b8381111561119d576000848401525b50505050565b600081518084526111bb816020860160208601611173565b601f01601f19169290920160200192915050565b6080808252600090610180830190830185835b600881101561121457607f198685030183526111ff8483516111a3565b935060209283019291909101906001016111e2565b5050508091505060208083018460005b600381101561124557815161ffff1683529183019190830190600101611224565b505050509392505050565b6000806020838503121561126357600080fd5b823567ffffffffffffffff8082111561127b57600080fd5b818501915085601f83011261128f57600080fd5b81358181111561129e57600080fd5b8660208285010111156112b057600080fd5b60209290920196919550909350505050565b60208152600061116c60208301846111a3565b60008083601f8401126112e757600080fd5b50813567ffffffffffffffff8111156112ff57600080fd5b6020830191508360208260051b850101111561131a57600080fd5b9250929050565b60008060008060008060008060008060a08b8d03121561134057600080fd5b8a3567ffffffffffffffff8082111561135857600080fd5b6113648e838f016112d5565b909c509a5060208d013591508082111561137d57600080fd5b6113898e838f016112d5565b909a50985060408d01359150808211156113a257600080fd5b6113ae8e838f016112d5565b909850965060608d01359150808211156113c757600080fd5b6113d38e838f016112d5565b909650945060808d01359150808211156113ec57600080fd5b506113f98d828e016112d5565b915080935050809150509295989b9194979a5092959850565b60006020828403121561142457600080fd5b5035919050565b60006020828403121561143d57600080fd5b81356001600160a01b038116811461116c57600080fd5b600181811c9082168061146857607f821691505b6020821081141561148957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126114f157600080fd5b83018035915067ffffffffffffffff82111561150c57600080fd5b6020019150600581901b360382131561131a57600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561154e5761154e611524565b5060010190565b6000808335601e1984360301811261156c57600080fd5b83018035915067ffffffffffffffff82111561158757600080fd5b60200191503681900382131561131a57600080fd5b898b823760008a820160008152898b82376000908a01908152878982376000908801908152858782376000908601908152838582376000930192835250909a9950505050505050505050565b600088516115fa818460208d01611173565b820187898237600090880190815285878237600090860190815283858237600093019283525090979650505050505050565b6000845161163e818460208901611173565b845190830190611652818360208901611173565b8451910190611665818360208801611173565b0195945050505050565b61ffff60f01b8460f01b16815260008351611691816002850160208801611173565b8351908301906116a8816002840160208801611173565b0160020195945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826116da576116da6116b5565b500490565b634e487b7160e01b600052604160045260246000fd5b60008282101561170757611707611524565b500390565b60008261171b5761171b6116b5565b500690565b6000821982111561173357611733611524565b50019056fea164736f6c6343000809000a

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading