ETH Price: $1,878.92 (-2.71%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit Buffered...172428442023-05-12 8:07:23674 days ago1683878843IN
Lido: Deposit Security Module 2
0 ETH0.6055712757.55480988
Deposit Buffered...172427922023-05-12 7:56:59674 days ago1683878219IN
Lido: Deposit Security Module 2
0 ETH0.5354627550.86428287
Deposit Buffered...172427572023-05-12 7:49:59674 days ago1683877799IN
Lido: Deposit Security Module 2
0 ETH0.5375830550.84350357
Deposit Buffered...172427262023-05-12 7:43:35674 days ago1683877415IN
Lido: Deposit Security Module 2
0 ETH0.5641572353.33194233
Deposit Buffered...172426982023-05-12 7:37:47674 days ago1683877067IN
Lido: Deposit Security Module 2
0 ETH0.6081391257.46076675
Deposit Buffered...172426692023-05-12 7:31:59674 days ago1683876719IN
Lido: Deposit Security Module 2
0 ETH0.6088900557.5415869
Deposit Buffered...172416382023-05-12 4:00:35674 days ago1683864035IN
Lido: Deposit Security Module 2
0 ETH0.7431364370.31916982
Deposit Buffered...172415432023-05-12 3:41:11674 days ago1683862871IN
Lido: Deposit Security Module 2
0 ETH0.8951488884.56337281
Deposit Buffered...172415092023-05-12 3:34:11674 days ago1683862451IN
Lido: Deposit Security Module 2
0 ETH0.7500388970.88963284
Deposit Buffered...172414772023-05-12 3:27:35674 days ago1683862055IN
Lido: Deposit Security Module 2
0 ETH0.788049974.48938118
Deposit Buffered...172414432023-05-12 3:20:35674 days ago1683861635IN
Lido: Deposit Security Module 2
0 ETH0.8447632979.81955311
Deposit Buffered...172414362023-05-12 3:19:11674 days ago1683861551IN
Lido: Deposit Security Module 2
0 ETH0.0112076984.44997102
Deposit Buffered...172413952023-05-12 3:10:59674 days ago1683861059IN
Lido: Deposit Security Module 2
0 ETH0.9507467489.93784758
Deposit Buffered...172413512023-05-12 3:02:11674 days ago1683860531IN
Lido: Deposit Security Module 2
0 ETH1.18448126111.92587044
Deposit Buffered...172411992023-05-12 2:31:23674 days ago1683858683IN
Lido: Deposit Security Module 2
0 ETH0.1409931362.31927873
Deposit Buffered...172408442023-05-12 1:19:35674 days ago1683854375IN
Lido: Deposit Security Module 2
0 ETH0.1069924176.2128041
Deposit Buffered...172405842023-05-12 0:26:35674 days ago1683851195IN
Lido: Deposit Security Module 2
0 ETH0.1166282383.01338134
Deposit Buffered...172399742023-05-11 22:21:35674 days ago1683843695IN
Lido: Deposit Security Module 2
0 ETH0.0910618467.95579084
Deposit Buffered...172399402023-05-11 22:14:47674 days ago1683843287IN
Lido: Deposit Security Module 2
0 ETH0.7608101471.95757874
Deposit Buffered...172398542023-05-11 21:57:35674 days ago1683842255IN
Lido: Deposit Security Module 2
0 ETH0.8063218976.21555926
Deposit Buffered...172398162023-05-11 21:49:59674 days ago1683841799IN
Lido: Deposit Security Module 2
0 ETH0.8862280683.74066686
Deposit Buffered...172398132023-05-11 21:49:11674 days ago1683841751IN
Lido: Deposit Security Module 2
0 ETH0.0100711475.87235037
Deposit Buffered...172397982023-05-11 21:46:11674 days ago1683841571IN
Lido: Deposit Security Module 2
0 ETH0.0102231277.02311692
Deposit Buffered...172397642023-05-11 21:39:23674 days ago1683841163IN
Lido: Deposit Security Module 2
0 ETH0.0108155980.72785505
Deposit Buffered...172371742023-05-11 12:41:11675 days ago1683808871IN
Lido: Deposit Security Module 2
0 ETH0.9270482287.65902051
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DepositSecurityModule

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : DepositSecurityModule.sol
// SPDX-FileCopyrightText: 2021 Lido <[email protected]>

// SPDX-License-Identifier: GPL-3.0

/* See contracts/COMPILERS.md */
pragma solidity 0.8.9;

import {ECDSA} from "./lib/ECDSA.sol";


interface IDepositContract {
    function get_deposit_root() external view returns (bytes32 rootHash);
}


interface ILido {
    function depositBufferedEther(uint256 maxDeposits) external;
}


interface INodeOperatorsRegistry {
    function getKeysOpIndex() external view returns (uint256 index);
}


contract DepositSecurityModule {
    /**
     * Short ECDSA signature as defined in https://eips.ethereum.org/EIPS/eip-2098.
     */
    struct Signature {
        bytes32 r;
        bytes32 vs;
    }

    event OwnerChanged(address newValue);
    event NodeOperatorsRegistryChanged(address newValue);
    event PauseIntentValidityPeriodBlocksChanged(uint256 newValue);
    event MaxDepositsChanged(uint256 newValue);
    event MinDepositBlockDistanceChanged(uint256 newValue);
    event GuardianQuorumChanged(uint256 newValue);
    event GuardianAdded(address guardian);
    event GuardianRemoved(address guardian);
    event DepositsPaused(address guardian);
    event DepositsUnpaused();


    bytes32 public immutable ATTEST_MESSAGE_PREFIX;
    bytes32 public immutable PAUSE_MESSAGE_PREFIX;

    address public immutable LIDO;
    address public immutable DEPOSIT_CONTRACT;

    address internal nodeOperatorsRegistry;
    uint256 internal maxDepositsPerBlock;
    uint256 internal minDepositBlockDistance;
    uint256 internal pauseIntentValidityPeriodBlocks;

    address internal owner;

    address[] internal guardians;
    mapping(address => uint256) internal guardianIndicesOneBased; // 1-based
    uint256 internal quorum;

    bool internal paused;
    uint256 internal lastDepositBlock;


    constructor(
        address _lido,
        address _depositContract,
        address _nodeOperatorsRegistry,
        uint256 _networkId,
        uint256 _maxDepositsPerBlock,
        uint256 _minDepositBlockDistance,
        uint256 _pauseIntentValidityPeriodBlocks
    ) {
        require(_lido != address(0), "LIDO_ZERO_ADDRESS");
        require(_depositContract != address(0), "DEPOSIT_CONTRACT_ZERO_ADDRESS");
        LIDO = _lido;
        DEPOSIT_CONTRACT = _depositContract;

        ATTEST_MESSAGE_PREFIX = keccak256(abi.encodePacked(
            // keccak256("lido.DepositSecurityModule.ATTEST_MESSAGE")
            bytes32(0x1085395a994e25b1b3d0ea7937b7395495fb405b31c7d22dbc3976a6bd01f2bf),
            _networkId
        ));

        PAUSE_MESSAGE_PREFIX = keccak256(abi.encodePacked(
            // keccak256("lido.DepositSecurityModule.PAUSE_MESSAGE")
            bytes32(0x9c4c40205558f12027f21204d6218b8006985b7a6359bcab15404bcc3e3fa122),
            _networkId
        ));

        _setOwner(msg.sender);
        _setNodeOperatorsRegistry(_nodeOperatorsRegistry);
        _setMaxDeposits(_maxDepositsPerBlock);
        _setMinDepositBlockDistance(_minDepositBlockDistance);
        _setPauseIntentValidityPeriodBlocks(_pauseIntentValidityPeriodBlocks);
    }

    /**
     * Returns the owner address.
     */
    function getOwner() external view returns (address) {
        return owner;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "not an owner");
        _;
    }

    /**
     * Sets new owner. Only callable by the current owner.
     */
    function setOwner(address newValue) external onlyOwner {
        _setOwner(newValue);
    }

    function _setOwner(address newValue) internal {
        require(newValue != address(0), "invalid value for owner: must be different from zero address");
        owner = newValue;
        emit OwnerChanged(newValue);
    }


    /**
     * Returns NodeOperatorsRegistry contract address.
     */
    function getNodeOperatorsRegistry() external view returns (address) {
        return nodeOperatorsRegistry;
    }

    /**
     * Sets NodeOperatorsRegistry contract address. Only callable by the owner.
     */
    function setNodeOperatorsRegistry(address newValue) external onlyOwner {
        _setNodeOperatorsRegistry(newValue);
    }

    function _setNodeOperatorsRegistry(address newValue) internal {
        nodeOperatorsRegistry = newValue;
        emit NodeOperatorsRegistryChanged(newValue);
    }


    /**
     * Returns current `pauseIntentValidityPeriodBlocks` contract parameter (see `pauseDeposits`).
     */
    function getPauseIntentValidityPeriodBlocks() external view returns (uint256) {
        return pauseIntentValidityPeriodBlocks;
    }

    /**
     * Sets `pauseIntentValidityPeriodBlocks`. Only callable by the owner.
     */
    function setPauseIntentValidityPeriodBlocks(uint256 newValue) external onlyOwner {
        _setPauseIntentValidityPeriodBlocks(newValue);
    }

    function _setPauseIntentValidityPeriodBlocks(uint256 newValue) internal {
        require(newValue > 0, "invalid value for pauseIntentValidityPeriodBlocks: must be greater then 0");
        pauseIntentValidityPeriodBlocks = newValue;
        emit PauseIntentValidityPeriodBlocksChanged(newValue);
    }


    /**
     * Returns `maxDepositsPerBlock` (see `depositBufferedEther`).
     */
    function getMaxDeposits() external view returns (uint256) {
        return maxDepositsPerBlock;
    }

    /**
     * Sets `maxDepositsPerBlock`. Only callable by the owner.
     */
    function setMaxDeposits(uint256 newValue) external onlyOwner {
        _setMaxDeposits(newValue);
    }

    function _setMaxDeposits(uint256 newValue) internal {
        maxDepositsPerBlock = newValue;
        emit MaxDepositsChanged(newValue);
    }


    /**
     * Returns `minDepositBlockDistance`  (see `depositBufferedEther`).
     */
    function getMinDepositBlockDistance() external view returns (uint256) {
        return minDepositBlockDistance;
    }

    /**
     * Sets `minDepositBlockDistance`. Only callable by the owner.
     */
    function setMinDepositBlockDistance(uint256 newValue) external onlyOwner {
        _setMinDepositBlockDistance(newValue);
    }

    function _setMinDepositBlockDistance(uint256 newValue) internal {
        require(newValue > 0, "invalid value for minDepositBlockDistance: must be greater then 0");
        if (newValue != minDepositBlockDistance) {
            minDepositBlockDistance = newValue;
            emit MinDepositBlockDistanceChanged(newValue);
        }
    }


    /**
     * Returns number of valid guardian signatures required to vet (depositRoot, keysOpIndex) pair.
     */
    function getGuardianQuorum() external view returns (uint256) {
        return quorum;
    }

    function setGuardianQuorum(uint256 newValue) external onlyOwner {
        _setGuardianQuorum(newValue);
    }

    function _setGuardianQuorum(uint256 newValue) internal {
        // we're intentionally allowing setting quorum value higher than the number of guardians
        quorum = newValue;
        emit GuardianQuorumChanged(newValue);
    }


    /**
     * Returns guardian committee member list.
     */
    function getGuardians() external view returns (address[] memory) {
        return guardians;
    }

    /**
     * Checks whether the given address is a guardian.
     */
    function isGuardian(address addr) external view returns (bool) {
        return _isGuardian(addr);
    }

    function _isGuardian(address addr) internal view returns (bool) {
        return guardianIndicesOneBased[addr] > 0;
    }

    /**
     * Returns index of the guardian, or -1 if the address is not a guardian.
     */
    function getGuardianIndex(address addr) external view returns (int256) {
        return _getGuardianIndex(addr);
    }

    function _getGuardianIndex(address addr) internal view returns (int256) {
        return int256(guardianIndicesOneBased[addr]) - 1;
    }

    /**
     * Adds a guardian address and sets a new quorum value.
     * Reverts if the address is already a guardian.
     *
     * Only callable by the owner.
     */
    function addGuardian(address addr, uint256 newQuorum) external onlyOwner {
        _addGuardian(addr);
        _setGuardianQuorum(newQuorum);
    }

    /**
     * Adds a set of guardian addresses and sets a new quorum value.
     * Reverts any of them is already a guardian.
     *
     * Only callable by the owner.
     */
    function addGuardians(address[] memory addresses, uint256 newQuorum) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; ++i) {
            _addGuardian(addresses[i]);
        }
        _setGuardianQuorum(newQuorum);
    }

    function _addGuardian(address addr) internal {
        require(addr != address(0), "guardian zero address");
        require(!_isGuardian(addr), "duplicate address");
        guardians.push(addr);
        guardianIndicesOneBased[addr] = guardians.length;
        emit GuardianAdded(addr);
    }

    /**
     * Removes a guardian with the given address and sets a new quorum value.
     *
     * Only callable by the owner.
     */
    function removeGuardian(address addr, uint256 newQuorum) external onlyOwner {
        uint256 indexOneBased = guardianIndicesOneBased[addr];
        require(indexOneBased != 0, "not a guardian");

        uint256 totalGuardians = guardians.length;
        assert(indexOneBased <= totalGuardians);

        if (indexOneBased != totalGuardians) {
            address addrToMove = guardians[totalGuardians - 1];
            guardians[indexOneBased - 1] = addrToMove;
            guardianIndicesOneBased[addrToMove] = indexOneBased;
        }

        guardianIndicesOneBased[addr] = 0;
        guardians.pop();

        _setGuardianQuorum(newQuorum);

        emit GuardianRemoved(addr);
    }


    /**
     * Returns whether deposits were paused.
     */
    function isPaused() external view returns (bool) {
        return paused;
    }

    /**
     * Pauses deposits given that both conditions are satisfied (reverts otherwise):
     *
     *   1. The function is called by the guardian with index guardianIndex OR sig
     *      is a valid signature by the guardian with index guardianIndex of the data
     *      defined below.
     *
     *   2. block.number - blockNumber <= pauseIntentValidityPeriodBlocks
     *
     * The signature, if present, must be produced for keccak256 hash of the following
     * message (each component taking 32 bytes):
     *
     * | PAUSE_MESSAGE_PREFIX | blockNumber
     */
    function pauseDeposits(uint256 blockNumber, Signature memory sig) external {
        // In case of an emergency function `pauseDeposits` is supposed to be called
        // by all guardians. Thus only the first call will do the actual change. But
        // the other calls would be OK operations from the point of view of protocol’s logic.
        // Thus we prefer not to use “error” semantics which is implied by `require`.
        if (paused) {
            return;
        }

        address guardianAddr = msg.sender;
        int256 guardianIndex = _getGuardianIndex(msg.sender);

        if (guardianIndex == -1) {
            bytes32 msgHash = keccak256(abi.encodePacked(PAUSE_MESSAGE_PREFIX, blockNumber));
            guardianAddr = ECDSA.recover(msgHash, sig.r, sig.vs);
            guardianIndex = _getGuardianIndex(guardianAddr);
            require(guardianIndex != -1, "invalid signature");
        }

        require(
            block.number - blockNumber <= pauseIntentValidityPeriodBlocks,
            "pause intent expired"
        );

        paused = true;
        emit DepositsPaused(guardianAddr);
    }

    /**
     * Unpauses deposits.
     *
     * Only callable by the owner.
     */
    function unpauseDeposits() external onlyOwner {
        if (paused) {
            paused = false;
            emit DepositsUnpaused();
        }
    }


    /**
     * Returns the last block that contains a deposit performed via this security module.
     */
    function getLastDepositBlock() external view returns (uint256) {
        return lastDepositBlock;
    }


    /**
     * Sets `lastDepositBlock`. Only callable by the owner.
     */
    function setLastDepositBlock(uint256 newLastDepositBlock) external onlyOwner {
        lastDepositBlock = newLastDepositBlock;
    }


    /**
     * Returns whether depositBufferedEther can be called, given that the caller will provide
     * guardian attestations of non-stale deposit root and `keysOpIndex`, and the number of
     * such attestations will be enough to reach quorum.
     */
    function canDeposit() external view returns (bool) {
        return !paused && quorum > 0 && block.number - lastDepositBlock >= minDepositBlockDistance;
    }


    /**
     * Calls Lido.depositBufferedEther(maxDepositsPerBlock).
     *
     * Reverts if any of the following is true:
     *   1. IDepositContract.get_deposit_root() != depositRoot.
     *   2. INodeOperatorsRegistry.getKeysOpIndex() != keysOpIndex.
     *   3. The number of guardian signatures is less than getGuardianQuorum().
     *   4. An invalid or non-guardian signature received.
     *   5. block.number - getLastDepositBlock() < minDepositBlockDistance.
     *   6. blockhash(blockNumber) != blockHash.
     *
     * Signatures must be sorted in ascending order by index of the guardian. Each signature must
     * be produced for keccak256 hash of the following message (each component taking 32 bytes):
     *
     * | ATTEST_MESSAGE_PREFIX | depositRoot | keysOpIndex | blockNumber | blockHash |
     */
    function depositBufferedEther(
        bytes32 depositRoot,
        uint256 keysOpIndex,
        uint256 blockNumber,
        bytes32 blockHash,
        Signature[] memory sortedGuardianSignatures
    ) external {
        bytes32 onchainDepositRoot = IDepositContract(DEPOSIT_CONTRACT).get_deposit_root();
        require(depositRoot == onchainDepositRoot, "deposit root changed");

        require(!paused, "deposits are paused");
        require(quorum > 0 && sortedGuardianSignatures.length >= quorum, "no guardian quorum");

        require(block.number - lastDepositBlock >= minDepositBlockDistance, "too frequent deposits");
        require(blockHash != bytes32(0) && blockhash(blockNumber) == blockHash, "unexpected block hash");

        uint256 onchainKeysOpIndex = INodeOperatorsRegistry(nodeOperatorsRegistry).getKeysOpIndex();
        require(keysOpIndex == onchainKeysOpIndex, "keys op index changed");

        _verifySignatures(
            depositRoot,
            keysOpIndex,
            blockNumber,
            blockHash,
            sortedGuardianSignatures
        );

        ILido(LIDO).depositBufferedEther(maxDepositsPerBlock);
        lastDepositBlock = block.number;
    }


    function _verifySignatures(
        bytes32 depositRoot,
        uint256 keysOpIndex,
        uint256 blockNumber,
        bytes32 blockHash,
        Signature[] memory sigs
    )
        internal view
    {
        bytes32 msgHash = keccak256(abi.encodePacked(
            ATTEST_MESSAGE_PREFIX,
            depositRoot,
            keysOpIndex,
            blockNumber,
            blockHash
        ));

        address prevSignerAddr = address(0);

        for (uint256 i = 0; i < sigs.length; ++i) {
            address signerAddr = ECDSA.recover(msgHash, sigs[i].r, sigs[i].vs);
            require(_isGuardian(signerAddr), "invalid signature");
            require(signerAddr > prevSignerAddr, "signatures not sorted");
            prevSignerAddr = signerAddr;
        }
    }
}

