ETH Price: $2,519.23 (+3.44%)

Contract

0xe363029C9A571D4998bdb144fba3BBe5e9Ca6B3C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60008054179868952023-08-24 20:19:11375 days ago1692908351IN
 Create: WstETHAdapter
0 ETH0.0296423822.18633512

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
192125352024-02-12 14:27:35203 days ago1707748055
0xe363029C...5e9Ca6B3C
0.01 ETH
192125352024-02-12 14:27:35203 days ago1707748055
0xe363029C...5e9Ca6B3C
0.01 ETH
189857522024-01-11 19:25:59235 days ago1705001159
0xe363029C...5e9Ca6B3C
0.06518941 ETH
189857522024-01-11 19:25:59235 days ago1705001159
0xe363029C...5e9Ca6B3C
0.06518941 ETH
189856912024-01-11 19:13:35235 days ago1705000415
0xe363029C...5e9Ca6B3C
0.132 ETH
189856912024-01-11 19:13:35235 days ago1705000415
0xe363029C...5e9Ca6B3C
0.132 ETH
185446512023-11-10 22:53:23297 days ago1699656803
0xe363029C...5e9Ca6B3C
0.17988194 ETH
185446512023-11-10 22:53:23297 days ago1699656803
0xe363029C...5e9Ca6B3C
0.17988194 ETH
185389472023-11-10 3:45:59298 days ago1699587959
0xe363029C...5e9Ca6B3C
0.20017036 ETH
185389472023-11-10 3:45:59298 days ago1699587959
0xe363029C...5e9Ca6B3C
0.20017036 ETH
184474132023-10-28 8:09:23310 days ago1698480563
0xe363029C...5e9Ca6B3C
7.76943613 ETH
184474132023-10-28 8:09:23310 days ago1698480563
0xe363029C...5e9Ca6B3C
7.76943613 ETH
184184272023-10-24 6:46:47314 days ago1698130007
0xe363029C...5e9Ca6B3C
0.2 ETH
184184272023-10-24 6:46:47314 days ago1698130007
0xe363029C...5e9Ca6B3C
0.2 ETH
183794532023-10-18 19:54:47320 days ago1697658887
0xe363029C...5e9Ca6B3C
0.13 ETH
183794532023-10-18 19:54:47320 days ago1697658887
0xe363029C...5e9Ca6B3C
0.13 ETH
183256192023-10-11 7:09:23327 days ago1697008163
0xe363029C...5e9Ca6B3C
0.07 ETH
183256192023-10-11 7:09:23327 days ago1697008163
0xe363029C...5e9Ca6B3C
0.07 ETH
183103182023-10-09 3:45:35330 days ago1696823135
0xe363029C...5e9Ca6B3C
0.2 ETH
183103182023-10-09 3:45:35330 days ago1696823135
0xe363029C...5e9Ca6B3C
0.2 ETH
182830952023-10-05 8:23:59333 days ago1696494239
0xe363029C...5e9Ca6B3C
0.0009641 ETH
182830952023-10-05 8:23:59333 days ago1696494239
0xe363029C...5e9Ca6B3C
0.0009641 ETH
182776602023-10-04 14:09:47334 days ago1696428587
0xe363029C...5e9Ca6B3C
0.23314886 ETH
182776602023-10-04 14:09:47334 days ago1696428587
0xe363029C...5e9Ca6B3C
0.23314886 ETH
182703762023-10-03 13:41:47335 days ago1696340507
0xe363029C...5e9Ca6B3C
0.00000099 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WstETHAdapter

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 12 : WstETHAdapter.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.13;

import { IERC20 } from "../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

import { IllegalArgument, IllegalState, Unauthorized } from "../../base/ErrorMessages.sol";
import { MutexLock } from "../../base/MutexLock.sol";

import { SafeERC20 } from "../../libraries/SafeERC20.sol";

import { IChainlinkOracle } from "../../interfaces/external/chainlink/IChainlinkOracle.sol";
import { ITokenAdapter } from "../../interfaces/ITokenAdapter.sol";
import { IWETH9 } from "../../interfaces/external/IWETH9.sol";
import { IStableSwap2Pool } from "../../interfaces/external/curve/IStableSwap2Pool.sol";
import { IStETH } from "../../interfaces/external/lido/IStETH.sol";
import { IWstETH } from "../../interfaces/external/lido/IWstETH.sol";

struct InitializationParams {
    address zeroliquid;
    address token;
    address parentToken;
    address underlyingToken;
    address curvePool;
    address oracleStethUsd;
    address oracleEthUsd;
    uint256 ethPoolIndex;
    uint256 stEthPoolIndex;
    address referral;
}

