Contract 0x36Cf86FFa541fed07550ffD9536DBFaAC73da7Eb

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6eb7cddf15a5a0e9c50f4cabb72533bcce857a2a1b2a1d1d8e9c7e6df3373bf1Set Ledger Revis...17337202022-04-22 13:11:18286 days 4 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000052496
0xa005a9758a31f0ec8d1433c560b4741f6cc91becd9d9210c43cde1db2f63d840Set Current Revi...17337162022-04-22 13:09:36286 days 4 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000064282
0x3209fa9cba10cb40eec2c6634d3d1970fef12f095fce4fde4675dda1c54c5787Set Ledger Revis...17223742022-04-19 10:42:18289 days 7 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000107596
0x0e824c766b998170c9da55f9dec0d86eebc604abb7b05d4b6fab63ab8c997857Add Implementati...17223622022-04-19 10:35:18289 days 7 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000085223
0x88a8bda5d70035fe00b8e396f17ca030ca472aa33c92a43208fd2f3abf724143Set Current Revi...15456472022-03-02 13:16:48337 days 4 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000064282
0xc290f299d3b4f33a25d0729607678b6c441bce754319788400678a1ec279460fAdd Implementati...15456442022-03-02 13:15:36337 days 4 hrs agoLido: Deployer IN  0x36cf86ffa541fed07550ffd9536dbfaac73da7eb0 MOVR0.000085223
0x1c68d1a37bedafa5ce36101869025264ce1bcbf77629cb70b05086f1356ca7800x6080604014628302022-02-09 14:37:42358 days 3 hrs agoLido: Deployer IN  Create: LedgerBeacon0 MOVR0.002080461
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LedgerBeacon

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 6 : LedgerBeacon.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "IBeacon.sol";
import "Address.sol";

import "ILido.sol";
import "IAuthManager.sol";

/**
 * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their
 * implementation contract, which is where they will delegate all function calls.
 *
 * An ROLE_BEACON_MANAGER is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.
 */
contract LedgerBeacon is IBeacon {
    // LIDO address
    address public LIDO;

    // current revision index
    uint256 public currentRevision;

    // index of newest revision
    uint256 public latestRevision;

    // array of implementations
    address[] public revisionImplementation;

    // revision index for specific ledger (if revision == 0 => current revision used)
    mapping(address => uint256) public ledgerRevision;

    // index of max revision for ledger
    mapping(address => uint256) public ledgerMaxRevision;

    // Beacon manager role
    bytes32 internal constant ROLE_BEACON_MANAGER = keccak256("ROLE_BEACON_MANAGER");

    /**
     * @dev Emitted when new implementation revision added.
     */
    event NewRevision(address indexed implementation);

    /**
     * @dev Emitted when current revision updated.
     */
    event NewCurrentRevision(address indexed implementation);

    /**
     * @dev Emitted when ledger current revision updated.
     */
    event NewLedgerRevision(address indexed ledger, address indexed implementation);

    modifier auth(bytes32 role) {
        require(IAuthManager(ILido(LIDO).AUTH_MANAGER()).has(role, msg.sender), "LEDGER_BEACON: UNAUTHOROZED");
        _;
    }

    /**
     * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the
     * beacon.
     */
    constructor(address implementation_, address _lido) {
        _setImplementation(implementation_);
        currentRevision = latestRevision;
        LIDO = _lido;
    }

    /**
     * @dev Returns the current implementation address.
     */
    function implementation() public view virtual override returns (address) {
        if (ledgerRevision[msg.sender] != 0) {
            return revisionImplementation[ledgerRevision[msg.sender] - 1];
        }
        return revisionImplementation[currentRevision - 1];
    }

    /**
    * @dev Set ledger revision to `_revision`
    */
    function setLedgerRevision(address _ledger, uint256 _revision) external auth(ROLE_BEACON_MANAGER) {
        require(
            (ledgerRevision[_ledger] == 0 && _revision > ledgerMaxRevision[_ledger] && _revision <= latestRevision) || 
            (ledgerRevision[_ledger] > 0 && _revision == 0), 
            "LEDGER_BEACON: INCORRECT_REVISION"
        );
        ledgerRevision[_ledger] = _revision;

        if (_revision == 0) {
            _revision = currentRevision;
        }
        else {
            ledgerMaxRevision[_ledger] = _revision;
        }
        emit NewLedgerRevision(_ledger, revisionImplementation[_revision - 1]);
    }

    /**
    * @dev Update current revision
    */
    function setCurrentRevision(uint256 _newCurrentRevision) external auth(ROLE_BEACON_MANAGER) {
        require(_newCurrentRevision > currentRevision && _newCurrentRevision <= latestRevision, "LEDGER_BEACON: INCORRECT_REVISION");
        currentRevision = _newCurrentRevision;
        emit NewCurrentRevision(revisionImplementation[_newCurrentRevision - 1]);
    }

    /**
     * @dev Add new revision of implementation to beacon.
     *
     * Emits an {Upgraded} event.
     *
     * Requirements:
     *
     * - msg.sender must be the owner of the contract.
     * - `newImplementation` must be a contract.
     */
    function addImplementation(address newImplementation) public auth(ROLE_BEACON_MANAGER) {
        _setImplementation(newImplementation);
        emit NewRevision(newImplementation);
    }

    /**
     * @dev Sets the implementation contract address for this beacon
     *
     * Requirements:
     *
     * - `newImplementation` must be a contract.
     */
    function _setImplementation(address newImplementation) private {
        require(Address.isContract(newImplementation), "LEDGER_BEACON: implementation is not a contract");
        latestRevision += 1;
        revisionImplementation.push(newImplementation);
    }
}

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

