Sepolia Testnet

Contract

0x465fd0D78B9AfE39DF588b308dc748aa25817C9F

Overview

ETH Balance

0 ETH

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Step52049022024-02-02 15:23:00414 days ago1706887380IN
0x465fd0D7...a25817C9F
0 ETH0.0313587678.29395038
Step52048382024-02-02 15:09:00414 days ago1706886540IN
0x465fd0D7...a25817C9F
0 ETH0.0325403990.91376346
Step52047892024-02-02 14:58:36414 days ago1706885916IN
0x465fd0D7...a25817C9F
0 ETH0.0285142771.18992807
Step52047762024-02-02 14:55:48414 days ago1706885748IN
0x465fd0D7...a25817C9F
0 ETH0.0296348273.99420429
Step52047222024-02-02 14:44:12414 days ago1706885052IN
0x465fd0D7...a25817C9F
0 ETH0.0194102954.22808338
Step52046962024-02-02 14:39:00414 days ago1706884740IN
0x465fd0D7...a25817C9F
0 ETH0.0229761757.36155787
Step52046752024-02-02 14:34:48414 days ago1706884488IN
0x465fd0D7...a25817C9F
0 ETH0.0295500273.77804566
Step52046552024-02-02 14:30:36414 days ago1706884236IN
0x465fd0D7...a25817C9F
0 ETH0.0276253368.97470441
Step52045962024-02-02 14:18:48414 days ago1706883528IN
0x465fd0D7...a25817C9F
0 ETH0.0288147380.51551877
Step52045742024-02-02 14:14:24414 days ago1706883264IN
0x465fd0D7...a25817C9F
0 ETH0.0306103676.4322805
Step52045582024-02-02 14:11:12414 days ago1706883072IN
0x465fd0D7...a25817C9F
0 ETH0.0293249873.21180188
Step52045002024-02-02 13:59:12414 days ago1706882352IN
0x465fd0D7...a25817C9F
0 ETH0.0277407369.26490893
Step52044372024-02-02 13:45:48414 days ago1706881548IN
0x465fd0D7...a25817C9F
0 ETH0.0210833252.64067454
Step52044092024-02-02 13:40:00414 days ago1706881200IN
0x465fd0D7...a25817C9F
0 ETH0.0182081245.46462077
Step52043802024-02-02 13:34:12414 days ago1706880852IN
0x465fd0D7...a25817C9F
0 ETH0.014731741.15851987
Step52043532024-02-02 13:28:36414 days ago1706880516IN
0x465fd0D7...a25817C9F
0 ETH0.0188754647.12952027
Step52043352024-02-02 13:24:48414 days ago1706880288IN
0x465fd0D7...a25817C9F
0 ETH0.0203856350.89562103
Step52043132024-02-02 13:20:24414 days ago1706880024IN
0x465fd0D7...a25817C9F
0 ETH0.022684356.63289573
Step52042352024-02-02 13:02:36414 days ago1706878956IN
0x465fd0D7...a25817C9F
0 ETH0.0177832344.40102927
Step52041722024-02-02 12:48:48414 days ago1706878128IN
0x465fd0D7...a25817C9F
0 ETH0.0163469440.81979872
Step52041442024-02-02 12:42:48414 days ago1706877768IN
0x465fd0D7...a25817C9F
0 ETH0.0159317939.77599071
Step52041162024-02-02 12:37:12414 days ago1706877432IN
0x465fd0D7...a25817C9F
0 ETH0.0173579943.33928694
Step52040822024-02-02 12:30:00414 days ago1706877000IN
0x465fd0D7...a25817C9F
0 ETH0.0208634152.0931719
Step52040512024-02-02 12:23:00414 days ago1706876580IN
0x465fd0D7...a25817C9F
0 ETH0.0164860646.06615779
Step52040292024-02-02 12:17:36414 days ago1706876256IN
0x465fd0D7...a25817C9F
0 ETH0.0118269429.53561221
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 0x3f55F40b...C9c640D4c
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

