Holesky Testnet

Contract

0xC086678feCAEa10012D7a6E287b765744012F4E7

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Step8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000011020.02753401
Rotate8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000020540.02753401
Step8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000011020.02753401
Rotate8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000020540.02753401
Step8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000011020.02753401
Rotate8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000020540.02753401
Step8994292024-02-08 4:29:48238 days ago1707366588IN
0xC086678f...44012F4E7
0 ETH0.000011020.02753401
Rotate8994282024-02-08 4:29:36238 days ago1707366576IN
0xC086678f...44012F4E7
0 ETH0.000018440.02471255
Rotate8994282024-02-08 4:29:36238 days ago1707366576IN
0xC086678f...44012F4E7
0 ETH0.000018440.02471255
Rotate8500682024-01-31 19:37:48246 days ago1706729868IN
0xC086678f...44012F4E7
0 ETH0.000826381.1074312
Rotate8499982024-01-31 19:23:48246 days ago1706729028IN
0xC086678f...44012F4E7
0 ETH0.000779181.04420711
Rotate8499352024-01-31 19:11:12246 days ago1706728272IN
0xC086678f...44012F4E7
0 ETH0.000773431.03648124
Rotate8498712024-01-31 18:57:48246 days ago1706727468IN
0xC086678f...44012F4E7
0 ETH0.000813191.0897317
Rotate8497702024-01-31 18:37:12246 days ago1706726232IN
0xC086678f...44012F4E7
0 ETH0.00084591.13370823
Rotate8497162024-01-31 18:24:36246 days ago1706725476IN
0xC086678f...44012F4E7
0 ETH0.000759621.01794001
Rotate8496552024-01-31 18:11:48246 days ago1706724708IN
0xC086678f...44012F4E7
0 ETH0.000883441.18369921
Rotate8495932024-01-31 17:58:48246 days ago1706723928IN
0xC086678f...44012F4E7
0 ETH0.000801061.07336135
Rotate8495312024-01-31 17:45:36246 days ago1706723136IN
0xC086678f...44012F4E7
0 ETH0.000795431.0659359
Rotate8494692024-01-31 17:32:24246 days ago1706722344IN
0xC086678f...44012F4E7
0 ETH0.000845691.13327232
Rotate8494042024-01-31 17:19:00246 days ago1706721540IN
0xC086678f...44012F4E7
0 ETH0.000839741.12529988
Rotate8493472024-01-31 17:06:12246 days ago1706720772IN
0xC086678f...44012F4E7
0 ETH0.000808461.08338005
Rotate8492862024-01-31 16:53:12246 days ago1706719992IN
0xC086678f...44012F4E7
0 ETH0.000806141.08022105
Rotate8492302024-01-31 16:41:00246 days ago1706719260IN
0xC086678f...44012F4E7
0 ETH0.000755931.01304018
Rotate8491612024-01-31 16:26:36246 days ago1706718396IN
0xC086678f...44012F4E7
0 ETH0.00083531.11936478
Rotate8491002024-01-31 16:13:48246 days ago1706717628IN
0xC086678f...44012F4E7
0 ETH0.000764491.02445955
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xc90C333F...7070582e1
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Spectre

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 6 : Spectre.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

import {SyncStepLib} from "./SyncStepLib.sol";
import {RotateLib} from "./RotateLib.sol";
import {SyncStepCompressedVerifier} from "./interfaces/SyncStepVerifier.sol";
import {CommitteeUpdateVerifier} from "./interfaces/CommitteeUpdateVerifier.sol";

