ETH Price: $3,318.41 (+0.47%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Register Gradien...381283972025-11-13 15:02:2165 days ago1763046141IN
0xC6926fFf...69710Dc44
0 ETH0.000004240.02755071
Register Gradien...381283462025-11-13 15:00:3965 days ago1763046039IN
0xC6926fFf...69710Dc44
0 ETH0.000005510.0277266
Register Gradien...380974112025-11-12 21:49:2966 days ago1762984169IN
0xC6926fFf...69710Dc44
0 ETH0.000000550.00362783
Register Gradien...380973942025-11-12 21:48:5566 days ago1762984135IN
0xC6926fFf...69710Dc44
0 ETH0.000000570.00377263
Register Gradien...380973622025-11-12 21:47:5166 days ago1762984071IN
0xC6926fFf...69710Dc44
0 ETH0.000000570.00372652
Register Gradien...380973472025-11-12 21:47:2166 days ago1762984041IN
0xC6926fFf...69710Dc44
0 ETH0.000000560.00370679
Register Gradien...380973222025-11-12 21:46:3166 days ago1762983991IN
0xC6926fFf...69710Dc44
0 ETH0.000000560.00364817
Register Gradien...380973082025-11-12 21:46:0366 days ago1762983963IN
0xC6926fFf...69710Dc44
0 ETH0.000000740.00373337
Register Gradien...380972922025-11-12 21:45:3166 days ago1762983931IN
0xC6926fFf...69710Dc44
0 ETH0.000000410.00380609
Register Gradien...380972782025-11-12 21:45:0366 days ago1762983903IN
0xC6926fFf...69710Dc44
0 ETH0.00000070.00378726
Register Gradien...380972282025-11-12 21:43:2366 days ago1762983803IN
0xC6926fFf...69710Dc44
0 ETH0.000000090.00371903
Register Gradien...380972122025-11-12 21:42:5166 days ago1762983771IN
0xC6926fFf...69710Dc44
0 ETH0.000000090.00362077
Register Gradien...380971972025-11-12 21:42:2166 days ago1762983741IN
0xC6926fFf...69710Dc44
0 ETH0.000000090.00367268
Register Gradien...380971802025-11-12 21:41:4766 days ago1762983707IN
0xC6926fFf...69710Dc44
0 ETH0.000000090.00367073
Register Gradien...380971362025-11-12 21:40:1966 days ago1762983619IN
0xC6926fFf...69710Dc44
0 ETH0.00000010.00401376

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VoidlyGradientRegistry

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/**
 * @title VoidlyGradientRegistry
 * @notice Append-only registry for federated-learning gradient attestations (IPFS CIDs).
 * @dev Optimized for L2 (e.g., Base). Event model is indexer-friendly and on-chain reads are paginatable.
 */
contract VoidlyGradientRegistry {
    // -------------------------------------------------------------------------
    // Errors
    // -------------------------------------------------------------------------
    error NodeIdRequired();
    error IpfsHashRequired();
    error AttestationHashRequired();
    error NoAttestationsFound();
    error NotAuthorized();
    error IndexOutOfBounds();
    error InvalidNewOwner();
    error CountZero();
    error UnknownNode();

    // -------------------------------------------------------------------------
    // Types
    // -------------------------------------------------------------------------
    struct Attestation {
        // NOTE: Two dynamic fields first; fixed fields (uint64,address) follow and pack together in one slot.
        string ipfsHash;        // CID for gradient data (e.g., "Qm..."/CIDv0 or "bafy..."/CIDv1)
        string attestationHash; // CID for Ed25519 signature payload
        uint64 timestamp;       // Block timestamp (gas-lean vs uint256)
        address nodeOperator;   // submitter (msg.sender)
    }

    // -------------------------------------------------------------------------
    // Storage
    // -------------------------------------------------------------------------
    uint256 public constant VERSION = 1;

    address public owner;
    address public pendingOwner;

    // nodeKey = keccak256(nodeId); using bytes32 key is cheaper than string mapping
    mapping(bytes32 => Attestation[]) private _attestations;
    mapping(bytes32 => bool) private _seenNode;

    uint256 public totalAttestations; // global counter
    uint256 public nodeCount;         // count of unique nodeIds observed

    // -------------------------------------------------------------------------
    // Events
    // -------------------------------------------------------------------------
    /**
     * @dev NOTE: `nodeId` is NON-indexed so its literal value is visible in logs.
     * We index `nodeKey` (keccak) for cheap filtering + `operator` for actor filtering.
     */
    event GradientRegistered(
        bytes32 indexed nodeKey,
        address indexed operator,
        string nodeId,
        string ipfsHash,
        string attestationHash,
        uint64 timestamp
    );

    event NodeRegistered(
        bytes32 indexed nodeKey,
        address indexed firstOperator,
        string nodeId
    );

    event NodeSlashed(
        bytes32 indexed nodeKey,
        address indexed operator,
        string nodeId,
        string reason
    );

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

    // -------------------------------------------------------------------------
    // Constructor / ownership
    // -------------------------------------------------------------------------
    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        if (msg.sender != owner) revert NotAuthorized();
        _;
    }

    /// @notice Start two-step ownership transfer (safer for multisigs / ops).
    function transferOwnership(address newOwner) external onlyOwner {
        if (newOwner == address(0)) revert InvalidNewOwner();
        pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner, newOwner);
    }

    /// @notice Accept ownership after `transferOwnership`.
    function acceptOwnership() external {
        if (msg.sender != pendingOwner) revert NotAuthorized();
        address prev = owner;
        owner = msg.sender;
        pendingOwner = address(0);
        emit OwnershipTransferred(prev, owner);
    }

    // -------------------------------------------------------------------------
    // Core
    // -------------------------------------------------------------------------
    /**
     * @notice Register a gradient attestation.
     * @dev Permissionless by design; the protocol layer should decide which CIDs/IDs to trust.
     */
    function registerGradient(
        string calldata nodeId,
        string calldata ipfsHash,
        string calldata attestationHash
    ) external {
        if (bytes(nodeId).length == 0) revert NodeIdRequired();
        if (bytes(ipfsHash).length == 0) revert IpfsHashRequired();
        if (bytes(attestationHash).length == 0) revert AttestationHashRequired();

        bytes32 nodeKey = _nodeKey(nodeId);

        if (!_seenNode[nodeKey]) {
            _seenNode[nodeKey] = true;
            unchecked { nodeCount += 1; }
            emit NodeRegistered(nodeKey, msg.sender, nodeId);
        }

        uint64 t = uint64(block.timestamp);
        Attestation storage a = _attestations[nodeKey].push();
        a.ipfsHash = ipfsHash;
        a.attestationHash = attestationHash;
        a.timestamp = t;
        a.nodeOperator = msg.sender;

        unchecked { totalAttestations += 1; }

        emit GradientRegistered(
            nodeKey,
            msg.sender,
            nodeId,
            ipfsHash,
            attestationHash,
            t
        );
    }

    // -------------------------------------------------------------------------
    // Views
    // -------------------------------------------------------------------------

    /// @notice Return the full history (prefer range pagination for large sets).
    function getNodeHistory(string calldata nodeId)
        external
        view
        returns (Attestation[] memory)
    {
        return _attestations[_nodeKey(nodeId)];
    }

    /// @notice Return the latest attestation for a node.
    function getLatestAttestation(string calldata nodeId)
        external
        view
        returns (Attestation memory)
    {
        Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
        uint256 len = arr.length;
        if (len == 0) revert NoAttestationsFound();
        return arr[len - 1];
    }

    /// @notice Return the number of attestations stored for a node.
    function getAttestationCount(string calldata nodeId)
        external
        view
        returns (uint256)
    {
        return _attestations[_nodeKey(nodeId)].length;
    }

    /// @notice Return the attestation at a given index (with bounds check).
    function getAttestationAt(
        string calldata nodeId,
        uint256 index
    ) external view returns (Attestation memory) {
        Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
        if (index >= arr.length) revert IndexOutOfBounds();
        return arr[index];
    }

    /// @notice Paginate results to avoid returning huge arrays via eth_call.
    /// @param start inclusive start index
    /// @param count how many to return (must be > 0). Will clamp at end of array.
    function getAttestationsRange(
        string calldata nodeId,
        uint256 start,
        uint256 count
    ) external view returns (Attestation[] memory) {
        if (count == 0) revert CountZero();
        Attestation[] storage arr = _attestations[_nodeKey(nodeId)];
        uint256 len = arr.length;
        if (start >= len) revert IndexOutOfBounds();

        uint256 end = start + count;
        if (end > len) end = len;
        uint256 n = end - start;

        Attestation[] memory out = new Attestation[](n);
        for (uint256 i = 0; i < n; ) {
            out[i] = arr[start + i];
            unchecked { ++i; }
        }
        return out;
    }

    /// @notice Whether we have ever seen this nodeId (based on keccak(nodeId)).
    function existsNode(string calldata nodeId) external view returns (bool) {
        return _seenNode[_nodeKey(nodeId)];
    }

    // -------------------------------------------------------------------------
    // Slashing (event-only placeholder)
    // -------------------------------------------------------------------------

    /// @notice Record a slashing event (no funds movement; integrate real slashing later).
    function slashNode(string calldata nodeId, string calldata reason)
        external
        onlyOwner
    {
        bytes32 nodeKey = _nodeKey(nodeId);
        if (!_seenNode[nodeKey]) revert UnknownNode();
        emit NodeSlashed(nodeKey, msg.sender, nodeId, reason);
    }

    // -------------------------------------------------------------------------
    // Internal utilities
    // -------------------------------------------------------------------------

    function _nodeKey(string memory nodeId) private pure returns (bytes32) {
        return keccak256(bytes(nodeId));
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AttestationHashRequired","type":"error"},{"inputs":[],"name":"CountZero","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidNewOwner","type":"error"},{"inputs":[],"name":"IpfsHashRequired","type":"error"},{"inputs":[],"name":"NoAttestationsFound","type":"error"},{"inputs":[],"name":"NodeIdRequired","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"UnknownNode","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"},{"indexed":false,"internalType":"string","name":"ipfsHash","type":"string"},{"indexed":false,"internalType":"string","name":"attestationHash","type":"string"},{"indexed":false,"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"GradientRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"firstOperator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"}],"name":"NodeRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nodeKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"string","name":"nodeId","type":"string"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"NodeSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"existsNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAttestationAt","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getAttestationCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getAttestationsRange","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getLatestAttestation","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"}],"name":"getNodeHistory","outputs":[{"components":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"address","name":"nodeOperator","type":"address"}],"internalType":"struct VoidlyGradientRegistry.Attestation[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"string","name":"attestationHash","type":"string"}],"name":"registerGradient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nodeId","type":"string"},{"internalType":"string","name":"reason","type":"string"}],"name":"slashNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAttestations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600080546001600160a01b031916331790556114ff806100326000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e16d98b511610066578063e16d98b5146101f7578063e30c39781461021a578063f2fde38b1461022d578063ffa1ad741461024057600080fd5b80638da5cb5b1461019357806395cac59f146101be578063d666ac41146101d1578063d7a14203146101e457600080fd5b80636da49b83116100d35780636da49b831461015a57806379ba5097146101635780638128e6c61461016d578063837f9ef31461018057600080fd5b8063011f1241146100fa57806314e4058e146101235780636048574214610143575b600080fd5b61010d610108366004610f1c565b610248565b60405161011a919061100d565b60405180910390f35b610136610131366004611027565b61044c565b60405161011a9190611068565b61014c60045481565b60405190815260200161011a565b61014c60055481565b61016b610656565b005b61010d61017b366004611027565b6106d8565b61014c61018e366004611027565b61077b565b6000546101a6906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6101366101cc3660046110ca565b6107d8565b61016b6101df36600461111a565b610ab5565b61016b6101f23660046111b3565b610c9f565b61020a610205366004611027565b610d8c565b604051901515815260200161011a565b6001546101a6906001600160a01b031681565b61016b61023b36600461121e565b610dec565b61014c600181565b610250610e9a565b60006002600061029587878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020019081526020016000209050808054905083106102c957604051634e23d03560e01b815260040160405180910390fd5b8083815481106102db576102db611247565b90600052602060002090600302016040518060800160405290816000820180546103049061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103309061125d565b801561037d5780601f106103525761010080835404028352916020019161037d565b820191906000526020600020905b81548152906001019060200180831161036057829003601f168201915b505050505081526020016001820180546103969061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c29061125d565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b031660409091015295945050505050565b60606002600061049185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561064957838290600052602060002090600302016040518060800160405290816000820180546104f29061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061125d565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b505050505081526020016001820180546105849061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061125d565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050509183525050600291909101546001600160401b038116602080840191909152600160401b9091046001600160a01b031660409092019190915290825260019290920191016104bf565b5050505090505b92915050565b6001546001600160a01b031633146106815760405163ea8e4eb560e01b815260040160405180910390fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106e0610e9a565b60006002600061072586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260200190815260200160002090506000818054905090508060000361075f5760405163792120e960e01b815260040160405180910390fd5b8161076b6001836112ad565b815481106102db576102db611247565b6000600260006107c085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020549392505050565b6060816000036107fb576040516311f6547b60e21b815260040160405180910390fd5b60006002600061084088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020805490915080851061087557604051634e23d03560e01b815260040160405180910390fd5b600061088185876112c0565b90508181111561088e5750805b600061089a87836112ad565b90506000816001600160401b038111156108b6576108b66112d3565b6040519080825280602002602001820160405280156108ef57816020015b6108dc610e9a565b8152602001906001900390816108d45790505b50905060005b82811015610aa75785610908828b6112c0565b8154811061091857610918611247565b90600052602060002090600302016040518060800160405290816000820180546109419061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461096d9061125d565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b505050505081526020016001820180546109d39061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff9061125d565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b03166040909101528251839083908110610a9457610a94611247565b60209081029190910101526001016108f5565b509998505050505050505050565b6000859003610ad757604051637900159560e01b815260040160405180910390fd5b6000839003610af95760405163eabfb56d60e01b815260040160405180910390fd5b6000819003610b1b57604051638a41014160e01b815260040160405180910390fd5b6000610b5c87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610bd95760008181526003602052604090819020805460ff1916600190811790915560058054909101905551339082907f8326de45f66576db8724d4b3fca6bd518de1924e3dd3a2a62722d49e2ed3418390610bd0908b908b90611312565b60405180910390a35b600081815260026020908152604082208054600181018255908352912042916003020180610c0887898361137d565b5060018101610c1885878361137d565b506002810180546001600160401b0384166001600160e01b03199091161733600160401b81029190911790915560048054600101905560405184907f783b044dce7b053b4c6530b32077a369784582a0132610e0359c9e28b69f8eea90610c8c908d908d908d908d908d908d908c9061143d565b60405180910390a3505050505050505050565b6000546001600160a01b03163314610cca5760405163ea8e4eb560e01b815260040160405180910390fd5b6000610d0b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610d3d57604051638b7114df60e01b815260040160405180910390fd5b336001600160a01b0316817fc53877e0156390b35fbfb90b9bcef46d8f85fe9c2906f3d4130418739a02868c87878787604051610d7d9493929190611497565b60405180910390a35050505050565b600060036000610dd185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260208101919091526040016000205460ff169392505050565b6000546001600160a01b03163314610e175760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610e3e57604051632a52b3c360e11b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b805160209091012090565b6040518060800160405280606081526020016060815260200160006001600160401b0316815260200160006001600160a01b031681525090565b60008083601f840112610ee657600080fd5b5081356001600160401b03811115610efd57600080fd5b602083019150836020828501011115610f1557600080fd5b9250929050565b600080600060408486031215610f3157600080fd5b83356001600160401b03811115610f4757600080fd5b610f5386828701610ed4565b909790965060209590950135949350505050565b6000815180845260005b81811015610f8d57602081850181015186830182015201610f71565b506000602082860101526020601f19601f83011685010191505092915050565b6000815160808452610fc26080850182610f67565b905060208301518482036020860152610fdb8282610f67565b6040858101516001600160401b0316908701526060948501516001600160a01b03169490950193909352509192915050565b6020815260006110206020830184610fad565b9392505050565b6000806020838503121561103a57600080fd5b82356001600160401b0381111561105057600080fd5b61105c85828601610ed4565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156110bd57603f198886030184526110ab858351610fad565b9450928501929085019060010161108f565b5092979650505050505050565b600080600080606085870312156110e057600080fd5b84356001600160401b038111156110f657600080fd5b61110287828801610ed4565b90989097506020870135966040013595509350505050565b6000806000806000806060878903121561113357600080fd5b86356001600160401b038082111561114a57600080fd5b6111568a838b01610ed4565b9098509650602089013591508082111561116f57600080fd5b61117b8a838b01610ed4565b9096509450604089013591508082111561119457600080fd5b506111a189828a01610ed4565b979a9699509497509295939492505050565b600080600080604085870312156111c957600080fd5b84356001600160401b03808211156111e057600080fd5b6111ec88838901610ed4565b9096509450602087013591508082111561120557600080fd5b5061121287828801610ed4565b95989497509550505050565b60006020828403121561123057600080fd5b81356001600160a01b038116811461102057600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561065057610650611297565b8082018082111561065057610650611297565b634e487b7160e01b600052604160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006113266020830184866112e9565b949350505050565b601f82111561137857600081815260208120601f850160051c810160208610156113555750805b601f850160051c820191505b8181101561137457828155600101611361565b5050505b505050565b6001600160401b03831115611394576113946112d3565b6113a8836113a2835461125d565b8361132e565b6000601f8411600181146113dc57600085156113c45750838201355b600019600387901b1c1916600186901b178355611436565b600083815260209020601f19861690835b8281101561140d57868501358255602094850194600190920191016113ed565b508682101561142a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60808152600061145160808301898b6112e9565b828103602084015261146481888a6112e9565b905082810360408401526114798186886112e9565b9150506001600160401b038316606083015298975050505050505050565b6040815260006114ab6040830186886112e9565b82810360208401526114be8185876112e9565b97965050505050505056fea26469706673582212206c7156ab15df2881698700e98ccd73bb0037c7dfcd54dc99ce31a2c83445fb7364736f6c63430008140033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e16d98b511610066578063e16d98b5146101f7578063e30c39781461021a578063f2fde38b1461022d578063ffa1ad741461024057600080fd5b80638da5cb5b1461019357806395cac59f146101be578063d666ac41146101d1578063d7a14203146101e457600080fd5b80636da49b83116100d35780636da49b831461015a57806379ba5097146101635780638128e6c61461016d578063837f9ef31461018057600080fd5b8063011f1241146100fa57806314e4058e146101235780636048574214610143575b600080fd5b61010d610108366004610f1c565b610248565b60405161011a919061100d565b60405180910390f35b610136610131366004611027565b61044c565b60405161011a9190611068565b61014c60045481565b60405190815260200161011a565b61014c60055481565b61016b610656565b005b61010d61017b366004611027565b6106d8565b61014c61018e366004611027565b61077b565b6000546101a6906001600160a01b031681565b6040516001600160a01b03909116815260200161011a565b6101366101cc3660046110ca565b6107d8565b61016b6101df36600461111a565b610ab5565b61016b6101f23660046111b3565b610c9f565b61020a610205366004611027565b610d8c565b604051901515815260200161011a565b6001546101a6906001600160a01b031681565b61016b61023b36600461121e565b610dec565b61014c600181565b610250610e9a565b60006002600061029587878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020019081526020016000209050808054905083106102c957604051634e23d03560e01b815260040160405180910390fd5b8083815481106102db576102db611247565b90600052602060002090600302016040518060800160405290816000820180546103049061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103309061125d565b801561037d5780601f106103525761010080835404028352916020019161037d565b820191906000526020600020905b81548152906001019060200180831161036057829003601f168201915b505050505081526020016001820180546103969061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546103c29061125d565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b031660409091015295945050505050565b60606002600061049185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561064957838290600052602060002090600302016040518060800160405290816000820180546104f29061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061125d565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b505050505081526020016001820180546105849061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061125d565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b5050509183525050600291909101546001600160401b038116602080840191909152600160401b9091046001600160a01b031660409092019190915290825260019290920191016104bf565b5050505090505b92915050565b6001546001600160a01b031633146106815760405163ea8e4eb560e01b815260040160405180910390fd5b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6106e0610e9a565b60006002600061072586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260200190815260200160002090506000818054905090508060000361075f5760405163792120e960e01b815260040160405180910390fd5b8161076b6001836112ad565b815481106102db576102db611247565b6000600260006107c085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020549392505050565b6060816000036107fb576040516311f6547b60e21b815260040160405180910390fd5b60006002600061084088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b81526020810191909152604001600020805490915080851061087557604051634e23d03560e01b815260040160405180910390fd5b600061088185876112c0565b90508181111561088e5750805b600061089a87836112ad565b90506000816001600160401b038111156108b6576108b66112d3565b6040519080825280602002602001820160405280156108ef57816020015b6108dc610e9a565b8152602001906001900390816108d45790505b50905060005b82811015610aa75785610908828b6112c0565b8154811061091857610918611247565b90600052602060002090600302016040518060800160405290816000820180546109419061125d565b80601f016020809104026020016040519081016040528092919081815260200182805461096d9061125d565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b505050505081526020016001820180546109d39061125d565b80601f01602080910402602001604051908101604052809291908181526020018280546109ff9061125d565b8015610a4c5780601f10610a2157610100808354040283529160200191610a4c565b820191906000526020600020905b815481529060010190602001808311610a2f57829003601f168201915b5050509183525050600291909101546001600160401b0381166020830152600160401b90046001600160a01b03166040909101528251839083908110610a9457610a94611247565b60209081029190910101526001016108f5565b509998505050505050505050565b6000859003610ad757604051637900159560e01b815260040160405180910390fd5b6000839003610af95760405163eabfb56d60e01b815260040160405180910390fd5b6000819003610b1b57604051638a41014160e01b815260040160405180910390fd5b6000610b5c87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610bd95760008181526003602052604090819020805460ff1916600190811790915560058054909101905551339082907f8326de45f66576db8724d4b3fca6bd518de1924e3dd3a2a62722d49e2ed3418390610bd0908b908b90611312565b60405180910390a35b600081815260026020908152604082208054600181018255908352912042916003020180610c0887898361137d565b5060018101610c1885878361137d565b506002810180546001600160401b0384166001600160e01b03199091161733600160401b81029190911790915560048054600101905560405184907f783b044dce7b053b4c6530b32077a369784582a0132610e0359c9e28b69f8eea90610c8c908d908d908d908d908d908d908c9061143d565b60405180910390a3505050505050505050565b6000546001600160a01b03163314610cca5760405163ea8e4eb560e01b815260040160405180910390fd5b6000610d0b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b60008181526003602052604090205490915060ff16610d3d57604051638b7114df60e01b815260040160405180910390fd5b336001600160a01b0316817fc53877e0156390b35fbfb90b9bcef46d8f85fe9c2906f3d4130418739a02868c87878787604051610d7d9493929190611497565b60405180910390a35050505050565b600060036000610dd185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e8f92505050565b815260208101919091526040016000205460ff169392505050565b6000546001600160a01b03163314610e175760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038116610e3e57604051632a52b3c360e11b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b805160209091012090565b6040518060800160405280606081526020016060815260200160006001600160401b0316815260200160006001600160a01b031681525090565b60008083601f840112610ee657600080fd5b5081356001600160401b03811115610efd57600080fd5b602083019150836020828501011115610f1557600080fd5b9250929050565b600080600060408486031215610f3157600080fd5b83356001600160401b03811115610f4757600080fd5b610f5386828701610ed4565b909790965060209590950135949350505050565b6000815180845260005b81811015610f8d57602081850181015186830182015201610f71565b506000602082860101526020601f19601f83011685010191505092915050565b6000815160808452610fc26080850182610f67565b905060208301518482036020860152610fdb8282610f67565b6040858101516001600160401b0316908701526060948501516001600160a01b03169490950193909352509192915050565b6020815260006110206020830184610fad565b9392505050565b6000806020838503121561103a57600080fd5b82356001600160401b0381111561105057600080fd5b61105c85828601610ed4565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156110bd57603f198886030184526110ab858351610fad565b9450928501929085019060010161108f565b5092979650505050505050565b600080600080606085870312156110e057600080fd5b84356001600160401b038111156110f657600080fd5b61110287828801610ed4565b90989097506020870135966040013595509350505050565b6000806000806000806060878903121561113357600080fd5b86356001600160401b038082111561114a57600080fd5b6111568a838b01610ed4565b9098509650602089013591508082111561116f57600080fd5b61117b8a838b01610ed4565b9096509450604089013591508082111561119457600080fd5b506111a189828a01610ed4565b979a9699509497509295939492505050565b600080600080604085870312156111c957600080fd5b84356001600160401b03808211156111e057600080fd5b6111ec88838901610ed4565b9096509450602087013591508082111561120557600080fd5b5061121287828801610ed4565b95989497509550505050565b60006020828403121561123057600080fd5b81356001600160a01b038116811461102057600080fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061127157607f821691505b60208210810361129157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561065057610650611297565b8082018082111561065057610650611297565b634e487b7160e01b600052604160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006113266020830184866112e9565b949350505050565b601f82111561137857600081815260208120601f850160051c810160208610156113555750805b601f850160051c820191505b8181101561137457828155600101611361565b5050505b505050565b6001600160401b03831115611394576113946112d3565b6113a8836113a2835461125d565b8361132e565b6000601f8411600181146113dc57600085156113c45750838201355b600019600387901b1c1916600186901b178355611436565b600083815260209020601f19861690835b8281101561140d57868501358255602094850194600190920191016113ed565b508682101561142a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60808152600061145160808301898b6112e9565b828103602084015261146481888a6112e9565b905082810360408401526114798186886112e9565b9150506001600160401b038316606083015298975050505050505050565b6040815260006114ab6040830186886112e9565b82810360208401526114be8185876112e9565b97965050505050505056fea26469706673582212206c7156ab15df2881698700e98ccd73bb0037c7dfcd54dc99ce31a2c83445fb7364736f6c63430008140033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.