contract WstETHAdapter is ITokenAdapter, MutexLock {
    string public override version = "1.0.0";

    address public immutable zeroliquid;
    address public immutable override token;
    address public immutable parentToken;
    address public immutable override underlyingToken;
    address public immutable curvePool;
    address public immutable oracleStethUsd;
    address public immutable oracleEthUsd;
    uint256 public immutable ethPoolIndex;
    uint256 public immutable stEthPoolIndex;
    address public immutable referral;

    constructor(InitializationParams memory params) {
        zeroliquid = params.zeroliquid;
        token = params.token;
        parentToken = params.parentToken;
        underlyingToken = params.underlyingToken;
        curvePool = params.curvePool;
        oracleStethUsd = params.oracleStethUsd;
        oracleEthUsd = params.oracleEthUsd;
        ethPoolIndex = params.ethPoolIndex;
        stEthPoolIndex = params.stEthPoolIndex;
        referral = params.referral;

        // Verify and make sure that the provided ETH matches the curve pool ETH.
        if (IStableSwap2Pool(params.curvePool).coins(params.ethPoolIndex) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
        {
            revert IllegalArgument("Curve pool ETH token mismatch");
        }

        // Verify and make sure that the provided stETH matches the curve pool stETH.
        if (IStableSwap2Pool(params.curvePool).coins(params.stEthPoolIndex) != params.parentToken) {
            revert IllegalArgument("Curve pool stETH token mismatch");
        }
    }

    /// @dev Checks that the message sender is the zeroliquid that the adapter is bound to.
    modifier onlyZeroLiquid() {
        if (msg.sender != zeroliquid) {
            revert Unauthorized("Not zeroliquid");
        }
        _;
    }

    receive() external payable {
        if (msg.sender != underlyingToken && msg.sender != curvePool) {
            revert Unauthorized("Payments only permitted from WETH or curve pool");
        }
    }

    /// @inheritdoc ITokenAdapter
    function price() external view returns (uint256) {
        uint256 stethToEth = uint256(IChainlinkOracle(oracleStethUsd).latestAnswer()) * 1e18
            / uint256(IChainlinkOracle(oracleEthUsd).latestAnswer());

        // stETH is capped at 1 ETH
        if (stethToEth > 1e18) stethToEth = 1e18;

        return IWstETH(token).getStETHByWstETH(10 ** SafeERC20.expectDecimals(token)) * stethToEth / 1e18;
    }

    /// @inheritdoc ITokenAdapter
    function wrap(uint256 amount, address recipient) external lock onlyZeroLiquid returns (uint256) {
        // Transfer the tokens from the message sender.
        SafeERC20.safeTransferFrom(underlyingToken, msg.sender, address(this), amount);

        // Unwrap the WETH into ETH.
        IWETH9(underlyingToken).withdraw(amount);

        // Wrap the ETH into stETH.
        uint256 startingStEthBalance = IERC20(parentToken).balanceOf(address(this));

        IStETH(parentToken).submit{ value: amount }(referral);

        uint256 mintedStEth = IERC20(parentToken).balanceOf(address(this)) - startingStEthBalance;

        // Wrap the stETH into wstETH.
        SafeERC20.safeApprove(parentToken, address(token), mintedStEth);
        uint256 mintedWstEth = IWstETH(token).wrap(mintedStEth);

        // Transfer the minted wstETH to the recipient.
        SafeERC20.safeTransfer(token, recipient, mintedWstEth);

        return mintedWstEth;
    }

    // @inheritdoc ITokenAdapter
    function unwrap(uint256 amount, address recipient) external lock onlyZeroLiquid returns (uint256) {
        // Transfer the tokens from the message sender.
        SafeERC20.safeTransferFrom(token, msg.sender, address(this), amount);

        // Unwrap the wstETH into stETH.
        uint256 startingStEthBalance = IStETH(parentToken).balanceOf(address(this));
        IWstETH(token).unwrap(amount);
        uint256 endingStEthBalance = IStETH(parentToken).balanceOf(address(this));

        // Approve the curve pool to transfer the tokens.
        uint256 unwrappedStEth = endingStEthBalance - startingStEthBalance;
        SafeERC20.safeApprove(parentToken, curvePool, unwrappedStEth);

        // Exchange the stETH for ETH. We do not check the curve pool because it is an immutable
        // contract and we expect that its output is reliable.
        uint256 received = IStableSwap2Pool(curvePool).exchange(
            int128(uint128(stEthPoolIndex)), // Why are we here, just to suffer?
            int128(uint128(ethPoolIndex)), //                       (╥﹏╥)
            unwrappedStEth,
            0 // <- Slippage is handled upstream
        );

        // Wrap the ETH that we received from the exchange.
        IWETH9(underlyingToken).deposit{ value: received }();

        // Transfer the tokens to the recipient.
        SafeERC20.safeTransfer(underlyingToken, recipient, received);

        return received;
    }
}

File 2 of 12 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

File 3 of 12 : ErrorMessages.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.4;

/// @notice An error used to indicate that an argument passed to a function is illegal or
///         inappropriate.
///
/// @param message The error message.
error IllegalArgument(string message);

/// @notice An error used to indicate that a function has encountered an unrecoverable state.
///
/// @param message The error message.
error IllegalState(string message);

/// @notice An error used to indicate that an operation is unsupported.
///
/// @param message The error message.
error UnsupportedOperation(string message);

/// @notice An error used to indicate that a message sender tried to execute a privileged function.
///
/// @param message The error message.
error Unauthorized(string message);

File 4 of 12 : MutexLock.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.13;

import { IllegalState } from "./ErrorMessages.sol";

/// @title  Mutex
/// @author ZeroLiquid
///
/// @notice Provides a mutual exclusion lock for implementing contracts.
abstract contract MutexLock {
    enum State {
        RESERVED,
        UNLOCKED,
        LOCKED
    }

    /// @notice The lock state.
    State private _lockState = State.UNLOCKED;

    /// @dev A modifier which acquires the mutex.
    modifier lock() {
        _claimLock();

        _;

        _freeLock();
    }

    /// @dev Gets if the mutex is locked.
    ///
    /// @return if the mutex is locked.
    function _isLocked() internal view returns (bool) {
        return _lockState == State.LOCKED;
    }

    /// @dev Claims the lock. If the lock is already claimed, then this will revert.
    function _claimLock() internal {
        // Check that the lock has not been claimed yet.
        if (_lockState != State.UNLOCKED) {
            revert IllegalState("Lock already claimed");
        }

        // Claim the lock.
        _lockState = State.LOCKED;
    }

    /// @dev Frees the lock.
    function _freeLock() internal {
        _lockState = State.UNLOCKED;
    }
}

File 5 of 12 : SafeERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.4;

import { IERC20 } from "../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

import { IllegalState } from "../base/ErrorMessages.sol";

import { IERC20Metadata } from "../interfaces/IERC20Metadata.sol";

/// @title  SafeERC20
/// @author ZeroLiquid
library SafeERC20 {
    /// @notice An error used to indicate that a call to an ERC20 contract failed.
    ///
    /// @param target  The target address.
    /// @param success If the call to the token was a success.
    /// @param data    The resulting data from the call. This is error data when the call was not a
    ///                success. Otherwise, this is malformed data when the call was a success.
    error ERC20CallFailed(address target, bool success, bytes data);

    /// @dev A safe function to get the decimals of an ERC20 token.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an
    ///      unexpected value.
    ///
    /// @param token The target token.
    ///
    /// @return The amount of decimals of the token.
    function expectDecimals(address token) internal view returns (uint8) {
        (bool success, bytes memory data) = token.staticcall(abi.encodeWithSelector(IERC20Metadata.decimals.selector));

        if (!success || data.length < 32) {
            revert ERC20CallFailed(token, success, data);
        }

        return abi.decode(data, (uint8));
    }

    /// @dev Transfers tokens to another address.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the transfer failed or returns an
    ///      unexpected value.
    ///
    /// @param token     The token to transfer.
    /// @param recipient The address of the recipient.
    /// @param amount    The amount of tokens to transfer.
    function safeTransfer(address token, address recipient, uint256 amount) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20.transfer.selector, recipient, amount));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Approves tokens for the smart contract.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the approval fails or returns an
    ///      unexpected value.
    ///
    /// @param token   The token to approve.
    /// @param spender The contract to spend the tokens.
    /// @param value   The amount of tokens to approve.
    function safeApprove(address token, address spender, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, spender, value));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Transfer tokens from one address to another address.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the transfer fails or returns an
    ///      unexpected value.
    ///
    /// @param token     The token to transfer.
    /// @param owner     The address of the owner.
    /// @param recipient The address of the recipient.
    /// @param amount    The amount of tokens to transfer.
    function safeTransferFrom(address token, address owner, address recipient, uint256 amount) internal {
        (bool success, bytes memory data) =
            token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, owner, recipient, amount));

        if (!success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }
}