contract Spectre {
    using SyncStepLib for SyncStepLib.SyncStepInput;
    using RotateLib for RotateLib.RotateInput;

    uint256 internal immutable SLOTS_PER_PERIOD;

    /// Maps from a sync period to the poseidon commitment for the sync committee.
    mapping(uint256 => uint256) public syncCommitteePoseidons;

    /// Maps from a slot to a beacon block header root.
    mapping(uint256 => bytes32) public blockHeaderRoots;

    /// Maps from a slot to the current finalized ethereum1 execution state root.
    mapping(uint256 => bytes32) public executionPayloadRoots;

    /// The highest slot that has been verified
    uint256 public head = 0;

    SyncStepCompressedVerifier public immutable stepVerifier;
    CommitteeUpdateVerifier public immutable committeeUpdateVerifier;

    constructor(
        address _stepVerifierAddress,
        address _committeeUpdateVerifierAddress,
        uint256 _initialSyncPeriod,
        uint256 _initialSyncCommitteePoseidon,
        uint256 _slotsPerPeriod
    ) {
        stepVerifier = SyncStepCompressedVerifier(_stepVerifierAddress);
        committeeUpdateVerifier = CommitteeUpdateVerifier(
            _committeeUpdateVerifierAddress
        );
        syncCommitteePoseidons[
            _initialSyncPeriod
        ] = _initialSyncCommitteePoseidon;
        SLOTS_PER_PERIOD = _slotsPerPeriod;
    }

    /// @notice Verify that a sync committee has attested to a block that finalizes the given header root and execution payload
    /// @param input The input to the sync step. Defines the slot and attestation to verify
    /// @param proof The proof for the sync step
    function step(
        SyncStepLib.SyncStepInput calldata input,
        bytes calldata proof
    ) external {
        uint256 currentPeriod = getSyncCommitteePeriod(input.attestedSlot);

        if (syncCommitteePoseidons[currentPeriod] == 0) {
            revert("Sync committee not yet set for this period");
        }
        uint256[14] memory pubInputs = input.toPublicInputs(
            syncCommitteePoseidons[currentPeriod]
        );

        bool success = stepVerifier.verify(pubInputs, proof);
        if (!success) {
            revert("Proof verification failed");
        }

        // update the contract state
        executionPayloadRoots[input.finalizedSlot] = input.executionPayloadRoot;
        blockHeaderRoots[input.finalizedSlot] = input.finalizedHeaderRoot;
        head = input.finalizedSlot;
    }

    /// @notice Use the current sync committee to verify the transition to a new sync committee
    /// @param rotateInput The input to the sync step.
    /// @param rotateProof The proof for the rotation
    /// @param stepInput The input to the sync step.
    /// @param stepProof The proof for the sync step
    function rotate(
        RotateLib.RotateInput calldata rotateInput,
        bytes calldata rotateProof,
        SyncStepLib.SyncStepInput calldata stepInput,
        bytes calldata stepProof
    ) external {
        // *step phase*
        // This allows trusting that the current sync committee has signed off on the finalizedHeaderRoot which is used as the base of the SSZ proof
        // that checks the new committee is in the beacon state 'next_sync_committee' field. It also allows trusting the finalizedSlot which is
        // used to calculate the sync period that the new committee belongs to.
        uint256 attestingPeriod = getSyncCommitteePeriod(
            stepInput.attestedSlot
        );

        uint256[14] memory stepVeriferInputs = stepInput.toPublicInputs(
            syncCommitteePoseidons[attestingPeriod]
        );

        bool stepSuccess = stepVerifier.verify(stepVeriferInputs, stepProof);
        if (!stepSuccess) {
            revert("Step proof verification failed");
        }

        // *rotation phase*
        // This proof checks that the given poseidon commitment and SSZ commitment to the sync committee are equivalent and that
        // that there exists an SSZ proof that can verify this SSZ commitment to the committee is in the state
        uint256 currentPeriod = getSyncCommitteePeriod(stepInput.finalizedSlot);
        uint256 nextPeriod = currentPeriod + 1;
        uint256[77] memory rotateVerifierInputs = rotateInput.toPublicInputs(
            stepInput.finalizedHeaderRoot
        );
        bool rotateSuccess = committeeUpdateVerifier.verify(
            rotateVerifierInputs,
            rotateProof
        );
        if (!rotateSuccess) {
            revert("Rotation proof verification failed");
        }

        // update the contract state
        syncCommitteePoseidons[nextPeriod] = rotateInput.syncCommitteePoseidon;
    }

    function getSyncCommitteePeriod(
        uint256 slot
    ) internal view returns (uint256) {
        return slot / SLOTS_PER_PERIOD;
    }
}

File 2 of 6 : SyncStepLib.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

import { EndianConversions } from "./EndianConversions.sol";

