ETH Price: $2,975.85 (+7.00%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
STETHShim

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;

import "../../Errors/Errors.sol";

/**
 * @title   STETHShim
 * @dev     The contract hard codes the decimals to 18 decimals and returns the conversion rate of 1 stETH to ETH underlying the token in the Lido protocol
 * @notice  This contract is a shim that implements the Chainlink AggregatorV3Interface and returns pricing as 1:1 for stETH:ETH
 */
contract STETHShim {
    constructor() {}

    function decimals() external pure returns (uint8) {
        return 18;
    }

    function description() external pure returns (string memory) {
        return "stETH Chainlink Shim";
    }

    function version() external pure returns (uint256) {
        return 1;
    }

    /// @dev Historical data not available
    function getRoundData(uint80) external pure returns (uint80, int256, uint256, uint256, uint80) {
        revert NotImplemented();
    }

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        )
    {
        return _getStETHData();
    }

    /**
     * @notice  This function gets the price of 1 stETH in ETH as 1 with 18 decimal precision~
     * @dev     This function does not implement the full Chainlink AggregatorV3Interface
     * @return  roundId  0 - never returns valid round ID
     * @return  answer  The conversion rate of 1 stETH to ETH.
     * @return  startedAt  0 - never returns valid timestamp
     * @return  updatedAt  The current timestamp.
     * @return  answeredInRound  0 - never returns valid round ID
     */
    function _getStETHData()
        internal
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        )
    {
        return (0, int256(1e18), 0, block.timestamp, 0);
    }
}

File 2 of 2 : Errors.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.19;

/// @dev Error for 0x0 address inputs
error InvalidZeroInput();

/// @dev Error for already added items to a list
error AlreadyAdded();

/// @dev Error for not found items in a list
error NotFound();

/// @dev Error for hitting max TVL
error MaxTVLReached();

/// @dev Error for caller not having permissions
error NotRestakeManagerAdmin();

/// @dev Error for call not coming from deposit queue contract
error NotDepositQueue();

/// @dev Error for contract being paused
error ContractPaused();

/// @dev Error for exceeding max basis points (100%)
error OverMaxBasisPoints();

/// @dev Error for invalid token decimals for collateral tokens (must be 18)
error InvalidTokenDecimals(uint8 expected, uint8 actual);

/// @dev Error when withdraw is already completed
error WithdrawAlreadyCompleted();

/// @dev Error when a different address tries to complete withdraw
error NotOriginalWithdrawCaller(address expectedCaller);

/// @dev Error when caller does not have OD admin role
error NotOperatorDelegatorAdmin();

/// @dev Error when caller does not have Oracle Admin role
error NotOracleAdmin();

/// @dev Error when caller is not RestakeManager contract
error NotRestakeManager();

/// @dev Errror when caller does not have ETH Restake Admin role
error NotNativeEthRestakeAdmin();

/// @dev Error when delegation address was already set - cannot be set again
error DelegateAddressAlreadySet();

/// @dev Error when caller does not have ERC20 Rewards Admin role
error NotERC20RewardsAdmin();

/// @dev Error when sending ETH fails
error TransferFailed();

/// @dev Error when caller does not have ETH Minter Burner Admin role
error NotEzETHMinterBurner();

/// @dev Error when caller does not have Token Admin role
error NotTokenAdmin();

/// @dev Error when price oracle is not configured
error OracleNotFound();

/// @dev Error when price oracle data is stale
error OraclePriceExpired();

/// @dev Error when array lengths do not match
error MismatchedArrayLengths();

/// @dev Error when caller does not have Deposit Withdraw Pauser role
error NotDepositWithdrawPauser();

/// @dev Error when an individual token TVL is over the max
error MaxTokenTVLReached();

/// @dev Error when Oracle price is invalid
error InvalidOraclePrice();

/// @dev Error when calling an invalid function
error NotImplemented();

/// @dev Error when calculating token amounts is invalid
error InvalidTokenAmount();

/// @dev Error when timestamp is invalid - likely in the past
error InvalidTimestamp(uint256 timestamp);

/// @dev Error when trade does not meet minimum output amount
error InsufficientOutputAmount();

/// @dev Error when the token received over the bridge is not the one expected
error InvalidTokenReceived();

/// @dev Error when the origin address is not whitelisted
error InvalidOrigin();

/// @dev Error when the sender is not expected
error InvalidSender(address expectedSender, address actualSender);

/// @dev error when function returns 0 amount
error InvalidZeroOutput();

/// @dev error when xRenzoBridge does not have enough balance to pay for fee
error NotEnoughBalance(uint256 currentBalance, uint256 calculatedFees);

/// @dev error when source chain is not expected
error InvalidSourceChain(uint64 expectedCCIPChainSelector, uint64 actualCCIPChainSelector);

/// @dev Error when an unauthorized address tries to call the bridge function on the L2
error UnauthorizedBridgeSweeper();

/// @dev Error when caller does not have BRIDGE_ADMIN role
error NotBridgeAdmin();