File 6 of 12 : IChainlinkOracle.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity >= 0.6.6;

interface IChainlinkOracle {
    function latestAnswer() external view returns (int256);
    function latestTimestamp() external view returns (uint256);
    function latestRound() external view returns (uint256);
    function getAnswer(uint256 roundId) external view returns (int256);
    function getTimestamp(uint256 roundId) external view returns (uint256);

    event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);
    event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);
}

File 7 of 12 : ITokenAdapter.sol
pragma solidity >=0.5.0;

/// @title  ITokenAdapter
/// @author ZeroLiquid
interface ITokenAdapter {
    /// @notice Gets the current version.
    ///
    /// @return The version.
    function version() external view returns (string memory);

    /// @notice Gets the address of the yield token that this adapter supports.
    ///
    /// @return The address of the yield token.
    function token() external view returns (address);

    /// @notice Gets the address of the underlying token that the yield token wraps.
    ///
    /// @return The address of the underlying token.
    function underlyingToken() external view returns (address);

    /// @notice Gets the number of underlying tokens that a single whole yield token is redeemable
    ///         for.
    ///
    /// @return The price.
    function price() external view returns (uint256);

    /// @notice Wraps `amount` underlying tokens into the yield token.
    ///
    /// @param amount    The amount of the underlying token to wrap.
    /// @param recipient The address which will receive the yield tokens.
    ///
    /// @return amountYieldTokens The amount of yield tokens minted to `recipient`.
    function wrap(uint256 amount, address recipient) external returns (uint256 amountYieldTokens);