File 2 of 2 : ECDSA.sol
// SPDX-License-Identifier: MIT

// Extracted from:
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0/contracts/cryptography/ECDSA.sol#L53
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/541e821/contracts/utils/cryptography/ECDSA.sol#L112

/* See contracts/COMPILERS.md */
pragma solidity 0.8.9;


library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`).
     * This address can then be used for verification purposes.
     * Receives the `v`, `r` and `s` signature fields separately.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address)
    {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Overload of `recover` that receives the `r` and `vs` short-signature fields separately.
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return recover(hash, v, r, s);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_lido","type":"address"},{"internalType":"address","name":"_depositContract","type":"address"},{"internalType":"address","name":"_nodeOperatorsRegistry","type":"address"},{"internalType":"uint256","name":"_networkId","type":"uint256"},{"internalType":"uint256","name":"_maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"_minDepositBlockDistance","type":"uint256"},{"internalType":"uint256","name":"_pauseIntentValidityPeriodBlocks","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"guardian","type":"address"}],"name":"DepositsPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"DepositsUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"guardian","type":"address"}],"name":"GuardianAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"GuardianQuorumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"guardian","type":"address"}],"name":"GuardianRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxDepositsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MinDepositBlockDistanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newValue","type":"address"}],"name":"NodeOperatorsRegistryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newValue","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"PauseIntentValidityPeriodBlocksChanged","type":"event"},{"inputs":[],"name":"ATTEST_MESSAGE_PREFIX","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_MESSAGE_PREFIX","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"addGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"addGuardians","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"depositRoot","type":"bytes32"},{"internalType":"uint256","name":"keysOpIndex","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}],"internalType":"struct DepositSecurityModule.Signature[]","name":"sortedGuardianSignatures","type":"tuple[]"}],"name":"depositBufferedEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getGuardianIndex","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuardianQuorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuardians","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastDepositBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinDepositBlockDistance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeOperatorsRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseIntentValidityPeriodBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isGuardian","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}],"internalType":"struct DepositSecurityModule.Signature","name":"sig","type":"tuple"}],"name":"pauseDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"removeGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setGuardianQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLastDepositBlock","type":"uint256"}],"name":"setLastDepositBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinDepositBlockDistance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newValue","type":"address"}],"name":"setNodeOperatorsRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newValue","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setPauseIntentValidityPeriodBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101006040523480156200001257600080fd5b5060405162001fe238038062001fe28339810160408190526200003591620004c4565b6001600160a01b038716620000855760405162461bcd60e51b81526020600482015260116024820152704c49444f5f5a45524f5f4144445245535360781b60448201526064015b60405180910390fd5b6001600160a01b038616620000dd5760405162461bcd60e51b815260206004820152601d60248201527f4445504f5349545f434f4e54524143545f5a45524f5f4144445245535300000060448201526064016200007c565b6001600160a01b0387811660c052861660e052604080517f1085395a994e25b1b3d0ea7937b7395495fb405b31c7d22dbc3976a6bd01f2bf602082015290810185905260600160408051808303601f1901815282825280516020918201206080527f9c4c40205558f12027f21204d6218b8006985b7a6359bcab15404bcc3e3fa12290830152810185905260600160408051601f19818403018152919052805160209091012060a0526200019133620001ca565b6200019c856200029d565b620001a783620002ec565b620001b28262000322565b620001bd81620003e7565b5050505050505062000535565b6001600160a01b038116620002485760405162461bcd60e51b815260206004820152603c60248201527f696e76616c69642076616c756520666f72206f776e65723a206d75737420626560448201527f20646966666572656e742066726f6d207a65726f20616464726573730000000060648201526084016200007c565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36906020015b60405180910390a150565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f7f40d0cbed36e9d36ffe92f223f1f44635a84ad83db42f8596e4885984b608a29060200162000292565b60018190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da9929060200162000292565b60008111620003a45760405162461bcd60e51b815260206004820152604160248201527f696e76616c69642076616c756520666f72206d696e4465706f736974426c6f6360448201527f6b44697374616e63653a206d7573742062652067726561746572207468656e206064820152600360fc1b608482015260a4016200007c565b6002548114620003e45760028190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace149060200162000292565b50565b60008111620004715760405162461bcd60e51b815260206004820152604960248201527f696e76616c69642076616c756520666f72207061757365496e74656e7456616c60448201527f6964697479506572696f64426c6f636b733a206d75737420626520677265617460648201526806572207468656e20360bc1b608482015260a4016200007c565b60038190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba9060200162000292565b80516001600160a01b0381168114620004bf57600080fd5b919050565b600080600080600080600060e0888a031215620004e057600080fd5b620004eb88620004a7565b9650620004fb60208901620004a7565b95506200050b60408901620004a7565b9450606088015193506080880151925060a0880151915060c0880151905092959891949750929550565b60805160a05160c05160e051611a576200058b600039600081816102c60152610566015260008181610329015261087c015260008181610363015261091a0152600081816103c101526110b30152611a576000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637e92331211610104578063b7b7a408116100a2578063c8f712d511610071578063c8f712d5146103eb578063e78a5875146103fe578063eccd085f14610406578063f47610e61461041957600080fd5b8063b7b7a408146103a3578063ba6252b2146103ab578063c6dda2c3146103bc578063c7062e98146103e357600080fd5b80638d71a6f4116100de5780638d71a6f41461034b578063a50833d61461035e578063a749013e14610385578063b187bd261461039857600080fd5b80637e92331214610300578063893d20e8146103135780638b21f1701461032457600080fd5b8063251e3a211161017157806360c8a5471161014b57806360c8a5471461029e57806362272f28146102b157806363d8882a146102b95780636b96736b146102c157600080fd5b8063251e3a21146102705780633ab54bc3146102785780633e6f6d681461028b57600080fd5b80630c68ba21116101ad5780630c68ba2114610214578063111e53131461023757806313af40351461024a57806320d580d11461025d57600080fd5b8062fed902146101d3578063062b662e146101e85780630665f04b146101ff575b600080fd5b6101e66101e13660046115fd565b61042c565b005b6007545b6040519081526020015b60405180910390f35b61020761046b565b6040516101f69190611616565b61022761022236600461167f565b6104cd565b60405190151581526020016101f6565b6101e66102453660046116a1565b6104ef565b6101e661025836600461167f565b61052f565b6101e661026b366004611785565b610562565b6002546101ec565b6101e661028636600461184e565b6108ed565b6101e66102993660046115fd565b610a6c565b6101e66102ac3660046115fd565b610a9f565b6009546101ec565b6101e6610ace565b6102e87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101f6565b6101e661030e3660046115fd565b610b39565b6004546001600160a01b03166102e8565b6102e87f000000000000000000000000000000000000000000000000000000000000000081565b6101e66103593660046116a1565b610b6c565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6101e661039336600461167f565b610d24565b60085460ff16610227565b6001546101ec565b6000546001600160a01b03166102e8565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6003546101ec565b6101e66103f936600461187b565b610d57565b610227610dc9565b6101e66104143660046115fd565b610e00565b6101ec61042736600461167f565b610e33565b6004546001600160a01b0316331461045f5760405162461bcd60e51b815260040161045690611919565b60405180910390fd5b61046881610e3e565b50565b606060058054806020026020016040519081016040528092919081815260200182805480156104c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104a5575b5050505050905090565b6001600160a01b03811660009081526006602052604081205415155b92915050565b6004546001600160a01b031633146105195760405162461bcd60e51b815260040161045690611919565b61052282610e7a565b61052b81610fae565b5050565b6004546001600160a01b031633146105595760405162461bcd60e51b815260040161045690611919565b61046881610fe3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5f2892f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061193f565b905080861461063d5760405162461bcd60e51b815260206004820152601460248201527319195c1bdcda5d081c9bdbdd0818da185b99d95960621b6044820152606401610456565b60085460ff16156106865760405162461bcd60e51b815260206004820152601360248201527219195c1bdcda5d1cc8185c99481c185d5cd959606a1b6044820152606401610456565b600060075411801561069b5750600754825110155b6106dc5760405162461bcd60e51b81526020600482015260126024820152716e6f20677561726469616e2071756f72756d60701b6044820152606401610456565b6002546009546106ec904361196e565b10156107325760405162461bcd60e51b8152602060048201526015602482015274746f6f206672657175656e74206465706f7369747360581b6044820152606401610456565b82158015906107415750828440145b6107855760405162461bcd60e51b81526020600482015260156024820152740eadccaf0e0cac6e8cac840c4d8dec6d640d0c2e6d605b1b6044820152606401610456565b60008060009054906101000a90046001600160a01b03166001600160a01b031663d07442f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d457600080fd5b505afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c919061193f565b90508086146108555760405162461bcd60e51b81526020600482015260156024820152741ad95e5cc81bdc081a5b99195e0818da185b99d959605a1b6044820152606401610456565b61086287878787876110ad565b6001546040516390adc83b60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906390adc83b90602401600060405180830381600087803b1580156108c857600080fd5b505af11580156108dc573d6000803e3d6000fd5b505043600955505050505050505050565b60085460ff16156108fc575050565b3360006109088261123c565b90508060001914156109ca57604080517f000000000000000000000000000000000000000000000000000000000000000060208201529081018590526000906060016040516020818303038152906040528051906020012090506109758185600001518660200151611261565b92506109808361123c565b91508160001914156109c85760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610456565b505b6003546109d7854361196e565b1115610a1c5760405162461bcd60e51b81526020600482015260146024820152731c185d5cd9481a5b9d195b9d08195e1c1a5c995960621b6044820152606401610456565b6008805460ff191660011790556040516001600160a01b03831681527feb225a736fbfee3f85ccb72bdf84ff0396ab358b7970e2cc351ab3e3fd92358d906020015b60405180910390a150505050565b6004546001600160a01b03163314610a965760405162461bcd60e51b815260040161045690611919565b61046881610fae565b6004546001600160a01b03163314610ac95760405162461bcd60e51b815260040161045690611919565b600955565b6004546001600160a01b03163314610af85760405162461bcd60e51b815260040161045690611919565b60085460ff1615610b37576008805460ff191690556040517f823084e804e36d8971e8b86749b6b0ace7b9f87ed272bef910c1e72d123eeb4890600090a15b565b6004546001600160a01b03163314610b635760405162461bcd60e51b815260040161045690611919565b6104688161128b565b6004546001600160a01b03163314610b965760405162461bcd60e51b815260040161045690611919565b6001600160a01b03821660009081526006602052604090205480610bed5760405162461bcd60e51b815260206004820152600e60248201526d3737ba10309033bab0b93234b0b760911b6044820152606401610456565b60055480821115610c0057610c00611985565b808214610c965760006005610c1660018461196e565b81548110610c2657610c2661199b565b6000918252602090912001546001600160a01b03169050806005610c4b60018661196e565b81548110610c5b57610c5b61199b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526006909152604090208290555b6001600160a01b0384166000908152600660205260408120556005805480610cc057610cc06119b1565b600082815260209020810160001990810180546001600160a01b0319169055019055610ceb83610fae565b6040516001600160a01b03851681527fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5290602001610a5e565b6004546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161045690611919565b61046881611349565b6004546001600160a01b03163314610d815760405162461bcd60e51b815260040161045690611919565b60005b8251811015610dbf57610daf838281518110610da257610da261199b565b6020026020010151610e7a565b610db8816119c7565b9050610d84565b5061052b81610fae565b60085460009060ff16158015610de157506000600754115b8015610dfb5750600254600954610df8904361196e565b10155b905090565b6004546001600160a01b03163314610e2a5760405162461bcd60e51b815260040161045690611919565b61046881611397565b60006104e98261123c565b60018190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da992906020015b60405180910390a150565b6001600160a01b038116610ec85760405162461bcd60e51b8152602060048201526015602482015274677561726469616e207a65726f206164647265737360581b6044820152606401610456565b6001600160a01b03811660009081526006602052604090205415610f225760405162461bcd60e51b81526020600482015260116024820152706475706c6963617465206164647265737360781b6044820152606401610456565b600580546001810182557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038416908117909155905460008281526006602090815260409182902092909255519182527f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699101610e6f565b60078190556040518181527f70d7432f2ec830b36e5b8c45176a8079968714429c4be85665c06ec1b8fde4bb90602001610e6f565b6001600160a01b03811661105f5760405162461bcd60e51b815260206004820152603c60248201527f696e76616c69642076616c756520666f72206f776e65723a206d75737420626560448201527f20646966666572656e742066726f6d207a65726f2061646472657373000000006064820152608401610456565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3690602001610e6f565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152908101869052606081018590526080810184905260a0810183905260009060c0016040516020818303038152906040528051906020012090506000805b8351811015611232576000611164848684815181106111355761113561199b565b6020026020010151600001518785815181106111535761115361199b565b602002602001015160200151611261565b9050611187816001600160a01b0316600090815260066020526040902054151590565b6111c75760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610456565b826001600160a01b0316816001600160a01b0316116112205760405162461bcd60e51b81526020600482015260156024820152741cda59db985d1d5c995cc81b9bdd081cdbdc9d1959605a1b6044820152606401610456565b915061122b816119c7565b9050611114565b5050505050505050565b6001600160a01b0381166000908152600660205260408120546104e9906001906119e2565b60006001600160ff1b03821660ff83901c601b0161128186828785611454565b9695505050505050565b6000811161130b5760405162461bcd60e51b815260206004820152604160248201527f696e76616c69642076616c756520666f72206d696e4465706f736974426c6f6360448201527f6b44697374616e63653a206d7573742062652067726561746572207468656e206064820152600360fc1b608482015260a401610456565b60025481146104685760028190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace1490602001610e6f565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f7f40d0cbed36e9d36ffe92f223f1f44635a84ad83db42f8596e4885984b608a290602001610e6f565b6000811161141f5760405162461bcd60e51b815260206004820152604960248201527f696e76616c69642076616c756520666f72207061757365496e74656e7456616c60448201527f6964697479506572696f64426c6f636b733a206d75737420626520677265617460648201526806572207468656e20360bc1b608482015260a401610456565b60038190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba90602001610e6f565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114d15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610456565b8360ff16601b14806114e657508360ff16601c145b61153d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610456565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611591573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115f45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610456565b95945050505050565b60006020828403121561160f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156116575783516001600160a01b031683529284019291840191600101611632565b50909695505050505050565b80356001600160a01b038116811461167a57600080fd5b919050565b60006020828403121561169157600080fd5b61169a82611663565b9392505050565b600080604083850312156116b457600080fd5b6116bd83611663565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561170a5761170a6116cb565b604052919050565b600067ffffffffffffffff82111561172c5761172c6116cb565b5060051b60200190565b60006040828403121561174857600080fd5b6040516040810181811067ffffffffffffffff8211171561176b5761176b6116cb565b604052823581526020928301359281019290925250919050565b600080600080600060a0868803121561179d57600080fd5b853594506020808701359450604080880135945060608801359350608088013567ffffffffffffffff8111156117d257600080fd5b8801601f81018a136117e357600080fd5b80356117f66117f182611712565b6116e1565b81815260069190911b8201840190848101908c83111561181557600080fd5b928501925b8284101561183b5761182c8d85611736565b8252928401929085019061181a565b8096505050505050509295509295909350565b6000806060838503121561186157600080fd5b823591506118728460208501611736565b90509250929050565b6000806040838503121561188e57600080fd5b823567ffffffffffffffff8111156118a557600080fd5b8301601f810185136118b657600080fd5b803560206118c66117f183611712565b82815260059290921b830181019181810190888411156118e557600080fd5b938201935b8385101561190a576118fb85611663565b825293820193908201906118ea565b98969091013596505050505050565b6020808252600c908201526b3737ba1030b71037bbb732b960a11b604082015260600190565b60006020828403121561195157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561198057611980611958565b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156119db576119db611958565b5060010190565b60008083128015600160ff1b850184121615611a0057611a00611958565b6001600160ff1b0384018313811615611a1b57611a1b611958565b5050039056fea26469706673582212208433a00c064ab9783c865e1aac266d63169264d8317e2481b4ffcfa27375525364736f6c63430008090033000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8400000000000000000000000000000000219ab540356cbb839cbe05303d7705fa00000000000000000000000055032650b14df07b85bf18a3a3ec8e0af2e028d500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000019f6

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637e92331211610104578063b7b7a408116100a2578063c8f712d511610071578063c8f712d5146103eb578063e78a5875146103fe578063eccd085f14610406578063f47610e61461041957600080fd5b8063b7b7a408146103a3578063ba6252b2146103ab578063c6dda2c3146103bc578063c7062e98146103e357600080fd5b80638d71a6f4116100de5780638d71a6f41461034b578063a50833d61461035e578063a749013e14610385578063b187bd261461039857600080fd5b80637e92331214610300578063893d20e8146103135780638b21f1701461032457600080fd5b8063251e3a211161017157806360c8a5471161014b57806360c8a5471461029e57806362272f28146102b157806363d8882a146102b95780636b96736b146102c157600080fd5b8063251e3a21146102705780633ab54bc3146102785780633e6f6d681461028b57600080fd5b80630c68ba21116101ad5780630c68ba2114610214578063111e53131461023757806313af40351461024a57806320d580d11461025d57600080fd5b8062fed902146101d3578063062b662e146101e85780630665f04b146101ff575b600080fd5b6101e66101e13660046115fd565b61042c565b005b6007545b6040519081526020015b60405180910390f35b61020761046b565b6040516101f69190611616565b61022761022236600461167f565b6104cd565b60405190151581526020016101f6565b6101e66102453660046116a1565b6104ef565b6101e661025836600461167f565b61052f565b6101e661026b366004611785565b610562565b6002546101ec565b6101e661028636600461184e565b6108ed565b6101e66102993660046115fd565b610a6c565b6101e66102ac3660046115fd565b610a9f565b6009546101ec565b6101e6610ace565b6102e87f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa81565b6040516001600160a01b0390911681526020016101f6565b6101e661030e3660046115fd565b610b39565b6004546001600160a01b03166102e8565b6102e87f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8481565b6101e66103593660046116a1565b610b6c565b6101ec7fd225b544f236c424d88abf1dd1a58e20df146bb6c02d916809b75d7a72bccb1081565b6101e661039336600461167f565b610d24565b60085460ff16610227565b6001546101ec565b6000546001600160a01b03166102e8565b6101ec7f1670745baff8f26a6c2e451bc4eedecf0009a8271dcf5d224e8ab295f22b086381565b6003546101ec565b6101e66103f936600461187b565b610d57565b610227610dc9565b6101e66104143660046115fd565b610e00565b6101ec61042736600461167f565b610e33565b6004546001600160a01b0316331461045f5760405162461bcd60e51b815260040161045690611919565b60405180910390fd5b61046881610e3e565b50565b606060058054806020026020016040519081016040528092919081815260200182805480156104c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104a5575b5050505050905090565b6001600160a01b03811660009081526006602052604081205415155b92915050565b6004546001600160a01b031633146105195760405162461bcd60e51b815260040161045690611919565b61052282610e7a565b61052b81610fae565b5050565b6004546001600160a01b031633146105595760405162461bcd60e51b815260040161045690611919565b61046881610fe3565b60007f00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa6001600160a01b031663c5f2892f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061193f565b905080861461063d5760405162461bcd60e51b815260206004820152601460248201527319195c1bdcda5d081c9bdbdd0818da185b99d95960621b6044820152606401610456565b60085460ff16156106865760405162461bcd60e51b815260206004820152601360248201527219195c1bdcda5d1cc8185c99481c185d5cd959606a1b6044820152606401610456565b600060075411801561069b5750600754825110155b6106dc5760405162461bcd60e51b81526020600482015260126024820152716e6f20677561726469616e2071756f72756d60701b6044820152606401610456565b6002546009546106ec904361196e565b10156107325760405162461bcd60e51b8152602060048201526015602482015274746f6f206672657175656e74206465706f7369747360581b6044820152606401610456565b82158015906107415750828440145b6107855760405162461bcd60e51b81526020600482015260156024820152740eadccaf0e0cac6e8cac840c4d8dec6d640d0c2e6d605b1b6044820152606401610456565b60008060009054906101000a90046001600160a01b03166001600160a01b031663d07442f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d457600080fd5b505afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c919061193f565b90508086146108555760405162461bcd60e51b81526020600482015260156024820152741ad95e5cc81bdc081a5b99195e0818da185b99d959605a1b6044820152606401610456565b61086287878787876110ad565b6001546040516390adc83b60e01b815260048101919091527f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b0316906390adc83b90602401600060405180830381600087803b1580156108c857600080fd5b505af11580156108dc573d6000803e3d6000fd5b505043600955505050505050505050565b60085460ff16156108fc575050565b3360006109088261123c565b90508060001914156109ca57604080517fd225b544f236c424d88abf1dd1a58e20df146bb6c02d916809b75d7a72bccb1060208201529081018590526000906060016040516020818303038152906040528051906020012090506109758185600001518660200151611261565b92506109808361123c565b91508160001914156109c85760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610456565b505b6003546109d7854361196e565b1115610a1c5760405162461bcd60e51b81526020600482015260146024820152731c185d5cd9481a5b9d195b9d08195e1c1a5c995960621b6044820152606401610456565b6008805460ff191660011790556040516001600160a01b03831681527feb225a736fbfee3f85ccb72bdf84ff0396ab358b7970e2cc351ab3e3fd92358d906020015b60405180910390a150505050565b6004546001600160a01b03163314610a965760405162461bcd60e51b815260040161045690611919565b61046881610fae565b6004546001600160a01b03163314610ac95760405162461bcd60e51b815260040161045690611919565b600955565b6004546001600160a01b03163314610af85760405162461bcd60e51b815260040161045690611919565b60085460ff1615610b37576008805460ff191690556040517f823084e804e36d8971e8b86749b6b0ace7b9f87ed272bef910c1e72d123eeb4890600090a15b565b6004546001600160a01b03163314610b635760405162461bcd60e51b815260040161045690611919565b6104688161128b565b6004546001600160a01b03163314610b965760405162461bcd60e51b815260040161045690611919565b6001600160a01b03821660009081526006602052604090205480610bed5760405162461bcd60e51b815260206004820152600e60248201526d3737ba10309033bab0b93234b0b760911b6044820152606401610456565b60055480821115610c0057610c00611985565b808214610c965760006005610c1660018461196e565b81548110610c2657610c2661199b565b6000918252602090912001546001600160a01b03169050806005610c4b60018661196e565b81548110610c5b57610c5b61199b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526006909152604090208290555b6001600160a01b0384166000908152600660205260408120556005805480610cc057610cc06119b1565b600082815260209020810160001990810180546001600160a01b0319169055019055610ceb83610fae565b6040516001600160a01b03851681527fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c5290602001610a5e565b6004546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161045690611919565b61046881611349565b6004546001600160a01b03163314610d815760405162461bcd60e51b815260040161045690611919565b60005b8251811015610dbf57610daf838281518110610da257610da261199b565b6020026020010151610e7a565b610db8816119c7565b9050610d84565b5061052b81610fae565b60085460009060ff16158015610de157506000600754115b8015610dfb5750600254600954610df8904361196e565b10155b905090565b6004546001600160a01b03163314610e2a5760405162461bcd60e51b815260040161045690611919565b61046881611397565b60006104e98261123c565b60018190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da992906020015b60405180910390a150565b6001600160a01b038116610ec85760405162461bcd60e51b8152602060048201526015602482015274677561726469616e207a65726f206164647265737360581b6044820152606401610456565b6001600160a01b03811660009081526006602052604090205415610f225760405162461bcd60e51b81526020600482015260116024820152706475706c6963617465206164647265737360781b6044820152606401610456565b600580546001810182557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038416908117909155905460008281526006602090815260409182902092909255519182527f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699101610e6f565b60078190556040518181527f70d7432f2ec830b36e5b8c45176a8079968714429c4be85665c06ec1b8fde4bb90602001610e6f565b6001600160a01b03811661105f5760405162461bcd60e51b815260206004820152603c60248201527f696e76616c69642076616c756520666f72206f776e65723a206d75737420626560448201527f20646966666572656e742066726f6d207a65726f2061646472657373000000006064820152608401610456565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3690602001610e6f565b604080517f1670745baff8f26a6c2e451bc4eedecf0009a8271dcf5d224e8ab295f22b08636020820152908101869052606081018590526080810184905260a0810183905260009060c0016040516020818303038152906040528051906020012090506000805b8351811015611232576000611164848684815181106111355761113561199b565b6020026020010151600001518785815181106111535761115361199b565b602002602001015160200151611261565b9050611187816001600160a01b0316600090815260066020526040902054151590565b6111c75760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610456565b826001600160a01b0316816001600160a01b0316116112205760405162461bcd60e51b81526020600482015260156024820152741cda59db985d1d5c995cc81b9bdd081cdbdc9d1959605a1b6044820152606401610456565b915061122b816119c7565b9050611114565b5050505050505050565b6001600160a01b0381166000908152600660205260408120546104e9906001906119e2565b60006001600160ff1b03821660ff83901c601b0161128186828785611454565b9695505050505050565b6000811161130b5760405162461bcd60e51b815260206004820152604160248201527f696e76616c69642076616c756520666f72206d696e4465706f736974426c6f6360448201527f6b44697374616e63653a206d7573742062652067726561746572207468656e206064820152600360fc1b608482015260a401610456565b60025481146104685760028190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace1490602001610e6f565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f7f40d0cbed36e9d36ffe92f223f1f44635a84ad83db42f8596e4885984b608a290602001610e6f565b6000811161141f5760405162461bcd60e51b815260206004820152604960248201527f696e76616c69642076616c756520666f72207061757365496e74656e7456616c60448201527f6964697479506572696f64426c6f636b733a206d75737420626520677265617460648201526806572207468656e20360bc1b608482015260a401610456565b60038190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba90602001610e6f565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114d15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610456565b8360ff16601b14806114e657508360ff16601c145b61153d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610456565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611591573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115f45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610456565b95945050505050565b60006020828403121561160f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156116575783516001600160a01b031683529284019291840191600101611632565b50909695505050505050565b80356001600160a01b038116811461167a57600080fd5b919050565b60006020828403121561169157600080fd5b61169a82611663565b9392505050565b600080604083850312156116b457600080fd5b6116bd83611663565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561170a5761170a6116cb565b604052919050565b600067ffffffffffffffff82111561172c5761172c6116cb565b5060051b60200190565b60006040828403121561174857600080fd5b6040516040810181811067ffffffffffffffff8211171561176b5761176b6116cb565b604052823581526020928301359281019290925250919050565b600080600080600060a0868803121561179d57600080fd5b853594506020808701359450604080880135945060608801359350608088013567ffffffffffffffff8111156117d257600080fd5b8801601f81018a136117e357600080fd5b80356117f66117f182611712565b6116e1565b81815260069190911b8201840190848101908c83111561181557600080fd5b928501925b8284101561183b5761182c8d85611736565b8252928401929085019061181a565b8096505050505050509295509295909350565b6000806060838503121561186157600080fd5b823591506118728460208501611736565b90509250929050565b6000806040838503121561188e57600080fd5b823567ffffffffffffffff8111156118a557600080fd5b8301601f810185136118b657600080fd5b803560206118c66117f183611712565b82815260059290921b830181019181810190888411156118e557600080fd5b938201935b8385101561190a576118fb85611663565b825293820193908201906118ea565b98969091013596505050505050565b6020808252600c908201526b3737ba1030b71037bbb732b960a11b604082015260600190565b60006020828403121561195157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561198057611980611958565b500390565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156119db576119db611958565b5060010190565b60008083128015600160ff1b850184121615611a0057611a00611958565b6001600160ff1b0384018313811615611a1b57611a1b611958565b5050039056fea26469706673582212208433a00c064ab9783c865e1aac266d63169264d8317e2481b4ffcfa27375525364736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8400000000000000000000000000000000219ab540356cbb839cbe05303d7705fa00000000000000000000000055032650b14df07b85bf18a3a3ec8e0af2e028d500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000019f6

-----Decoded View---------------
Arg [0] : _lido (address): 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
Arg [1] : _depositContract (address): 0x00000000219ab540356cBB839Cbe05303d7705Fa
Arg [2] : _nodeOperatorsRegistry (address): 0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5
Arg [3] : _networkId (uint256): 1
Arg [4] : _maxDepositsPerBlock (uint256): 150
Arg [5] : _minDepositBlockDistance (uint256): 25
Arg [6] : _pauseIntentValidityPeriodBlocks (uint256): 6646

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84
Arg [1] : 00000000000000000000000000000000219ab540356cbb839cbe05303d7705fa
Arg [2] : 00000000000000000000000055032650b14df07b85bf18a3a3ec8e0af2e028d5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [6] : 00000000000000000000000000000000000000000000000000000000000019f6


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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