library SyncStepLib {
    struct SyncStepInput {
        uint64 attestedSlot;
        uint64 finalizedSlot;
        uint64 participation;
        bytes32 finalizedHeaderRoot;
        bytes32 executionPayloadRoot;
        uint256[12] accumulator;
    }

    /**
    * @notice Compute the public input commitment for the sync step given this input.
    *         This must always match the prodecure used in lightclient-circuits/src/sync_step_circuit.rs - SyncStepCircuit::instance()
    * @param args The arguments for the sync step
    * @return The public input commitment that can be sent to the verifier contract.
     */
    function toPublicInputs(SyncStepInput memory args, uint256 syncCommitteePoseidon) internal pure returns (uint256[14] memory) {
        uint256[14] memory inputs;

        for (uint256 i = 0; i < args.accumulator.length; i++) {
            inputs[i] = args.accumulator[i];
        }

        bytes32 h = sha256(abi.encodePacked(
            EndianConversions.toLittleEndian64(args.attestedSlot),
            EndianConversions.toLittleEndian64(args.finalizedSlot),
            EndianConversions.toLittleEndian64(args.participation),
            args.finalizedHeaderRoot,
            args.executionPayloadRoot
        ));
        uint256 commitment = uint256(EndianConversions.toLittleEndian(uint256(h)));

        

        inputs[args.accumulator.length] = commitment & ((uint256(1) << 253) - 1); // truncated to 253 bits
        inputs[args.accumulator.length + 1] = syncCommitteePoseidon;

        return inputs;
    }
}

File 3 of 6 : RotateLib.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

import { EndianConversions } from "./EndianConversions.sol";

library RotateLib {

    struct RotateInput {
        bytes32 syncCommitteeSSZ;
        uint256 syncCommitteePoseidon;
        uint256[12] accumulator;
    }

    /**
    * @notice Compute the public input commitment for the rotation
    *           This must always match the method used in  lightclient-circuits/src/committee_udate_circuit.rs - CommitteeUpdateCircuit::instance()
    * @param args The arguments for the sync step
    * @return The public input commitment that can be sent to the verifier contract.
     */
    function toPublicInputs(RotateInput memory args, bytes32 finalizedHeaderRoot) internal pure returns (uint256[77] memory) {
        uint256[77] memory inputs;

        for (uint256 i = 0; i < args.accumulator.length; i++) {
            inputs[i] = args.accumulator[i];
        }

        inputs[args.accumulator.length] = args.syncCommitteePoseidon;

        uint256 syncCommitteeSSZNumeric = uint256(args.syncCommitteeSSZ);
        for (uint256 i = 0; i < 32; i++) {
            inputs[args.accumulator.length + 32 - i] = syncCommitteeSSZNumeric % 2 ** 8;
            syncCommitteeSSZNumeric = syncCommitteeSSZNumeric / 2 ** 8;
        }

        uint256 finalizedHeaderRootNumeric = uint256(finalizedHeaderRoot);
        for (uint256 j = 0; j < 32; j++) {
            inputs[args.accumulator.length + 64 - j] = finalizedHeaderRootNumeric % 2 ** 8;
            finalizedHeaderRootNumeric = finalizedHeaderRootNumeric / 2 ** 8;
        }

        return inputs;
    }
}

File 4 of 6 : SyncStepVerifier.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

interface SyncStepVerifier {
    function verify(uint256[2] calldata input, bytes calldata proof) external returns (bool);
}

interface SyncStepCompressedVerifier {
    function verify(uint256[14] calldata pubInputs, bytes calldata proof) external returns (bool);
}

File 5 of 6 : CommitteeUpdateVerifier.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

interface CommitteeUpdateVerifier {
    function verify(uint256[77] calldata pubInputs, bytes calldata proof) external returns (bool);
}

File 6 of 6 : EndianConversions.sol
// The Licensed Work is (c) 2023 ChainSafe
// Code: https://github.com/ChainSafe/Spectre
// SPDX-License-Identifier: LGPL-3.0-only

pragma solidity ^0.8.0;