    /// @notice Unwraps `amount` yield tokens into the underlying token.
    ///
    /// @param amount    The amount of yield-tokens to redeem.
    /// @param recipient The recipient of the resulting underlying-tokens.
    ///
    /// @return amountUnderlyingTokens The amount of underlying tokens unwrapped to `recipient`.
    function unwrap(uint256 amount, address recipient) external returns (uint256 amountUnderlyingTokens);
}

File 8 of 12 : IWETH9.sol
pragma solidity >=0.5.0;

import "../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

import "../IERC20Metadata.sol";

/// @title IWETH9
interface IWETH9 is IERC20, IERC20Metadata {
    /// @notice Deposits `msg.value` ethereum into the contract and mints `msg.value` tokens.
    function deposit() external payable;

    /// @notice Burns `amount` tokens to retrieve `amount` ethereum from the contract.
    ///
    /// @dev This version of WETH utilizes the `transfer` function which hard codes the amount of gas
    ///      that is allowed to be utilized to be exactly 2300 when receiving ethereum.
    ///
    /// @param amount The amount of tokens to burn.
    function withdraw(uint256 amount) external;
}

File 9 of 12 : IStableSwap2Pool.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

uint256 constant N_COINS = 2;

interface IStableSwap2Pool {
    function coins(uint256 index) external view returns (address);

    function A() external view returns (uint256);

    function get_virtual_price() external view returns (uint256);

    function calc_token_amount(
        uint256[N_COINS] calldata amounts,
        bool deposit
    )
        external
        view
        returns (uint256 amount);

    function add_liquidity(uint256[N_COINS] calldata amounts, uint256 minimumMintAmount) external;

    function get_dy(int128 i, int128 j, uint256 dx) external view returns (uint256 dy);

    function get_dy_underlying(int128 i, int128 j, uint256 dx) external view returns (uint256 dy);

    function exchange(int128 i, int128 j, uint256 dx, uint256 minimumDy) external payable returns (uint256);

    function remove_liquidity(uint256 amount, uint256[N_COINS] calldata minimumAmounts) external;

    function remove_liquidity_imbalance(uint256[N_COINS] calldata amounts, uint256 maximumBurnAmount) external;

    function calc_withdraw_one_coin(uint256 tokenAmount, int128 i) external view returns (uint256);

    function remove_liquidity_one_coin(uint256 tokenAmount, int128 i, uint256 minimumAmount) external;
}

File 10 of 12 : IStETH.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

import { IERC20 } from "../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

interface IStETH is IERC20 {
    function sharesOf(address account) external view returns (uint256);
    function getPooledEthByShares(uint256 sharesAmount) external view returns (uint256);
    function submit(address referral) external payable returns (uint256);
}

File 11 of 12 : IWstETH.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.5.0;

import { IERC20 } from "../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

interface IWstETH is IERC20 {
    function getWstETHByStETH(uint256 amount) external view returns (uint256);
    function getStETHByWstETH(uint256 amount) external view returns (uint256);
    function wrap(uint256 amount) external returns (uint256);
    function unwrap(uint256 amount) external returns (uint256);
}

File 12 of 12 : IERC20Metadata.sol
pragma solidity >=0.5.0;

