Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 2,046 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit Buffered... | 1818976 | 269 days ago | IN | 0 ETH | 0.00130829 | ||||
Deposit Buffered... | 1818962 | 269 days ago | IN | 0 ETH | 0.00128458 | ||||
Deposit Buffered... | 1818005 | 269 days ago | IN | 0 ETH | 0.00073562 | ||||
Deposit Buffered... | 1817839 | 269 days ago | IN | 0 ETH | 0.00070768 | ||||
Deposit Buffered... | 1817712 | 269 days ago | IN | 0 ETH | 0.00134273 | ||||
Deposit Buffered... | 1817667 | 269 days ago | IN | 0 ETH | 0.00079771 | ||||
Deposit Buffered... | 1816860 | 270 days ago | IN | 0 ETH | 0.00075311 | ||||
Deposit Buffered... | 1816474 | 270 days ago | IN | 0 ETH | 0.00298022 | ||||
Deposit Buffered... | 1814426 | 270 days ago | IN | 0 ETH | 0.0007162 | ||||
Deposit Buffered... | 1814044 | 270 days ago | IN | 0 ETH | 0.00073925 | ||||
Deposit Buffered... | 1813718 | 270 days ago | IN | 0 ETH | 0.000887 | ||||
Deposit Buffered... | 1813048 | 270 days ago | IN | 0 ETH | 0.0012799 | ||||
Deposit Buffered... | 1813041 | 270 days ago | IN | 0 ETH | 0.00073652 | ||||
Deposit Buffered... | 1813018 | 270 days ago | IN | 0 ETH | 0.00130146 | ||||
Deposit Buffered... | 1813011 | 270 days ago | IN | 0 ETH | 0.00134873 | ||||
Deposit Buffered... | 1812591 | 270 days ago | IN | 0 ETH | 0.00069584 | ||||
Deposit Buffered... | 1812314 | 270 days ago | IN | 0 ETH | 0.00072098 | ||||
Deposit Buffered... | 1812193 | 270 days ago | IN | 0 ETH | 0.00130572 | ||||
Deposit Buffered... | 1812186 | 270 days ago | IN | 0 ETH | 0.00126523 | ||||
Deposit Buffered... | 1812162 | 270 days ago | IN | 0 ETH | 0.00078387 | ||||
Deposit Buffered... | 1811823 | 270 days ago | IN | 0 ETH | 0.0008082 | ||||
Deposit Buffered... | 1811632 | 270 days ago | IN | 0 ETH | 0.00134022 | ||||
Deposit Buffered... | 1811160 | 271 days ago | IN | 0 ETH | 0.00078906 | ||||
Deposit Buffered... | 1809361 | 271 days ago | IN | 0 ETH | 0.00100756 | ||||
Deposit Buffered... | 1809281 | 271 days ago | IN | 0 ETH | 0.00071535 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DepositSecurityModule
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
istanbul EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: 2023 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 /* See contracts/COMPILERS.md */ pragma solidity 0.8.9; import {ECDSA} from "../common/lib/ECDSA.sol"; interface ILido { function deposit( uint256 _maxDepositsCount, uint256 _stakingModuleId, bytes calldata _depositCalldata ) external; function canDeposit() external view returns (bool); } interface IDepositContract { function get_deposit_root() external view returns (bytes32 rootHash); } interface IStakingRouter { function pauseStakingModule(uint256 _stakingModuleId) external; function resumeStakingModule(uint256 _stakingModuleId) external; function getStakingModuleIsDepositsPaused(uint256 _stakingModuleId) external view returns (bool); function getStakingModuleIsActive(uint256 _stakingModuleId) external view returns (bool); function getStakingModuleNonce(uint256 _stakingModuleId) external view returns (uint256); function getStakingModuleLastDepositBlock(uint256 _stakingModuleId) external view returns (uint256); function hasStakingModule(uint256 _stakingModuleId) external view returns (bool); } 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 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 indexed guardian, uint24 indexed stakingModuleId); event DepositsUnpaused(uint24 indexed stakingModuleId); error ZeroAddress(string field); error DuplicateAddress(address addr); error NotAnOwner(address caller); error InvalidSignature(); error SignaturesNotSorted(); error DepositNoQuorum(); error DepositRootChanged(); error DepositInactiveModule(); error DepositTooFrequent(); error DepositUnexpectedBlockHash(); error DepositNonceChanged(); error PauseIntentExpired(); error NotAGuardian(address addr); error ZeroParameter(string parameter); bytes32 public immutable ATTEST_MESSAGE_PREFIX; bytes32 public immutable PAUSE_MESSAGE_PREFIX; ILido public immutable LIDO; IStakingRouter public immutable STAKING_ROUTER; IDepositContract public immutable DEPOSIT_CONTRACT; /** * NB: both `maxDepositsPerBlock` and `minDepositBlockDistance` values * must be harmonized with `OracleReportSanityChecker.churnValidatorsPerDayLimit` * (see docs for the `OracleReportSanityChecker.setChurnValidatorsPerDayLimit` function) */ uint256 internal maxDepositsPerBlock; uint256 internal minDepositBlockDistance; uint256 internal pauseIntentValidityPeriodBlocks; address internal owner; uint256 internal quorum; address[] internal guardians; mapping(address => uint256) internal guardianIndicesOneBased; // 1-based constructor( address _lido, address _depositContract, address _stakingRouter, uint256 _maxDepositsPerBlock, uint256 _minDepositBlockDistance, uint256 _pauseIntentValidityPeriodBlocks ) { if (_lido == address(0)) revert ZeroAddress("_lido"); if (_depositContract == address(0)) revert ZeroAddress ("_depositContract"); if (_stakingRouter == address(0)) revert ZeroAddress ("_stakingRouter"); LIDO = ILido(_lido); STAKING_ROUTER = IStakingRouter(_stakingRouter); DEPOSIT_CONTRACT = IDepositContract(_depositContract); ATTEST_MESSAGE_PREFIX = keccak256( abi.encodePacked( // keccak256("lido.DepositSecurityModule.ATTEST_MESSAGE") bytes32(0x1085395a994e25b1b3d0ea7937b7395495fb405b31c7d22dbc3976a6bd01f2bf), block.chainid, address(this) ) ); PAUSE_MESSAGE_PREFIX = keccak256( abi.encodePacked( // keccak256("lido.DepositSecurityModule.PAUSE_MESSAGE") bytes32(0x9c4c40205558f12027f21204d6218b8006985b7a6359bcab15404bcc3e3fa122), block.chainid, address(this) ) ); _setOwner(msg.sender); _setMaxDeposits(_maxDepositsPerBlock); _setMinDepositBlockDistance(_minDepositBlockDistance); _setPauseIntentValidityPeriodBlocks(_pauseIntentValidityPeriodBlocks); } /** * Returns the owner address. */ function getOwner() external view returns (address) { return owner; } modifier onlyOwner() { if (msg.sender != owner) revert NotAnOwner(msg.sender); _; } /** * Sets new owner. Only callable by the current owner. */ function setOwner(address newValue) external onlyOwner { _setOwner(newValue); } function _setOwner(address _newOwner) internal { if (_newOwner == address(0)) revert ZeroAddress("_newOwner"); owner = _newOwner; emit OwnerChanged(_newOwner); } /** * 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 { if (newValue == 0) revert ZeroParameter("pauseIntentValidityPeriodBlocks"); pauseIntentValidityPeriodBlocks = newValue; emit PauseIntentValidityPeriodBlocksChanged(newValue); } /** * Returns `maxDepositsPerBlock` (see `depositBufferedEther`). */ function getMaxDeposits() external view returns (uint256) { return maxDepositsPerBlock; } /** * Sets `maxDepositsPerBlock`. Only callable by the owner. * * NB: the value must be harmonized with `OracleReportSanityChecker.churnValidatorsPerDayLimit` * (see docs for the `OracleReportSanityChecker.setChurnValidatorsPerDayLimit` function) */ 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. * * NB: the value must be harmonized with `OracleReportSanityChecker.churnValidatorsPerDayLimit` * (see docs for the `OracleReportSanityChecker.setChurnValidatorsPerDayLimit` function) */ function setMinDepositBlockDistance(uint256 newValue) external onlyOwner { _setMinDepositBlockDistance(newValue); } function _setMinDepositBlockDistance(uint256 newValue) internal { if (newValue == 0) revert ZeroParameter("minDepositBlockDistance"); if (newValue != minDepositBlockDistance) { minDepositBlockDistance = newValue; emit MinDepositBlockDistanceChanged(newValue); } } /** * Returns number of valid guardian signatures required to vet (depositRoot, nonce) 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 if (quorum != newValue) { 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 _newGuardian) internal { if (_newGuardian == address(0)) revert ZeroAddress("_newGuardian"); if (_isGuardian(_newGuardian)) revert DuplicateAddress(_newGuardian); guardians.push(_newGuardian); guardianIndicesOneBased[_newGuardian] = guardians.length; emit GuardianAdded(_newGuardian); } /** * 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]; if (indexOneBased == 0) revert NotAGuardian(addr); 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); } /** * Pauses deposits for staking module 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 | stakingModuleId | */ function pauseDeposits( uint256 blockNumber, uint256 stakingModuleId, 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`. /// @dev pause only active modules (not already paused, nor full stopped) if (!STAKING_ROUTER.getStakingModuleIsActive(stakingModuleId)) { return; } address guardianAddr = msg.sender; int256 guardianIndex = _getGuardianIndex(msg.sender); if (guardianIndex == -1) { bytes32 msgHash = keccak256(abi.encodePacked(PAUSE_MESSAGE_PREFIX, blockNumber, stakingModuleId)); guardianAddr = ECDSA.recover(msgHash, sig.r, sig.vs); guardianIndex = _getGuardianIndex(guardianAddr); if (guardianIndex == -1) revert InvalidSignature(); } if (block.number - blockNumber > pauseIntentValidityPeriodBlocks) revert PauseIntentExpired(); STAKING_ROUTER.pauseStakingModule(stakingModuleId); emit DepositsPaused(guardianAddr, uint24(stakingModuleId)); } /** * Unpauses deposits for staking module * * Only callable by the owner. */ function unpauseDeposits(uint256 stakingModuleId) external onlyOwner { /// @dev unpause only paused modules (skip stopped) if (STAKING_ROUTER.getStakingModuleIsDepositsPaused(stakingModuleId)) { STAKING_ROUTER.resumeStakingModule(stakingModuleId); emit DepositsUnpaused(uint24(stakingModuleId)); } } /** * Returns whether LIDO.deposit() can be called, given that the caller will provide * guardian attestations of non-stale deposit root and `nonce`, and the number of * such attestations will be enough to reach quorum. */ function canDeposit(uint256 stakingModuleId) external view returns (bool) { if (!STAKING_ROUTER.hasStakingModule(stakingModuleId)) return false; bool isModuleActive = STAKING_ROUTER.getStakingModuleIsActive(stakingModuleId); uint256 lastDepositBlock = STAKING_ROUTER.getStakingModuleLastDepositBlock(stakingModuleId); bool isLidoCanDeposit = LIDO.canDeposit(); return ( isModuleActive && quorum > 0 && block.number - lastDepositBlock >= minDepositBlockDistance && isLidoCanDeposit ); } /** * Calls LIDO.deposit(maxDepositsPerBlock, stakingModuleId, depositCalldata). * * Reverts if any of the following is true: * 1. IDepositContract.get_deposit_root() != depositRoot. * 2. StakingModule.getNonce() != nonce. * 3. The number of guardian signatures is less than getGuardianQuorum(). * 4. An invalid or non-guardian signature received. * 5. block.number - StakingModule.getLastDepositBlock() < minDepositBlockDistance. * 6. blockhash(blockNumber) != blockHash. * * Signatures must be sorted in ascending order by address of the guardian. Each signature must * be produced for the keccak256 hash of the following message (each component taking 32 bytes): * * | ATTEST_MESSAGE_PREFIX | blockNumber | blockHash | depositRoot | stakingModuleId | nonce | */ function depositBufferedEther( uint256 blockNumber, bytes32 blockHash, bytes32 depositRoot, uint256 stakingModuleId, uint256 nonce, bytes calldata depositCalldata, Signature[] calldata sortedGuardianSignatures ) external { if (quorum == 0 || sortedGuardianSignatures.length < quorum) revert DepositNoQuorum(); bytes32 onchainDepositRoot = IDepositContract(DEPOSIT_CONTRACT).get_deposit_root(); if (depositRoot != onchainDepositRoot) revert DepositRootChanged(); if (!STAKING_ROUTER.getStakingModuleIsActive(stakingModuleId)) revert DepositInactiveModule(); uint256 lastDepositBlock = STAKING_ROUTER.getStakingModuleLastDepositBlock(stakingModuleId); if (block.number - lastDepositBlock < minDepositBlockDistance) revert DepositTooFrequent(); if (blockHash == bytes32(0) || blockhash(blockNumber) != blockHash) revert DepositUnexpectedBlockHash(); uint256 onchainNonce = STAKING_ROUTER.getStakingModuleNonce(stakingModuleId); if (nonce != onchainNonce) revert DepositNonceChanged(); _verifySignatures(depositRoot, blockNumber, blockHash, stakingModuleId, nonce, sortedGuardianSignatures); LIDO.deposit(maxDepositsPerBlock, stakingModuleId, depositCalldata); } function _verifySignatures( bytes32 depositRoot, uint256 blockNumber, bytes32 blockHash, uint256 stakingModuleId, uint256 nonce, Signature[] memory sigs ) internal view { bytes32 msgHash = keccak256( abi.encodePacked(ATTEST_MESSAGE_PREFIX, blockNumber, blockHash, depositRoot, stakingModuleId, nonce) ); address prevSignerAddr = address(0); for (uint256 i = 0; i < sigs.length; ++i) { address signerAddr = ECDSA.recover(msgHash, sigs[i].r, sigs[i].vs); if (!_isGuardian(signerAddr)) revert InvalidSignature(); if (signerAddr <= prevSignerAddr) revert SignaturesNotSorted(); prevSignerAddr = signerAddr; } } }
// 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 */ // solhint-disable-next-line pragma solidity >=0.4.24 <0.9.0; 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"); // 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); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_lido","type":"address"},{"internalType":"address","name":"_depositContract","type":"address"},{"internalType":"address","name":"_stakingRouter","type":"address"},{"internalType":"uint256","name":"_maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"_minDepositBlockDistance","type":"uint256"},{"internalType":"uint256","name":"_pauseIntentValidityPeriodBlocks","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DepositInactiveModule","type":"error"},{"inputs":[],"name":"DepositNoQuorum","type":"error"},{"inputs":[],"name":"DepositNonceChanged","type":"error"},{"inputs":[],"name":"DepositRootChanged","type":"error"},{"inputs":[],"name":"DepositTooFrequent","type":"error"},{"inputs":[],"name":"DepositUnexpectedBlockHash","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"DuplicateAddress","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"NotAGuardian","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NotAnOwner","type":"error"},{"inputs":[],"name":"PauseIntentExpired","type":"error"},{"inputs":[],"name":"SignaturesNotSorted","type":"error"},{"inputs":[{"internalType":"string","name":"field","type":"string"}],"name":"ZeroAddress","type":"error"},{"inputs":[{"internalType":"string","name":"parameter","type":"string"}],"name":"ZeroParameter","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guardian","type":"address"},{"indexed":true,"internalType":"uint24","name":"stakingModuleId","type":"uint24"}],"name":"DepositsPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint24","name":"stakingModuleId","type":"uint24"}],"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":"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":"contract IDepositContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"contract ILido","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_MESSAGE_PREFIX","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_ROUTER","outputs":[{"internalType":"contract IStakingRouter","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"stakingModuleId","type":"uint256"}],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"bytes32","name":"depositRoot","type":"bytes32"},{"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"depositCalldata","type":"bytes"},{"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":"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":"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":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"stakingModuleId","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":"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":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setPauseIntentValidityPeriodBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingModuleId","type":"uint256"}],"name":"unpauseDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101206040523480156200001257600080fd5b50604051620022b0380380620022b0833981016040819052620000359162000433565b6001600160a01b0386166200007a5760405163eac0d38960e01b81526020600482015260056024820152645f6c69646f60d81b60448201526064015b60405180910390fd5b6001600160a01b038516620000c65760405163eac0d38960e01b815260206004820152601060248201526f17d9195c1bdcda5d10dbdb9d1c9858dd60821b604482015260640162000071565b6001600160a01b038416620001105760405163eac0d38960e01b815260206004820152600e60248201526d2fb9ba30b5b4b733a937baba32b960911b604482015260640162000071565b6001600160a01b0380871660c05284811660e0528516610100526040516200017e907f1085395a994e25b1b3d0ea7937b7395495fb405b31c7d22dbc3976a6bd01f2bf9046903090602001928352602083019190915260601b6001600160601b031916604082015260540190565b60408051601f1981840301815282825280516020918201206080527f9c4c40205558f12027f21204d6218b8006985b7a6359bcab15404bcc3e3fa12290830152469082015230606090811b6001600160601b0319169082015260740160408051601f19818403018152919052805160209091012060a05262000200336200022d565b6200020b83620002c7565b6200021682620002fd565b620002218162000390565b50505050505062000499565b6001600160a01b038116620002725760405163eac0d38960e01b81526020600482015260096024820152682fb732bba7bbb732b960b91b604482015260640162000071565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36906020015b60405180910390a150565b60008190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da99290602001620002bc565b806200034d57604051631fd43b6f60e21b815260206004820152601760248201527f6d696e4465706f736974426c6f636b44697374616e6365000000000000000000604482015260640162000071565b60015481146200038d5760018190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace1490602001620002bc565b50565b80620003e057604051631fd43b6f60e21b815260206004820152601f60248201527f7061757365496e74656e7456616c6964697479506572696f64426c6f636b7300604482015260640162000071565b60028190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba90602001620002bc565b80516001600160a01b03811681146200042e57600080fd5b919050565b60008060008060008060c087890312156200044d57600080fd5b620004588762000416565b9550620004686020880162000416565b9450620004786040880162000416565b9350606087015192506080870151915060a087015190509295509295509295565b60805160a05160c05160e05161010051611d69620005476000396000818161026d01526104b70152600081816103680152818161057e015281816106360152818161072c01528181610956015281816109fd01528181610aa301528181610c2f01528181610ccc01528181610daf0152610f2e0152600081816102d00152818161084a0152610b2301526000818161030a0152610e5801526000818161033901526112b10152611d696000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c80636b96736b116100de578063b7b7a40811610097578063c8a5f8e611610071578063c8a5f8e614610363578063c8f712d51461038a578063eccd085f1461039d578063f47610e6146103b057600080fd5b8063b7b7a4081461032c578063c6dda2c314610334578063c7062e981461035b57600080fd5b80636b96736b146102685780637e923312146102a7578063893d20e8146102ba5780638b21f170146102cb5780638d71a6f4146102f2578063a50833d61461030557600080fd5b806313af40351161013057806313af403514610201578063251e3a211461021457806339443b8e1461021c5780633bab964e1461022f5780633e6f6d68146102425780634acd54c31461025557600080fd5b8062fed90214610177578063062b662e1461018c5780630665f04b146101a35780630c68ba21146101b85780630df9a86d146101db578063111e5313146101ee575b600080fd5b61018a61018536600461186d565b6103c3565b005b6004545b6040519081526020015b60405180910390f35b6101ab610401565b60405161019a9190611886565b6101cb6101c63660046118ef565b610463565b604051901515815260200161019a565b61018a6101e936600461195d565b610485565b61018a6101fc366004611a2d565b6108c4565b61018a61020f3660046118ef565b610907565b600154610190565b6101cb61022a36600461186d565b61093d565b61018a61023d36600461186d565b610bec565b61018a61025036600461186d565b610d63565b61018a610263366004611aed565b610d99565b61028f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019a565b61018a6102b536600461186d565b610fd4565b6003546001600160a01b031661028f565b61028f7f000000000000000000000000000000000000000000000000000000000000000081565b61018a610300366004611a2d565b61100a565b6101907f000000000000000000000000000000000000000000000000000000000000000081565b600054610190565b6101907f000000000000000000000000000000000000000000000000000000000000000081565b600254610190565b61028f7f000000000000000000000000000000000000000000000000000000000000000081565b61018a610398366004611b23565b6111b9565b61018a6103ab36600461186d565b61122e565b6101906103be3660046118ef565b611264565b6003546001600160a01b031633146103f55760405163351c880f60e01b81523360048201526024015b60405180910390fd5b6103fe8161126f565b50565b6060600580548060200260200160405190810160405280929190818152602001828054801561045957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161043b575b5050505050905090565b6001600160a01b03811660009081526006602052604081205415155b92915050565b6004541580610495575060045481105b156104b357604051630833b4e360e41b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5f2892f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050e57600080fd5b505afa158015610522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105469190611bd6565b9050808814610568576040516302d654b160e41b815260040160405180910390fd5b604051636608b11b60e01b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636608b11b9060240160206040518083038186803b1580156105c857600080fd5b505afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190611bef565b61061d5760405163fa7f287160e01b815260040160405180910390fd5b60405163473e043360e01b8152600481018890526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063473e04339060240160206040518083038186803b15801561068057600080fd5b505afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611bd6565b6001549091506106c88243611c27565b10156106e757604051633ec3745360e11b815260040160405180910390fd5b8915806106f55750898b4014155b15610713576040516328aada8b60e21b815260040160405180910390fd5b604051630519fbbf60e01b8152600481018990526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630519fbbf9060240160206040518083038186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611bd6565b90508088146107d057604051632e8f7e7360e11b815260040160405180910390fd5b6108308a8d8d8c8c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156108265761081760408302860136819003810190611c3e565b815260200190600101906107fa565b50505050506112ab565b60005460405163aa0b7db760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163aa0b7db79161088491908d908c908c90600401611c5a565b600060405180830381600087803b15801561089e57600080fd5b505af11580156108b2573d6000803e3d6000fd5b50505050505050505050505050505050565b6003546001600160a01b031633146108f15760405163351c880f60e01b81523360048201526024016103ec565b6108fa826113f8565b6109038161150c565b5050565b6003546001600160a01b031633146109345760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161154a565b6040516329cd0ca760e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a734329c9060240160206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190611bef565b6109e457506000919050565b604051636608b11b60e01b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636608b11b9060240160206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f9190611bef565b60405163473e043360e01b8152600481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063473e04339060240160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611bd6565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e78a58756040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7a57600080fd5b505afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190611bef565b9050828015610bc357506000600454115b8015610bda5750600154610bd78343611c27565b10155b8015610be35750805b95945050505050565b6003546001600160a01b03163314610c195760405163351c880f60e01b81523360048201526024016103ec565b60405163e24ce9f160e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e24ce9f19060240160206040518083038186803b158015610c7957600080fd5b505afa158015610c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb19190611bef565b156103fe57604051633618716160e21b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d861c58490602401600060405180830381600087803b158015610d1857600080fd5b505af1158015610d2c573d6000803e3d6000fd5b505060405162ffffff841692507fb861fabb6dfce807f39e6f400693b8a826dcd89a4ce4ff8e955f6c4ddec398a39150600090a250565b6003546001600160a01b03163314610d905760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161150c565b604051636608b11b60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636608b11b9060240160206040518083038186803b158015610df957600080fd5b505afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611bef565b610e3a57505050565b336000610e46826115db565b9050806000191415610eec57604080517f0000000000000000000000000000000000000000000000000000000000000000602082015290810186905260608101859052600090608001604051602081830303815290604052805190602001209050610eba8185600001518660200151611600565b9250610ec5836115db565b9150816000191415610eea57604051638baa579f60e01b815260040160405180910390fd5b505b600254610ef98643611c27565b1115610f185760405163664af4ed60e01b815260040160405180910390fd5b60405163016fd57960e61b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635bf55e4090602401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505060405162ffffff871692506001600160a01b03851691507fa0b7f0a9bb410971c133acc48cc1b77dc067cb188643c832d0b11593f59c301b90600090a35050505050565b6003546001600160a01b031633146110015760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161162a565b6003546001600160a01b031633146110375760405163351c880f60e01b81523360048201526024016103ec565b6001600160a01b03821660009081526006602052604090205480611079576040516302333ca160e51b81526001600160a01b03841660048201526024016103ec565b6005548082111561108c5761108c611c97565b80821461112257600060056110a2600184611c27565b815481106110b2576110b2611cad565b6000918252602090912001546001600160a01b031690508060056110d7600186611c27565b815481106110e7576110e7611cad565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526006909152604090208290555b6001600160a01b038416600090815260066020526040812055600580548061114c5761114c611cc3565b600082815260209020810160001990810180546001600160a01b03191690550190556111778361150c565b6040516001600160a01b03851681527fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529060200160405180910390a150505050565b6003546001600160a01b031633146111e65760405163351c880f60e01b81523360048201526024016103ec565b60005b82518110156112245761121483828151811061120757611207611cad565b60200260200101516113f8565b61121d81611cd9565b90506111e9565b506109038161150c565b6003546001600160a01b0316331461125b5760405163351c880f60e01b81523360048201526024016103ec565b6103fe816116b6565b600061047f826115db565b60008190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da992906020015b60405180910390a150565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152908101869052606081018590526080810187905260a0810184905260c0810183905260009060e0016040516020818303038152906040528051906020012090506000805b83518110156113ed5760006113698486848151811061133a5761133a611cad565b60200260200101516000015187858151811061135857611358611cad565b602002602001015160200151611600565b905061138c816001600160a01b0316600090815260066020526040902054151590565b6113a957604051638baa579f60e01b815260040160405180910390fd5b826001600160a01b0316816001600160a01b0316116113db576040516301eba55160e01b815260040160405180910390fd5b91506113e681611cd9565b9050611319565b505050505050505050565b6001600160a01b03811661143e5760405163eac0d38960e01b815260206004820152600c60248201526b2fb732bba3bab0b93234b0b760a11b60448201526064016103ec565b6001600160a01b0381166000908152600660205260409020541561148057604051639f2277f360e01b81526001600160a01b03821660048201526024016103ec565b600580546001810182557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038416908117909155905460008281526006602090815260409182902092909255519182527f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96991016112a0565b80600454146103fe5760048190556040518181527f70d7432f2ec830b36e5b8c45176a8079968714429c4be85665c06ec1b8fde4bb906020016112a0565b6001600160a01b03811661158d5760405163eac0d38960e01b81526020600482015260096024820152682fb732bba7bbb732b960b91b60448201526064016103ec565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36906020016112a0565b6001600160a01b03811660009081526006602052604081205461047f90600190611cf4565b60006001600160ff1b03821660ff83901c601b0161162086828785611739565b9695505050505050565b8061167857604051631fd43b6f60e21b815260206004820152601760248201527f6d696e4465706f736974426c6f636b44697374616e636500000000000000000060448201526064016103ec565b60015481146103fe5760018190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace14906020016112a0565b8061170457604051631fd43b6f60e21b815260206004820152601f60248201527f7061757365496e74656e7456616c6964697479506572696f64426c6f636b730060448201526064016103ec565b60028190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba906020016112a0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156117b65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103ec565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561180a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610be35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103ec565b60006020828403121561187f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156118c75783516001600160a01b0316835292840192918401916001016118a2565b50909695505050505050565b80356001600160a01b03811681146118ea57600080fd5b919050565b60006020828403121561190157600080fd5b61190a826118d3565b9392505050565b60008083601f84011261192357600080fd5b50813567ffffffffffffffff81111561193b57600080fd5b6020830191508360208260061b850101111561195657600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561197b57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a0135945060a08a013567ffffffffffffffff808211156119b657600080fd5b818c0191508c601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8d60208285010111156119eb57600080fd5b6020830196508095505060c08c0135915080821115611a0957600080fd5b50611a168c828d01611911565b915080935050809150509295985092959850929598565b60008060408385031215611a4057600080fd5b611a49836118d3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a9657611a96611a57565b604052919050565b600060408284031215611ab057600080fd5b6040516040810181811067ffffffffffffffff82111715611ad357611ad3611a57565b604052823581526020928301359281019290925250919050565b600080600060808486031215611b0257600080fd5b8335925060208401359150611b1a8560408601611a9e565b90509250925092565b60008060408385031215611b3657600080fd5b823567ffffffffffffffff80821115611b4e57600080fd5b818501915085601f830112611b6257600080fd5b8135602082821115611b7657611b76611a57565b8160051b9250611b87818401611a6d565b8281529284018101928181019089851115611ba157600080fd5b948201945b84861015611bc657611bb7866118d3565b82529482019490820190611ba6565b9997909101359750505050505050565b600060208284031215611be857600080fd5b5051919050565b600060208284031215611c0157600080fd5b8151801515811461190a57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611c3957611c39611c11565b500390565b600060408284031215611c5057600080fd5b61190a8383611a9e565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600019821415611ced57611ced611c11565b5060010190565b60008083128015600160ff1b850184121615611d1257611d12611c11565b6001600160ff1b0384018313811615611d2d57611d2d611c11565b5050039056fea2646970667358221220c67caad31e99e2d8c4f8bfd5c91287351d70825481939df9bad07689237cc68b64736f6c634300080900330000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950340000000000000000000000004242424242424242424242424242424242424242000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2290000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000019f6
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101725760003560e01c80636b96736b116100de578063b7b7a40811610097578063c8a5f8e611610071578063c8a5f8e614610363578063c8f712d51461038a578063eccd085f1461039d578063f47610e6146103b057600080fd5b8063b7b7a4081461032c578063c6dda2c314610334578063c7062e981461035b57600080fd5b80636b96736b146102685780637e923312146102a7578063893d20e8146102ba5780638b21f170146102cb5780638d71a6f4146102f2578063a50833d61461030557600080fd5b806313af40351161013057806313af403514610201578063251e3a211461021457806339443b8e1461021c5780633bab964e1461022f5780633e6f6d68146102425780634acd54c31461025557600080fd5b8062fed90214610177578063062b662e1461018c5780630665f04b146101a35780630c68ba21146101b85780630df9a86d146101db578063111e5313146101ee575b600080fd5b61018a61018536600461186d565b6103c3565b005b6004545b6040519081526020015b60405180910390f35b6101ab610401565b60405161019a9190611886565b6101cb6101c63660046118ef565b610463565b604051901515815260200161019a565b61018a6101e936600461195d565b610485565b61018a6101fc366004611a2d565b6108c4565b61018a61020f3660046118ef565b610907565b600154610190565b6101cb61022a36600461186d565b61093d565b61018a61023d36600461186d565b610bec565b61018a61025036600461186d565b610d63565b61018a610263366004611aed565b610d99565b61028f7f000000000000000000000000424242424242424242424242424242424242424281565b6040516001600160a01b03909116815260200161019a565b61018a6102b536600461186d565b610fd4565b6003546001600160a01b031661028f565b61028f7f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c9503481565b61018a610300366004611a2d565b61100a565b6101907fdd244d9fdde3e6b6fe5af5a9b8516c29d9a2bfb15c3fd5740309f33d8d82d1e581565b600054610190565b6101907f4c5ce4a5b1abcdffc1471eb22f152e8ae479c2259a5f5b3929bc6637a47ebf5781565b600254610190565b61028f7f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe22981565b61018a610398366004611b23565b6111b9565b61018a6103ab36600461186d565b61122e565b6101906103be3660046118ef565b611264565b6003546001600160a01b031633146103f55760405163351c880f60e01b81523360048201526024015b60405180910390fd5b6103fe8161126f565b50565b6060600580548060200260200160405190810160405280929190818152602001828054801561045957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161043b575b5050505050905090565b6001600160a01b03811660009081526006602052604081205415155b92915050565b6004541580610495575060045481105b156104b357604051630833b4e360e41b815260040160405180910390fd5b60007f00000000000000000000000042424242424242424242424242424242424242426001600160a01b031663c5f2892f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050e57600080fd5b505afa158015610522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105469190611bd6565b9050808814610568576040516302d654b160e41b815260040160405180910390fd5b604051636608b11b60e01b8152600481018890527f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b031690636608b11b9060240160206040518083038186803b1580156105c857600080fd5b505afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190611bef565b61061d5760405163fa7f287160e01b815260040160405180910390fd5b60405163473e043360e01b8152600481018890526000907f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b03169063473e04339060240160206040518083038186803b15801561068057600080fd5b505afa158015610694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b89190611bd6565b6001549091506106c88243611c27565b10156106e757604051633ec3745360e11b815260040160405180910390fd5b8915806106f55750898b4014155b15610713576040516328aada8b60e21b815260040160405180910390fd5b604051630519fbbf60e01b8152600481018990526000907f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b031690630519fbbf9060240160206040518083038186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611bd6565b90508088146107d057604051632e8f7e7360e11b815260040160405180910390fd5b6108308a8d8d8c8c8a8a808060200260200160405190810160405280939291908181526020016000905b828210156108265761081760408302860136819003810190611c3e565b815260200190600101906107fa565b50505050506112ab565b60005460405163aa0b7db760e01b81526001600160a01b037f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034169163aa0b7db79161088491908d908c908c90600401611c5a565b600060405180830381600087803b15801561089e57600080fd5b505af11580156108b2573d6000803e3d6000fd5b50505050505050505050505050505050565b6003546001600160a01b031633146108f15760405163351c880f60e01b81523360048201526024016103ec565b6108fa826113f8565b6109038161150c565b5050565b6003546001600160a01b031633146109345760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161154a565b6040516329cd0ca760e21b8152600481018290526000907f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b03169063a734329c9060240160206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d89190611bef565b6109e457506000919050565b604051636608b11b60e01b8152600481018390526000907f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b031690636608b11b9060240160206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f9190611bef565b60405163473e043360e01b8152600481018590529091506000906001600160a01b037f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe229169063473e04339060240160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611bd6565b905060007f0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950346001600160a01b031663e78a58756040518163ffffffff1660e01b815260040160206040518083038186803b158015610b7a57600080fd5b505afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190611bef565b9050828015610bc357506000600454115b8015610bda5750600154610bd78343611c27565b10155b8015610be35750805b95945050505050565b6003546001600160a01b03163314610c195760405163351c880f60e01b81523360048201526024016103ec565b60405163e24ce9f160e01b8152600481018290527f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b03169063e24ce9f19060240160206040518083038186803b158015610c7957600080fd5b505afa158015610c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb19190611bef565b156103fe57604051633618716160e21b8152600481018290527f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b03169063d861c58490602401600060405180830381600087803b158015610d1857600080fd5b505af1158015610d2c573d6000803e3d6000fd5b505060405162ffffff841692507fb861fabb6dfce807f39e6f400693b8a826dcd89a4ce4ff8e955f6c4ddec398a39150600090a250565b6003546001600160a01b03163314610d905760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161150c565b604051636608b11b60e01b8152600481018390527f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b031690636608b11b9060240160206040518083038186803b158015610df957600080fd5b505afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190611bef565b610e3a57505050565b336000610e46826115db565b9050806000191415610eec57604080517fdd244d9fdde3e6b6fe5af5a9b8516c29d9a2bfb15c3fd5740309f33d8d82d1e5602082015290810186905260608101859052600090608001604051602081830303815290604052805190602001209050610eba8185600001518660200151611600565b9250610ec5836115db565b9150816000191415610eea57604051638baa579f60e01b815260040160405180910390fd5b505b600254610ef98643611c27565b1115610f185760405163664af4ed60e01b815260040160405180910390fd5b60405163016fd57960e61b8152600481018590527f000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2296001600160a01b031690635bf55e4090602401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505060405162ffffff871692506001600160a01b03851691507fa0b7f0a9bb410971c133acc48cc1b77dc067cb188643c832d0b11593f59c301b90600090a35050505050565b6003546001600160a01b031633146110015760405163351c880f60e01b81523360048201526024016103ec565b6103fe8161162a565b6003546001600160a01b031633146110375760405163351c880f60e01b81523360048201526024016103ec565b6001600160a01b03821660009081526006602052604090205480611079576040516302333ca160e51b81526001600160a01b03841660048201526024016103ec565b6005548082111561108c5761108c611c97565b80821461112257600060056110a2600184611c27565b815481106110b2576110b2611cad565b6000918252602090912001546001600160a01b031690508060056110d7600186611c27565b815481106110e7576110e7611cad565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526006909152604090208290555b6001600160a01b038416600090815260066020526040812055600580548061114c5761114c611cc3565b600082815260209020810160001990810180546001600160a01b03191690550190556111778361150c565b6040516001600160a01b03851681527fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529060200160405180910390a150505050565b6003546001600160a01b031633146111e65760405163351c880f60e01b81523360048201526024016103ec565b60005b82518110156112245761121483828151811061120757611207611cad565b60200260200101516113f8565b61121d81611cd9565b90506111e9565b506109038161150c565b6003546001600160a01b0316331461125b5760405163351c880f60e01b81523360048201526024016103ec565b6103fe816116b6565b600061047f826115db565b60008190556040518181527f4d72502b63cfe737b98b225a53708fe347cf8274baed31e0c4e4941b758da992906020015b60405180910390a150565b604080517f4c5ce4a5b1abcdffc1471eb22f152e8ae479c2259a5f5b3929bc6637a47ebf576020820152908101869052606081018590526080810187905260a0810184905260c0810183905260009060e0016040516020818303038152906040528051906020012090506000805b83518110156113ed5760006113698486848151811061133a5761133a611cad565b60200260200101516000015187858151811061135857611358611cad565b602002602001015160200151611600565b905061138c816001600160a01b0316600090815260066020526040902054151590565b6113a957604051638baa579f60e01b815260040160405180910390fd5b826001600160a01b0316816001600160a01b0316116113db576040516301eba55160e01b815260040160405180910390fd5b91506113e681611cd9565b9050611319565b505050505050505050565b6001600160a01b03811661143e5760405163eac0d38960e01b815260206004820152600c60248201526b2fb732bba3bab0b93234b0b760a11b60448201526064016103ec565b6001600160a01b0381166000908152600660205260409020541561148057604051639f2277f360e01b81526001600160a01b03821660048201526024016103ec565b600580546001810182557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038416908117909155905460008281526006602090815260409182902092909255519182527f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f96991016112a0565b80600454146103fe5760048190556040518181527f70d7432f2ec830b36e5b8c45176a8079968714429c4be85665c06ec1b8fde4bb906020016112a0565b6001600160a01b03811661158d5760405163eac0d38960e01b81526020600482015260096024820152682fb732bba7bbb732b960b91b60448201526064016103ec565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf36906020016112a0565b6001600160a01b03811660009081526006602052604081205461047f90600190611cf4565b60006001600160ff1b03821660ff83901c601b0161162086828785611739565b9695505050505050565b8061167857604051631fd43b6f60e21b815260206004820152601760248201527f6d696e4465706f736974426c6f636b44697374616e636500000000000000000060448201526064016103ec565b60015481146103fe5760018190556040518181527fdb69cbc4aa6648b506b7854c26807bfd811c27feaf97ac8847e3a66356cace14906020016112a0565b8061170457604051631fd43b6f60e21b815260206004820152601f60248201527f7061757365496e74656e7456616c6964697479506572696f64426c6f636b730060448201526064016103ec565b60028190556040518181527f8120886d27fee35672e5d5a482d6c858105aebb26caf12178b8c0034fa88c2ba906020016112a0565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156117b65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103ec565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561180a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610be35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103ec565b60006020828403121561187f57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156118c75783516001600160a01b0316835292840192918401916001016118a2565b50909695505050505050565b80356001600160a01b03811681146118ea57600080fd5b919050565b60006020828403121561190157600080fd5b61190a826118d3565b9392505050565b60008083601f84011261192357600080fd5b50813567ffffffffffffffff81111561193b57600080fd5b6020830191508360208260061b850101111561195657600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561197b57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a0135945060a08a013567ffffffffffffffff808211156119b657600080fd5b818c0191508c601f8301126119ca57600080fd5b8135818111156119d957600080fd5b8d60208285010111156119eb57600080fd5b6020830196508095505060c08c0135915080821115611a0957600080fd5b50611a168c828d01611911565b915080935050809150509295985092959850929598565b60008060408385031215611a4057600080fd5b611a49836118d3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a9657611a96611a57565b604052919050565b600060408284031215611ab057600080fd5b6040516040810181811067ffffffffffffffff82111715611ad357611ad3611a57565b604052823581526020928301359281019290925250919050565b600080600060808486031215611b0257600080fd5b8335925060208401359150611b1a8560408601611a9e565b90509250925092565b60008060408385031215611b3657600080fd5b823567ffffffffffffffff80821115611b4e57600080fd5b818501915085601f830112611b6257600080fd5b8135602082821115611b7657611b76611a57565b8160051b9250611b87818401611a6d565b8281529284018101928181019089851115611ba157600080fd5b948201945b84861015611bc657611bb7866118d3565b82529482019490820190611ba6565b9997909101359750505050505050565b600060208284031215611be857600080fd5b5051919050565b600060208284031215611c0157600080fd5b8151801515811461190a57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611c3957611c39611c11565b500390565b600060408284031215611c5057600080fd5b61190a8383611a9e565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600019821415611ced57611ced611c11565b5060010190565b60008083128015600160ff1b850184121615611d1257611d12611c11565b6001600160ff1b0384018313811615611d2d57611d2d611c11565b5050039056fea2646970667358221220c67caad31e99e2d8c4f8bfd5c91287351d70825481939df9bad07689237cc68b64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c950340000000000000000000000004242424242424242424242424242424242424242000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe2290000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000019f6
-----Decoded View---------------
Arg [0] : _lido (address): 0x3F1c547b21f65e10480dE3ad8E19fAAC46C95034
Arg [1] : _depositContract (address): 0x4242424242424242424242424242424242424242
Arg [2] : _stakingRouter (address): 0xd6EbF043D30A7fe46D1Db32BA90a0A51207FE229
Arg [3] : _maxDepositsPerBlock (uint256): 150
Arg [4] : _minDepositBlockDistance (uint256): 5
Arg [5] : _pauseIntentValidityPeriodBlocks (uint256): 6646
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000003f1c547b21f65e10480de3ad8e19faac46c95034
Arg [1] : 0000000000000000000000004242424242424242424242424242424242424242
Arg [2] : 000000000000000000000000d6ebf043d30a7fe46d1db32ba90a0a51207fe229
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 00000000000000000000000000000000000000000000000000000000000019f6
Loading...
Loading
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.