API
[{"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

0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063ab845fd31161005b578063ab845fd314610115578063b34711ab1461013c578063c22fc36a1461015c578063c9ac04591461017c57600080fd5b806353c0004d1461008d5780637865b2d5146100c3578063828f504f146100d85780638f7dcfa31461010c575b600080fd5b6100ad61009b366004610a1f565b60016020526000908152604090205481565b6040516100ba9190610a50565b60405180910390f35b6100d66100d1366004610acc565b61018f565b005b6100ff7f0000000000000000000000003a36645e6061d3c49ba1022a391805f3e271ca8b81565b6040516100ba9190610b5a565b6100ad60035481565b6100ff7f000000000000000000000000f906510c26a6db7605f79a9d5975df3e8089fb3381565b6100ad61014a366004610a1f565b60006020819052908152604090205481565b6100ad61016a366004610a1f565b60026020526000908152604090205481565b6100d661018a366004610b7e565b61035b565b60006101b06101a16020860186610c3f565b67ffffffffffffffff16610566565b600081815260208190526040812054919250036101e85760405162461bcd60e51b81526004016101df90610caa565b60405180910390fd5b6000818152602081905260408120546102109061020a36889003880188610e50565b90610598565b905060007f0000000000000000000000003a36645e6061d3c49ba1022a391805f3e271ca8b6001600160a01b03166369f0433b8387876040518463ffffffff1660e01b815260040161026493929190610ee9565b6020604051808303816000875af1158015610283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a79190610f28565b9050806102c65760405162461bcd60e51b81526004016101df90610f80565b6080860135600260006102df60408a0160208b01610c3f565b67ffffffffffffffff168152602001908152602001600020819055508560600135600160008860200160208101906103179190610c3f565b67ffffffffffffffff168152602001908152602001600020819055508560200160208101906103469190610c3f565b67ffffffffffffffff16600355505050505050565b600061036d6101a16020860186610c3f565b600081815260208190526040812054919250906103939061020a36889003880188610e50565b905060007f0000000000000000000000003a36645e6061d3c49ba1022a391805f3e271ca8b6001600160a01b03166369f0433b8387876040518463ffffffff1660e01b81526004016103e793929190610ee9565b6020604051808303816000875af1158015610406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042a9190610f28565b9050806104495760405162461bcd60e51b81526004016101df90610fc4565b600061045e6101a16040890160208a01610c3f565b9050600061046d826001610fea565b9050600061048e60608a0135610488368f90038f018f61105c565b9061081d565b905060007f000000000000000000000000f906510c26a6db7605f79a9d5975df3e8089fb336001600160a01b031663cacd830e838e8e6040518463ffffffff1660e01b81526004016104e2939291906110aa565b6020604051808303816000875af1158015610501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105259190610f28565b9050806105445760405162461bcd60e51b81526004016101df9061110c565b50506000908152602081815260409091209a0135909955505050505050505050565b60006105927f000000000000000000000000000000000000000000000000000000000000200083611132565b92915050565b6105a06109c6565b6105a86109c6565b60005b600c8110156105f8578460a0015181600c81106105ca576105ca611146565b60200201518282600e81106105e1576105e1611146565b6020020152806105f08161115c565b9150506105ab565b506000600261060a8660000151610962565b6106178760200151610962565b6106248860400151610962565b8860600151896080015160405160200161064295949392919061118c565b60408051601f198184030181529082905261065c9161122b565b602060405180830381855afa158015610679573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061069c9190611249565b905060007bffffffff000000000000000000000000ffffffff00000000000000007eff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000600884811c9182167fff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0000009186901b91821617601090811c7cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff9093167dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0090921691909117901b17602081811c9283167fffffffff000000000000000000000000ffffffff0000000000000000000000009290911b91821617604090811c73ffffffff000000000000000000000000ffffffff90931677ffffffff000000000000000000000000ffffffff0000000090921691909117901b17608081811c91901b1790506107e86001600160fd1b61126a565b811661018084015284836107fe600c6001610fea565b600e811061080e5761080e611146565b60200201525090949350505050565b6108256109e5565b61082d6109e5565b60005b600c81101561087d57846040015181600c811061084f5761084f611146565b60200201518282604d811061086657610866611146565b6020020152806108758161115c565b915050610830565b506020840151610180820152835160005b60208110156108f0576108a36101008361127d565b83826108b1600c6020610fea565b6108bb919061126a565b604d81106108cb576108cb611146565b60200201526108dc61010083611132565b9150806108e88161115c565b91505061088e565b508360005b60208110156109575761090a6101008361127d565b8482610918600c6040610fea565b610922919061126a565b604d811061093257610932611146565b602002015261094361010083611132565b91508061094f8161115c565b9150506108f5565b509195945050505050565b66ff000000ff0000600882811c91821667ff000000ff0000009390911b92831617601090811c64ff000000ff90921665ff000000ff009093169290921790911b17602081811c63ffffffff1667ffffffff000000009290911b919091161760c01b90565b604051806101c00160405280600e906020820280368337509192915050565b604051806109a00160405280604d906020820280368337509192915050565b805b8114610a1157600080fd5b50565b803561059281610a04565b600060208284031215610a3457610a34600080fd5b6000610a408484610a14565b949350505050565b805b82525050565b602081016105928284610a48565b60006102208284031215610a7457610a74600080fd5b50919050565b60008083601f840112610a8f57610a8f600080fd5b50813567ffffffffffffffff811115610aaa57610aaa600080fd5b602083019150836001820283011115610ac557610ac5600080fd5b9250929050565b60008060006102408486031215610ae557610ae5600080fd5b6000610af18686610a5e565b93505061022084013567ffffffffffffffff811115610b1257610b12600080fd5b610b1e86828701610a7a565b92509250509250925092565b60006001600160a01b038216610592565b600061059282610b2a565b600061059282610b3b565b610a4a81610b46565b602081016105928284610b51565b60006101c08284031215610a7457610a74600080fd5b6000806000806000806104208789031215610b9b57610b9b600080fd5b6000610ba78989610b68565b9650506101c087013567ffffffffffffffff811115610bc857610bc8600080fd5b610bd489828a01610a7a565b95509550506101e0610be889828a01610a5e565b93505061040087013567ffffffffffffffff811115610c0957610c09600080fd5b610c1589828a01610a7a565b92509250509295509295509295565b67ffffffffffffffff8116610a06565b803561059281610c24565b600060208284031215610c5457610c54600080fd5b6000610a408484610c34565b602a81526000602082017f53796e6320636f6d6d6974746565206e6f74207965742073657420666f7220748152691a1a5cc81c195c9a5bd960b21b602082015291505b5060400190565b6020808252810161059281610c60565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715610cf657610cf6610cba565b6040525050565b6000610d0860405190565b9050610d148282610cd0565b919050565b600067ffffffffffffffff821115610d3357610d33610cba565b5060200290565b6000610d4d610d4884610d19565b610cfd565b90508060208402830185811115610d6657610d66600080fd5b835b81811015610d8a5780610d7b8882610a14565b84525060209283019201610d68565b5050509392505050565b600082601f830112610da857610da8600080fd5b600c610a40848285610d3a565b60006102208284031215610dcb57610dcb600080fd5b610dd560c0610cfd565b90506000610de38484610c34565b8252506020610df484848301610c34565b6020830152506040610e0884828501610c34565b6040830152506060610e1c84828501610a14565b6060830152506080610e3084828501610a14565b60808301525060a0610e4484828501610d94565b60a08301525092915050565b60006102208284031215610e6657610e66600080fd5b6000610a408484610db5565b6000610e7e8383610a48565b505060200190565b600e818060005b83811015610eb2578151610ea18782610e72565b965060208301925050600101610e8d565b505050505050565b82818337506000910152565b8183526000602084019350610edc838584610eba565b5050601f01601f19160190565b6101e08101610ef88286610e86565b8181036101c0830152610f0c818486610ec6565b95945050505050565b801515610a06565b805161059281610f15565b600060208284031215610f3d57610f3d600080fd5b6000610a408484610f1d565b601981526000602082017f50726f6f6620766572696669636174696f6e206661696c656400000000000000815291505b5060200190565b6020808252810161059281610f49565b601e81526000602082017f537465702070726f6f6620766572696669636174696f6e206661696c6564000081529150610f79565b6020808252810161059281610f90565b634e487b7160e01b600052601160045260246000fd5b8082018082111561059257610592610fd4565b60006101c0828403121561101357611013600080fd5b61101d6060610cfd565b9050600061102b8484610a14565b825250602061103c84848301610a14565b602083015250604061105084828501610d94565b60408301525092915050565b60006101c0828403121561107257611072600080fd5b6000610a408484610ffd565b604d818060005b83811015610eb25781516110998782610e72565b965060208301925050600101611085565b6109c081016110b9828661107e565b8181036109a0830152610f0c818486610ec6565b602281526000602082017f526f746174696f6e2070726f6f6620766572696669636174696f6e206661696c815261195960f21b60208201529150610ca3565b60208082528101610592816110cd565b634e487b7160e01b600052601260045260246000fd5b6000826111415761114161111c565b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019820361116f5761116f610fd4565b5060010190565b6001600160c01b03198116610a4a565b80610a4a565b60006111988288611176565b6008820191506111a88287611176565b6008820191506111b88286611176565b6008820191506111c88285611186565b6020820191506111d88284611186565b5060200195945050505050565b60005b838110156112005781810151838201526020016111e8565b50506000910152565b6000611213825190565b6112218185602086016111e5565b9290920192915050565b60006112378284611209565b9392505050565b805161059281610a04565b60006020828403121561125e5761125e600080fd5b6000610a40848461123e565b8181038181111561059257610592610fd4565b60008261128c5761128c61111c565b50069056fea2646970667358221220d358b6d3235b06e3854bd4cfa50f1b957573e1141af605e6907f215c7a54e2bc64736f6c63430008130033

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
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.