/// @title  IERC20Metadata
/// @author ZeroLiquid
interface IERC20Metadata {
    /// @notice Gets the name of the token.
    ///
    /// @return The name.
    function name() external view returns (string memory);

    /// @notice Gets the symbol of the token.
    ///
    /// @return The symbol.
    function symbol() external view returns (string memory);

    /// @notice Gets the number of decimals that the token has.
    ///
    /// @return The number of decimals.
    function decimals() external view returns (uint8);
}

Settings
{
  "remappings": [
    "@prb/test/=lib/prb-test/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "prb-test/=lib/prb-test/src/",
    "src/=src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"address","name":"zeroliquid","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"parentToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"},{"internalType":"address","name":"curvePool","type":"address"},{"internalType":"address","name":"oracleStethUsd","type":"address"},{"internalType":"address","name":"oracleEthUsd","type":"address"},{"internalType":"uint256","name":"ethPoolIndex","type":"uint256"},{"internalType":"uint256","name":"stEthPoolIndex","type":"uint256"},{"internalType":"address","name":"referral","type":"address"}],"internalType":"struct InitializationParams","name":"params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"ERC20CallFailed","type":"error"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"IllegalArgument","type":"error"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"IllegalState","type":"error"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"curvePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPoolIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleEthUsd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleStethUsd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stEthPoolIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlyingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"wrap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroliquid","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000805460ff1916600190811790915561020060405260056101c0908152640312e302e360dc1b6101e05262000036908262000353565b503480156200004457600080fd5b5060405162001c8f38038062001c8f833981016040819052620000679162000468565b80516001600160a01b0390811660809081526020830151821660a0908152604080850151841660c09081526060860151851660e09081529386018051861661010090815293870151861661012090815291870151861661014052938601805161016052928601516101805285015184166101a05291519051915163c661065760e01b815292169163c661065791620001059160040190815260200190565b602060405180830381865afa15801562000123573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000149919062000536565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031614620001c4576040516354a1577760e11b815260206004820152601d60248201527f437572766520706f6f6c2045544820746f6b656e206d69736d6174636800000060448201526064015b60405180910390fd5b80604001516001600160a01b031681608001516001600160a01b031663c66106578361010001516040518263ffffffff1660e01b81526004016200020a91815260200190565b602060405180830381865afa15801562000228573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024e919062000536565b6001600160a01b031614620002a7576040516354a1577760e11b815260206004820152601f60248201527f437572766520706f6f6c20737445544820746f6b656e206d69736d61746368006044820152606401620001bb565b506200055b565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002d957607f821691505b602082108103620002fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034e57600081815260208120601f850160051c81016020861015620003295750805b601f850160051c820191505b818110156200034a5782815560010162000335565b5050505b505050565b81516001600160401b038111156200036f576200036f620002ae565b6200038781620003808454620002c4565b8462000300565b602080601f831160018114620003bf5760008415620003a65750858301515b600019600386901b1c1916600185901b1785556200034a565b600085815260208120601f198616915b82811015620003f057888601518255948401946001909101908401620003cf565b50858210156200040f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60405161014081016001600160401b0381118282101715620004455762000445620002ae565b60405290565b80516001600160a01b03811681146200046357600080fd5b919050565b600061014082840312156200047c57600080fd5b620004866200041f565b62000491836200044b565b8152620004a1602084016200044b565b6020820152620004b4604084016200044b565b6040820152620004c7606084016200044b565b6060820152620004da608084016200044b565b6080820152620004ed60a084016200044b565b60a08201526200050060c084016200044b565b60c082015260e083015160e08201526101008084015181830152506101206200052b8185016200044b565b908201529392505050565b6000602082840312156200054957600080fd5b62000554826200044b565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516115ee620006a1600039600081816101ff01526106200152600081816103910152610bab01526000818161040e0152610bd60152600081816102b30152610d370152600081816103090152610db90152600081816101250152818161024b01528181610b770152610c0f01526000818160f10152818161027f015281816104dd0152818161051a01528181610c880152610cff01526000818161035d015281816105950152818161064b015281816106df0152818161075b015281816109b401528181610ace0152610b560152600081816104420152818161077c015281816107ba015281816108360152818161097501528181610a4001528181610e7e0152610eb00152600081816103c501528181610479015261091101526115ee6000f3fe6080604052600436106100e15760003560e01c80637647691d1161007f57806394b343ae1161005957806394b343ae146103b3578063a035b1fe146103e7578063e0c88bf9146103fc578063fc0c546a1461043057600080fd5b80637647691d1461032b57806380a540011461034b5780638f873bde1461037f57600080fd5b80632495a599116100bb5780632495a5991461026d57806351251519146102a157806354fd4d50146102d557806361d7cf3e146102f757600080fd5b806313bac820146101ba5780631441a5a9146101ed578063218751b21461023957600080fd5b366101b557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906101485750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156101b35760405163973d02cb60e01b815260206004820152602f60248201527f5061796d656e7473206f6e6c79207065726d69747465642066726f6d2057455460448201526e12081bdc8818dd5c9d99481c1bdbdb608a1b60648201526084015b60405180910390fd5b005b600080fd5b3480156101c657600080fd5b506101da6101d53660046112f4565b610464565b6040519081526020015b60405180910390f35b3480156101f957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e4565b34801561024557600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561027957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ad57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e157600080fd5b506102ea61086e565b6040516101e49190611380565b34801561030357600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561033757600080fd5b506101da6103463660046112f4565b6108fc565b34801561035757600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b34801561038b57600080fd5b506101da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103bf57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f357600080fd5b506101da610d32565b34801561040857600080fd5b506101da7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b600061046e610f58565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104d85760405163973d02cb60e01b815260206004820152600e60248201526d139bdd081e995c9bdb1a5c5d5a5960921b60448201526064016101aa565b6105047f0000000000000000000000000000000000000000000000000000000000000000333086610fcd565b604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561056657600080fd5b505af115801561057a573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061139a565b60405163a1903eab60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a1903eab90869060240160206040518083038185885af1158015610697573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106bc919061139a565b506040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a919061139a565b61075491906113c9565b90506107a17f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836110cd565b604051630ea598cb60e41b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea598cb0906024016020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f919061139a565b905061085c7f000000000000000000000000000000000000000000000000000000000000000086836111d5565b92505050610868611208565b92915050565b6001805461087b906113dc565b80601f01602080910402602001604051908101604052809291908181526020018280546108a7906113dc565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b505050505081565b6000610906610f58565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109705760405163973d02cb60e01b815260206004820152600e60248201526d139bdd081e995c9bdb1a5c5d5a5960921b60448201526064016101aa565b61099c7f0000000000000000000000000000000000000000000000000000000000000000333086610fcd565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a27919061139a565b604051636f074d1f60e11b8152600481018690529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063de0e9a3e906024016020604051808303816000875af1158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab5919061139a565b506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b41919061139a565b90506000610b4f83836113c9565b9050610b9c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836110cd565b604051630f7c084960e21b81527f0000000000000000000000000000000000000000000000000000000000000000600f90810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b602482015260448101829052600060648201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633df02124906084016020604051808303816000875af1158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c84919061139a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b5050505050610d257f000000000000000000000000000000000000000000000000000000000000000087836111d5565b9350505050610868611208565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db7919061139a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061139a565b610e4b90670de0b6b3a7640000611416565b610e55919061142d565b9050670de0b6b3a7640000811115610e725750670de0b6b3a76400005b670de0b6b3a7640000817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb2952fc610ed47f000000000000000000000000000000000000000000000000000000000000000061121b565b610edf90600a611533565b6040518263ffffffff1660e01b8152600401610efd91815260200190565b602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e919061139a565b610f489190611416565b610f52919061142d565b91505090565b600160005460ff166002811115610f7157610f71611542565b14610fb65760405163c50656df60e01b8152602060048201526014602482015273131bd8dac8185b1c9958591e4818db185a5b595960621b60448201526064016101aa565b600080546002919060ff19166001835b0217905550565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916110319190611558565b6000604051808303816000865af19150503d806000811461106e576040519150601f19603f3d011682016040523d82523d6000602084013e611073565b606091505b50915091508115806110a157508051158015906110a157508080602001905181019061109f9190611574565b155b156110c55785828260405163e7e40b5b60e01b81526004016101aa93929190611596565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161113a9190611558565b6000604051808303816000865af19150503d8060008114611177576040519150601f19603f3d011682016040523d82523d6000602084013e61117c565b606091505b50915091508115806111aa57508051158015906111aa5750808060200190518101906111a89190611574565b155b156111ce5784828260405163e7e40b5b60e01b81526004016101aa93929190611596565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016110fc565b600080546001919060ff19168280610fc6565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b038616916112619190611558565b600060405180830381855afa9150503d806000811461129c576040519150601f19603f3d011682016040523d82523d6000602084013e6112a1565b606091505b50915091508115806112b4575060208151105b156112d85783828260405163e7e40b5b60e01b81526004016101aa93929190611596565b808060200190518101906112ec91906115cb565b949350505050565b6000806040838503121561130757600080fd5b8235915060208301356001600160a01b038116811461132557600080fd5b809150509250929050565b60005b8381101561134b578181015183820152602001611333565b50506000910152565b6000815180845261136c816020860160208601611330565b601f01601f19169290920160200192915050565b6020815260006113936020830184611354565b9392505050565b6000602082840312156113ac57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610868576108686113b3565b600181811c908216806113f057607f821691505b60208210810361141057634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610868576108686113b3565b60008261144a57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561148a578160001904821115611470576114706113b3565b8085161561147d57918102915b93841c9390800290611454565b509250929050565b6000826114a157506001610868565b816114ae57506000610868565b81600181146114c457600281146114ce576114ea565b6001915050610868565b60ff8411156114df576114df6113b3565b50506001821b610868565b5060208310610133831016604e8410600b841016171561150d575081810a610868565b611517838361144f565b806000190482111561152b5761152b6113b3565b029392505050565b600061139360ff841683611492565b634e487b7160e01b600052602160045260246000fd5b6000825161156a818460208701611330565b9190910192915050565b60006020828403121561158657600080fd5b8151801515811461139357600080fd5b6001600160a01b038416815282151560208201526060604082018190526000906115c290830184611354565b95945050505050565b6000602082840312156115dd57600080fd5b815160ff8116811461139357600080fd0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d6720000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022000000000000000000000000cfe54b5cd566ab89272946f602d76ea879cab4a80000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100e15760003560e01c80637647691d1161007f57806394b343ae1161005957806394b343ae146103b3578063a035b1fe146103e7578063e0c88bf9146103fc578063fc0c546a1461043057600080fd5b80637647691d1461032b57806380a540011461034b5780638f873bde1461037f57600080fd5b80632495a599116100bb5780632495a5991461026d57806351251519146102a157806354fd4d50146102d557806361d7cf3e146102f757600080fd5b806313bac820146101ba5780631441a5a9146101ed578063218751b21461023957600080fd5b366101b557336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216148015906101485750336001600160a01b037f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f670221614155b156101b35760405163973d02cb60e01b815260206004820152602f60248201527f5061796d656e7473206f6e6c79207065726d69747465642066726f6d2057455460448201526e12081bdc8818dd5c9d99481c1bdbdb608a1b60648201526084015b60405180910390fd5b005b600080fd5b3480156101c657600080fd5b506101da6101d53660046112f4565b610464565b6040519081526020015b60405180910390f35b3480156101f957600080fd5b506102217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e4565b34801561024557600080fd5b506102217f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f6702281565b34801561027957600080fd5b506102217f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156102ad57600080fd5b506102217f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841981565b3480156102e157600080fd5b506102ea61086e565b6040516101e49190611380565b34801561030357600080fd5b506102217f000000000000000000000000cfe54b5cd566ab89272946f602d76ea879cab4a881565b34801561033757600080fd5b506101da6103463660046112f4565b6108fc565b34801561035757600080fd5b506102217f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8481565b34801561038b57600080fd5b506101da7f000000000000000000000000000000000000000000000000000000000000000181565b3480156103bf57600080fd5b506102217f0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d67281565b3480156103f357600080fd5b506101da610d32565b34801561040857600080fd5b506101da7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b506102217f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca081565b600061046e610f58565b336001600160a01b037f0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d67216146104d85760405163973d02cb60e01b815260206004820152600e60248201526d139bdd081e995c9bdb1a5c5d5a5960921b60448201526064016101aa565b6105047f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2333086610fcd565b604051632e1a7d4d60e01b8152600481018490527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561056657600080fd5b505af115801561057a573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b031691506370a0823190602401602060405180830381865afa1580156105e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610609919061139a565b60405163a1903eab60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529192507f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe849091169063a1903eab90869060240160206040518083038185885af1158015610697573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106bc919061139a565b506040516370a0823160e01b815230600482015260009082906001600160a01b037f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe8416906370a0823190602401602060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074a919061139a565b61075491906113c9565b90506107a17f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe847f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0836110cd565b604051630ea598cb60e41b8152600481018290526000907f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca06001600160a01b03169063ea598cb0906024016020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f919061139a565b905061085c7f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca086836111d5565b92505050610868611208565b92915050565b6001805461087b906113dc565b80601f01602080910402602001604051908101604052809291908181526020018280546108a7906113dc565b80156108f45780601f106108c9576101008083540402835291602001916108f4565b820191906000526020600020905b8154815290600101906020018083116108d757829003601f168201915b505050505081565b6000610906610f58565b336001600160a01b037f0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d67216146109705760405163973d02cb60e01b815260206004820152600e60248201526d139bdd081e995c9bdb1a5c5d5a5960921b60448201526064016101aa565b61099c7f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0333086610fcd565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b0316906370a0823190602401602060405180830381865afa158015610a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a27919061139a565b604051636f074d1f60e11b8152600481018690529091507f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca06001600160a01b03169063de0e9a3e906024016020604051808303816000875af1158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab5919061139a565b506040516370a0823160e01b81523060048201526000907f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe846001600160a01b0316906370a0823190602401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b41919061139a565b90506000610b4f83836113c9565b9050610b9c7f000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe847f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022836110cd565b604051630f7c084960e21b81527f0000000000000000000000000000000000000000000000000000000000000001600f90810b60048301527f0000000000000000000000000000000000000000000000000000000000000000900b602482015260448101829052600060648201819052907f000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f670226001600160a01b031690633df02124906084016020604051808303816000875af1158015610c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c84919061139a565b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b5050505050610d257f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc287836111d5565b9350505050610868611208565b6000807f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db7919061139a565b7f000000000000000000000000cfe54b5cd566ab89272946f602d76ea879cab4a86001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061139a565b610e4b90670de0b6b3a7640000611416565b610e55919061142d565b9050670de0b6b3a7640000811115610e725750670de0b6b3a76400005b670de0b6b3a7640000817f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca06001600160a01b031663bb2952fc610ed47f0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca061121b565b610edf90600a611533565b6040518263ffffffff1660e01b8152600401610efd91815260200190565b602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e919061139a565b610f489190611416565b610f52919061142d565b91505090565b600160005460ff166002811115610f7157610f71611542565b14610fb65760405163c50656df60e01b8152602060048201526014602482015273131bd8dac8185b1c9958591e4818db185a5b595960621b60448201526064016101aa565b600080546002919060ff19166001835b0217905550565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916110319190611558565b6000604051808303816000865af19150503d806000811461106e576040519150601f19603f3d011682016040523d82523d6000602084013e611073565b606091505b50915091508115806110a157508051158015906110a157508080602001905181019061109f9190611574565b155b156110c55785828260405163e7e40b5b60e01b81526004016101aa93929190611596565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161113a9190611558565b6000604051808303816000865af19150503d8060008114611177576040519150601f19603f3d011682016040523d82523d6000602084013e61117c565b606091505b50915091508115806111aa57508051158015906111aa5750808060200190518101906111a89190611574565b155b156111ce5784828260405163e7e40b5b60e01b81526004016101aa93929190611596565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016110fc565b600080546001919060ff19168280610fc6565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b038616916112619190611558565b600060405180830381855afa9150503d806000811461129c576040519150601f19603f3d011682016040523d82523d6000602084013e6112a1565b606091505b50915091508115806112b4575060208151105b156112d85783828260405163e7e40b5b60e01b81526004016101aa93929190611596565b808060200190518101906112ec91906115cb565b949350505050565b6000806040838503121561130757600080fd5b8235915060208301356001600160a01b038116811461132557600080fd5b809150509250929050565b60005b8381101561134b578181015183820152602001611333565b50506000910152565b6000815180845261136c816020860160208601611330565b601f01601f19169290920160200192915050565b6020815260006113936020830184611354565b9392505050565b6000602082840312156113ac57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610868576108686113b3565b600181811c908216806113f057607f821691505b60208210810361141057634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610868576108686113b3565b60008261144a57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561148a578160001904821115611470576114706113b3565b8085161561147d57918102915b93841c9390800290611454565b509250929050565b6000826114a157506001610868565b816114ae57506000610868565b81600181146114c457600281146114ce576114ea565b6001915050610868565b60ff8411156114df576114df6113b3565b50506001821b610868565b5060208310610133831016604e8410600b841016171561150d575081810a610868565b611517838361144f565b806000190482111561152b5761152b6113b3565b029392505050565b600061139360ff841683611492565b634e487b7160e01b600052602160045260246000fd5b6000825161156a818460208701611330565b9190910192915050565b60006020828403121561158657600080fd5b8151801515811461139357600080fd5b6001600160a01b038416815282151560208201526060604082018190526000906115c290830184611354565b95945050505050565b6000602082840312156115dd57600080fd5b815160ff8116811461139357600080fd

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

0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d6720000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022000000000000000000000000cfe54b5cd566ab89272946f602d76ea879cab4a80000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : params (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000246e28c6b161764492e54cbf852e28a4da2d672
Arg [1] : 0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0
Arg [2] : 000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 000000000000000000000000dc24316b9ae028f1497c275eb9192a3ea0f67022
Arg [5] : 000000000000000000000000cfe54b5cd566ab89272946f602d76ea879cab4a8
Arg [6] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.