pragma solidity ^0.8.0;

/**
 * @dev This is the interface that {BeaconProxy} expects of its beacon.
 */
interface IBeacon {
    /**
     * @dev Must return an address that can be used as a delegate call target.
     *
     * {BeaconProxy} will check that this address is a contract.
     */
    function implementation() external view returns (address);
}

File 3 of 6 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 6 : ILido.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "Types.sol";

interface ILido {
    function MAX_ALLOWABLE_DIFFERENCE() external view returns(uint128);

    function developers() external view returns(address);

    function deposit(uint256 amount) external returns (uint256);
    
    function distributeRewards(uint256 totalRewards, uint256 ledgerBalance) external;

    function distributeLosses(uint256 totalLosses, uint256 ledgerBalance) external;

    function getStashAccounts() external view returns (bytes32[] memory);

    function getLedgerAddresses() external view returns (address[] memory);

    function ledgerStake(address ledger) external view returns (uint256);

    function ledgerShares(address ledger) external view returns (uint256);

    function avaliableForStake() external view returns (uint256);

    function transferFromLedger(uint256 amount) external;

    function transferToLedger(uint256 amount) external;

    function flushStakes() external;

    function findLedger(bytes32 stash) external view returns (address);

    function AUTH_MANAGER() external returns(address);

    function ORACLE_MASTER() external view returns (address);

    function getPooledKSMByShares(uint256 sharesAmount) external view returns (uint256);

