Base Sepolia Testnet

Contract

0xF8d7044d657B602194fB5745C614beb35D5d898A
Source Code Source Code

Overview

ETH Balance

0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Register Agent372849232026-02-06 0:35:3470 days ago1770338134IN
0xF8d7044d...35D5d898A
0 ETH0.000000330.0012

Parent Transaction Hash Block From To Amount
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC8004

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
shanghai EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

/**
 * @title ERC-8004: Agent Identity Registry
 * @author OpenConductor
 * @notice On-chain identity layer for AI agents. Foundation of the Trust Stack.
 * @dev Provides verifiable identity, verification tiers, and trust attestations for AI agents.
 */
contract ERC8004 is Ownable {

    // ============ Types ============

    enum VerificationTier {
        Unregistered,  // 0 - Not in registry
        Basic,         // 1 - Self-reported, minimal verification
        Verified,      // 2 - Code reviewed, maintainer confirmed
        Certified      // 3 - ISO 42001 aligned, audit complete
    }

    struct Agent {
        uint256 id;                    // Unique agent ID
        address registrant;            // Who registered the agent
        string metadataURI;            // IPFS/HTTP URI to agent metadata JSON
        VerificationTier tier;         // Current verification level
        uint8 trustScore;              // 1-10 trust score
        uint256 registeredAt;          // Block timestamp of registration
        uint256 lastUpdated;           // Block timestamp of last update
        bool active;                   // Whether agent is active
    }

    struct Attestation {
        address verifier;              // Who made the attestation
        uint256 timestamp;             // When attestation was made
        string attestationType;        // Type: "security_audit", "code_review", "compliance"
        string evidence;               // IPFS URI to evidence
    }

    // ============ State ============

    uint256 private _agentIdCounter;
    
    // agentId => Agent
    mapping(uint256 => Agent) public agents;
    
    // metadataURI hash => agentId (prevent duplicates)
    mapping(bytes32 => uint256) public uriToAgentId;
    
    // agentId => attestations
    mapping(uint256 => Attestation[]) public attestations;
    
    // Authorized verifiers who can upgrade tiers and add attestations
    mapping(address => bool) public authorizedVerifiers;

    // ============ Events ============

    event AgentRegistered(
        uint256 indexed agentId,
        address indexed registrant,
        string metadataURI,
        uint256 timestamp
    );

    event AgentUpdated(
        uint256 indexed agentId,
        string metadataURI,
        uint256 timestamp
    );

    event TierUpgraded(
        uint256 indexed agentId,
        VerificationTier oldTier,
        VerificationTier newTier,
        address indexed verifier
    );

    event TrustScoreUpdated(
        uint256 indexed agentId,
        uint8 oldScore,
        uint8 newScore,
        address indexed updater
    );

    event AttestationAdded(
        uint256 indexed agentId,
        address indexed verifier,
        string attestationType,
        string evidence
    );

    event AgentDeactivated(uint256 indexed agentId);
    event AgentReactivated(uint256 indexed agentId);
    event VerifierAdded(address indexed verifier);
    event VerifierRemoved(address indexed verifier);

    // ============ Modifiers ============

    modifier onlyVerifier() {
        require(authorizedVerifiers[msg.sender] || msg.sender == owner(), "Not authorized verifier");
        _;
    }

    modifier agentExists(uint256 agentId) {
        require(agents[agentId].id != 0, "Agent does not exist");
        _;
    }

    modifier onlyRegistrant(uint256 agentId) {
        require(agents[agentId].registrant == msg.sender, "Not agent registrant");
        _;
    }

    // ============ Constructor ============

    constructor() Ownable(msg.sender) {
        authorizedVerifiers[msg.sender] = true;
    }

    // ============ Registration ============

    function registerAgent(string calldata metadataURI) external returns (uint256) {
        bytes32 uriHash = keccak256(bytes(metadataURI));
        require(uriToAgentId[uriHash] == 0, "Agent already registered");

        _agentIdCounter++;
        uint256 newAgentId = _agentIdCounter;

        agents[newAgentId] = Agent({
            id: newAgentId,
            registrant: msg.sender,
            metadataURI: metadataURI,
            tier: VerificationTier.Basic,
            trustScore: 1,
            registeredAt: block.timestamp,
            lastUpdated: block.timestamp,
            active: true
        });

        uriToAgentId[uriHash] = newAgentId;

        emit AgentRegistered(newAgentId, msg.sender, metadataURI, block.timestamp);

        return newAgentId;
    }

    function updateMetadata(uint256 agentId, string calldata newMetadataURI) 
        external 
        agentExists(agentId) 
        onlyRegistrant(agentId) 
    {
        bytes32 oldUriHash = keccak256(bytes(agents[agentId].metadataURI));
        delete uriToAgentId[oldUriHash];

        bytes32 newUriHash = keccak256(bytes(newMetadataURI));
        require(uriToAgentId[newUriHash] == 0, "URI already registered");
        uriToAgentId[newUriHash] = agentId;

        agents[agentId].metadataURI = newMetadataURI;
        agents[agentId].lastUpdated = block.timestamp;

        emit AgentUpdated(agentId, newMetadataURI, block.timestamp);
    }

    // ============ Verification ============

    function upgradeTier(uint256 agentId, VerificationTier newTier) 
        external 
        onlyVerifier 
        agentExists(agentId) 
    {
        Agent storage agent = agents[agentId];
        require(newTier > agent.tier, "Can only upgrade tier");
        
        VerificationTier oldTier = agent.tier;
        agent.tier = newTier;
        agent.lastUpdated = block.timestamp;

        emit TierUpgraded(agentId, oldTier, newTier, msg.sender);
    }

    function updateTrustScore(uint256 agentId, uint8 newScore) 
        external 
        onlyVerifier 
        agentExists(agentId) 
    {
        require(newScore >= 1 && newScore <= 10, "Score must be 1-10");
        
        Agent storage agent = agents[agentId];
        uint8 oldScore = agent.trustScore;
        agent.trustScore = newScore;
        agent.lastUpdated = block.timestamp;

        emit TrustScoreUpdated(agentId, oldScore, newScore, msg.sender);
    }

    function addAttestation(
        uint256 agentId, 
        string calldata attestationType, 
        string calldata evidence
    ) 
        external 
        onlyVerifier 
        agentExists(agentId) 
    {
        attestations[agentId].push(Attestation({
            verifier: msg.sender,
            timestamp: block.timestamp,
            attestationType: attestationType,
            evidence: evidence
        }));

        emit AttestationAdded(agentId, msg.sender, attestationType, evidence);
    }

    // ============ Status Management ============

    function deactivateAgent(uint256 agentId) 
        external 
        agentExists(agentId) 
    {
        require(
            agents[agentId].registrant == msg.sender || 
            authorizedVerifiers[msg.sender] || 
            msg.sender == owner(),
            "Not authorized"
        );
        
        agents[agentId].active = false;
        agents[agentId].lastUpdated = block.timestamp;

        emit AgentDeactivated(agentId);
    }

    function reactivateAgent(uint256 agentId) 
        external 
        agentExists(agentId) 
        onlyRegistrant(agentId) 
    {
        agents[agentId].active = true;
        agents[agentId].lastUpdated = block.timestamp;

        emit AgentReactivated(agentId);
    }

    // ============ Admin Functions ============

    function addVerifier(address verifier) external onlyOwner {
        authorizedVerifiers[verifier] = true;
        emit VerifierAdded(verifier);
    }

    function removeVerifier(address verifier) external onlyOwner {
        authorizedVerifiers[verifier] = false;
        emit VerifierRemoved(verifier);
    }

    // ============ View Functions ============

    function totalAgents() external view returns (uint256) {
        return _agentIdCounter;
    }

    function getAgent(uint256 agentId) external view returns (Agent memory) {
        return agents[agentId];
    }

    function getAttestations(uint256 agentId) external view returns (Attestation[] memory) {
        return attestations[agentId];
    }

    function isVerifier(address addr) external view returns (bool) {
        return authorizedVerifiers[addr] || addr == owner();
    }

    function getAgentIdByURI(string calldata metadataURI) external view returns (uint256) {
        return uriToAgentId[keccak256(bytes(metadataURI))];
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "shanghai",
  "viaIR": false
}

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentDeactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"AgentReactivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":false,"internalType":"string","name":"metadataURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AgentRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"string","name":"metadataURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AgentUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"internalType":"string","name":"attestationType","type":"string"},{"indexed":false,"internalType":"string","name":"evidence","type":"string"}],"name":"AttestationAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"enum ERC8004.VerificationTier","name":"oldTier","type":"uint8"},{"indexed":false,"internalType":"enum ERC8004.VerificationTier","name":"newTier","type":"uint8"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"TierUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agentId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"oldScore","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newScore","type":"uint8"},{"indexed":true,"internalType":"address","name":"updater","type":"address"}],"name":"TrustScoreUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierRemoved","type":"event"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"name":"addAttestation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"addVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"agents","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"registrant","type":"address"},{"internalType":"string","name":"metadataURI","type":"string"},{"internalType":"enum ERC8004.VerificationTier","name":"tier","type":"uint8"},{"internalType":"uint8","name":"trustScore","type":"uint8"},{"internalType":"uint256","name":"registeredAt","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"attestations","outputs":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedVerifiers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"deactivateAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAgent","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"registrant","type":"address"},{"internalType":"string","name":"metadataURI","type":"string"},{"internalType":"enum ERC8004.VerificationTier","name":"tier","type":"uint8"},{"internalType":"uint8","name":"trustScore","type":"uint8"},{"internalType":"uint256","name":"registeredAt","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct ERC8004.Agent","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"metadataURI","type":"string"}],"name":"getAgentIdByURI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAttestations","outputs":[{"components":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"attestationType","type":"string"},{"internalType":"string","name":"evidence","type":"string"}],"internalType":"struct ERC8004.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isVerifier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"reactivateAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"metadataURI","type":"string"}],"name":"registerAgent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"removeVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAgents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"string","name":"newMetadataURI","type":"string"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint8","name":"newScore","type":"uint8"}],"name":"updateTrustScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"enum ERC8004.VerificationTier","name":"newTier","type":"uint8"}],"name":"upgradeTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"uriToAgentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b50338061003557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61003e8161005d565b50335f908152600560205260409020805460ff191660011790556100ac565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611d01806100b95f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638edb1f9a116100b4578063c505371211610079578063c5053712146102bd578063ca2dfd0a146102c5578063d79ed7dc146102d8578063dd03888e146102eb578063f2fde38b1461030e578063fd61031714610321575f80fd5b80638edb1f9a146102435780639000b3d6146102625780639a89171614610275578063ab4576bb14610297578063b98e47fb146102aa575f80fd5b80633ee4d3d2116100fa5780633ee4d3d2146101c7578063513856c8146101e757806353c8388e1461020e578063715018a6146102215780638da5cb5b14610229575f80fd5b806311ba6b4a146101365780632d2a95851461014b5780632de5aaf714610171578063331052181461019157806336f005aa146101b4575b5f80fd5b6101496101443660046114d7565b610334565b005b61015e610159366004611533565b61043b565b6040519081526020015b60405180910390f35b61018461017f3660046114d7565b610671565b60405161016891906115e9565b6101a461019f366004611675565b6107af565b6040519015158152602001610168565b6101496101c23660046116a2565b6107e7565b6101da6101d53660046114d7565b61094b565b60405161016891906116d3565b6101fa6101f53660046114d7565b610af9565b604051610168989796959493929190611778565b61014961021c3660046117dc565b610bd4565b610149610d9a565b5f546040516001600160a01b039091168152602001610168565b61015e6102513660046114d7565b60036020525f908152604090205481565b610149610270366004611675565b610dad565b6101a4610283366004611675565b60056020525f908152604090205460ff1681565b6101496102a5366004611824565b610e00565b61015e6102b8366004611533565b610fd3565b60015461015e565b6101496102d3366004611675565b611005565b6101496102e6366004611898565b611055565b6102fe6102f93660046118c0565b61118b565b60405161016894939291906118e0565b61014961031c366004611675565b6112e7565b61014961032f3660046114d7565b611324565b5f8181526002602052604081205482910361036a5760405162461bcd60e51b815260040161036190611923565b60405180910390fd5b5f828152600260205260409020600101546001600160a01b031633148061039f5750335f9081526005602052604090205460ff165b806103b357505f546001600160a01b031633145b6103f05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610361565b5f8281526002602052604080822060068101805460ff19169055426005909101555183917fc2fb7f8575ac3990e70361684edfc4d283931ea9a03dfa28766bf376a3934aa291a25050565b5f80838360405161044d929190611951565b6040518091039020905060035f8281526020019081526020015f20545f146104b75760405162461bcd60e51b815260206004820152601860248201527f4167656e7420616c7265616479207265676973746572656400000000000000006044820152606401610361565b60018054905f6104c683611960565b91905055505f6001549050604051806101000160405280828152602001336001600160a01b0316815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506001602080850182905260408086018390524260608701819052608087015260a0909501829052868452600280825293859020865181559086015191810180546001600160a01b0319166001600160a01b03909316929092179091559284015191830191610597915082611a1e565b506060820151816003015f6101000a81548160ff021916908360038111156105c1576105c16115b5565b021790555060808201516003828101805461ff00191661010060ff909416939093029290921790915560a0830151600483015560c0830151600583015560e0909201516006909101805460ff19169115159190911790555f83815260209190915260409081902082905551339082907fc29f819ac362ff9c94de06666235808451aafd8894a2dffb86a080a965efeae39061066190899089904290611b02565b60405180910390a3949350505050565b61067961147c565b5f828152600260208181526040928390208351610100810185528154815260018201546001600160a01b031692810192909252918201805491938401916106bf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb90611998565b80156107365780601f1061070d57610100808354040283529160200191610736565b820191905f5260205f20905b81548152906001019060200180831161071957829003601f168201915b505050918352505060038281015460209092019160ff169081111561075d5761075d6115b5565b600381111561076e5761076e6115b5565b8152600382015460ff610100909104811660208301526004830154604083015260058301546060830152600690920154909116151560809091015292915050565b6001600160a01b0381165f9081526005602052604081205460ff16806107e157505f546001600160a01b038381169116145b92915050565b335f9081526005602052604090205460ff168061080d57505f546001600160a01b031633145b6108295760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036108565760405162461bcd60e51b815260040161036190611923565b5f83815260026020526040902060038082015460ff169081111561087c5761087c6115b5565b83600381111561088e5761088e6115b5565b116108d35760405162461bcd60e51b815260206004820152601560248201527421b0b71037b7363c903ab833b930b232903a34b2b960591b6044820152606401610361565b6003808201805460ff81169286929160ff19169060019084908111156108fb576108fb6115b5565b0217905550426005830155604051339086907f25e31530d004e39052a50d432095f5251816c8e74f45648520459d5e123449c39061093c9085908990611b5c565b60405180910390a35050505050565b606060045f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610aee575f848152602090819020604080516080810182526004860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916109cf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90611998565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b50505050508152602001600382018054610a5f90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90611998565b8015610ad65780601f10610aad57610100808354040283529160200191610ad6565b820191905f5260205f20905b815481529060010190602001808311610ab957829003601f168201915b5050505050815250508152602001906001019061097d565b505050509050919050565b600260208190525f918252604090912080546001820154928201805491936001600160a01b03169291610b2b90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790611998565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b505050600384015460048501546005860154600690960154949560ff8084169661010090940481169550919350911688565b5f83815260026020526040812054849103610c015760405162461bcd60e51b815260040161036190611923565b5f8481526002602052604090206001015484906001600160a01b03163314610c625760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f60025f8781526020019081526020015f20600201604051610c849190611b77565b604080519182900382205f8181526003602052918220829055925090610cad9087908790611951565b6040518091039020905060035f8281526020019081526020015f20545f14610d105760405162461bcd60e51b815260206004820152601660248201527515549248185b1c9958591e481c9959da5cdd195c995960521b6044820152606401610361565b5f8181526003602090815260408083208a905589835260029182905290912001610d3b868883611be9565b504260025f8981526020019081526020015f2060050181905550867f150cd089408b0f5f4a0002310b75a112412f1bc8d9d4463e97da392283893a16878742604051610d8993929190611b02565b60405180910390a250505050505050565b610da2611401565b610dab5f61142d565b565b610db5611401565b6001600160a01b0381165f81815260056020526040808220805460ff19166001179055517f6d05492139c5ea989514a5d2150c028041e5c087e2a39967f67dc7d2655adb819190a250565b335f9081526005602052604090205460ff1680610e2657505f546001600160a01b031633145b610e425760405162461bcd60e51b815260040161036190611b25565b5f85815260026020526040812054869103610e6f5760405162461bcd60e51b815260040161036190611923565b60045f8781526020019081526020015f206040518060800160405280336001600160a01b0316815260200142815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f920182905250939094525050835460018082018655948252602091829020845160049092020180546001600160a01b0319166001600160a01b0390921691909117815590830151938101939093555060408101519091906002820190610f6b9082611a1e565b5060608201516003820190610f809082611a1e565b505050336001600160a01b0316867f5644dd22408e7321b8d1ca8c32dfcfffcff22890a1c99e1d56751d2d806d80d787878787604051610fc39493929190611ca5565b60405180910390a3505050505050565b5f60035f8484604051610fe7929190611951565b604051809103902081526020019081526020015f2054905092915050565b61100d611401565b6001600160a01b0381165f81815260056020526040808220805460ff19169055517f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba4249190a250565b335f9081526005602052604090205460ff168061107b57505f546001600160a01b031633145b6110975760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036110c45760405162461bcd60e51b815260040161036190611923565b60018260ff16101580156110dc5750600a8260ff1611155b61111d5760405162461bcd60e51b8152602060048201526012602482015271053636f7265206d75737420626520312d31360741b6044820152606401610361565b5f8381526002602090815260409182902060038101805460ff87811661010081810261ff001985161790945542600586015586519390920416808352938201529092339187917fa568c8acd50ed78bc742261ef27b81da9f99eaa85caaa6c5f8f03388d5ec250b910161093c565b6004602052815f5260405f2081815481106111a4575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b039093169550909350906111da90611998565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611998565b80156112515780601f1061122857610100808354040283529160200191611251565b820191905f5260205f20905b81548152906001019060200180831161123457829003601f168201915b50505050509080600301805461126690611998565b80601f016020809104026020016040519081016040528092919081815260200182805461129290611998565b80156112dd5780601f106112b4576101008083540402835291602001916112dd565b820191905f5260205f20905b8154815290600101906020018083116112c057829003601f168201915b5050505050905084565b6112ef611401565b6001600160a01b03811661131857604051631e4fbdf760e01b81525f6004820152602401610361565b6113218161142d565b50565b5f818152600260205260408120548291036113515760405162461bcd60e51b815260040161036190611923565b5f8281526002602052604090206001015482906001600160a01b031633146113b25760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f8381526002602052604080822060068101805460ff19166001179055426005909101555184917f7cce21c1f4552995dccace889e9ad45febf59c654d3fd1d7ab0457fa1439aa2c91a2505050565b5f546001600160a01b03163314610dab5760405163118cdaa760e01b8152336004820152602401610361565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061010001604052805f81526020015f6001600160a01b03168152602001606081526020015f60038111156114b6576114b66115b5565b81525f60208201819052604082018190526060820181905260809091015290565b5f602082840312156114e7575f80fd5b5035919050565b5f8083601f8401126114fe575f80fd5b50813567ffffffffffffffff811115611515575f80fd5b60208301915083602082850101111561152c575f80fd5b9250929050565b5f8060208385031215611544575f80fd5b823567ffffffffffffffff81111561155a575f80fd5b611566858286016114ee565b90969095509350505050565b5f81518084525f5b818110156115965760208185018101518683018201520161157a565b505f602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b600481106115e557634e487b7160e01b5f52602160045260245ffd5b9052565b602081528151602082015260018060a01b0360208301511660408201525f6040830151610100806060850152611623610120850183611572565b9150606085015161163760808601826115c9565b5060ff60808601511660a085015260a085015160c085015260c085015160e085015260e085015161166b8286018215159052565b5090949350505050565b5f60208284031215611685575f80fd5b81356001600160a01b038116811461169b575f80fd5b9392505050565b5f80604083850312156116b3575f80fd5b823591506020830135600481106116c8575f80fd5b809150509250929050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561176a57888303603f19018552815180516001600160a01b0316845287810151888501528681015160808886018190529061173982870182611572565b915050606080830151925085820381870152506117568183611572565b9689019694505050908601906001016116f8565b509098975050505050505050565b8881526001600160a01b0388166020820152610100604082018190525f906117a28382018a611572565b9150506117b260608301886115c9565b60ff861660808301528460a08301528360c083015282151560e08301529998505050505050505050565b5f805f604084860312156117ee575f80fd5b83359250602084013567ffffffffffffffff81111561180b575f80fd5b611817868287016114ee565b9497909650939450505050565b5f805f805f60608688031215611838575f80fd5b85359450602086013567ffffffffffffffff80821115611856575f80fd5b61186289838a016114ee565b9096509450604088013591508082111561187a575f80fd5b50611887888289016114ee565b969995985093965092949392505050565b5f80604083850312156118a9575f80fd5b82359150602083013560ff811681146116c8575f80fd5b5f80604083850312156118d1575f80fd5b50508035926020909101359150565b60018060a01b0385168152836020820152608060408201525f6119066080830185611572565b82810360608401526119188185611572565b979650505050505050565b6020808252601490820152731059d95b9d08191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b818382375f9101908152919050565b5f6001820161197d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806119ac57607f821691505b6020821081036119ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611a19575f81815260208120601f850160051c810160208610156119f65750805b601f850160051c820191505b81811015611a1557828155600101611a02565b5050505b505050565b815167ffffffffffffffff811115611a3857611a38611984565b611a4c81611a468454611998565b846119d0565b602080601f831160018114611a7f575f8415611a685750858301515b5f19600386901b1c1916600185901b178555611a15565b5f85815260208120601f198616915b82811015611aad57888601518255948401946001909101908401611a8e565b5085821015611aca57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f611b15604083018587611ada565b9050826020830152949350505050565b60208082526017908201527f4e6f7420617574686f72697a6564207665726966696572000000000000000000604082015260600190565b60408101611b6a82856115c9565b61169b60208301846115c9565b5f808354611b8481611998565b60018281168015611b9c5760018114611bb157611bdd565b60ff1984168752821515830287019450611bdd565b875f526020805f205f5b85811015611bd45781548a820152908401908201611bbb565b50505082870194505b50929695505050505050565b67ffffffffffffffff831115611c0157611c01611984565b611c1583611c0f8354611998565b836119d0565b5f601f841160018114611c46575f8515611c2f5750838201355b5f19600387901b1c1916600186901b178355611c9e565b5f83815260209020601f19861690835b82811015611c765786850135825560209485019460019092019101611c56565b5086821015611c92575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f611cb8604083018688611ada565b8281036020840152611918818587611ada56fea2646970667358221220362c035e81e417fa5574dd6c4b3604405d15d141d807ca24141dcaafad792b2364736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c80638edb1f9a116100b4578063c505371211610079578063c5053712146102bd578063ca2dfd0a146102c5578063d79ed7dc146102d8578063dd03888e146102eb578063f2fde38b1461030e578063fd61031714610321575f80fd5b80638edb1f9a146102435780639000b3d6146102625780639a89171614610275578063ab4576bb14610297578063b98e47fb146102aa575f80fd5b80633ee4d3d2116100fa5780633ee4d3d2146101c7578063513856c8146101e757806353c8388e1461020e578063715018a6146102215780638da5cb5b14610229575f80fd5b806311ba6b4a146101365780632d2a95851461014b5780632de5aaf714610171578063331052181461019157806336f005aa146101b4575b5f80fd5b6101496101443660046114d7565b610334565b005b61015e610159366004611533565b61043b565b6040519081526020015b60405180910390f35b61018461017f3660046114d7565b610671565b60405161016891906115e9565b6101a461019f366004611675565b6107af565b6040519015158152602001610168565b6101496101c23660046116a2565b6107e7565b6101da6101d53660046114d7565b61094b565b60405161016891906116d3565b6101fa6101f53660046114d7565b610af9565b604051610168989796959493929190611778565b61014961021c3660046117dc565b610bd4565b610149610d9a565b5f546040516001600160a01b039091168152602001610168565b61015e6102513660046114d7565b60036020525f908152604090205481565b610149610270366004611675565b610dad565b6101a4610283366004611675565b60056020525f908152604090205460ff1681565b6101496102a5366004611824565b610e00565b61015e6102b8366004611533565b610fd3565b60015461015e565b6101496102d3366004611675565b611005565b6101496102e6366004611898565b611055565b6102fe6102f93660046118c0565b61118b565b60405161016894939291906118e0565b61014961031c366004611675565b6112e7565b61014961032f3660046114d7565b611324565b5f8181526002602052604081205482910361036a5760405162461bcd60e51b815260040161036190611923565b60405180910390fd5b5f828152600260205260409020600101546001600160a01b031633148061039f5750335f9081526005602052604090205460ff165b806103b357505f546001600160a01b031633145b6103f05760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610361565b5f8281526002602052604080822060068101805460ff19169055426005909101555183917fc2fb7f8575ac3990e70361684edfc4d283931ea9a03dfa28766bf376a3934aa291a25050565b5f80838360405161044d929190611951565b6040518091039020905060035f8281526020019081526020015f20545f146104b75760405162461bcd60e51b815260206004820152601860248201527f4167656e7420616c7265616479207265676973746572656400000000000000006044820152606401610361565b60018054905f6104c683611960565b91905055505f6001549050604051806101000160405280828152602001336001600160a01b0316815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093855250506001602080850182905260408086018390524260608701819052608087015260a0909501829052868452600280825293859020865181559086015191810180546001600160a01b0319166001600160a01b03909316929092179091559284015191830191610597915082611a1e565b506060820151816003015f6101000a81548160ff021916908360038111156105c1576105c16115b5565b021790555060808201516003828101805461ff00191661010060ff909416939093029290921790915560a0830151600483015560c0830151600583015560e0909201516006909101805460ff19169115159190911790555f83815260209190915260409081902082905551339082907fc29f819ac362ff9c94de06666235808451aafd8894a2dffb86a080a965efeae39061066190899089904290611b02565b60405180910390a3949350505050565b61067961147c565b5f828152600260208181526040928390208351610100810185528154815260018201546001600160a01b031692810192909252918201805491938401916106bf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb90611998565b80156107365780601f1061070d57610100808354040283529160200191610736565b820191905f5260205f20905b81548152906001019060200180831161071957829003601f168201915b505050918352505060038281015460209092019160ff169081111561075d5761075d6115b5565b600381111561076e5761076e6115b5565b8152600382015460ff610100909104811660208301526004830154604083015260058301546060830152600690920154909116151560809091015292915050565b6001600160a01b0381165f9081526005602052604081205460ff16806107e157505f546001600160a01b038381169116145b92915050565b335f9081526005602052604090205460ff168061080d57505f546001600160a01b031633145b6108295760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036108565760405162461bcd60e51b815260040161036190611923565b5f83815260026020526040902060038082015460ff169081111561087c5761087c6115b5565b83600381111561088e5761088e6115b5565b116108d35760405162461bcd60e51b815260206004820152601560248201527421b0b71037b7363c903ab833b930b232903a34b2b960591b6044820152606401610361565b6003808201805460ff81169286929160ff19169060019084908111156108fb576108fb6115b5565b0217905550426005830155604051339086907f25e31530d004e39052a50d432095f5251816c8e74f45648520459d5e123449c39061093c9085908990611b5c565b60405180910390a35050505050565b606060045f8381526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610aee575f848152602090819020604080516080810182526004860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916109cf90611998565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb90611998565b8015610a465780601f10610a1d57610100808354040283529160200191610a46565b820191905f5260205f20905b815481529060010190602001808311610a2957829003601f168201915b50505050508152602001600382018054610a5f90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90611998565b8015610ad65780601f10610aad57610100808354040283529160200191610ad6565b820191905f5260205f20905b815481529060010190602001808311610ab957829003601f168201915b5050505050815250508152602001906001019061097d565b505050509050919050565b600260208190525f918252604090912080546001820154928201805491936001600160a01b03169291610b2b90611998565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5790611998565b8015610ba25780601f10610b7957610100808354040283529160200191610ba2565b820191905f5260205f20905b815481529060010190602001808311610b8557829003601f168201915b505050600384015460048501546005860154600690960154949560ff8084169661010090940481169550919350911688565b5f83815260026020526040812054849103610c015760405162461bcd60e51b815260040161036190611923565b5f8481526002602052604090206001015484906001600160a01b03163314610c625760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f60025f8781526020019081526020015f20600201604051610c849190611b77565b604080519182900382205f8181526003602052918220829055925090610cad9087908790611951565b6040518091039020905060035f8281526020019081526020015f20545f14610d105760405162461bcd60e51b815260206004820152601660248201527515549248185b1c9958591e481c9959da5cdd195c995960521b6044820152606401610361565b5f8181526003602090815260408083208a905589835260029182905290912001610d3b868883611be9565b504260025f8981526020019081526020015f2060050181905550867f150cd089408b0f5f4a0002310b75a112412f1bc8d9d4463e97da392283893a16878742604051610d8993929190611b02565b60405180910390a250505050505050565b610da2611401565b610dab5f61142d565b565b610db5611401565b6001600160a01b0381165f81815260056020526040808220805460ff19166001179055517f6d05492139c5ea989514a5d2150c028041e5c087e2a39967f67dc7d2655adb819190a250565b335f9081526005602052604090205460ff1680610e2657505f546001600160a01b031633145b610e425760405162461bcd60e51b815260040161036190611b25565b5f85815260026020526040812054869103610e6f5760405162461bcd60e51b815260040161036190611923565b60045f8781526020019081526020015f206040518060800160405280336001600160a01b0316815260200142815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f920182905250939094525050835460018082018655948252602091829020845160049092020180546001600160a01b0319166001600160a01b0390921691909117815590830151938101939093555060408101519091906002820190610f6b9082611a1e565b5060608201516003820190610f809082611a1e565b505050336001600160a01b0316867f5644dd22408e7321b8d1ca8c32dfcfffcff22890a1c99e1d56751d2d806d80d787878787604051610fc39493929190611ca5565b60405180910390a3505050505050565b5f60035f8484604051610fe7929190611951565b604051809103902081526020019081526020015f2054905092915050565b61100d611401565b6001600160a01b0381165f81815260056020526040808220805460ff19169055517f44a3cd4eb5cc5748f6169df057b1cb2ae4c383e87cd94663c430e095d4cba4249190a250565b335f9081526005602052604090205460ff168061107b57505f546001600160a01b031633145b6110975760405162461bcd60e51b815260040161036190611b25565b5f828152600260205260408120548391036110c45760405162461bcd60e51b815260040161036190611923565b60018260ff16101580156110dc5750600a8260ff1611155b61111d5760405162461bcd60e51b8152602060048201526012602482015271053636f7265206d75737420626520312d31360741b6044820152606401610361565b5f8381526002602090815260409182902060038101805460ff87811661010081810261ff001985161790945542600586015586519390920416808352938201529092339187917fa568c8acd50ed78bc742261ef27b81da9f99eaa85caaa6c5f8f03388d5ec250b910161093c565b6004602052815f5260405f2081815481106111a4575f80fd5b5f9182526020909120600490910201805460018201546002830180546001600160a01b039093169550909350906111da90611998565b80601f016020809104026020016040519081016040528092919081815260200182805461120690611998565b80156112515780601f1061122857610100808354040283529160200191611251565b820191905f5260205f20905b81548152906001019060200180831161123457829003601f168201915b50505050509080600301805461126690611998565b80601f016020809104026020016040519081016040528092919081815260200182805461129290611998565b80156112dd5780601f106112b4576101008083540402835291602001916112dd565b820191905f5260205f20905b8154815290600101906020018083116112c057829003601f168201915b5050505050905084565b6112ef611401565b6001600160a01b03811661131857604051631e4fbdf760e01b81525f6004820152602401610361565b6113218161142d565b50565b5f818152600260205260408120548291036113515760405162461bcd60e51b815260040161036190611923565b5f8281526002602052604090206001015482906001600160a01b031633146113b25760405162461bcd60e51b8152602060048201526014602482015273139bdd081859d95b9d081c9959da5cdd1c985b9d60621b6044820152606401610361565b5f8381526002602052604080822060068101805460ff19166001179055426005909101555184917f7cce21c1f4552995dccace889e9ad45febf59c654d3fd1d7ab0457fa1439aa2c91a2505050565b5f546001600160a01b03163314610dab5760405163118cdaa760e01b8152336004820152602401610361565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518061010001604052805f81526020015f6001600160a01b03168152602001606081526020015f60038111156114b6576114b66115b5565b81525f60208201819052604082018190526060820181905260809091015290565b5f602082840312156114e7575f80fd5b5035919050565b5f8083601f8401126114fe575f80fd5b50813567ffffffffffffffff811115611515575f80fd5b60208301915083602082850101111561152c575f80fd5b9250929050565b5f8060208385031215611544575f80fd5b823567ffffffffffffffff81111561155a575f80fd5b611566858286016114ee565b90969095509350505050565b5f81518084525f5b818110156115965760208185018101518683018201520161157a565b505f602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b5f52602160045260245ffd5b600481106115e557634e487b7160e01b5f52602160045260245ffd5b9052565b602081528151602082015260018060a01b0360208301511660408201525f6040830151610100806060850152611623610120850183611572565b9150606085015161163760808601826115c9565b5060ff60808601511660a085015260a085015160c085015260c085015160e085015260e085015161166b8286018215159052565b5090949350505050565b5f60208284031215611685575f80fd5b81356001600160a01b038116811461169b575f80fd5b9392505050565b5f80604083850312156116b3575f80fd5b823591506020830135600481106116c8575f80fd5b809150509250929050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561176a57888303603f19018552815180516001600160a01b0316845287810151888501528681015160808886018190529061173982870182611572565b915050606080830151925085820381870152506117568183611572565b9689019694505050908601906001016116f8565b509098975050505050505050565b8881526001600160a01b0388166020820152610100604082018190525f906117a28382018a611572565b9150506117b260608301886115c9565b60ff861660808301528460a08301528360c083015282151560e08301529998505050505050505050565b5f805f604084860312156117ee575f80fd5b83359250602084013567ffffffffffffffff81111561180b575f80fd5b611817868287016114ee565b9497909650939450505050565b5f805f805f60608688031215611838575f80fd5b85359450602086013567ffffffffffffffff80821115611856575f80fd5b61186289838a016114ee565b9096509450604088013591508082111561187a575f80fd5b50611887888289016114ee565b969995985093965092949392505050565b5f80604083850312156118a9575f80fd5b82359150602083013560ff811681146116c8575f80fd5b5f80604083850312156118d1575f80fd5b50508035926020909101359150565b60018060a01b0385168152836020820152608060408201525f6119066080830185611572565b82810360608401526119188185611572565b979650505050505050565b6020808252601490820152731059d95b9d08191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b818382375f9101908152919050565b5f6001820161197d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806119ac57607f821691505b6020821081036119ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611a19575f81815260208120601f850160051c810160208610156119f65750805b601f850160051c820191505b81811015611a1557828155600101611a02565b5050505b505050565b815167ffffffffffffffff811115611a3857611a38611984565b611a4c81611a468454611998565b846119d0565b602080601f831160018114611a7f575f8415611a685750858301515b5f19600386901b1c1916600185901b178555611a15565b5f85815260208120601f198616915b82811015611aad57888601518255948401946001909101908401611a8e565b5085821015611aca57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f611b15604083018587611ada565b9050826020830152949350505050565b60208082526017908201527f4e6f7420617574686f72697a6564207665726966696572000000000000000000604082015260600190565b60408101611b6a82856115c9565b61169b60208301846115c9565b5f808354611b8481611998565b60018281168015611b9c5760018114611bb157611bdd565b60ff1984168752821515830287019450611bdd565b875f526020805f205f5b85811015611bd45781548a820152908401908201611bbb565b50505082870194505b50929695505050505050565b67ffffffffffffffff831115611c0157611c01611984565b611c1583611c0f8354611998565b836119d0565b5f601f841160018114611c46575f8515611c2f5750838201355b5f19600387901b1c1916600186901b178355611c9e565b5f83815260209020601f19861690835b82811015611c765786850135825560209485019460019092019101611c56565b5086821015611c92575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f611cb8604083018688611ada565b8281036020840152611918818587611ada56fea2646970667358221220362c035e81e417fa5574dd6c4b3604405d15d141d807ca24141dcaafad792b2364736f6c63430008140033

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

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