/// @dev Error when caller does not have PRICE_FEED_SENDER role
error NotPriceFeedSender();

/// @dev Error for connext price Feed unauthorised call
error UnAuthorisedCall();

/// @dev Error for no price feed configured on L2
error PriceFeedNotAvailable();

/// @dev Error for invalid bridge fee share configuration
error InvalidBridgeFeeShare(uint256 bridgeFee);

/// @dev Error for invalid sweep batch size
error InvalidSweepBatchSize(uint256 batchSize);

/// @dev Error when caller does not have Withdraw Queue admin role
error NotWithdrawQueueAdmin();

/// @dev Error when caller try to withdraw more than Buffer
error NotEnoughWithdrawBuffer();

/// @dev Error when caller try to claim withdraw before cooldown period
error EarlyClaim();

/// @dev Error when caller try to withdraw for unsupported asset
error UnsupportedWithdrawAsset();

/// @dev Error when caller try to claim invalidWithdrawIndex
error InvalidWithdrawIndex();

/// @dev Error when TVL was expected to be 0
error InvalidTVL();

/// @dev Error when incorrect BeaconChainStrategy is set for LST in completeQueuedWithdrawal
error IncorrectStrategy();

/// @dev Error when adding new OperatorDelegator which is not delegated
error OperatoDelegatorNotDelegated();

/// @dev Error when emergency tracking already tracked withdrawal
error WithdrawalAlreadyTracked();

/// @dev Error when emergency tracking already completed withdrawal
error WithdrawalAlreadyCompleted();

/// @dev Error when caller does not have Emergency Withdraw Tracking Admin role
error NotEmergencyWithdrawTrackingAdmin();

/// @dev Error when strategy does not have specified underlying
error InvalidStrategy();

/// @dev Error when strategy already set and hold non zero token balance
error NonZeroUnderlyingStrategyExist();

/// @dev Error when caller tried to claim queued withdrawal when not filled
error QueuedWithdrawalNotFilled();

/// @dev Error when caller does not have EigenLayerRewardsAdmin role
error NotEigenLayerRewardsAdmin();

/// @dev Error when rewardsDestination is not configured while trying to claim
error RewardsDestinationNotConfigured();

/// @dev Error when WETHUnwrapper is not configured while trying to claim WETH restaking rewards
error WETHUnwrapperNotConfigured();

/// @dev Error when currentCheckpoint is not accounted by OperatorDelegator
error CheckpointAlreadyActive();

/// @dev Error when specified checkpoint is already recorded
error CheckpointAlreadyRecorded();

/// @dev Error when caller does not have Emergency Checkpoint Tracking admin role
error NotEmergencyCheckpointTrackingAdmin();

/// @dev Error when last completed checkpoint on EigenPod is not recorded in OperatorDelegator
error CheckpointNotRecorded();

/// @dev Error when non pauser tries to change pause state
error NotPauser();

/// @dev Error when user tried to withdraw asset more than available in protocol collateral
error NotEnoughCollateralValue();

/// @dev Error when admin tries to disable asset withdraw queue which is not enabled
error WithdrawQueueNotEnabled();

/// @dev Error when admin tries to enable erc20 withdraw queue for IS_NATIVE address
error IsNativeAddressNotAllowed();

/// @dev Error when admin tried to complete queued withdrawal with receiveAsShares
error OnlyReceiveAsTokenAllowed();

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotImplemented","type":"error"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint80","name":"","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063313ce5671461005c57806354fd4d50146100705780637284e4161461007f5780639a6fc8f5146100b5578063feaf968c146100ff575b600080fd5b604051601281526020015b60405180910390f35b60405160018152602001610067565b6040805180820182526014815273737445544820436861696e6c696e6b205368696d60601b602082015290516100679190610133565b6100c86100c3366004610181565b610112565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610067565b6000670de0b6b3a76400008142816100c8565b600080600080600060405163d623472560e01b815260040160405180910390fd5b600060208083528351808285015260005b8181101561016057858101830151858201604001528201610144565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561019357600080fd5b813569ffffffffffffffffffff811681146101ad57600080fd5b939250505056fea26469706673582212204df1427c53fc62e70d1895b2582710cbc56b00a729b18de4aaedd2d4ce4acdfe64736f6c63430008130033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063313ce5671461005c57806354fd4d50146100705780637284e4161461007f5780639a6fc8f5146100b5578063feaf968c146100ff575b600080fd5b604051601281526020015b60405180910390f35b60405160018152602001610067565b6040805180820182526014815273737445544820436861696e6c696e6b205368696d60601b602082015290516100679190610133565b6100c86100c3366004610181565b610112565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610067565b6000670de0b6b3a76400008142816100c8565b600080600080600060405163d623472560e01b815260040160405180910390fd5b600060208083528351808285015260005b8181101561016057858101830151858201604001528201610144565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561019357600080fd5b813569ffffffffffffffffffff811681146101ad57600080fd5b939250505056fea26469706673582212204df1427c53fc62e70d1895b2582710cbc56b00a729b18de4aaedd2d4ce4acdfe64736f6c63430008130033

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

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.