library EndianConversions {
    function toLittleEndian64(uint64 v) internal pure returns (bytes8) {
        v = ((v & 0xFF00FF00FF00FF00) >> 8) | ((v & 0x00FF00FF00FF00FF) << 8);
        v = ((v & 0xFFFF0000FFFF0000) >> 16) | ((v & 0x0000FFFF0000FFFF) << 16);
        v = ((v & 0xFFFFFFFF00000000) >> 32) | ((v & 0x00000000FFFFFFFF) << 32);
        return bytes8(v);
    }

    function toLittleEndian(uint256 v) internal pure returns (bytes32) {
        v = ((v & 0xFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00) >> 8)
            | ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);
        v = ((v & 0xFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000) >> 16)
            | ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);
        v = ((v & 0xFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000) >> 32)
            | ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);
        v = ((v & 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF0000000000000000) >> 64)
            | ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);
        v = (v >> 128) | (v << 128);
        return bytes32(v);
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "constantOptimizer": true,
      "yul": false
    }
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stepVerifierAddress","type":"address"},{"internalType":"address","name":"_committeeUpdateVerifierAddress","type":"address"},{"internalType":"uint256","name":"_initialSyncPeriod","type":"uint256"},{"internalType":"uint256","name":"_initialSyncCommitteePoseidon","type":"uint256"},{"internalType":"uint256","name":"_slotsPerPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blockHeaderRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"committeeUpdateVerifier","outputs":[{"internalType":"contract CommitteeUpdateVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"executionPayloadRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"head","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"syncCommitteeSSZ","type":"bytes32"},{"internalType":"uint256","name":"syncCommitteePoseidon","type":"uint256"},{"internalType":"uint256[12]","name":"accumulator","type":"uint256[12]"}],"internalType":"struct RotateLib.RotateInput","name":"rotateInput","type":"tuple"},{"internalType":"bytes","name":"rotateProof","type":"bytes"},{"components":[{"internalType":"uint64","name":"attestedSlot","type":"uint64"},{"internalType":"uint64","name":"finalizedSlot","type":"uint64"},{"internalType":"uint64","name":"participation","type":"uint64"},{"internalType":"bytes32","name":"finalizedHeaderRoot","type":"bytes32"},{"internalType":"bytes32","name":"executionPayloadRoot","type":"bytes32"},{"internalType":"uint256[12]","name":"accumulator","type":"uint256[12]"}],"internalType":"struct SyncStepLib.SyncStepInput","name":"stepInput","type":"tuple"},{"internalType":"bytes","name":"stepProof","type":"bytes"}],"name":"rotate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"attestedSlot","type":"uint64"},{"internalType":"uint64","name":"finalizedSlot","type":"uint64"},{"internalType":"uint64","name":"participation","type":"uint64"},{"internalType":"bytes32","name":"finalizedHeaderRoot","type":"bytes32"},{"internalType":"bytes32","name":"executionPayloadRoot","type":"bytes32"},{"internalType":"uint256[12]","name":"accumulator","type":"uint256[12]"}],"internalType":"struct SyncStepLib.SyncStepInput","name":"input","type":"tuple"},{"internalType":"bytes","name":"proof","type":"bytes"}],"name":"step","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stepVerifier","outputs":[{"internalType":"contract SyncStepCompressedVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"syncCommitteePoseidons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063ab845fd31161005b578063ab845fd314610115578063b34711ab1461013c578063c22fc36a1461015c578063c9ac04591461017c57600080fd5b806353c0004d1461008d5780637865b2d5146100c3578063828f504f146100d85780638f7dcfa31461010c575b600080fd5b6100ad61009b366004610a1f565b60016020526000908152604090205481565b6040516100ba9190610a50565b60405180910390f35b6100d66100d1366004610acc565b61018f565b005b6100ff7f000000000000000000000000fa27fe30ff012b80b7844424da0b5872b3e3497e81565b6040516100ba9190610b5a565b6100ad60035481565b6100ff7f000000000000000000000000ea6468b3a91af00909a4f9d9b4f4e73142b8f59c81565b6100ad61014a366004610a1f565b60006020819052908152604090205481565b6100ad61016a366004610a1f565b60026020526000908152604090205481565b6100d661018a366004610b7e565b61035b565b60006101b06101a16020860186610c3f565b67ffffffffffffffff16610566565b600081815260208190526040812054919250036101e85760405162461bcd60e51b81526004016101df90610caa565b60405180910390fd5b6000818152602081905260408120546102109061020a36889003880188610e50565b90610598565b905060007f000000000000000000000000fa27fe30ff012b80b7844424da0b5872b3e3497e6001600160a01b03166369f0433b8387876040518463ffffffff1660e01b815260040161026493929190610ee9565b6020604051808303816000875af1158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a79190610f28565b9050806102c65760405162461bcd60e51b81526004016101df90610f80565b6080860135600260006102df60408a0160208b01610c3f565b67ffffffffffffffff168152602001908152602001600020819055508560600135600160008860200160208101906103179190610c3f565b67ffffffffffffffff168152602001908152602001600020819055508560200160208101906103469190610c3f565b67ffffffffffffffff16600355505050505050565b600061036d6101a16020860186610c3f565b600081815260208190526040812054919250906103939061020a36889003880188610e50565b905060007f000000000000000000000000fa27fe30ff012b80b7844424da0b5872b3e3497e6001600160a01b03166369f0433b8387876040518463ffffffff1660e01b81526004016103e793929190610ee9565b6020604051808303816000875af1158015610406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042a9190610f28565b9050806104495760405162461bcd60e51b81526004016101df90610fc4565b600061045e6101a16040890160208a01610c3f565b9050600061046d826001610fea565b9050600061048e60608a0135610488368f90038f018f61105c565b9061081d565b905060007f000000000000000000000000ea6468b3a91af00909a4f9d9b4f4e73142b8f59c6001600160a01b031663cacd830e838e8e6040518463ffffffff1660e01b81526004016104e2939291906110aa565b6020604051808303816000875af1158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190610f28565b9050806105445760405162461bcd60e51b81526004016101df9061110c565b50506000908152602081815260409091209a0135909955505050505050505050565b60006105927f000000000000000000000000000000000000000000000000000000000000200083611132565b92915050565b6105a06109c6565b6105a86109c6565b60005b600c8110156105f8578460a0015181600c81106105ca576105ca611146565b60200201518282600e81106105e1576105e1611146565b6020020152806105f08161115c565b9150506105ab565b506000600261060a8660000151610962565b6106178760200151610962565b6106248860400151610962565b8860600151896080015160405160200161064295949392919061118c565b60408051601f198184030181529082905261065c9161122b565b602060405180830381855afa158015610679573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061069c9190611249565b905060007bffffffff000000000000000000000000ffffffff00000000000000007eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000600884811c9182167fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000009186901b91821617601090811c7cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff9093167dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0090921691909117901b17602081811c9283167fffffffff000000000000000000000000ffffffff0000000000000000000000009290911b91821617604090811c73ffffffff000000000000000000000000ffffffff90931677ffffffff000000000000000000000000ffffffff0000000090921691909117901b17608081811c91901b1790506107e86001600160fd1b61126a565b811661018084015284836107fe600c6001610fea565b600e811061080e5761080e611146565b60200201525090949350505050565b6108256109e5565b61082d6109e5565b60005b600c81101561087d57846040015181600c811061084f5761084f611146565b60200201518282604d811061086657610866611146565b6020020152806108758161115c565b915050610830565b506020840151610180820152835160005b60208110156108f0576108a36101008361127d565b83826108b1600c6020610fea565b6108bb919061126a565b604d81106108cb576108cb611146565b60200201526108dc61010083611132565b9150806108e88161115c565b91505061088e565b508360005b60208110156109575761090a6101008361127d565b8482610918600c6040610fea565b610922919061126a565b604d811061093257610932611146565b602002015261094361010083611132565b91508061094f8161115c565b9150506108f5565b509195945050505050565b66ff000000ff0000600882811c91821667ff000000ff0000009390911b92831617601090811c64ff000000ff90921665ff000000ff009093169290921790911b17602081811c63ffffffff1667ffffffff000000009290911b919091161760c01b90565b604051806101c00160405280600e906020820280368337509192915050565b604051806109a00160405280604d906020820280368337509192915050565b805b8114610a1157600080fd5b50565b803561059281610a04565b600060208284031215610a3457610a34600080fd5b6000610a408484610a14565b949350505050565b805b82525050565b602081016105928284610a48565b60006102208284031215610a7457610a74600080fd5b50919050565b60008083601f840112610a8f57610a8f600080fd5b50813567ffffffffffffffff811115610aaa57610aaa600080fd5b602083019150836001820283011115610ac557610ac5600080fd5b9250929050565b60008060006102408486031215610ae557610ae5600080fd5b6000610af18686610a5e565b93505061022084013567ffffffffffffffff811115610b1257610b12600080fd5b610b1e86828701610a7a565b92509250509250925092565b60006001600160a01b038216610592565b600061059282610b2a565b600061059282610b3b565b610a4a81610b46565b602081016105928284610b51565b60006101c08284031215610a7457610a74600080fd5b6000806000806000806104208789031215610b9b57610b9b600080fd5b6000610ba78989610b68565b9650506101c087013567ffffffffffffffff811115610bc857610bc8600080fd5b610bd489828a01610a7a565b95509550506101e0610be889828a01610a5e565b93505061040087013567ffffffffffffffff811115610c0957610c09600080fd5b610c1589828a01610a7a565b92509250509295509295509295565b67ffffffffffffffff8116610a06565b803561059281610c24565b600060208284031215610c5457610c54600080fd5b6000610a408484610c34565b602a81526000602082017f53796e6320636f6d6d6974746565206e6f74207965742073657420666f7220748152691a1a5cc81c195c9a5bd960b21b602082015291505b5060400190565b6020808252810161059281610c60565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610cf657610cf6610cba565b6040525050565b6000610d0860405190565b9050610d148282610cd0565b919050565b600067ffffffffffffffff821115610d3357610d33610cba565b5060200290565b6000610d4d610d4884610d19565b610cfd565b90508060208402830185811115610d6657610d66600080fd5b835b81811015610d8a5780610d7b8882610a14565b84525060209283019201610d68565b5050509392505050565b600082601f830112610da857610da8600080fd5b600c610a40848285610d3a565b60006102208284031215610dcb57610dcb600080fd5b610dd560c0610cfd565b90506000610de38484610c34565b8252506020610df484848301610c34565b6020830152506040610e0884828501610c34565b6040830152506060610e1c84828501610a14565b6060830152506080610e3084828501610a14565b60808301525060a0610e4484828501610d94565b60a08301525092915050565b60006102208284031215610e6657610e66600080fd5b6000610a408484610db5565b6000610e7e8383610a48565b505060200190565b600e818060005b83811015610eb2578151610ea18782610e72565b965060208301925050600101610e8d565b505050505050565b82818337506000910152565b8183526000602084019350610edc838584610eba565b5050601f01601f19160190565b6101e08101610ef88286610e86565b8181036101c0830152610f0c818486610ec6565b95945050505050565b801515610a06565b805161059281610f15565b600060208284031215610f3d57610f3d600080fd5b6000610a408484610f1d565b601981526000602082017f50726f6f6620766572696669636174696f6e206661696c656400000000000000815291505b5060200190565b6020808252810161059281610f49565b601e81526000602082017f537465702070726f6f6620766572696669636174696f6e206661696c6564000081529150610f79565b6020808252810161059281610f90565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059257610592610fd4565b60006101c0828403121561101357611013600080fd5b61101d6060610cfd565b9050600061102b8484610a14565b825250602061103c84848301610a14565b602083015250604061105084828501610d94565b60408301525092915050565b60006101c0828403121561107257611072600080fd5b6000610a408484610ffd565b604d818060005b83811015610eb25781516110998782610e72565b965060208301925050600101611085565b6109c081016110b9828661107e565b8181036109a0830152610f0c818486610ec6565b602281526000602082017f526f746174696f6e2070726f6f6620766572696669636174696f6e206661696c815261195960f21b60208201529150610ca3565b60208082528101610592816110cd565b634e487b7160e01b600052601260045260246000fd5b6000826111415761114161111c565b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019820361116f5761116f610fd4565b5060010190565b6001600160c01b03198116610a4a565b80610a4a565b60006111988288611176565b6008820191506111a88287611176565b6008820191506111b88286611176565b6008820191506111c88285611186565b6020820191506111d88284611186565b5060200195945050505050565b60005b838110156112005781810151838201526020016111e8565b50506000910152565b6000611213825190565b6112218185602086016111e5565b9290920192915050565b60006112378284611209565b9392505050565b805161059281610a04565b60006020828403121561125e5761125e600080fd5b6000610a40848461123e565b8181038181111561059257610592610fd4565b60008261128c5761128c61111c565b50069056fea2646970667358221220d358b6d3235b06e3854bd4cfa50f1b957573e1141af605e6907f215c7a54e2bc64736f6c63430008130033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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