    function getSharesByPooledKSM(uint256 amount) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

File 5 of 6 : Types.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface Types {
    struct Fee{
        uint16 total;
        uint16 operators;
        uint16 developers;
        uint16 treasury;
    }

    struct Stash {
        bytes32 stashAccount;
        uint64  eraId;
    }

    enum LedgerStatus {
        // bonded but not participate in staking
        Idle,
        // participate as nominator
        Nominator,
        // participate as validator
        Validator,
        // not bonded not participate in staking
        None
    }

    struct UnlockingChunk {
        uint128 balance;
        uint64 era;
    }

    struct OracleData {
        bytes32 stashAccount;
        bytes32 controllerAccount;
        LedgerStatus stakeStatus;
        // active part of stash balance
        uint128 activeBalance;
        // locked for stake stash balance.
        uint128 totalBalance;
        // totalBalance = activeBalance + sum(unlocked.balance)
        UnlockingChunk[] unlocking;
        uint32[] claimedRewards;
        // stash account balance. It includes locked (totalBalance) balance assigned
        // to a controller.
        uint128 stashBalance;
        // slashing spans for ledger
        uint32 slashingSpans;
    }

    struct RelaySpec {
        uint16 maxValidatorsPerLedger;
        uint128 minNominatorBalance;
        uint128 ledgerMinimumActiveBalance;
        uint256 maxUnlockingChunks;
    }
}

File 6 of 6 : IAuthManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IAuthManager {
    function has(bytes32 role, address member) external view returns (bool);

    function add(bytes32 role, address member) external;

    function remove(bytes32 role, address member) external;
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"address","name":"_lido","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewCurrentRevision","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"ledger","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewLedgerRevision","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewRevision","type":"event"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"addImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ledgerMaxRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ledgerRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"revisionImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCurrentRevision","type":"uint256"}],"name":"setCurrentRevision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ledger","type":"address"},{"internalType":"uint256","name":"_revision","type":"uint256"}],"name":"setLedgerRevision","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610c73380380610c7383398101604081905261002f9161016b565b61003882610064565b600254600155600080546001600160a01b0319166001600160a01b0392909216919091179055506101c4565b6100778161014960201b6108011760201c565b6100df5760405162461bcd60e51b815260206004820152602f60248201527f4c45444745525f424541434f4e3a20696d706c656d656e746174696f6e20697360448201526e081b9bdd08184818dbdb9d1c9858dd608a1b606482015260840160405180910390fd5b6001600260008282546100f2919061019e565b9091555050600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b80516001600160a01b038116811461016657600080fd5b919050565b6000806040838503121561017e57600080fd5b6101878361014f565b91506101956020840161014f565b90509250929050565b600082198211156101bf57634e487b7160e01b600052601160045260246000fd5b500190565b610aa0806101d36000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806362dd5b2c1161006657806362dd5b2c146101285780638b21f1701461013b578063ad46d5f31461014e578063c6e2a40014610163578063d7d908631461017657600080fd5b8063078b97fe146100a35780635637c85e146100bf578063594af68b146100c85780635a5c95ae146100e85780635c60da1b14610108575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100ac60025481565b6100ac6100d63660046108ef565b60056020526000908152604090205481565b6100ac6100f63660046108ef565b60046020526000908152604090205481565b610110610189565b6040516001600160a01b0390911681526020016100b6565b610110610136366004610913565b6101f7565b600054610110906001600160a01b031681565b61016161015c366004610913565b610221565b005b6101616101713660046108ef565b6103ff565b61016161018436600461092c565b610583565b33600090815260046020526040812054156101e757336000908152600460205260409020546003906101bd9060019061096e565b815481106101cd576101cd610985565b6000918252602090912001546001600160a01b0316919050565b6003600180546101bd919061096e565b6003818154811061020757600080fd5b6000918252602090912001546001600160a01b0316905081565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561029057600080fd5b505af11580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c8919061099b565b604051633bfc46cb60e21b8152600481018390523360248201526001600160a01b03919091169063eff11b2c9060440160206040518083038186803b15801561031057600080fd5b505afa158015610324573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034891906109b8565b61036d5760405162461bcd60e51b8152600401610364906109da565b60405180910390fd5b6001548211801561038057506002548211155b61039c5760405162461bcd60e51b815260040161036490610a11565b60018281556003906103ae908461096e565b815481106103be576103be610985565b60009182526020822001546040516001600160a01b03909116917f1a8dd38a3306ba324b59cdd94317161d6d760814796c8e2fbeafa96bf734b0b991a25050565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a6919061099b565b604051633bfc46cb60e21b8152600481018390523360248201526001600160a01b03919091169063eff11b2c9060440160206040518083038186803b1580156104ee57600080fd5b505afa158015610502573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052691906109b8565b6105425760405162461bcd60e51b8152600401610364906109da565b61054b82610807565b6040516001600160a01b038316907f9da3a12664246b3a91b1e92c39d7a591ab70c5c32805d4f5dc580c09a7d3bae390600090a25050565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156105f257600080fd5b505af1158015610606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062a919061099b565b604051633bfc46cb60e21b8152600481018390523360248201526001600160a01b03919091169063eff11b2c9060440160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906109b8565b6106c65760405162461bcd60e51b8152600401610364906109da565b6001600160a01b03831660009081526004602052604090205415801561070357506001600160a01b03831660009081526005602052604090205482115b801561071157506002548211155b8061073c57506001600160a01b0383166000908152600460205260409020541580159061073c575081155b6107585760405162461bcd60e51b815260040161036490610a11565b6001600160a01b03831660009081526004602052604090208290558161078257600154915061079e565b6001600160a01b03831660009081526005602052604090208290555b60036107ab60018461096e565b815481106107bb576107bb610985565b60009182526020822001546040516001600160a01b0391821692918616917fc480c996c754a258bc86eda52e1114d58412383b98e88cebe8f1be817cb5684991a3505050565b3b151590565b803b61086d5760405162461bcd60e51b815260206004820152602f60248201527f4c45444745525f424541434f4e3a20696d706c656d656e746174696f6e20697360448201526e081b9bdd08184818dbdb9d1c9858dd608a1b6064820152608401610364565b6001600260008282546108809190610a52565b9091555050600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146108ec57600080fd5b50565b60006020828403121561090157600080fd5b813561090c816108d7565b9392505050565b60006020828403121561092557600080fd5b5035919050565b6000806040838503121561093f57600080fd5b823561094a816108d7565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008282101561098057610980610958565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156109ad57600080fd5b815161090c816108d7565b6000602082840312156109ca57600080fd5b8151801515811461090c57600080fd5b6020808252601b908201527f4c45444745525f424541434f4e3a20554e415554484f524f5a45440000000000604082015260600190565b60208082526021908201527f4c45444745525f424541434f4e3a20494e434f52524543545f5245564953494f6040820152602760f91b606082015260800190565b60008219821115610a6557610a65610958565b50019056fea2646970667358221220ede0d531038035964eed9bd7da8eed9a41ae0125f22bed2e9c0156abe1671b8664736f6c6343000809003300000000000000000000000093f220d3e997d21d423687cbca5874a7eabebe8b000000000000000000000000ffc7780c34b450d917d557e728f033033cb4fa8c

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

00000000000000000000000093f220d3e997d21d423687cbca5874a7eabebe8b000000000000000000000000ffc7780c34b450d917d557e728f033033cb4fa8c

-----Decoded View---------------
Arg [0] : implementation_ (address): 0x93f220d3e997d21d423687cbca5874a7eabebe8b
Arg [1] : _lido (address): 0xffc7780c34b450d917d557e728f033033cb4fa8c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000093f220d3e997d21d423687cbca5874a7eabebe8b
Arg [1] : 000000000000000000000000ffc7780c34b450d917d557e728f033033cb4fa8c


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.